Voice-first reminders with a phone-friendly React SPA, FastAPI backend, SQLite storage, and Vapi integration. Tap once, speak naturally, and Re-mind creates, reviews, updates, or deletes scheduled reminders through a Vapi voice assistant.
- Voice-first reminder capture through the Vapi browser SDK.
- Vapi webhook tool handling for creating, listing, reading, updating, deleting, and conflict-checking reminders.
- Upcoming reminders panel with live server-sent event refresh when reminders change.
- FastAPI reminder API backed by local SQLite storage.
- Date-only and exact-time reminders, optional notes, optional durations, and overlap checks.
- Phone-friendly dark UI built with React 19, TypeScript, and plain CSS.
- Local-first development with Vite+, pnpm, uv, and
justcommands.
- Node.js and pnpm
- Python 3.12 and uv
- Vite+ global CLI (
vp) justcloudflaredfor the combinedjust devtunnel used by Vapi webhooks
Install frontend and backend dependencies:
cd web && pnpm install
cd ../api && uv syncCreate a local environment file:
cp .env.example .envSet these values in .env:
CORS_ORIGINS=http://localhost:5173
DATABASE_PATH=../data/reminders.sqlite
VAPI_WEBHOOK_SECRET=<shared webhook secret>
VITE_API_URL=http://localhost:8000
VITE_VAPI_ASSISTANT_ID=<vapi assistant id>
VITE_VAPI_PUBLIC_KEY=<vapi public key>Use vapi-system-prompt.md as the assistant system prompt and vapi-tool-descriptions.md as the tool reference when configuring the Vapi assistant.
Configure the assistant webhook to call the FastAPI endpoint:
POST /vapi/webhook
For local development, just dev starts a Cloudflare tunnel to the API. Use the generated tunnel URL plus /vapi/webhook as the Vapi webhook URL, and send the same secret as either a bearer token or X-Vapi-Secret header.
Run the API, web app, and webhook tunnel together:
just devRun services individually:
just web
just apiGenerate frontend OpenAPI types after the API is running:
just generate-api-clientLocal URLs:
- Web app:
http://localhost:5173 - API:
http://localhost:8000 - API docs:
http://localhost:8000/docs
Run all checks:
just checkFrontend checks:
just web-checkBackend checks:
just api-check- React 19
- TypeScript
- Vite+
- pnpm
- Vapi browser SDK
- Plain CSS with CSS variables
- FastAPI
- uv
- SQLite
- Server-sent events
- Ruff
- basedpyright
- pytest
MIT.
See LICENSE.txt for the full license text.