Files
obsidian-vault/200 projects/240 Web Sites/Where Woof.md

71 lines
4.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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:3020` systemd user service.
- **Admin**: Laravel 13 + Filament 3 + Cashier 16 (Stripe AU) — `.13:3031` Docker.
- **DB**: Postgres `.13:5434` (`wherewoof`), schema canonical `db/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/api` directly.
## Next up (see Vikunja project 7)
1. **GO LIVE Stripe** (urgent — blocks real sales)
2. SES production approval + Cloudflare Email Routing (incoming hello@)
3. 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](https://vikunja.lab.audasmedia.com.au) · [Outline: Where Woof](https://outline.lab.audasmedia.com.au)