4.3 KiB
4.3 KiB
title, type, status, areas, related_tools, host, created, updated, tags
| title | type | status | areas | related_tools | host | created | updated | tags | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Where Woof | project | active |
|
|
.13 | 2026-09-16 | 2026-09-16 |
|
Where Woof
Return-tag platform: QR/NFC tags on valuables; finder scans → owner gets SMS with map link. Go + HTMX frontend, Laravel/Filament admin, shared Postgres, Stripe AU billing.
One-line
Every valuable deserves a way home: a $5 tag, a $10/yr account, and when the tag is scanned you get an SMS with the finder's map link.
Where things live (the 5 tools)
| Tool | What it holds | Where |
|---|---|---|
| Gitea | Source + git history | sam/where_woof — ssh://git@gitea.lab.audasmedia.com.au:2222/sam/where_woof.git |
| Vikunja | Project tasks, done/todo, priorities | Project "Where Woof" (id 7) — vikunja.lab.audasmedia.com.au |
| Outline | Project docs for AI bots (overview, architecture, configs, schema, status) | Collection "Where Woof" — outline.lab.audasmedia.com.au |
| Obsidian | This note — human understanding | 200 projects / 240 Web Sites / Where Woof.md |
| OpenSpec | Change proposals (proposal/design/specs/tasks) + plans | openspec/changes/* + plans/*.md in repo |
How they relate: Vikunja = what to do (tasks). Outline = what/why/how for AI agents. Obsidian = human brain reference. OpenSpec = design decisions per feature. Gitea = the code itself.
Map
- Interactive flow map (where-woof.com): https://maps.lab.audasmedia.com.au/where_woof/docs/diagrams/where-woof-flow.html
- Mermaid + PNG/SVG:
docs/where-woof-flow.mmd,docs/diagrams/(repo + maps site)
Status (2026-09-05)
- LIVE: frontend where-woof.com (.13:3020) · admin admin.where-woof.com (.13:3031)
- Done: phases 1–8 + billing (Phase 5) + promo (order page, banner, contact form)
- Blocking: Stripe go-live (test mode only now — no real sales) · SES production access + incoming hello@ routing
Billing model (locked)
- Account = the product: $10/yr flat, up to 25 tags, 50 SMS/yr included; extra SMS $0.10 (100-credit pack = $10).
- Tags one-time: single $5 + GST ($5.50) · 10-pack $20 + GST ($22.00). Cost ~$1/tag to make.
- Replacement tags: new SKU $5 one-time, annual sub continues untouched.
- Business/public-info deferred:
plans.plan_type='business'reserved (scan-volume tiers, no SMS).
Stack / infra
- Frontend: Go
net/http, sqlc/pgx, HTMX/Apline/Tailwind —.13:3020systemd user service. - Admin: Laravel 13 + Filament 3 + Cashier 16 (Stripe AU) —
.13:3031Docker. - DB: Postgres
.13:5434(wherewoof), schema canonicaldb/schema.sql. - SMS: SMSGlobal HTTP API — live creds set on .13 (
SMS_USER/PASSWORD/FROM). - Email: Amazon SES (ap-southeast-2) transactional only, sends as
hello@where-woof.com, contact form → samuelrolfe@gmail.com. Sandbox until production access approved. - Storage: MinIO on .13:9010 for tag photos.
- Ordering: Stripe Payment Links (test mode) on
/order.
Key configs (env-only, never committed)
.13 ~/.config/where-woof.env— frontend: DATABASE_URL, SMS_, SMTP_, STRIPE_, ORDER__LINK, BILLING_ENABLED, SMS_INCLUDED_PER_YEAR.13 ~/Docker/Containers/wherewoof-admin/.env— admin: DB_, STRIPE_ (test), CASHIER_CURRENCY- Secrets live only on .13 — never paste into chat or commit.
Gotchas
- Laravel login:
User::$authPasswordName = 'password_hash'(Laravel 13 rehash-on-login). - Cashier/Stripe: Managed Payments needs
tax_code→txcd_10103001(SaaS) — Tangible Goods rejected. - curl
-F "phone=%2B..."stores literal%2B— use real+. - Vikunja token intermittently 401s — retry once.
- Outline public API returns 502 (Caddy route missing) — use
http://192.168.20.13:3000/apidirectly.
Next up (see Vikunja project 7)
- GO LIVE Stripe (urgent — blocks real sales)
- SES production approval + Cloudflare Email Routing (incoming hello@)
- Photo uploads (Phase 6), anti-abuse (Phase 9), customer insights dashboard
Links
210 AI Resume · 220 Web Host Migration · 240 Web Sites · Vikunja: Where Woof · Outline: Where Woof