Sectioned Trial SOP checklist web app with local-first autosave, multi-trial resume, and exports (JSON + CSV).
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|
Trial data entry is often irregular:
- Some sections are filled in the office.
- Later sections are filled on-track at different times.
- Connectivity can be weak or intermittent.
This app is built to retain trial state safely so the operator can continue later without losing progress.
- Sectioned checklist flow with progress and required indicators
- Autosave (local-first) so work isn’t lost if the tab is closed
- Multiple trials per device/browser (each trial has its own
trialId) - Resume via URL:
/form?trialId=... - Exports: JSON + Excel-friendly CSV
- Login via Firebase Auth (Google + email/password)
- “Logged in users (this device)” panel with timestamps
- Mobile-friendly UI (collapsible actions on small screens)
- Next.js (App Router)
- React
- Firebase Auth
- Node.js 18+ (recommended)
npm ciCopy .env.example to .env.local and fill values:
NEXT_PUBLIC_FIREBASE_API_KEYNEXT_PUBLIC_FIREBASE_AUTH_DOMAINNEXT_PUBLIC_FIREBASE_PROJECT_IDNEXT_PUBLIC_FIREBASE_APP_ID
npm run devOpen http://localhost:3000.
Open the form at /form.
- Click Trials to create a new trial, open a saved trial, copy a resume link, or delete a trial (device-local).
- Reset clears the current trial’s answers (keeps the same
trialId). - Export Excel downloads a CSV.
- Export JSON downloads a JSON snapshot.
- Trial data is stored locally in the browser (LocalStorage).
- LocalStorage is per device + per browser profile.
- Clearing site data removes saved trials.
npm run dev— start dev servernpm run build— production buildnpm start— run production servernpm run lint— run ESLint
app/login/page.js— login routeapp/form/page.js— checklist form routeapp/history/page.js— local trial history routeapp/components/ChecklistApp.jsx— checklist UI + autosave + exports + trial switcherapp/components/AuthProvider.jsx— Firebase auth session wrapperlib/checklistStorage.js— trial persistence helperslib/loginHistory.js— local login history helperspublic/demo1.png…public/demo7.png— README screenshots
npm ci
npm run build
npm startPrivate / internal project (update if you intend to open source).






