2.6 KiB
2.6 KiB
NAS Tools Project
PDD Workflow
This project follows PDD (Product Definition Document) development.
Always read these files before writing code:
docs/PDD.md— product vision, goals, targets (the north star)docs/specs/active.md— current sprint spec (what we're building now)
Workflow:
- PDD → Sprint Spec → Implementation → Validate ACs
- Scope changes update the sprint spec first, code second
- Never ship without ACs passing
Dev Commands
- Build dashboard:
cd dashboard/frontend && npm run build - Dev dashboard:
cd dashboard/backend && uvicorn main:app --reload+cd dashboard/frontend && npm run dev - Test:
cd dashboard && python -m pytest backend/tests/ - Deploy: Push to main → Gitea CI builds + deploys to NAS
Architecture
- Synology DS224+ (x86_64, 18GB RAM), Tailscale IP:
100.78.131.124, LAN:192.168.31.221 - Docker:
/volume1/@appstore/ContainerManager/usr/bin/docker, compose dirs:/volume1/docker/* - VPS Caddy (
161.33.182.109, Tailscale:100.109.198.126): reverse proxy for*.jimmygan.com - Build VPS (server2,
158.101.140.85, Tailscale:100.70.115.1): podman builds - NAS Caddy: port 8443 fallback only (SNI broken)
Dashboard
- Backend: Python FastAPI (
dashboard/backend/) - Frontend: Svelte 5 + Tailwind CSS (
dashboard/frontend/) - Svelte 5 runes:
$state,$props,$bindable(notexport let) - New pages: create route in
src/routes/, import inApp.svelte, updateSidebar.svelte
CI/CD
Two Gitea workflows in .gitea/workflows/:
- deploy.yml — main branch: tests → build → deploy to production
- deploy-dev.yml — dev branch: tests → build → deploy to dev
Build flow: VPS builds → pushes to local registry (100.78.131.124:5501/) → streams to NAS → docker compose up -d
Key Files
docs/architecture.md— full architecture referencedocs/TESTING.md— test patterns and conventionsspecs/— sprint history.gitea/workflows/deploy.yml— main CI.gitea/workflows/deploy-dev.yml— dev CIdashboard/backend/main.py— FastAPI entry pointdashboard/frontend/src/App.svelte— Svelte entry point
Synology Quirks
- No
crontab— edit/etc/crontabwithsudo+printf, restart crond - No
scpsubsystem — usecat file | ssh ... 'cat > dest' - ACLs override Unix perms — use
sudo chmod 777+synoacltool -enforce-inherit - Tailscale userspace mode — cannot bind Docker ports to Tailscale IPs
DNS
- dnsmasq on NAS resolves
*.jimmygan.com→161.33.182.109(Caddy VPS) - Tailscale split DNS:
jimmygan.com→ NAS (queries hit dnsmasq)