feat(ui): public offer page at /offer/ with a landing footer link #222

Merged
developer merged 2 commits from feature/public-offer-page into development 2026-07-09 14:12:28 +00:00
Owner

What

Adds the public offer (публичная оферта) as a static page at /offer/ and a small
centered "Публичная оферта" footer link on the landing.

  • ui/legal/offer_ru.md — the editable Russian source (converted from the source PDF).
  • A Vite emit-offer plugin renders it (via marked) to a standalone
    dist/offer/index.html, which the landing container serves at /offer/ (a bare
    /offer redirects in). Regenerated from the markdown on every build.
  • Landing footer link (ru/en), plus a landing e2e assertion and a CI probe that /offer/
    serves the offer page (not a silent fall-through to the landing shell).

Why

The offer is the legal document a purchase accepts — it must exist before real-money intake
goes live. Shipped first and standalone so the offer text can be edited in parallel with the
payment work.

Owner action

  • Edit ui/legal/offer_ru.md freely — the /offer/ page re-renders from it on the next
    build/deploy. The English version (offer_en.md) is deferred; ping me when you want it.
  • Heads-up for your legal edit: source §5 "Обмен и возврат" allows returning goods, which
    rubs against the non-refundable stance for a digital good — reconcile as you see fit.

Notes

  • The markdown lives under ui/legal/ (not docs/legal/) because the landing Docker build
    stage only copies ui/ into its context; keeping it there makes the local and image builds
    agree. marked added as a dev-dependency (build-time render only, not in the app bundle).

Verification

pnpm check (0 errors), pnpm test:unit (offer render + i18n parity green), pnpm build
(emits dist/offer/index.html), pnpm exec playwright test e2e/landing.spec.ts (chromium +
webkit green). /offer/ serving + the /offer/offer/ redirect verified locally against
caddy:2-alpine with the built dist; landing Caddyfile caddy validate clean.

## What Adds the **public offer** (публичная оферта) as a static page at **`/offer/`** and a small centered **"Публичная оферта"** footer link on the landing. - `ui/legal/offer_ru.md` — the editable Russian source (converted from the source PDF). - A Vite `emit-offer` plugin renders it (via `marked`) to a standalone `dist/offer/index.html`, which the **landing container** serves at `/offer/` (a bare `/offer` redirects in). Regenerated from the markdown on every build. - Landing footer link (ru/en), plus a landing e2e assertion and a CI probe that `/offer/` serves the offer page (not a silent fall-through to the landing shell). ## Why The offer is the legal document a purchase accepts — it must exist before real-money intake goes live. Shipped first and standalone so the offer text can be edited in parallel with the payment work. ## Owner action - Edit `ui/legal/offer_ru.md` freely — the `/offer/` page re-renders from it on the next build/deploy. The **English** version (`offer_en.md`) is deferred; ping me when you want it. - Heads-up for your legal edit: source **§5 "Обмен и возврат"** allows returning goods, which rubs against the non-refundable stance for a digital good — reconcile as you see fit. ## Notes - The markdown lives under `ui/legal/` (not `docs/legal/`) because the landing Docker build stage only copies `ui/` into its context; keeping it there makes the local and image builds agree. `marked` added as a dev-dependency (build-time render only, not in the app bundle). ## Verification `pnpm check` (0 errors), `pnpm test:unit` (offer render + i18n parity green), `pnpm build` (emits `dist/offer/index.html`), `pnpm exec playwright test e2e/landing.spec.ts` (chromium + webkit green). `/offer/` serving + the `/offer` → `/offer/` redirect verified locally against `caddy:2-alpine` with the built `dist`; landing Caddyfile `caddy validate` clean.
developer added 1 commit 2026-07-09 14:04:25 +00:00
feat(ui): serve the public offer at /offer/ with a landing footer link
CI / changes (pull_request) Successful in 2s
CI / unit (pull_request) Successful in 10s
CI / integration (pull_request) Successful in 19s
CI / ui (pull_request) Successful in 1m9s
CI / conformance (pull_request) Successful in 9s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m41s
625fc3135a
The offer is the legal document a purchase accepts, needed before real-money
intake goes live. Convert the source PDF to an editable ui/legal/offer_ru.md and
render it to a standalone static dist/offer/index.html at build (a vite
emit-offer plugin using marked); the landing container serves it at /offer/,
with a bare /offer redirecting in. Add a small centered "Публичная оферта"
footer link on the landing (ru/en) and a CI probe asserting /offer/ serves the
page rather than silently falling through to the landing shell.
developer added 1 commit 2026-07-09 14:05:00 +00:00
chore: offer formatting
CI / changes (pull_request) Successful in 2s
CI / unit (pull_request) Successful in 10s
CI / integration (pull_request) Successful in 19s
CI / ui (pull_request) Successful in 1m8s
CI / conformance (pull_request) Successful in 10s
CI / gate (pull_request) Successful in 0s
CI / deploy (pull_request) Successful in 1m41s
0bdc034f7a
owner approved these changes 2026-07-09 14:11:12 +00:00
developer merged commit ca60025fbe into development 2026-07-09 14:12:28 +00:00
developer deleted branch feature/public-offer-page 2026-07-09 14:12:28 +00:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: developer/scrabble-game#222