TaskWhisper turns spoken notes into cleaned transcripts, extracted tasks, summaries, and optional exports.
backend/: FastAPI API, Firebase auth, local JSON storage, in-process cachefrontend/: Next.js app for recording, reviewing results, and configuring providers
Runtime data is stored locally under backend/data/, and uploaded audio is stored under backend/data/uploads/ by default.
- Create a backend virtual environment and install dependencies:
cd backend
python -m venv venv
.\venv\Scripts\activate
pip install -r requirements.txt- Copy
backend/.env.exampletobackend/.env.localorbackend/.envand fill in the values you need. - Start the backend:
cd backend
uvicorn main:app --reload- In a second terminal, install frontend dependencies and start Next.js:
cd frontend
npm install
npm run dev- Open
http://localhost:3000. The backend runs onhttp://localhost:8000.
LOCAL_DB_PATH: path to the local JSON data fileDATABASE_URL: optional PostgreSQL connection stringPOSTGRES_URL: supported alias forDATABASE_URLREDIS_URL: Redis connection string used for LLM and pipeline result cachingFILE_STORAGE_PATH: path for uploaded and intermediate audio filesBLOB_READ_WRITE_TOKENortaskwhisper_VERCEL_READ_WRITE_TOKEN: Vercel Blob token used to store uploaded voice filesFIREBASE_PROJECT_ID: Firebase project used for token verificationALLOW_INSECURE_AUTH=true: allows local development without strict Firebase token validationSUPABASE_URL: Supabase project URL for TaskWhisper Cloud syncSUPABASE_SERVICE_ROLE_KEY: Supabase service role key used by the backend sync routeSUPABASE_SCHEMA: Supabase PostgREST schema, defaults topublic
NEXT_PUBLIC_BACKEND_URL: backend base URL, defaults tohttp://localhost:8000- Firebase client variables in
frontend/.env.example
- Voice cleaning
- Speech-to-text
- Text cleanup and optional translation
- Task extraction
- Optional export connectors
Progress updates stream over WebSocket at /ws/jobs/{job_id}.
Uploaded voice files are stored in Vercel Blob when a blob token is configured. During processing, the backend downloads the blob to a temporary local file so the current cleanup and STT adapters can read it.
Cloud sync is handled by the backend, not directly by the browser. When a signed-in user clicks sync in Settings, the frontend sends its current notes and extracted tasks to the backend, and the backend upserts them into Supabase using the service-role key.
Before using it:
- Apply supabase/taskwhisper_cloud_schema.sql in your Supabase SQL editor.
- Set
SUPABASE_URLandSUPABASE_SERVICE_ROLE_KEYin the backend environment. - Restart the backend.