feat(vendor): identify the company behind LibreDB, add a mobile footer, fix swallowed spaces - #36
Merged
Merged
Conversation
Astro follows JSX whitespace rules, so a newline between prose text and an
adjacent inline element is dropped rather than collapsed to a space. Prettier
reflows long sentences and moves inline tags onto their own line, at which
point the space silently disappears from the rendered page. The source still
reads correctly and typecheck, lint and the build all stay green, so these
went unnoticed.
Nine occurrences shipped joined text:
- "See ourPrivacy Policy" in the cookie banner — on all 17 pages
- "visit our website atlibredb.org" (privacy policy)
- "processed by Meta under theirPrivacy Policy" (privacy policy)
- "the file you openis the sequence" (database architecture)
- "log and fsync-dbefore the commit" (database reliability)
- "without the magic.One core, three lenses" (database hero)
- "credentials from your.env file" and "read from your.env file"
(docker compose)
Each is fixed with an explicit {' '} — already the idiom used elsewhere in
this repo — or   where the line would otherwise exceed the print width
and Prettier would wrap the expression onto three lines.
Add src/lib/prose-whitespace.test.ts to the gate so this cannot regress. It
scans the .astro sources for prose ending a line immediately followed by a
content-bearing inline element with no explicit space, and was verified by
reverting each of the eight fix sites in turn and confirming it fails. <span>
is deliberately out of scope: it is used for badges and icon dots inside
`flex ... gap-*` rows, where the missing text-node space is invisible.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
…ooter Partner programmes verify a vendor from its product website. Nothing on libredb.org named a legal entity: the Organization JSON-LD carried only "LibreDB" with no address, the privacy policy named no data controller, and the string "Sekoya" appeared nowhere in the repository. Our SUSE One application was declined for exactly this class of gap on the company site. Vendor identity, from one source of truth in src/data/company.ts: - JSON-LD: an Organization node with legalName, a full PostalAddress, taxID / vatID and the MERSIS and trade registry identifiers. It uses https://sekoya.tech/#organization as its @id — the same @id the company site publishes — so the two sites describe one entity rather than two, and it is wired in as parentOrganization of LibreDB and provider of the WebApplication. - Privacy policy: a "Vendor and Data Controller" section carrying the registered name, full address and registration numbers, plus a Contact section that now points at the data controller instead of only at GitHub issues. The policy previously named no legal entity at all, which is a GDPR gap independent of any partner application. - Status bar: vendor attribution in the dead space between the connection signal and the links, linking to the company information page. The bar is a single 28px line, so it is disclosed progressively — trade name at lg, the registered name from xl, the locality from 2xl. Measured over CDP at seven widths from 1024px to 2560px: no overflow, no truncation, height unchanged. - humans.txt, llms.txt and llms-full.txt gain a vendor block. The address is written in ASCII with no Turkish diacritics, byte-identical to the address on sekoya.tech. Application forms are frequently ASCII-only and reviewers match the two character for character. Mobile footer: StatusBar is `hidden lg:block`, which left every viewport under 1024px with no footer at all — no vendor attribution, and no link to the privacy policy anywhere in the DOM. MobileFooter is its counterpart: the same quick links in a stacked grid, the registered name and full address shown outright since there is vertical room, and the studio version. The link list moved to src/data/quick-links.ts so the two footers cannot drift apart. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Partner programmes verify a vendor from its product website. Nothing on libredb.org named a legal entity: the Organization JSON-LD carried only
LibreDBwith no address, the privacy policy named no data controller, and the stringSekoyaappeared nowhere in this repository. Our SUSE One partner application was declined for exactly this class of gap on the company site, so the product site is being brought in line.Two problems surfaced while doing it, and are fixed here too.
1. Vendor identity
One source of truth in
src/data/company.ts, surfaced in four places:Organizationnode withlegalName, a fullPostalAddress,taxID/vatIDand the MERSIS and trade registry identifiers. Its@idishttps://sekoya.tech/#organization, the same@idthe company site publishes, so the two sites describe one entity rather than two. Wired in asparentOrganizationof LibreDB andproviderof theWebApplication.lg, registered name fromxl, locality from2xl.humans.txt,llms.txt,llms-full.txt— a vendor block.The address is ASCII with no Turkish diacritics, byte-identical to the address on sekoya.tech: application forms are frequently ASCII-only and reviewers match the two character for character.
2. Mobile had no footer
StatusBarishidden lg:block, so every viewport under 1024px had no footer at all — no vendor attribution, and no link to the privacy policy anywhere in the DOM.MobileFooteris its counterpart: the same quick links in a stacked grid, the registered name and full address shown outright since there is vertical room, and the studio version. The link list moved tosrc/data/quick-links.tsso the two footers cannot drift apart — this also collapsed the status bar's nine hand-written links from 48 lines to 13.3. Nine swallowed spaces
Astro follows JSX whitespace rules: a newline between prose and an adjacent inline element is dropped, not collapsed to a space. Prettier reflows long sentences and moves inline tags onto their own line, at which point the space silently disappears. Source still reads correctly; typecheck, lint and build all stay green.
Shipped joined:
See ourPrivacy Policyvisit our website atlibredb.orgprocessed by Meta under theirPrivacy Policythe file you openis the sequencelog and fsync-dbefore the commitwithout the magic.One core, three lensescredentials from your.env file×2Fixed with an explicit
{' '}— already the idiom elsewhere in this repo — or where the line would otherwise exceed the print width and Prettier would wrap the expression across three lines.src/lib/prose-whitespace.test.tsis added to the gate so this cannot regress. It scans the.astrosources for prose ending a line immediately followed by a content-bearing inline element with no explicit space.<span>is deliberately out of scope: it is used for badges and icon dots insideflex ... gap-*rows, where the missing text-node space is invisible.Verification
bun run gateclean: 0 typecheck errors, Prettier clean, oxlint clean, knip clean, 66 tests passoverflow: 0, no truncation, height unchanged at 28px at every widthoverflow: 0innerTextafter the fixNote on merging
The three commits are deliberately separated (
fix/feat/chore(release)) andchore(release): 0.7.4touches onlypackage.json, matching thev0.7.3convention. Rebase and merge or a merge commit would preserve that; squashing would collapse it. Deploy is gated onrelease: published, so taggingv0.7.4and publishing the release is a separate step after this lands.🤖 Generated with Claude Code