Personal + professional site and protected admin tool for Logan Dapp
(logand.app / logandapp.com). Public landing/projects/contact pages
plus an internal invoicing, budget, and inventory system behind auth --
including multi-method invoice payments (Stripe, PayPal, and manually-
recorded Zelle/in-person payments), professional PDF invoice generation,
bill-of-materials cost breakdowns tied to inventory consumption, and
row-level-locked payment operations so the same invoice can never be
double-charged or double-recorded under concurrent requests. A generic,
audit-logged admin data browser and centralized, rotating application
logging (backend, frontend, and the Android client) round out the
operational side -- see
docs/design/15-admin-tools-and-observability.md.
Full product spec and architecture: docs/design/ -- start there, not here, for anything about what to build or why. Deploying this yourself? Start at docs/deployment.md instead. Using the deployed site? See docs/usage.md. Already running it and something needs day-2 attention -- a deploy, a migration, mail, an Android release, payments? See docs/OPERATIONS.md. This file only covers how to run the repo. See docs/README.md for the full documentation index.
backend/ Python / FastAPI / pydantic / typani -- see docs/design/01
frontend/ TypeScript / React / Tailwind -- see docs/design/07
wasm-ascii/ Rust crate, ASCII rasterizer -- see docs/design/08
android/ Kotlin / Jetpack Compose mobile client -- see android/README.md
ops/ VPS-side tooling (backups, release-watch) -- see below
docs/design/ pre-implementation specs, read by component
docs/ deployment/secrets/usage guides + runbooks -- see docs/README.md
.github/ CI (every PR) + deploy (push to main)
Each of backend/, frontend/, wasm-ascii/, android/ is
independently buildable via its own Makefile. The root Makefile
composes them. android/ is not part of CI (see CI/CD below) and has
its own build requirements (JDK 17, Android SDK) -- see
android/README.md before running make install/
make test if you don't already have those.
docker compose -f docker-compose.dev.yml up -d # postgres + redis only
cp backend/.env.example backend/.env # fill in real values, never commit
make install
make migrate -C backend # or: make -C backend migrate
make check # lint + typecheck + tests, every subprojectBackend dev server: cd backend && uv run logand-backend (or your
IDE's run config against src/logand_backend/__main__.py).
Frontend dev server: cd frontend && npm run dev.
make test runs unit + integration for every subproject. make test-system brings up docker-compose.test.yml and runs the full
end-to-end suite (backend httpx system tests + Playwright). Every
component is required to carry all three layers -- see
docs/design/12-testing-strategy.md
for what belongs in which layer before adding a test.
.github/workflows/ci.yml-- runs on every PR and push tomain: lint + typecheck + unit/integration per subproject, then a combined system-test job againstdocker-compose.test.yml.android/is not part of this workflow (it's exercised byrelease-android.ymlinstead, below) -- runmake -C android test(or rootmake test, which now includes it) locally before pushing android changes..github/workflows/release-android.yml-- on pushing avX.Y.Ztag: runs:core/:apptests on a real GitHub-hosted (x86_64) runner -- none ofandroid/README.md's aarch64-Linuxaapt2workarounds are needed there -- then, only if tests pass, builds a debug-signed APK (no release keystore exists for this project) and attaches it to a new GitHub Release. See android/README.md for install steps on a real device..github/workflows/deploy.yml-- on push tomain, after CI passes: builds images, pushes to GHCR, ships the frontend build + restarts the backend on the VPS over SSH.ops/release_watch/-- a small pull-based fallback: a systemd timer on the VPS polls the GitHub releases API and redeploys if it's behind the latest tag, in case a push deploy fails partway. Not a replacement fordeploy.yml, a safety net for it.
Never commit .env. Real values go in backend/.env (gitignored) and
in GitHub Actions repo secrets. No agent working in this repo should
ever read .env directly or indirectly -- see
docs/design/00-overview.md and
docs/design/02-auth-and-security.md.
For what every individual secret is and how to rotate it, see
docs/secrets.md.
MIT -- use, modify, and redistribute freely, with attribution (see the license file for the exact terms). This is a personal project shared in case any of it (the ASCII renderer, the LaTeX invoice PDFs, the payment-provider abstraction) is useful to someone else, not a maintained product -- expect to fork and adapt rather than file issues against it.