# ThoughtSync Self-hosted personal thought-capture web app in the **FabledSword** family — a Google-Keep-style **masonry post-it board** for capturing disparate thoughts in under a second, designed to grow into a lightweight second brain (labels, search, `[[wiki-links]]`, graph). - **Stack:** Quart (async Python) + Vue 3 + PostgreSQL, Docker, Fabled-Git CI. - **Auth:** native email + password (signed-cookie sessions). Multi-user with the family owner + direct-share + group-share ACL. - **Web-first.** An Android companion is a later, conditional milestone. ## Layout ``` src/thoughtsync/ Quart app (app factory, auth, models, ACL, config, db) alembic/ async migrations (schema built via `alembic upgrade head`) tests/ DB-free unit tests (pytest) frontend/ Vue 3 + Vite + TypeScript + Tailwind SPA Dockerfile 2-stage build (Vue -> python:3.12-slim runtime) docker-compose.yml local app + Postgres stack ``` ## Development Backend (needs a Postgres reachable at `THOUGHTSYNC_DATABASE_URL`): ```sh pip install -e ".[dev]" alembic upgrade head hypercorn 'thoughtsync.app:create_app()' --bind 0.0.0.0:5000 ``` Frontend (proxies `/api` to `:5000`): ```sh cd frontend npm install npm run dev # http://localhost:5173 ``` Or run it in Docker. **Hot-reload dev stack** (edit code, changes reload live) — Postgres + backend + Vite dev server, app at http://localhost:5173: ```sh docker compose -f docker-compose.dev.yml up ``` Or the **full production image** (SPA baked in) at http://localhost:5000: ```sh docker compose up --build ``` ## Milestones - **M0 — Foundation & Identity** ✅: Quart+Vue+Postgres skeleton, native auth, sharing-ACL spine, Fabled-Git CI. - **M1 — Capture Core** ✅: note model + masonry board (quick-add, colors, pin, edit-in-place, archive, trash+restore). - **M1.5 — Roles & DB-backed Settings** ✅: first user is admin, admin Settings UI, `DATABASE_URL` is the only required env. - M2 — Organize: labels/tags, search, checklists, attachments. - M3 — Second-brain seeds: `[[wiki-links]]`, backlinks, graph view, reminders. - M4 — Launch hardening: responsive/PWA, settings UI, polish. Work happens on `dev`; `main` is protected (PR-only).