2.6 KiB
2.6 KiB
MeetVault — Agent Guide
Repo layout
MeetVault/
├── Overview/ # Architecture docs, schema, data flow
│ └── README.md
├── Wireframes/ # Desktop client design notes
│ └── Desktop/
│ ├── Desktop_README.md
│ └── Desktop-Demo/ # Runnable Tauri + React demo
│ └── speech-engine/ # Local Whisper transcription engine
Core architecture (remember this)
- User machine: records audio/video, runs local Whisper for STT, sends transcript to backend. Keeps compute and cost on the device.
- Backend API: auth, meeting metadata, presigned upload URLs, transcript ingestion, summarization jobs, task extraction, reminder scheduling.
- PostgreSQL: structured app data +
processing_jobstable used as a job queue (no external broker needed for MVP). - SeaweedFS: S3-compatible object storage for large media files.
PostgreSQL gotchas
Enable UUID generation first
CREATE EXTENSION IF NOT EXISTS pgcrypto;
Always set updated_at manually
PostgreSQL does not auto-update it. Create a shared trigger function and apply to every table that tracks changes:
CREATE OR REPLACE FUNCTION set_updated_at()
RETURNS TRIGGER AS $$
BEGIN
NEW.updated_at = NOW();
RETURN NEW;
END;
$$ LANGUAGE plpgsql;
-- then attach per-table triggers, e.g.:
CREATE TRIGGER trg_meetings_updated_at
BEFORE UPDATE ON meetings FOR EACH ROW EXECUTE FUNCTION set_updated_at();
Job queue pattern (no external broker)
Workers pick jobs with this exact query:
SELECT *
FROM processing_jobs
WHERE status = 'queued'
AND available_at <= NOW()
ORDER BY priority DESC, created_at
FOR UPDATE SKIP LOCKED
LIMIT 1;
Key indexes for workers:
CREATE INDEX idx_schedules_due ON meeting_schedules(status, scheduled_at);
CREATE INDEX idx_processing_jobs_queue ON processing_jobs(status, available_at, priority DESC);
SeaweedFS object paths
Files live under: meeting-storage/users/{user_id}/meetings/{meeting_id}/original/
Testing flow
- Run the desktop demo locally (Tauri + React) to verify UI and local transcription without backend dependencies.
- Spin up PostgreSQL, run the schema SQL from
Overview/README.md, then start the backend API. - End-to-end: record a short clip on the desktop client → upload via presigned URL → ingest transcript → trigger summarization job → verify summary appears in DB.
What is intentionally out of scope for MVP
- Kafka, Elasticsearch, Kubernetes, vector DBs, Redis (unless job volume grows), microservices. PostgreSQL + SeaweedFS + workers is sufficient.