Unified task manager — kanban Board + List + Calendar, with zero-copy Jira linking, Slack/Teams capture, a programmatic REST API, real-time updates, and an Electron desktop client.
- Plan:
FLOWBOARD_ALTERNATIVE_PLAN.md - Decisions:
FLOWBOARD_DECISIONS.md - What's built:
IMPLEMENTATION_STATUS.md - Deploy / infrastructure:
INFRASTRUCTURE.md
backend/ FastAPI + SQLAlchemy API (68 passing tests) ← start here
frontend/ React + TypeScript + Vite (Board/List/Calendar)
electron/ Electron desktop shell wrapping the web build
examples/ Phase-2 task-push scripts (Python, curl, Kotlin)
docker-compose.yml API + Postgres + Redis
1. Backend (SQLite, zero infra):
cd backend
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
DEV_API_KEY=fb_local_dev_key uvicorn app.main:app --reload
# API: http://127.0.0.1:8000 docs: http://127.0.0.1:8000/docs2. Frontend:
cd frontend
npm install
npm run dev # http://localhost:5173 (proxies /api + /ws to :8000)
# paste the API key (fb_local_dev_key) when prompted3. Desktop (optional):
cd electron
npm install
FLOWBOARD_DEV=1 npm start # loads the Vite dev server in a native windowcd backend && pytest # 68 tests
cd frontend && npm run build # type-check + production buildFlowBoard stores only a Jira issue id on a task — never the ticket's content.
Summary/status/assignee/due-date are fetched live at render and never persisted.
Your internal start_date/due_date stay private and are never pushed to Jira;
deleting a card never touches the issue. See the plan and decision log for the
full GDPR rationale.
docker compose up --build # API on :8000, Postgres on :5432, Redis on :6379Two validated Terraform stacks (not deployed — apply is billable). See
INFRASTRUCTURE.md:
infra-ec2/— single Graviton box + Caddy + SQLite, ~$6/mo (recommended for one user)infra/— ECS Fargate + RDS + ElastiCache + ALB + Cognito, ~$58/mo (multi-user path)