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

4.3 KiB
Raw Blame History

title, type, status, areas, related_tools, host, created, updated, tags
title type status areas related_tools host created updated tags
Where Woof project active
Web Sites
Gitea
Vikunja
Outline
.13 2026-09-16 2026-09-16
project
website
go
htmx

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

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

210 AI Resume · 220 Web Host Migration · 240 Web Sites · Vikunja: Where Woof · Outline: Where Woof