Companion PWA for the Volcamp conference — browse the programme, speakers, and keep your favourite talks. V2 is backend-free.
There is no server and no database. The conference content lives in the public
Jekyll repo Volcamp/volcamp.github.io
(_talks/*.md, _speakers/*.md, _config.yml, agenda breaks, speaker photos).
A build-time script parses it into a single JSON bundle plus optimized avatars,
both committed to the repo; the app fetches the bundle at runtime.
Volcamp Jekyll content ──(generate-data.js)──▶ public/data/volcamp-2026.json
└──▶ public/img/speakers/*.webp
│
PWA fetches on each open
(network-first, cached offline)
- Favourites are stored in the browser's
localStorage— no account needed. - Feedback / notes deep-link out to the conference's OpenFeedback page per talk.
- Sync happens on every app open (network-first, cached fallback). To pick up
new conference content, re-run
npm run generate-dataand redeploy — the refreshedvolcamp-2026.json(and avatars) ship with the build.
React 19 · TypeScript · Vite · vite-plugin-pwa (Workbox) · React Router.
cd frontend
npm install
npm run generate-data # refresh public/data/volcamp-2026.json from GitHub
npm run dev # http://localhost:5173cd frontend
npm run build # type-checks + builds + generates the service worker
npm run previewDeploy frontend/dist/ to any static host. Configure the host to serve
index.html for unknown routes (SPA fallback).
- Update
EDITION_YEAR/output filename infrontend/scripts/generate-data.js. - Update
DATA_URLinfrontend/src/data/config.ts. - Re-run
npm run generate-data.