feat(marketing): our-website — URL QR code generator #8
Labels
No labels
a11y
deferred
opinion/conversation
priority/important
priority/nice-to-have
priority/polish
priority/urgent
testing
ux-polish
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
cooperative-codebase/our-website#8
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Migrated from ROADMAP
Former path (se-backend):
docs/marketing/backlog/our-website-qr-generator.mdAction: Local backlog markdown deleted after this issue; track work in Forgejo.
our-website — URL QR code generator
ROADMAP.mdmarketing/app + segno (fulfillment_qr.pyreference)our-website/README.md; our-website already callsPOST /marketing/contact-us(same host/CORS pattern as other marketing endpoints)Product intent
Marketing tool on our-website: enter a URL, generate a scannable QR code, preview it, and download PNG (and optionally SVG). Use case: event flyers, print collateral, blog/marketing handouts — aligned with other Cooperative Codebase surfaces that use the marketing API (
/marketing/…), not marketplace routes.Reference: se-backend already generates QR PNGs with segno 1.6.6 (direct dependency in
pyproject.toml):segno is Python-only — our-website (React/Vite SPA) cannot import it in the browser. Prefer a
/marketing/backend endpoint (Path B) so generation uses the same library as the rest of the stack; Path A (client JS) remains a fallback if we want zero backend change for v1.Locked decisions (v1)
/tools/qror/qr— marketing/ops page, not marketplace SPAmarketing/urls.py, e.g.GET /marketing/qr?url=…(name TBD in implementation)http://orhttps://before generateerror="m",border=2, readablescale/marketing/contact-usfor our-website origin(s)Implementation paths
Path B — segno via marketing API (recommended)
Add
GET /marketing/qr(or…/qr.png) in the marketing app — wraps segno logic extracted/shared fromrender_fulfillment_qr_png. our-website fetches PNG for preview and download.Pros: Same segno library as installed in se-backend; consistent with our-website’s existing marketing API integration; CORS pattern already proven for contact form.
Cons: Must rate-limit and cap URL length (public URL-echo surface).
Path A — Client-side (fallback)
JS QR library in our-website mirroring segno M / quiet-zone settings. No new marketing route.
Default: Path B unless implementation time forces a client-only v1.
Logo / whitelabel (stretch)
Center Cooperative Codebase logo on the QR (“whitelabel”).
error="h"when overlay enabledv1: Plain QR only. v2: Optional “Include logo” toggle + scan QA on phones.
Logo asset:
our-website/public/images/logo.png.our-website scope
GET /marketing/qr?url=…(Path B) or local generation (Path A).se-backend scope (marketing app)
marketing/(alongsidecontact-us,subscribe, …).render_qr_png(url, …)helper (extract fromfulfillment_qr.pyorcommons).Acceptance criteria
/marketing/, not/marketplace/Herror correction and scan QAOut of scope