Sparkboard
A tiny idea tracker for the Plate family — and the second real consumer of plate-auth.
"Catch the spark before it fades."
Sparkboard is a 4-user, single-organisation app where Patrick, a friend, and the friend's two sons can drop half-formed ideas, react to them, and watch which ones catch fire. It is deliberately small. The strategic point of Sparkboard inside plate-software is not the feature set — it is the forcing function that proves plate-auth works for a greenfield project from day zero.
🎯 What Sparkboard is (in one paragraph)
A web app at sparkboard.plate-software.de with a Spring Boot 4.1 + Java 25 backend, a Next.js 15 + React 19 frontend, and a Postgres database. Four users sign in with Google (later GitHub, Microsoft) through plate-auth. They post ideas, react with a small fixed emoji set, and progress them through a tiny lifecycle (RAW → EXPLORING → BUILDING → SHIPPED → DEAD). PWA installable. No notifications, no comments, no tags, no kanban in v1. Mobile-friendly but desktop-first.
🚦 Where we are right now
Sprint 0 — Waiting. Sparkboard cannot start coding until plate-auth v0.1.0 is published to the Gitea Package Registry. Sparkboard's entire auth/multi-tenancy story is outsourced to that library. Sprint 1 ("Spark") begins the moment de.platesoft:plate-auth-starter:0.1.0 and @platesoft/auth:0.1.0 are pullable.
Sprint 1 — Spark. Walking skeleton that imports plate-auth, configures it for single-org mode ("Family Spark"), implements one SparkboardOnboardingHook.onFirstSignIn(), adds a single ideas table, and ships to TrueNAS. Acceptance A1–A6.
See Roadmap for the full multi-sprint arc.
📚 This wiki
| Page | Purpose |
|---|---|
| Vision | What Sparkboard is for, who it's for, what it is not |
| Architecture | Sparkboard as a plate-auth consumer: SPI seams, single-org mode, domain entities, deployment |
| Roadmap | Sprint 0 → Sprint 6, themed Spark / Kindling / Flame / Ember / Wildfire / Phoenix |
| Integration Guide | Worked example: how Sparkboard wires plate-auth in (the friendly twin of plate-auth's own integration guide) |
| Sprint 1 — Assessment | Problem analysis, risks, approach options for Sprint 1 |
| Sprint 1 — Plan | Workstreams W0–W6, code sketches, acceptance A1–A6 |
| Sprint 1 — Testplan | ~25 test cases mapped to A1–A6 |
| Sprint 1 — Plan Review | ✅ APPROVED — 20/20 checklist, 8/8 cross-checks, 83% panel confidence |
| Open Questions | Ten Sparkboard-specific design questions for Patrick, with leanings |
🧬 Heritage
Sparkboard does not inherit any auth code. It is a clean slate. Auth, multi-tenancy, invitations, access-requests, the membership table — all of that lives in plate-auth, which itself was extracted from InspectFlow Sprint 14.
What Sparkboard inherits from the wider plate-software family:
- Deployment shape — TrueNAS Docker Compose +
frpstunnel (port 30011) + IONOS Apache reverse proxy. Same pattern as InspectFlow and CannaManage. - Proxy route pattern — Next.js App Router edge proxy that injects a backend JWT (now provided by
@platesoft/auth/proxyinstead of being hand-rolled). - Doc discipline — Vision / Roadmap / per-sprint Assessment + Plan + Testplan + Review.
📜 Decisions log
| Date | ID | Decision |
|---|---|---|
| 2026-06-24 | Q01 | Single-org ID: hardcode FAMILY_SPARK_ID = UUID.fromString("00000000-0000-0000-0000-000000000001") on SparkboardOnboardingHook |
| 2026-06-24 | Q02 | Allowlist: plate.auth.allowlist[] in application.yml (YAML edit + redeploy via Gitea Actions) |
| 2026-06-24 | Q03 | Admin promotion: sparkboard.admins[] YAML list; onFirstSignIn writes ADMIN vs MEMBER |
| 2026-06-24 | Q07 | PWA icons: hand-crafted 192×192 + 512×512 PNGs in frontend/public/icons/; no build-time generator |
| 2026-06-24 | F3 | Onboarding hook renamed afterFirstLogin(OnboardingContext) → onFirstSignIn(AuthenticatedUser) (plate-auth spelling wins) |
| 2026-06-24 | F4 | UT-06 test class moved to de.plate.sparkboard.onboarding.SparkboardOnboardingHookTest |
Full rationale lives in Open Questions. Sprint-1-Plan-Part-4 § 9 carries the per-decision Sprint 1 impact.
🔗 External links
| Link | What |
|---|---|
| Sparkboard code repo | Gitea — sparkboard (created Sprint 1, W0) |
| plate-auth wiki | The dependency this whole project is built on |
| plate-auth — Integration Guide | The canonical wire-up reference; this wiki's Integration Guide is the Sparkboard-flavoured walkthrough |
| InspectFlow Sprint 14 overview | The origin of every auth pattern that now lives in plate-auth |
✋ How to read this wiki
- If you only want to know what Sparkboard is for → read Vision and stop.
- If you want to know how it is built → read Architecture, then Integration Guide.
- If you want to know what is happening this sprint → read the three Sprint 1 docs in order: Assessment → Plan → Testplan.
- If you have a design question → check Open Questions first; it almost certainly contains your question already, with Patrick's current leaning.
Updated: end of Sprint 0 planning. Sprint 1 implementation has not started.