Speed and agility in disaster response.
π Live at: https://gazellehelp.com
Gazelle is a responsive web application that efficiently matches resources with people in need during natural disasters. Built with Vite, React, Cloudflare Workers, and Claude AI, it provides intelligent matching, real-time inventory management, and safety-aware logistics coordination.
- Vite - Fast build tool and dev server
- React 18 - UI framework
- TypeScript - Type safety
- shadcn/ui - Accessible component library
- Tailwind CSS - Utility-first styling
- Deployed on: Cloudflare Pages
- Cloudflare Workers - Serverless API
- Cloudflare D1 - SQLite database
- Cloudflare KV - Key-value storage for sessions and caching
- TypeScript - Type safety
- Claude API - Conversational AI interface
- Privy - User authentication
- Geocoding API - Location services
- SMS Gateway - Notifications (Twilio or similar)
Musa-hackathon/
βββ frontend/ # Vite + React frontend
β βββ src/
β β βββ components/ # React components
β β βββ lib/ # Utilities
β β βββ App.tsx # Main app component
β β βββ index.css # Global styles
β βββ public/ # Static assets
β βββ .env.example # Environment variables template
β βββ package.json
β
βββ backend/ # Cloudflare Workers API
β βββ src/
β β βββ index.ts # Main Worker entry point
β βββ schema.sql # Database schema
β βββ seed.sql # Seed data
β βββ wrangler.toml # Cloudflare configuration
β βββ .dev.vars.example # Environment variables template
β βββ package.json
β
βββ disaster_app_spec.txt # Full specification
βββ development-progress.md # Development planning
βββ progress-log.md # Session-by-session progress
- Node.js 18+ and npm
- Wrangler CLI installed globally:
npm install -g wrangler - Cloudflare account
- Claude API key (from Anthropic)
- Privy account for authentication
git clone https://github.com/dafisher2000/gazelle.git
cd gazellecd backend
npm install
# Copy environment variables template
cp .dev.vars.example .dev.vars
# Edit .dev.vars and add your API keys
# CLAUDE_API_KEY, PRIVY_APP_ID, PRIVY_APP_SECRET, etc.Database is already set up!
- D1 database:
gazelle-db(ID: 65760f23-09ec-4c47-8dec-c94d193ce71d) - Schema and seed data already migrated
- KV namespaces configured
cd ../frontend
npm install
# Copy environment variables template
cp .env.example .env.local
# Edit .env.local and add:
# VITE_API_URL=http://localhost:8787
# VITE_PRIVY_APP_ID=your-privy-app-idTerminal 1 - Backend:
cd backend
npm run devThis starts the Cloudflare Workers dev server on http://localhost:8787
Terminal 2 - Frontend:
cd frontend
npm run devThis starts the Vite dev server on http://localhost:5173
- users - User accounts with roles (seeker, provider, admin, etc.)
- locations - Distribution centers and warehouses
- supply_categories - Resource types (food, water, medical, etc.)
- supplies - Inventory items at locations
- reservations - User reservations for supplies
- transactions - Completed pickups/deliveries
- safety_alerts - Hazards and road closures
- news_alerts - Community announcements
cd backend
# Run on remote database
wrangler d1 execute gazelle-db --remote --file=schema.sql
# Seed initial data
wrangler d1 execute gazelle-db --remote --file=seed.sql
# Query database
wrangler d1 execute gazelle-db --remote --command="SELECT * FROM supply_categories"- Frontend: https://gazellehelp.com
- Backend API: https://gazelle-api.dfisher-3f3.workers.dev
cd backend
npm run deploycd frontend
npm run build
# Deploy to Cloudflare Pages (configure in CF dashboard or use wrangler pages)
npx wrangler pages deploy distCustom Domain: The custom domain gazellehelp.com is configured in Cloudflare Dashboard under Pages project settings.
CLAUDE_API_KEY=sk-ant-...
PRIVY_APP_ID=...
PRIVY_APP_SECRET=...
GEOCODING_API_KEY=...
SMS_API_KEY=...
SMS_API_SECRET=...VITE_API_URL=http://localhost:8787
VITE_PRIVY_APP_ID=...GET /health- API health check
POST /api/auth/register- User registrationPOST /api/auth/login- User loginPOST /api/auth/verify- Phone verification
POST /api/chat/message- Send message to Claude AIGET /api/chat/history/:sessionId- Get conversation history
GET /api/supplies- Get available suppliesPOST /api/supplies- Add new supply (provider)
POST /api/reservations- Create reservationGET /api/reservations/user/:userId- User's reservations
GET /api/locations- Get distribution locationsGET /api/locations/nearby- Get nearby locations
POST /api/geocode- Geocode an address
- Project structure with Vite + React + TypeScript
- shadcn/ui component library configured
- Cloudflare Workers backend with TypeScript
- D1 database with complete schema
- KV namespaces for sessions and caching
- Environment variable templates
- Git repository initialized
- Phase 1: Complete backend API endpoints
- Phase 2: Privy authentication integration
- Phase 3: Frontend UI components and routing
- Phase 4: Claude AI chat interface
- Phase 5: Geocoding and location services
- Phase 6: Resource management and matching
- Phase 7: SMS notifications
- Phase 8: Offline support and PWA
- Specification Document
- Development Progress
- Progress Log
- Cloudflare Workers Docs
- Vite Documentation
- shadcn/ui Components
- Claude API Docs
This is a hackathon project. Development is tracked in progress-log.md for AI-assisted sessions.
MIT
Built with speed and agility for disaster response.