iamdoubz
13733ac262
auth: sessions, login/logout/me/change-password, CSRF, guards, audit
...
argon2id passwords with a min length and a common-password list (SecLists,
MIT). Login failures are limited per IP and per email; must_change_password
blocks everything outside /api/auth/*. The first admin is created from env
on startup. pnpm dev derives DATABASE_URL from .env.
Task: M1-T3
2026-10-17 15:08:44 -05:00
iamdoubz
15b8a20751
db: drizzle schema matching spec 02, initial migrations, settings service
...
Migration 0000 enables citext; 0001 creates all 39 tables. DB tests use a
throwaway database per file (TEST_DATABASE_URL, derived from .env in dev,
a postgres service in CI). Decision 0002: pg driver and @fastify/cookie.
Task: M1-T1
2026-10-17 15:04:18 -05:00
iamdoubz
63a03b4185
api: AES-256-GCM secrets, SIP password and PIN generation
...
Task: M1-T2
2026-10-17 15:02:23 -05:00
iamdoubz
c49426971e
Merge Gitea initial commit (keep project README and canonical AGPL text)
ci / check (push) Canceled after 0s
ci / images (push) Canceled after 0s
2026-10-17 14:54:16 -05:00
iamdoubz
2322d7242e
Initial commit
2026-10-17 14:53:45 -05:00
iamdoubz
2aa170221f
workspace: ignore .pnpm-store (CI runners put it in the checkout)
...
Task: M0-T7
2026-10-17 14:42:34 -05:00
iamdoubz
240b33fb68
ci: drop setup-node pnpm cache (fails without an Actions cache server)
...
Task: M0-T7
2026-10-17 14:40:54 -05:00
iamdoubz
b2d57c1e81
ci: lint, typecheck, test and build both images
...
Works on GitHub and Gitea/Forgejo Actions. Not run yet: no remote or
runner configured.
Task: M0-T7
2026-10-17 14:32:58 -05:00
iamdoubz
d0de0c9039
deploy: docker compose stack, api image, install script, proxy configs
...
Postgres and AMI secrets are hex (the password goes into DATABASE_URL).
Task: M0-T6
2026-10-17 14:32:57 -05:00
iamdoubz
909ac2d62d
asterisk: 24.0.0-rc2 image built from source with static config
...
Adds stub configs and noloads so a clean boot logs no ERROR lines,
ships stock indications.conf, seeds default MOH from the entrypoint.
Spec 01 synced with the real files.
Task: M0-T5
2026-10-17 14:31:05 -05:00
iamdoubz
d12795ec8b
web: vite + react + tailwind hello page with dark-mode toggle
...
Workspace packages export TS source under a 'source' condition used by
vite, node (--conditions=source) and tsc.
Task: M0-T4
2026-10-17 14:23:15 -05:00
iamdoubz
08bd33eefa
api: env config, fastify with /healthz and SPA static serving
...
Task: M0-T3
2026-10-17 14:20:52 -05:00
iamdoubz
0247137765
shared: phone number normalize, format and reserved check
...
Task: M0-T2
2026-10-17 14:19:34 -05:00
iamdoubz
aa99622a24
workspace: pnpm monorepo with api, web, shared
...
TypeScript 7 strict, ESLint + Prettier, vitest, AGPL-3.0 license.
Decision 0001 records the latest-majors choice and the TS 6 alias.
Task: M0-T1
2026-10-17 14:18:02 -05:00
iamdoubz
547bb68a6f
docs: initial SelfPhoneNG spec
...
Fix leftover __OP_* dialplan variables from the openphone rename (all
readers use SP_*). Record the reverse-proxy decision in 00 §10.
2026-10-17 14:11:09 -05:00