CrisisKit works out of the box with zero configuration:
npm install
npm run devData is stored in your browser's localStorage. Perfect for:
- Testing and demos
- Single-device use
- Privacy-focused scenarios
Backup your data: Use the "Export Backup" button to save your data as JSON.
Want multi-device sync, team collaboration, or persistent cloud storage? Choose one:
Why Supabase?
- ✅ Free tier (500MB, 50K monthly active users)
- ✅ Real-time updates (see changes instantly)
- ✅ Built-in authentication
- ✅ Easy SQL queries
- ✅ Works in browser (no server needed)
Setup (5 minutes):
-
Create a free account at supabase.com
-
Create a new project
-
Run the SQL schema:
- Go to SQL Editor in your Supabase dashboard
- Copy and paste
/database/supabase-schema.sql - Click "Run"
-
Get your credentials:
- Go to Project Settings → API
- Copy "Project URL" and "anon public" key
-
Create
.env.local:VITE_SUPABASE_URL=https://your-project.supabase.co VITE_SUPABASE_ANON_KEY=your-anon-key-here
-
Install dependency:
npm install @supabase/supabase-js
-
Restart dev server:
npm run dev
Done! Your app now uses Supabase. Check console for "✅ Using Supabase backend".
Why Google Sheets?
- ✅ Volunteers are familiar with Sheets interface
- ✅ Easy data export
- ✅ Can edit directly in Sheets
Limitations:
- ❌ Requires Cloudflare Workers or similar backend
- ❌ More complex setup
- ❌ Rate limits (100 requests/100 seconds)
Setup:
This requires a backend API (like Cloudflare Workers) because browsers can't directly access Google Sheets API with service accounts.
See /docs/CLOUDFLARE_WORKERS_SETUP.md for detailed instructions.
Enable Gemini AI for smart urgency classification:
-
Get free API key: aistudio.google.com/app/apikey
-
Add to
.env.local:VITE_GEMINI_API_KEY=your-key-here
-
Click "Run AI Triage" button in dashboard
Fallback: Without API key, CrisisKit uses keyword-based heuristic classification.
-
Push your code to GitHub
-
Go to vercel.com/new
-
Import your repository
-
Add environment variables (if using Supabase/Gemini):
VITE_SUPABASE_URLVITE_SUPABASE_ANON_KEYVITE_GEMINI_API_KEY
-
Deploy!
Vercel auto-detects Vite and configures everything.
-
Build the project:
npm run build
-
Deploy
distfolder to Cloudflare Pages -
Set build command:
npm run build -
Set output directory:
dist
┌─────────────────────────────────────┐
│ CrisisKit Frontend (React + Vite) │
└─────────────────┬───────────────────┘
│
┌────────┴────────┐
│ repoFactory.ts │ (Auto-selects backend)
└────────┬────────┘
│
┌───────────┼───────────┐
│ │ │
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌─────────────┐
│InMemory │ │Supabase │ │GoogleSheets │
│(localStorage)│(Direct)│ │(via Workers)│
└──────────┘ └──────────┘ └─────────────┘
Priority Order:
- Supabase (if
VITE_SUPABASE_URLis set) - Google Sheets (if
GOOGLE_SHEETS_*env vars are set) - localStorage (default fallback)
- ✅ Use Supabase with Row Level Security (RLS)
- ✅ Enable public read, authenticated write
⚠️ Default schema allows anyone to write (for demo)- 🔒 Modify RLS policies for production
- Use authentication (Supabase Auth)
- Restrict write access to authenticated users
- Add rate limiting
- See commented policies in
supabase-schema.sql
- 📖 Read the main README.md
- 💬 Open an issue on GitHub
- 🐦 Tweet at the maintainers
Remember: CrisisKit works perfectly fine with zero setup. Cloud storage is optional for specific use cases.