M0: repo scaffold, backend skeleton, schema + migrations, dev compose, docs

- Apache-2.0, README, CONTRIBUTING, CODE_OF_CONDUCT, SECURITY, issue templates
- FastAPI app with /api/v1 healthz/readyz/system-status (honest AI disclosure)
- Full SQLAlchemy schema (users, devices, refresh tokens, recordings, assets,
  upload sessions, transcripts, summaries, tags, jobs, exports) + Alembic
  migrations incl. Postgres FTS tsvector columns
- Settings via SHONAR_* env only; local + S3 storage abstraction with
  path-traversal-safe keys
- Docker dev compose (postgres+redis, 127.0.0.1-only); CI workflow; scripts
- shared/openapi.json contract generated from app
This commit is contained in:
avi 2026-09-08 13:23:45 -05:00
commit 5fab96e824
46 changed files with 3616 additions and 0 deletions

33
docs/recording-consent.md Normal file
View file

@ -0,0 +1,33 @@
# Recording consent — legal notice
**Recording conversations may be illegal without consent.**
Laws vary widely by jurisdiction:
- **One-party consent**: you may record conversations you participate in.
- **All-party consent** (many US states, and many other countries): every
participant must consent before recording begins.
- Recording conversations you are *not* part of is illegal in essentially
every jurisdiction.
S.H.O.N.A.R. is a tool. **You** are solely responsible for knowing and
following the law where you are.
## What the app does (and never does)
- Shows a consent reminder on first launch and persistently on the recording
screen.
- **Never records silently.** Recording runs as a foreground service with an
ongoing notification, and Android's own microphone indicator is visible on
Android 12+.
- Provides an always-visible stop control on the recording screen and in the
notification.
- Has no remote-trigger recording capability of any kind.
- Collects no telemetry and sends no data anywhere except the server URL you
configure.
## Recommended practice
Before recording, tell everyone present that the conversation is being
recorded and obtain their agreement. Where written consent is required, get
it in writing.