Where Woof — Toolchain
Everything used to build and run the project, with where it fits.
Product stack (public site — "GOAT")
| Tool |
Version |
Used for |
| Go |
1.26 |
Frontend: stdlib net/http (no framework), html/template, Go 1.22+ ServeMux routing |
| HTMX |
1.9.12 |
Inline editing, account panel swaps, contact forms (no page reloads) |
| Alpine.js |
3.x |
Live phone validation, small client behaviours |
| Tailwind CSS |
CDN |
Utility-first styling (swap to a build step in Phase 3 polish later) |
| Postgres |
16 |
Single shared database (wherewoof-db on .13) |
| pgx |
v5 |
Postgres driver + pool for Go |
| sqlc |
1.31.1 |
Type-safe query generation from SQL (compiled-checked queries) |
| gorilla/sessions |
— |
Signed cookie sessions |
| bcrypt |
— |
Password hashing |
Admin stack
| Tool |
Version |
Used for |
| Laravel |
13 (PHP 8.3) |
Admin backend; Eloquent reads the shared Postgres schema |
| Filament |
v3 |
Admin panel UI: CRUD resources (User/Tag/Product/Order), dashboard widgets |
| Livewire |
(Filament dep) |
Reactive admin pages |
| Docker |
— |
Laravel dev (.27:3030) + prod (.13:3031); Postgres container |
Infrastructure & deployment
| Tool |
Role |
| NixOS |
.27/.13/.51 hosts; systemd user services; firewall via config |
| systemd |
where-woof.service (frontend, auto-restart, linger) |
| Docker Compose |
Postgres, admin, other services |
| Caddy |
Reverse proxy + TLS on .35 (public domains) |
| Pi-hole |
Local DNS (.home.lab domains) |
| rsync |
Deploy artifacts to .13 |
| Gitea |
Git hosting (sam/where_woof) |
SMS
| Tool |
Role |
| SMSGlobal HTTP API |
Live SMS (api.smsglobal.com/http-api.php, action=sendsms) — verified number as sender |
internal/sms (Go) |
Swappable Sender interface: LogSender (dev), HTTPClient (live), smsglobal REST client (unused fallback) |
Development workflow
| Tool |
Role |
| OpenSpec |
Spec-driven development: openspec/changes/* (proposal → design → specs → tasks), validated |
| plannotator |
Plan review (browser UI) for the first two phases |
| pi subagents |
Master/worker delegation: database, coder-pro, code-analysis, devops |
| Makefile |
db-up, seed, seed-registry, run, build, generate, psql |
| Verify suites |
/tmp/verify.sh (22 checks), verify2.sh (19), verify3.sh (12) — HTTP-level regression tests |
Security tooling (guards package installs)
SafeDep Vet (vet), npq (typosquatting), Socket Firewall (socket) — the npm-security skill wraps installs.
Notes / gotchas (hard-won)
- Filament v3: production 403 unless the User model implements
FilamentUser.
- Behind Caddy, force
URL::forceScheme('https') to avoid mixed-content asset blocks.
- sqlc: nullable columns →
pgtype.*; explicit INSERT column lists must include new columns.
- NixOS:
CGO_ENABLED=0 for Go builds (no gcc); make via nix profile; psql via docker exec.
- Admin files created by Docker are root-owned — edit via
docker cp.