Go backend for LRScribe76 — a medical scribe app that records audio, transcribes it, and generates structured clinical documents using LLMs.
Handles audio recording (proxied to a dedicated audio service), transcription via Gemini, document generation via Requesty/OpenAI, and CRUD for notes and transcriptions backed by Postgres.
# Prerequisites: Go 1.21+, PostgreSQL
git clone https://github.com/leonj1/lrscribe76-api.git
cd lrscribe76-api
# Set required env vars (see below)
export DATABASE_URL="postgres://user:pass@localhost:5432/lrscribe76"
export CLERK_SECRET_KEY="sk_test_..."
export REQUESTY_API_KEY="rqsty-sk-..."
export AUDIO_API_URL="https://lrscribe-audio-api-production.up.railway.app"
export AUDIO_API_KEY="your-audio-api-key"
go run notes.go
# Server starts on :8080| Field | Value |
|---|---|
| Project | lrscribe-audio-api |
| Service | lrscribe76-api |
| Environment | production |
| Public Domain | https://lrscribe76-api-production.up.railway.app |
| Private Domain | lrscribe76-api.railway.internal |
| Service | Domain | Description |
|---|---|---|
lrscribe76 |
lrscribe76-production.up.railway.app |
Next.js frontend + Express middleware |
lrscribe-audio-api |
lrscribe-audio-api-production.up.railway.app |
Audio chunk storage & S3 management |
| Variable | Required | Default | Description |
|---|---|---|---|
DATABASE_URL |
Yes | — | PostgreSQL connection string |
CLERK_SECRET_KEY |
Yes | — | Clerk authentication secret key |
REQUESTY_API_KEY |
Yes | — | API key for Requesty (LLM router) |
REQUESTY_MODEL |
No | openai-responses/gpt-5.4 |
LLM model for document generation |
AUDIO_API_URL |
Yes | — | Base URL of the audio recording service |
AUDIO_API_KEY |
Yes | — | Auth key for the audio service |
VITE_CONVEX_URL |
Yes | — | Convex deployment URL (for session/user data) |
PORT |
No | 8080 |
Server listen port |
GET /health— Service health check
GET /api/auth/user— Current user info (Clerk JWT)
POST /api/generate-document— Generate structured clinical document from transcriptionPOST /api/regenerate-section— Regenerate a single document section
POST /api/transcribe— Transcribe base64-encoded audio via GeminiPOST /api/transcribe-from-url— Transcribe audio from URL or recording ID (Clerk JWT)
POST /api/audio/start— Start a recording sessionPOST /api/audio/chunk/:recordingId— Upload audio chunkGET /api/audio/status/:recordingId— Recording statusPOST /api/audio/complete/:recordingId— Finalize recordingPOST /api/audio/trigger-interim/:recordingId— Trigger interim transcription, start new segment
GET /api/transcriptions— List transcriptionsPOST /api/transcriptions— Create transcriptionGET /api/transcriptions/:id— Get transcription (Clerk JWT)
Full endpoint documentation with request/response examples: ENDPOINTS.md
- Go 1.21 with vestigo router
- Clerk for JWT authentication
- PostgreSQL (via
lib/pq) for notes & transcriptions - Convex for real-time session/user data
- Requesty as LLM router (OpenAI, Gemini models)
- S3 for audio storage (via audio service)
Private repository.