Spoiler-aware digital investigation boards for tracking complex TV show characters, eras, theories, and relationships.
- Next.js App Router with TypeScript
- Tailwind CSS
- React Flow for board canvas, draggable cards, edges, labels, zoom, pan, and minimap
- Zustand for board UI state, undo/redo, filters, and save status
- Supabase Auth, Postgres, Storage, and RLS
- Local demo mode with
localStoragewhen Supabase is not configured or no user is signed in - Google Custom Search JSON API or SerpAPI for image search through
/api/image-search
ChronoBoard is best-effort, not a spoiler-proof verifier.
- Search queries include show title, character name, requested year/era, optional actor, and
character portrait. - Results are checked for blocked words in title, snippet, and source URL.
- Risky source domains get warnings.
- The app never auto-selects the first result.
- The user must manually approve images.
- Search result images may still contain spoilers or copyrighted material.
For maximum safety, use manually approved images or uploads you are allowed to use.
npm install
npm run devOpen http://localhost:3000.
Without environment variables, the app runs in local demo mode and stores boards in browser localStorage.
Create .env.local:
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
# Server-only keys. Do not prefix with NEXT_PUBLIC_.
GOOGLE_CSE_ID=
GOOGLE_API_KEY=
SERPAPI_KEY=Image provider priority:
- Google Custom Search JSON API when
GOOGLE_CSE_IDandGOOGLE_API_KEYare present - SerpAPI when
SERPAPI_KEYis present - Manual image URL and upload fallback
- Create a Supabase project.
- Run
supabase/migrations/0001_initial_schema.sql. - Add Supabase URL and anon key to
.env.local. - Confirm the
board-imagesStorage bucket exists. - Start the app and use magic-link auth from
/boards.
The migration enables RLS so users can only manage their own private boards. Shared boards are read-only through /share/[token].
npm run dev
npm run build
npm run typecheck
npm run lint- Push the repo to GitHub.
- Import it into Vercel.
- Add the same environment variables in Vercel Project Settings.
- Run the Supabase migration before using Supabase-backed boards.
- Deploy on the free Hobby plan.
- Create/list/delete boards
- Local demo mode without login
- Supabase-backed mode with auth when configured
- Character/event/place/object/mystery cards
- Actor, year/era, image, notes, tags, accent color, spoiler status
- React Flow drag, connect, zoom/pan, minimap
- Colored labeled edges with style, direction, confidence, spoiler visibility
- Node and edge inspector
- Duplicate/delete cards
- Timeline/year filters and era lanes
- Saved manual layout views
- Image search route with provider abstraction and spoiler warnings
- Manual image URL and upload fallback
- JSON import/export
- PNG screenshot export through
html-to-image - Read-only share-link route