1
Vision
Patrick Plate edited this page 2026-06-24 14:43:08 +02:00
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

Vision

One-liner

Catch the spark before it fades. A tiny shared idea board for four people, built on top of plate-auth.


Who this is for

Exactly four humans:

  1. Patrick — owner, admin, primary user
  2. A friend — co-admin, primary user
  3. The friend's two sons — members

Total seats: 4. Hard ceiling: 4 (the allowlist in plate-auth rejects everyone else by default).

This is not a SaaS. It is not a multi-tenant platform. It is one shared organisation ("Family Spark") with four members, running on Patrick's TrueNAS at home.

The multi-tenant machinery underneath it (memberships.org_type, org_id, OrgValidator, invitation flow) is real and works — it just isn't surfaced in the v1 UI because it would be noise for four people who all share one board.


North star

Open Sparkboard on a phone while a thought is still fresh. Type a title and a sentence. Hit save. Walk away. Come back a week later, see whose ideas got reactions, decide together which one is worth a weekend.

Five seconds from intent to "captured". One screen. No project picker. No tag picker. No mention picker. No notification ladder. Just a feed, a "+" button, and a small fixed set of emoji reactions to say "yes this one".


Why this exists (strategically)

Sparkboard's job inside plate-software is dual:

  1. For its users (Patrick + family + friends): a low-friction idea capture surface for the four of them. That is the visible value.
  2. For the platform (plate-auth): a forcing function. The very first greenfield consumer of plate-auth. If Sparkboard cannot be wired up in a few hundred lines of glue code on a fresh Spring Boot 4.1 + Next.js 15 stack, then plate-auth v0.1.0 failed and needs another iteration.

That second job is the harder one. Sparkboard's product surface is intentionally trivial so that all the integration pain shows up where it actually lives — in the auth wire-up, the proxy route, the single-org configuration, the OnboardingHook SPI.

If plate-auth's Vision is the strategic document, this Vision is the tactical one: what we ship to four humans so that the strategic document gets validated.


Core value (for the four users)

Friction 5 seconds from app icon to captured idea
Reach Phone, tablet, laptop — anything with a recent browser
Discovery The other three people see your idea within a refresh, can react with one tap
Memory The idea stays. It doesn't roll off a chat history. It doesn't drown in a Notion sidebar.
Lifecycle An idea can be marked EXPLORING, BUILDING, SHIPPED, or DEAD — enough to know which ones moved

Non-goals (explicitly OUT for v1)

Non-goal Why
User-facing org switcher One org. No switcher needed.
Invitation UI No invitations needed — four people, seeded once.
Access-request flow Allowlist is enforced silently; non-allowlisted Google logins simply fail with a generic "not authorised" page.
Comments / threads Sprint 2 candidate. v1 = post + react only.
Tags / categories Sprint 2+ candidate. v1 = title + description + status.
Free-text search Sprint 3+ candidate. v1 list is short enough to scan.
Notifications (email, push, web-push) Sprint 4+ candidate. v1 = pull-to-refresh.
Native mobile app PWA in v1; Capacitor APK explored in Sprint 5 ("Wildfire").
AI / LLM features Out of scope for the family-board use case.
Public / shared boards One private board. Forever, probably.
Multiple boards per family One board. If we want more, that's a Sprint N+ design decision.

Mobile strategy

PWA-first. Sprint 1 ships a manifest.json, a stub service worker, app icons, and the "Add to Home Screen" affordance on both iOS Safari and Android Chrome. That is the v1 mobile story.

Native (Capacitor wrapping the Next.js build as an APK) is parked in Sprint 5 — Wildfire. It is not v1. It may never happen — if the PWA is good enough, the native shell never ships.


Locked technical stack

Some choices are non-negotiable. They are stack inheritances from plate-software, not Sparkboard product decisions.

Layer Choice Why
Backend language Java 25 LTS Plate-software standard
Backend framework Spring Boot 4.1.0 Sparkboard is the Spring Boot 4.1 guinea pig for plate-software; if it works here, plate-auth's 4.1 support is real
Auth / multi-tenancy de.platesoft:plate-auth-starter:0.1.0 Single source of truth for auth across plate-software
Frontend Next.js 15 (App Router) + React 19 + Tailwind + shadcn/ui Plate-software standard; same as InspectFlow Sprint 14
NextAuth v5 (via @platesoft/auth/next-auth factory) NextAuth v5 only; plate-auth provides the factory
Database Postgres 16, single instance, single schema No more H2 in production; Flyway-managed
Build Maven (backend), pnpm (frontend) Plate-software standard
Distribution Gitea Package Registry (git.plate-software.de) Where plate-auth-starter and @platesoft/auth are published
Deployment TrueNAS Docker Compose + frps (port 30011) + IONOS Apache reverse proxy Same pattern as InspectFlow + CannaManage
Public URL https://sparkboard.plate-software.de Subdomain on the existing IONOS wildcard cert

What this means in practice: Sparkboard is the first app on plate-auth and the first app on Spring Boot 4.1 in plate-software. If either has a defect, Sparkboard finds it first.


Success criteria (end of Sprint 1)

The walking skeleton is "done" when:

  1. The four allowlisted users can sign in with Google.
  2. Each of them is automatically a MEMBER of the single "Family Spark" org on first login, courtesy of SparkboardOnboardingHook. Patrick is ADMIN (Flyway seed).
  3. Any signed-in user can create an idea (title + optional description, default status=RAW).
  4. Any signed-in user can see all ideas, newest first.
  5. The PWA installs on iOS Safari and Android Chrome with the Sparkboard icon and theme colour.
  6. Deployed to https://sparkboard.plate-software.de, accessible from outside the home LAN.

That's it. No reactions, no status transitions, no archive, no profile page — those are Sprint 2.

See Sprint 1 — Assessment for the formal acceptance criteria (A1A6).


Success criteria (end of Sprint ~5)

The visible product is "done" when:

  • All four users actually use it weekly for a month.
  • At least one idea has gone from RAW → SHIPPED (e.g., a weekend project the family actually built).
  • The PWA is installed on every user's primary device.
  • Patrick has not paged himself once about auth.

The last bullet is the most important. It is also the platform-level success criterion for plate-auth v0.1.0: Sparkboard's owner, who also wrote plate-auth, never has to think about auth code while using Sparkboard.


Anti-vision (what Sparkboard is NOT)

  • Not Notion. There is no nesting, no database view, no rich text editor beyond a textarea.
  • Not Jira. There is no assignee, no priority, no sprint, no estimate, no due date.
  • Not Slack. There is no chat, no DM, no @mention, no channel.
  • Not Trello. There are no columns. The status field is metadata, not a kanban lane.
  • Not a SaaS. There is no signup page, no pricing page, no marketing site.
  • Not multi-tenant from the user's point of view. They see one board. The multi-tenancy is plate-auth's internal abstraction — invisible to Sparkboard's users.
  • Not a research project. It's a working app, four people, for years.

Naming & identity

  • Product name: Sparkboard
  • Theme: campfire / ember / kindling — see Roadmap for sprint naming
  • Idea entity: Spark (per Sprint 1; can stay as Idea in the schema)
  • Reactions (Sprint 2+, fixed set): 💡 🔥 👀
  • Primary colour: TBD in Sprint 2 design pass (see Open Question Q08)

Trade-offs we are accepting

Trade-off What we lose Why we accept it
Locked to plate-auth We can't swap auth providers without changing the dependency plate-auth is ours; swap = ours to do
Single-org hardcoded for v1 If a fifth person ever wants in, we have to add invitation UI We don't expect a fifth person; four is the point
PWA over native iOS push-notification limitations, slightly slower cold start than native PWA is one codebase; native is two
Postgres only, no H2 Local dev needs Docker Postgres ergonomics for vector / FTS columns are worth it; InspectFlow proved it
Spring Boot 4.1 (just-released) We hit any SB 4.1 regression before others do Plate-software has decided 4.1 is the new baseline; someone has to go first

What this document is not

  • It is not the Roadmap. For sprint-by-sprint scope, go there.
  • It is not the Architecture. For how it is built, go there.
  • It is not the plate-auth Vision. For why plate-auth exists at all, read that one first — Sparkboard's Vision assumes you already agree with it.