M0: Docker + Fabled-Git CI (typecheck + lint + test + build)
- 2-stage Dockerfile (node:22 build Vue -> python:3.12-slim runtime); CMD runs `alembic upgrade head` then hypercorn (rule 82). - .forgejo/workflows/ci.yml on ci-python:3.14: typecheck (vue-tsc) + lint (ruff check src/) + test (uv venv + pytest, DB-free) + gated buildx push with the rule-46 tag scheme (:dev/:latest/:<sha>). No local integration lane yet. - ci-requirements.md (rule 39); docker-compose for a local app+Postgres stack. - Real README with layout, dev instructions, and the milestone arc. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FRgehjoz7Yv8LkUfADxACm
This commit is contained in:
@@ -1,3 +1,58 @@
|
||||
# thoughtsync
|
||||
# ThoughtSync
|
||||
|
||||
Self-hosted personal thought-capture web app (FabledSword family) — a Google-Keep-style masonry post-it board for fast idea capture, growing into a lightweight second brain. Quart + Vue 3 + PostgreSQL.
|
||||
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 the whole stack in Docker:
|
||||
|
||||
```sh
|
||||
docker compose up --build
|
||||
```
|
||||
|
||||
## Milestones
|
||||
|
||||
- **M0 — Foundation & Identity** *(in progress)*: 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).
|
||||
- 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).
|
||||
|
||||
Reference in New Issue
Block a user