Uvalde CISD PTO AI Secretary
An AI-powered meeting secretary built for the Uvalde CISD Parent Teacher Organization. Upload a recording — get structured minutes synced to Notion automatically.
How It Works
Upload
Drag and drop any audio recording (MP3, WAV, M4A, WebM — up to 100 MB)
Transcribe
OpenAI Whisper converts the audio to a full transcript
Generate
GPT-4o-mini reads the transcript and produces structured minutes: attendees, agenda items, decisions, action items, and announcements
Sync to Notion
One click sends the formatted minutes to a Notion page via the Notion MCP server
Share
Every completed meeting gets a public read-only share link for parents and community members
Why Uvalde CISD PTO?
The Uvalde CISD community has faced extraordinary challenges since 2022. Keeping school organizations like the PTO running — including the administrative burden of documenting every meeting — falls on a small group of volunteer parents.
This tool removes the secretary bottleneck entirely: meetings are recorded, processed, and archived automatically, so the organization can stay focused on what matters.
Tech Stack
| Layer | Technology |
|---|---|
| UI Generation | v0.dev |
| Framework | Next.js 15 (App Router) |
| Deployment | Vercel |
| Transcription | OpenAI Whisper (whisper-1) |
| AI Minutes | Vercel AI SDK + GPT-4o-mini |
| Storage | Vercel Blob |
| MCP | Notion MCP Server |
| UI Components | shadcn/ui + Radix UI |
Built with v0 — Proof of Authorship
The entire frontend and API layer was generated and refined through natural language prompts in v0.dev. Each session was committed directly by the v0 bot as its own branch — preserved as a tamper-evident record.
v0/dungooooo-1b070d9a
Initial app scaffold — upload form, meetings list, meeting detail view, all UI components
v0/dungooooo-5591cfe0
Transcription + minutes generation pipeline, Vercel Blob storage integration
v0/dungooooo-c621f8c2
Notion MCP integration, sync-to-Notion button, user guide page, share links
Security Hardening
Applied post-v0 cleanup to production-harden the generated code:
- ✓Path traversal prevention — all [id] and [shareId] route params validated against /^[a-zA-Z0-9_-]{1,100}$/ before use in blob storage paths
- ✓Cryptographically secure IDs — replaced Math.random() with crypto.randomUUID() (Web Crypto API, native in Next.js Edge runtime)
- ✓Server-side upload validation — file size capped at 100 MB (413); MIME type + extension checked server-side against allowlist (415)
- ✓Metadata leak removed — generator: 'v0.app' stripped from page <head>
Zero to Agent Hackathon
Track 02: v0 + MCPs
Built by Dungo Digital — Doctoral of Information Technology student & founder, San Antonio, TX.