fix(content): lead with the trial, brand the 404 page #136
Inga granskare
Etiketter
Inga etiketter
area/backups
area/ci
area/control-panel
area/identity
area/infra
area/observability
area/payments
area/security
area/storage
area/web
blocked
needs-info
needs-triage
ready-for-implementation
type
bug
type
chore
type
docs
type
epic
type
feature
type
task
wontfix
Ingen milstolpe
Inget projekt
Inga tilldelade
1 deltagare
Notiser
Förfallodatum
Inget förfallodatum satt.
Beroenden
Inga beroenden satta
Referens
bitborg/bitborg-web!136
Läser in…
Hänvisa till i nytt ärende
Ingen beskrivning angiven.
Ta bort grenen "feat/launch-polish"
Borttagning av en gren är permanent. Även om den borttagna grenen kan fortsätta existera en kort tid innan den faktiskt tas bort, kan det INTE ångras i de flesta fall. Vill du fortsätta?
Launch-day copy and page fixes. Closes #133, closes #134.
#133 — pricing and sign-up never mentioned the trial
/pricingadvertised 150 kr/month with paid accounts "efter sommaren 2026" and never used the wordtrial, so the page the announcement drives traffic to showed a price nobody can act on while the
free-until-at-least-31-August offer sat behind an unticked box on another page.
Both locales now lead with what a visitor gets today, keep the prices as what an account becomes,
and link
/trial-terms. The date framing is reused verbatim from the existing news post and controlpanel rather than reworded, so there is still one phrasing site-wide. The sign-up intro follows the
existing
trialOpen()kill switch, so neither the trial state nor the post-launch state carries falsecopy.
The trial checkbox is deliberately left unchecked. Ticking it accepts a separate legal document, so
it is a consent control, and a pre-ticked consent box is not consent (GDPR Recital 32). It would also be
inconsistent with the Terms box directly beneath it. The conversion loss the issue identified is
answered in the copy instead. Reasoning is recorded in a comment next to the input.
Also on /pricing — the same defect in two more places
organisations are not in the trial either —
/trial-terms§1 already says so. Availability notesadded, worded verbatim from that page. Prices kept: forward-looking price information is legitimate.
Actions FAQ entries, the contact page). Fixed, and the glossary row added to
docs/content-style.mdso it does not drift back. English keeps "runner", which is correct.
wiki, mm→wiki med mera,dvs→det vill säga.#134 — 404 page was Astro's unbranded default
New
404.astroand its/en/twin on the normal layout, with header, footer, language switcher and anamed navigation region pointing at documentation, news and contact. Sets the status explicitly and
Cache-Control: no-store.The issue's suspicion about the
[slug]routes was correct, and it was worse than the default.new Response(null, { status: 404 })sends a null body, so an unknown guide or news slug renderednothing at all. All four routes now
Astro.rewrite()to the branded page in the right language.Verified
pnpm format,pnpm lint(eslint + stylelint),pnpm check(0 errors, 0 warnings),pnpm mdlint,pnpm test(149 passed) andpnpm buildall pass. Checked against a running standalone server, notjust the build:
/404,/en/404, unmatched paths and unknown/docs/and/news/slugs all return404 with the branded page in the correct language;
/404is absent from the sitemap; the trial checkboxmarkup carries no
checked.Note
#121, #122, #123 and #124 turned out to be already shipped by
8439fa4(PR #125) — its close keywordsnever fired. They have been verified against the live site and closed separately; no code here.
The announcement drives traffic to /pricing, which advertised 150 kr a month and never mentioned the trial that is the offer actually on the table. /signup had the mirror problem: it described the account you get as a participant account and put hosting your own repositories behind "the paid account", which cannot be bought yet. - /pricing now opens with the trial, links the trial terms, and frames the prices as what an account will cost, with a short note beside the price list. - pricing.description leads with the trial, since that is the line a search result shows. - The sign-up intro follows the trial kill switch: while the trial is open it leads with what a visitor gets today; the previous wording stays for the world where paid subscriptions exist. - The date framing is reused verbatim from the trial terms, the news post and the control panel ("at least until 31 August 2026" / "minst till 31 augusti 2026"). The trial checkbox stays unchecked. Ticking it accepts a separate legal document, so it is a consent control and a pre-ticked consent box is not consent; it would also not match the Terms box beneath it. The conversion loss is answered in the copy instead.There was no src/pages/404.astro, so a mistyped or dead URL served Astro's framework default: unbranded, no navigation, no language switch, English only whatever the locale. It is the page most likely to be seen by someone following a broken external link. Adds 404.astro and its /en/ twin on the normal Base layout, with the site header, footer and language switcher, plus a named navigation region linking the home, documentation, news and contact pages. Strings live in ui.ts like any other page. The [slug] routes were worse: `new Response(null, { status: 404 })` is a 404 with an empty body, so a wrong guide or news URL rendered nothing at all, not even the framework default. All four now rewrite to the branded page in their own locale, which leaves the URL as typed. The page sets its own 404 status, since a rewrite from a route that did match carries the matched route's status, and sets Cache-Control: no-store so a mistyped URL is never cached as content. Verified against the built standalone server: /404, /en/404, an unmatched path in both locales, and unknown /docs/ and /news/ slugs in both locales all return 404 with the branded page in the right language; /404 is absent from the sitemap.Two follow-ups on /pricing, the page the announcement drives traffic to. Availability. The organisation tier had the same defect the personal tier did: 99 kr a month read as a purchasable product, when organisations can be neither bought nor created today and are explicitly not part of the trial. The add-ons table read the same way. Both now carry an availability line, worded verbatim from /trial-terms so the page and the terms cannot drift ("Att skapa organisationer ingår inte i provperioden…" / "Creating organisations is not part of the trial…"). The prices stay: they are legitimate forward-looking information, they just must not read as available now. Terminology. The Swedish page called it a "runner". Every other Swedish surface says "körare" — the Actions guide, three FAQ answers and the contact page, nine uses in all — so the pricing page was the straggler, not the convention. Added the term to the content-style glossary so the next writer does not re-invent it. Also spelled out two Swedish shorthands the guide requires in full ("mm", "dvs"); the English twin keeps "runner", which is correct there.