Project · Stack · Running · Adding a new app · License
This repo is the host for arthurvasconcellos.com: a small, restrained homepage that lists personal apps under the AV LABS brand.
Each personal app lives in its own GitHub repo and deploys to its own
subdomain of arthurvasconcellos.com. See ADR-002
for why.
arthurvasconcellos.com- this repo. Homepage + Personal Apps grid + Elsewhere.invoice.arthurvasconcellos.com- Invoice Generator. Local-first invoice and cancellation PDFs for contractors.url.arthurvasconcellos.com- URL Shortener. Short links with access counts and one-click CSV export.sign.arthurvasconcellos.com- PDF Signer. Sign and verify PDFs with your own certificate, entirely in the browser.
- Framework - Next.js 15 App Router, React 19, TypeScript (strict)
- Styling - Tailwind v4, AV LABS design tokens, General Sans + JetBrains Mono (self-hosted)
- Themes - next-themes (system / light / dark)
- Testing - Vitest (apps-registry invariants)
- Tooling - pnpm, ESLint flat config, Prettier, GitHub Actions CI
No shadcn primitives here; no PWA on the host; no PDF generation here; no zustand. Every app that needs any of that carries it in its own repo.
Prerequisites: Node 22+, pnpm.
git clone https://github.com/arthursvpb/arthurvasconcellos.com.git
cd arthurvasconcellos.com
pnpm install
pnpm dev # http://localhost:3000pnpm typecheck # tsc --noEmit
pnpm lint # eslint .
pnpm test # vitest run (4 tests, apps-registry invariants)
pnpm build # next build
pnpm format # prettier --write .
bash scripts/refresh-general-sans.sh # re-download General Sans WOFF2Three steps: create a new GitHub repo, attach a subdomain, append one entry
to src/lib/apps-registry.ts. Full recipe: docs/adding-an-app.md.
ARCHITECTURE_DECISION.md- ADR-002, subdomain federation. Explains why this host stays tiny. phase by phase (superseded by ADR-002 but kept for history).
MIT. See LICENSE.md.