Trust-based voice fraud screening demo. VoxShield analyzes a suspicious phone recording in two sequential stages:
- Synthetic voice detection — is the voice human or AI-generated?
- Accent estimation — only if the voice is human, estimate which of 4 English accents it matches (American, British, Indian, Australian).
It produces a report with a verdict, confidence score, and risk level. VoxShield is a decision-support tool, not a final judge — boundary-confidence cases are flagged for human review.
This is a hackathon-style demo: the ML models are mocked (deterministic pseudo-random outputs derived from the uploaded file), matching the PRD's two-stage pipeline shape without training real models.
Every analysis is persisted to PostgreSQL so past screenings can be reviewed; the UI shows a "recent analyses" table backed by GET /api/history.
backend/— Express API server (/api/analyze,/api/history) that runs the mock pipeline, stores each report in Postgres, and returns a JSON reportfrontend/— static HTML/CSS/JS UI (served by a small Express static server) for uploading audio and viewing the report + historyrender.yaml— Render Blueprint that provisions a free Postgres database plus the backend and frontend services
You need a reachable PostgreSQL instance. Easiest local option is Docker:
docker run --name voxshield-pg -e POSTGRES_PASSWORD=voxshield -e POSTGRES_DB=voxshield -p 5432:5432 -d postgres:16The backend auto-creates its analyses table on startup — no migrations to run by hand.
If DATABASE_URL isn't set, the backend still runs fine (analyses just aren't persisted and /api/history returns an empty list) — handy for quick UI iteration.
cd backend && npm install
cd ../frontend && npm install# Terminal 1
cd backend
export DATABASE_URL=postgres://postgres:voxshield@localhost:5432/voxshield
npm start # http://localhost:4000
# Terminal 2
cd frontend && npm start # http://localhost:5173Open http://localhost:5173, upload an audio file, and click "분석 시작" (Analyze) to see the mocked pipeline run, the resulting report, and the updated history table below it.
This repo includes a Render Blueprint (render.yaml) that provisions:
voxshield-db— a free managed PostgreSQL instancevoxshield-backend— the API, wired tovoxshield-dbviaDATABASE_URLautomaticallyvoxshield-frontend— the static-ish UI server
Steps:
- Push this repo to GitHub (already the case if you're reading this from the repo).
- In the Render dashboard: New + → Blueprint → select this repo. Render reads
render.yamland provisions all three resources. - After the first deploy, open the
voxshield-backendservice, copy its public URL (e.g.https://voxshield-backend.onrender.com). - Open the
voxshield-frontendservice → Environment → setBACKEND_URLto that URL → save (triggers a redeploy). - Visit the
voxshield-frontendURL — it now talks to the backend, which talks to Postgres.
Free-tier services spin down when idle, so the first request after inactivity may take ~30s to wake up.