Skip to content

feat(panel): installable, mobile and shareable by QR - #12

Merged
Nain9Dev merged 2 commits into
mainfrom
feat/mobile-pwa
Oct 21, 2026
Merged

Nain9Dev merged 2 commits into
mainfrom
feat/mobile-pwa

Conversation

@Nain9Dev

Copy link
Copy Markdown
Owner

What

The use case a real client can run: an organizer shows a QR code, the audience scans it and buys from a minimal page on their phones (specs/004-mobile-share).

  • Buyer link #/d/<id>: the buyer page alone (no menu, no sign-up), with the organizer's QR, copy and share in the organizer view.
  • QR encoder in-repo, no dependency. Checked against an independent decoder for seven inputs (versions 2 to 10) and by decoding a code captured from the screen.
  • Installable app: manifest, icons (one maskable), service worker that caches the shell and never /api (ADR-0010, Proposed).
  • Offline honesty: the panel says it is offline and disables purchases; the client no longer falls back to the in-browser engine when the device has no network.
  • Phone layout at 360 and 390 px: no horizontal scroll, 44 px touch targets, safe-area insets.
  • docs/case-study.md: the pop-up scenario step by step, with what the repository proves and what it deliberately does not do.

Verification

  • dotnet build (0 warnings), dotnet test 123/123 in three runs, gitleaks clean.
  • PwaAssetsTests (written first): manifest, icons at their declared size, and a precache list that names every static asset and nothing missing.
  • Browser: service worker active with 35 precached files; offline reload shows the shell and a notice; a phone profile opens the buyer link, takes a unit and buys; QR on screen decodes to its link; no console errors or missing translation keys.

Not verified, needs the owner

Installation on a physical phone and over HTTPS (tasks T-066, T-067): browsers only install on a secure origin. Browser-level tests for the visual requirements remain T-056 (a Playwright dev dependency decision).

The panel is now an installable app: a web manifest, icons (one
maskable) and a service worker that caches the shell and never the API
(ADR-0010). It says when it is offline instead of showing invented data,
and works at 360 px with 44 px touch targets and safe-area insets.

An organizer gets a QR code, copy and share for the drop's buyer link
(#/d/<id>), which opens a buyer-only page for the audience's phones. The
QR encoder is in-repo, with no dependency. PwaAssetsTests checks the
manifest, the icons and that the precache list matches the files served.

Also fixes buttons that start hidden showing as empty squares in the
top bar.
A use-case document (QR at a pop-up, five-minute reproduction, what each
guarantee means for the seller and what is deliberately not done), spec
004 with its tasks, ADR-0010 as Proposed, runbook notes on reaching the
app from phones, README section and updated traceability.
@Nain9Dev
Nain9Dev merged commit a61e141 into main Oct 21, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant