Files
MeetVault/AGENTS.md
2026-09-30 00:50:44 +07:00

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_jobs table 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

  1. Run the desktop demo locally (Tauri + React) to verify UI and local transcription without backend dependencies.
  2. Spin up PostgreSQL, run the schema SQL from Overview/README.md, then start the backend API.
  3. 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.