scaffold: OpenScribe open-source self-hosted AI voice recorder
Some checks failed
ci / firmware (push) Failing after 2s
ci / server (push) Failing after 45s

Bootstrap of the project (M0). Sets up the monorepo, design docs, hardware BOM,
the open API contract, component skeletons, licensing and CI, following the
Default Workflow SOP.

What changed:
- CLAUDE.md + docs/: copied the Default Workflow so sessions load the SOP.
- state/: PROJECT, ARCHITECTURE, DECISIONS, TODO, NOTES filled in for OpenScribe.
  ARCHITECTURE captures the four-part design (firmware, server, app, case) and the
  three sync paths; DECISIONS records the hardware, AI-stack, storage, app and
  licensing choices; TODO lays out milestones M1-M9.
- hardware/BOM.md: two build options (compact XIAO ESP32-S3 Sense; dev ESP32-S3 +
  I2S mic + SD), wiring/pinout, indicative cost.
- api/openapi.yaml: the completely open API (device + server surfaces), including
  recording list/download/delete and exports (wav/ogg/txt/srt/vtt/md/json).
- firmware/: PlatformIO ESP32-S3 project, two board profiles, pin map, boot scaffold
  with module seams for M1-M4.
- server/: FastAPI skeleton mirroring the OpenAPI, config for self-hosted MinIO,
  faster-whisper and Ollama; stub routes browsable at /docs.
- app/, case/: Flutter app plan; parametric OpenSCAD enclosure.
- Licensing: GPL-3.0 (code), CERN-OHL-S-2.0 (hardware), CC-BY-SA-4.0 (case/docs),
  REUSE-style LICENSES/ with SPDX headers; LICENSING.md explains the split.
- CI: Forgejo Actions workflow builds firmware (both profiles) and lints/imports server.

Why:
- Everything self-hosted and openly licensed per the user's requirements: an open
  API, three sync paths (BLE control, WiFi transfer, independent WiFi upload on
  charge to generic cloud storage), and a full self-hosted transcription+summary stack.

Notes:
- No custom PCB in v1; off-the-shelf modules. Physical verification waits on parts.
- Component code is stubs at M0; features land milestone by milestone, each as its
  own branch/PR per the workflow.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Laurence 2026-07-03 10:21:37 +01:00
commit 031074c9a9
36 changed files with 2922 additions and 0 deletions

45
state/TODO.md Normal file
View file

@ -0,0 +1,45 @@
# TODO
> The current state of play. Keep it honest and current; this is what the next session
> reads to know what to do. Move items between sections as they progress.
## In progress
- [ ] M0 Scaffold - repo, licences, state docs, BOM, OpenAPI, component skeletons, CI
(branch: bootstrap on `main`; this is the setup commit)
## Pending (roughly in build order)
- [ ] M1 Firmware recording core: I2S mic capture -> PSRAM ring buffer -> WAV on microSD,
button start/stop, LED status, sidecar JSON metadata. (branch `feature/fw-recorder-core`)
- [ ] M2 On-device WiFi + REST API: WiFi manager, mDNS, list/get/download(range)/delete
recordings, device status. Implements `api/openapi.yaml` device paths.
(branch `feature/fw-rest-api`)
- [ ] M3 Independent uploader: NVS config store, charge/VBUS detect -> powered mode,
S3-compatible + WebDAV upload of audio + metadata. (branch `feature/fw-uploader`)
- [ ] M4 BLE GATT: device info, battery, record control, WiFi provisioning, status
notifications; hand-off to WiFi for transfer. (branch `feature/fw-ble`)
- [ ] M5 Server ingest + transcription: FastAPI ingest from object store/upload, store,
faster-whisper transcription, DB, exports (audio/TXT/SRT/VTT/JSON). REST API.
(branch `feature/server-ingest-stt`)
- [ ] M6 Server summaries: Ollama LLM summary + action items, Markdown export.
(branch `feature/server-summary`)
- [ ] M7 Flutter app: BLE provisioning, device dashboard, library from server API,
playback, transcript/summary view, export/share, settings.
(branch `feature/app-mvp`)
- [ ] M8 3D case: parametric OpenSCAD enclosure fit to the BOM board + battery; print/fit.
(branch `feature/case-v1`)
- [ ] M9 Hardening + OTA: API auth, credential handling, OTA update, docs handoff.
(branch `feature/hardening-ota`)
## Done
- [x] Create Forgejo repo `laurence/openscribe` (public, main) - 2026-07-03
- [x] Decide hardware, sync model, AI stack, app platform, storage, licensing (see
DECISIONS.md) - 2026-07-03
## Blocked / waiting
- [ ] Physical build + on-device verification - waiting on parts from `hardware/BOM.md`.
Until parts arrive, firmware is developed against the ESP32-S3 target and validated
by build + (where possible) native/host unit tests, not on real hardware.