clio/clio-android/todo.md
Your Name b24dd72ae0
Some checks failed
Deploy API / deploy (push) Failing after 1s
Deploy UI / deploy (push) Successful in 1s
Remove redundant cursor styling
2026-05-19 19:48:13 -04:00

4.2 KiB

Phone Recorder - Future Ideas / TODO

Questions to Address

Key Rotation

  • What happens when server keypair changes?
  • Current behavior: Old encrypted files can't be decrypted with new key
  • Options:
    1. Keep old private key archived for decrypting old files
    2. Sync all files before rotating keys
    3. Store key version/ID in encrypted file header

Manual Decryption

  • Document steps to decrypt files copied via USB from phone
  • Need: Python script using server's private key
  • Consider: CLI tool in server/ directory

No-Key Behavior

  • Current: Deletes recordings if no public key configured (security-first)
  • Alternatives to consider:
    1. Store unencrypted with warning (less secure)
    2. Queue recordings until key configured (could fill storage)
    3. Current behavior is probably correct for security model

Possible Features

High Priority (if needed)

  • QR code for key import (avoid email/typing)
  • Server URL configuration in app UI (currently requires code change for non-defaults)
  • Manual sync trigger button
  • View sync history/status in app
  • Display last successful sync time on phone (e.g., "Last sync: 2 hours ago")
  • Server status page - HTML dashboard showing:
    • When phone last synced
    • Total recordings count
    • Recent uploads
    • Disk space usage
    • Could be at /status or /dashboard

Medium Priority

  • Configurable recording quality (bitrate, sample rate)
  • Configurable segment duration (currently 2 hours)
  • Delete synced files automatically (with configurable retention)
  • Server: Authentication for upload endpoint
  • Server: HTTPS with Let's Encrypt

Audio Analysis & Intelligence

  • Speech detection bar - Visual indicator showing when speech is detected vs silence
    • Display as additional bar in recording detail view alongside waveform
    • Data comes from batch processing script
  • Sleeping detection - Detect periods of sleep/silence for overnight recordings
    • Could help skip to interesting parts
    • Visual indicator in timeline
  • Auto voice recognition / Speaker identification
    • Identify who is talking (requires training on voice samples)
    • Label segments by speaker
    • Not text-based (transcripts are unreliable)
  • Auto highlight generation
    • Audio-based detection (not text search since transcripts are bad)
    • Example: detect phrase patterns like "Ok, note taken" acoustically
    • Auto-create highlights with tags like "note_taken"
    • Use audio fingerprinting or keyword spotting models

Viewer UX

  • Background audio playback - Keep playing current audio while browsing other recordings
    • Mini player that persists across views
    • Allows reviewing recordings list while listening
  • Highlight duration - Currently highlights mark only a point; consider adding end time/duration
  • Auto-scroll timeline to recordings - If recordings are only at end of day, auto-scroll so user doesn't have to scroll down to see them

Low Priority / Nice to Have

  • Multiple server destinations
  • Compression before encryption
  • Resume interrupted uploads
  • Server: Web UI to browse/play recordings
  • Server: Transcription integration

Infrastructure

  • Systemd service file for server
  • Docker container for server
  • NixOS module for server
  • Backup strategy for server private key

Known Limitations

  1. No streaming encryption: Entire temp file must complete before encryption
  2. No partial sync: If upload fails, whole file retries
  3. Single server: Can only sync to one destination at a time
  4. No authentication: Anyone who can reach server can upload (relies on encryption for confidentiality)

Testing Notes

Unit Tests (server/)

python test_crypto.py

Integration Tests (server/)

# Start server first
python main.py &
python test_integration.py

Manual Testing Checklist

  • Record short clip, verify .ogg.enc created
  • Verify temp file deleted after encryption
  • Check sync triggers after recording stops
  • Verify hash verification (corrupt a file, see it retry)
  • Test LAN detection with different subnets
  • Test sync mode transitions