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

41 lines
2.1 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.
## Project state (2026-08-28)
**Live:** frontend `where-woof.com` (.13:3020) · admin `admin.where-woof.com` (.13:3031)
**Phases done:** foundation, scan flow (real SMS via SMSGlobal), hardening, HTMX polish, admin, deploy, **billing (Phase 5)** — account-based annual sub.
## Billing model (locked with owner)
- **Account = the product**: $10/yr flat, up to **25 tags**, **50 SMS/yr included**; extra SMS $0.10 each (100-credit pack = $10).
- **Tags one-time**: single **$5 + GST** ($5.50), 10-pack **$20 + GST** ($22.00). Cost ~$1 to make.
- **Replacement tags**: new SKU $5 one-time, annual sub continues untouched. Move mechanic already built (source→closed, unset target→active).
- **Business/public-info model deferred** (scan-volume tiers, no SMS) — `plans.plan_type='business'` reserved.
- Sandbox-first: Stripe test mode verified e2e; live keys pending onboarding.
## Stack / infra
- Frontend: Go `net/http`, sqlc/pgx, HTMX/Alpine/Tailwind. Admin: Laravel 13 + Filament 3 + Cashier 16 (Stripe AU).
- Shared Postgres on .13:5434 (`wherewoof`), schema canonical in `db/schema.sql`.
- Deploy: per-file `rsync --checksum` to .13 + systemd/docker restart. Gitea `sam/where_woof`.
- SMS: SMSGlobal HTTP API (`SMS_USER/PASSWORD/FROM`) — **live creds are set on .13**.
- Email: Gmail SMTP → samuelrolfe@gmail.com (app password, env-only). hello@where-woof.com = public contact (Cloudflare/SES planned).
## Promo (2026-08-28)
- `/order` page with Stripe Payment Links (test mode): single 1–25 qty, 10-pack 1–2.
- Red banner across all pages: "Protect & recover your valuables — ORDER NOW".
- Contact form → Gmail SMTP.
## Gotchas
- Laravel login: `User::$authPasswordName = 'password_hash'` (Laravel 13 rehash-on-login writes the wrong column otherwise).
- Cashier: Managed Payments requires `tax_code` → `txcd_10103001` (SaaS) is eligible.
- curl `-F "phone=%2B..."` stores literal `%2B` — use real `+`.
## Links
- [[210 AI Resume]] · [[220 Web Host Migration]] · [[240 Web Sites]]