2.5 KiB
2.5 KiB
Phone Recorder Server
Encrypted audio recording server with transcript viewing capabilities.
Quick Start
cd server
nix develop # or activate venv
uv run python main.py
Server runs on port 8000 by default.
Project Structure
.
├── app/ # Android app (Kotlin, Android Studio)
├── server/ # FastAPI server (Python)
│ ├── main.py # API endpoints
│ ├── crypto.py # PyNaCl decryption, keypair management
│ ├── database.py # SQLite for recordings metadata
│ ├── importer.py # Import transcriptions from batch processing
│ ├── cli.py # CLI tools
│ ├── config.py # Paths, ports
│ ├── keys/ # Server keypair (auto-generated)
│ └── recordings/ # Decrypted audio files
└── test_recordings/ # Test data
Key Commands
# Run server
cd server && uv run python main.py
# Run tests
cd server && python test_crypto.py
cd server && python test_integration.py
# CLI tools
cd server && uv run python cli.py --help
API Endpoints
| Endpoint | Method | Description |
|---|---|---|
/health |
GET | Health check |
/api/v1/public-key |
GET | Get server public key (Base64) |
/api/v1/recordings/upload |
POST | Upload encrypted file from phone |
/api/v1/recordings |
GET | List recordings with transcripts |
/api/v1/recordings/{id} |
GET | Get recording details |
/api/v1/recordings/{id}/audio |
GET | Stream audio file |
/api/v1/import/transcription |
POST | Import transcription JSON |
/api/v1/highlights |
GET/POST | Manage highlights |
Security Model
- Phone encrypts with server's public key (sealed box / X25519 + XSalsa20-Poly1305)
- Server decrypts with private key on upload
- Phone never stores unencrypted audio
- Files use SREC format (chunked encryption for large files)
Frontend
The frontend is a separate static React app in /work/projects/view_recordings/designer_export/:
cd /work/projects/view_recordings/designer_export
python -m http.server 3000
# Open http://localhost:3000/RecordingsViewer.html
Dependencies
- Python 3.x with uv
- PyNaCl (libsodium bindings)
- FastAPI + uvicorn
- SQLite (via database.py)
Important Files
description.md- Detailed architecture documentationtodo.md- Future features and known limitationsserver/keys/- Contains server keypair (do not commit private key)