|
|
d3a2070aed
|
README: add basic Mermaid structure map (renders on Gitea home)
|
2026-09-06 18:27:35 +10:00 |
|
|
|
ad8ee626fa
|
Add where-woof.com flow maps: Mermaid + Archify interactive HTML
- docs/where-woof-flow.mmd (flowchart) + PNG/SVG renders
- docs/diagrams/where-woof-flow.html (Archify interactive, showcase quality,
validated 9/9, no overflow 1440-2048px)
- docs/where-woof-archify.json spec + ARCHITECTURE.md maps section
- Published to maps.lab.audasmedia.com.au/where_woof/docs/
(secret-scan skip: SVG color hex false positive)
|
2026-09-06 18:10:52 +10:00 |
|
|
|
39d99c5833
|
Contact form: SMTP_FROM=hello@where-woof.com (SES-ready), add Reply-To
|
2026-09-02 17:53:35 +10:00 |
|
|
|
2a101e9a62
|
Promo: order page + red banner + contact form; fix admin login rehash
- /order page: single tag $5.50 / 10-pack $22.00 (GST-incl), qty via
Stripe Payment Links (single 1-25, pack 1-2), thanks state
- Red 'Protect & recover your valuables — ORDER NOW' banner in base layout
(every page incl. found-dog tag page) + footer promo links
- Contact page: form -> Gmail SMTP (env SMTP_*), hello@where-woof.com
- Fix admin login 500: User.getAuthPasswordName() = password_hash so
Laravel 13 rehash-on-login writes the correct column (was trying
UPDATE users SET password = ...)
|
2026-09-01 12:53:53 +10:00 |
|
|
|
aabaa750f4
|
Phase 5 billing: account-based annual sub + tag SKUs + SMS pool + tag lifecycle
- Schema: plans, orders subscription cols + plan_id + period_started_at,
billing_events log, users.stripe_id + sms_credits, products.price_aud
(db/schema.sql + Laravel migration, idempotent)
- Laravel/Cashier: Billable User, checkout (annual sub + one-off SKUs with
Managed Payments tax_code), webhook controller (signature-verified,
idempotent, BILLING_ENABLED kill-switch), account tag transitions,
nightly reconcile, Stripe portal link, PlanResource + billing dashboard
- Go frontend: account-level gating (paid sub required), SMS pool
(included 50/yr + credits, drawn after included), plan caps replace
constants, 60s plan cache (credits fresh), 25-tag cap (plan max_tags)
- BillingSeeder: personal plan + 3 SKUs + dev paid orders
- Verified test-mode e2e: subscribe/paid/active/alerts, pool exhaust +
credits resume, lapsed/suspended, cancelled/closed, recover/active,
webhook idempotency, 25-cap, one-off SKUs, replacement, kill-switch,
invalid signature 400
|
2026-08-28 13:19:32 +10:00 |
|
|
|
43ce4514c4
|
location-first scan: geolocation prompt decides the scan (8s fallback to plain scan, never blocks); server 'location upgrade' rule re-alerts with map link when coords arrive after a no-loc alert
|
2026-08-10 19:17:58 +10:00 |
|
|
|
f2d1acac35
|
scan flow: fire scan immediately on tag-page load (location is an upgrade, not a gate) so a tag view always records+alerts; add request logging middleware (method/path/status/duration) to stdout for diagnostics
|
2026-08-10 18:51:35 +10:00 |
|
|
|
1fae314eb4
|
tag claim flow: scanned code auto-fills Add Tag field (?code=), unclaimed tag page shows 'Add this tag to my account' when logged in, login honors next= so code survives the login step
|
2026-08-10 17:04:21 +10:00 |
|
|
|
04fd5ac63a
|
fix: legacy QR URLs without '?' (productid in path) redirect to /t/CODE (new tag 97 now scans); preview page photo portrait aspect; Preview button on user tags list; admin photo form = preview + standalone Upload button (removed URL TextInput — no duplicate, no stale placeholder)
|
2026-08-10 16:54:10 +10:00 |
|
|
|
ae0290b343
|
admin: photo preview fixed size (inline styles); preview mode ?preview=1 (banner, no scan functionality) with Preview buttons in admin row action + owner edit link
|
2026-08-10 16:36:22 +10:00 |
|
|
|
eb3e4f45ad
|
admin: Tags-list photo thumbnail (null when no photo — fixes empty src), edit-form photo preview (blade view), 'View live page' row action; owner: 'View the live tag page' link on edit
|
2026-08-10 16:27:40 +10:00 |
|
|
|
fd91d3c53e
|
fix: admin upload action fillForm()->refreshFormData(['photo_url']) (fillForm threw in action closure); photo cache-busting (?v=updated_at) so overwritten photos don't show stale browser cache (user 'reverting to old images')
|
2026-08-10 16:18:08 +10:00 |
|
|
|
0a66d92d31
|
FIX (root cause): trust Caddy proxies in bootstrap/app.php — Laravel saw http behind Caddy, so signed upload URLs never validated -> every Livewire upload 401 -> 'failed to upload' regardless of file size. Verified: upload returns 200 with temp path.
|
2026-08-10 16:00:02 +10:00 |
|
|
|
d3e51b0fd1
|
admin upload: Livewire temp max 50MB + php.ini conf.d mount (research-backed)
|
2026-08-10 15:48:04 +10:00 |
|
|
|
8c2d65eabb
|
docs+ini: upload limits via conf.d mount; AGENTS.md corrected
|
2026-08-10 15:34:13 +10:00 |
|
|
|
aaad9f2db6
|
fix (research-backed): admin upload limits via mounted php.ini conf.d (artisan serve child ignores -d flags — Filament docs: set php.ini); user photo preview always rendered (was conditional -> FileReader target missing); PNG upload+save+display verified
|
2026-08-10 15:34:13 +10:00 |
|
|
|
ab3aa5aee9
|
fix: remove photo_url text input from user form (photo only via file upload; handler keeps existing photo when no file); livewire config published (disk=local, 12MB, 2min upload — was 5s default breaking admin temp uploads)
|
2026-08-10 15:07:15 +10:00 |
|
|
|
f5e5989c64
|
docs: known-good state + gotchas (photo flows, admin upload, curl -F pitfall, logins)
|
2026-08-10 14:57:12 +10:00 |
|
|
|
ef20af0d92
|
fix: user photo upload now INSIDE the main edit form (one Save = file+fields, no JS); admin resource FQNs corrected (relative Filament\Forms refs = panel-wide 500)
|
2026-08-10 14:47:07 +10:00 |
|
|
|
fc7f3bf675
|
fix: user photo_url input type=text (type=url rejected relative /photos/ paths = form block); admin inline upload action leading-backslash namespace (was panel-wide 500)
|
2026-08-10 14:41:04 +10:00 |
|
|
|
704cc4606f
|
fix: user photo form explicit method=post+enctype (405 when htmx missed it); admin upload action moved inline as suffix on the photo field; verified real PNG upload+serve
|
2026-08-10 14:31:24 +10:00 |
|
|
|
3001e816cd
|
fix: admin 'Upload photo' action (modal FileUpload, stores to MinIO, sets photo_url — no foreach 500); user upload limit 5MB->10MB; photo_url input shows full value (visual truncation only)
|
2026-08-10 14:20:35 +10:00 |
|
|
|
b14341e344
|
fix: admin photo fields -> TextInput + ImageColumn (FileUpload foreach 500 gone); user upload syncs photo_url input so Save keeps the photo; ProductResource photo added
|
2026-08-10 14:13:18 +10:00 |
|
|
|
bcf6f3115d
|
fix: admin FileUpload single-path columns (array state + dehydrate — was foreach error = admin edit 500); user photo upload targets thumb div only so the form/button survives re-uploads
|
2026-08-10 14:01:55 +10:00 |
|
|
|
f38beb4cfe
|
fix: user tag edit photo upload — standalone form (was nested inside main form, invalid HTML), thumbnail on success; restore sms_enabled on tag 6; admin upload accepts HEIC (no image() rule)
|
2026-08-10 13:51:49 +10:00 |
|
|
|
23508fc468
|
fix: Edit link navigates to the full tag edit page (was intercepted by hx-get inline); admin upload limits raised (12M via php -d) + FileUpload maxSize 10MB — fixes 'failed to upload' on phone photos
|
2026-08-10 13:14:47 +10:00 |
|
|
|
e38128c33f
|
fix per feedback: remove home recent-scans; admin dashboard recent-scans -> tag edit links + item column; inline tag edit gets photo upload; explicit deploy sync (no dir-rsync flakiness)
|
2026-08-10 13:04:43 +10:00 |
|
|
|
83d75cb29f
|
home: recent-scans list (links + tag ids); admin tags: item_type column, searchable tag code/description/owner; admin photo upload: drop imageEditor (unbundled JS); owner edit photo upload confirmed
|
2026-08-10 12:52:52 +10:00 |
|
|
|
9158681001
|
fix batch: admin login rehash->password_hash mapping (500); geolocation timeout 20s + hide button on approval + 'location shared' notice; sms: link includes typed number (Alpine); location page = found-dog + map + finder number + tag details; nicer closed page; password visibility toggles; product photos; templates use x-text (no {{}} in Alpine)
|
2026-08-10 12:27:20 +10:00 |
|
|
|
b5db858ef8
|
fix: seed-admin emits $2y$ bcrypt prefix so Laravel admin login works (was $2a$ -> 500 'does not use the Bcrypt algorithm')
|
2026-08-10 12:00:03 +10:00 |
|
|
|
ae231c97f6
|
compat: /index.php?productid= legacy URL form redirects to /t/{code} (covers old printed QR URLs)
|
2026-08-10 11:51:58 +10:00 |
|
|
|
97cf0974a3
|
tag-lifecycle: owner close (status closed, gating + page) + move (copy details to new tag, close source) + legacy ?productid= redirect — verified with real tags 6 & 17
|
2026-08-10 11:36:11 +10:00 |
|
|
|
77a9f803f2
|
openspec: tag-lifecycle change (close/move/legacy redirect)
|
2026-08-10 11:33:25 +10:00 |
|
|
|
daf758d336
|
docs: product model — metering+renewal+unlock marked done
|
2026-08-10 10:11:31 +10:00 |
|
|
|
9d43403f6f
|
renewal-unlock: orders.renews_at lazy expiry + owner unlock notices (ntfy/sms channels, exempt from metering) — verified
|
2026-08-10 10:10:50 +10:00 |
|
|
|
8b5db410a3
|
openspec: renewal-unlock change
|
2026-08-10 10:08:06 +10:00 |
|
|
|
17150c405d
|
ops: live SMS creds on .13; seed-admin cmd in make db-up (admin survives DB resets)
|
2026-08-10 10:07:29 +10:00 |
|
|
|
e1044f8c32
|
admin-insights-pages: dashboard customers+revenue (orders.amount), users->tags relation, pause customer (gates alerts), About/What-is-this/Contact pages
|
2026-08-10 09:19:14 +10:00 |
|
|
|
d80c08306c
|
openspec: admin-insights-pages change
|
2026-08-10 09:17:11 +10:00 |
|
|
|
426c99296d
|
auth: shared session cookie domain (SESSION_COOKIE_DOMAIN) so apex + www stay logged in
|
2026-08-08 15:23:40 +10:00 |
|
|
|
9349851bef
|
roadmap: phase 5 metering+location-link done; gateway/renewal/unlock next
|
2026-08-08 14:39:42 +10:00 |
|
|
|
5487cee966
|
sms-metering-location-link: per-tag SMS credits (allocated/used, admin top-up), short URLs + owner location page (map embed + finder details) — 13/13 scenarios
|
2026-08-08 14:38:32 +10:00 |
|
|
|
db1c358fe7
|
openspec: sms-metering-location-link change
|
2026-08-08 14:34:23 +10:00 |
|
|
|
27826c6d93
|
docs: product model + AUD pricing, SMS metering, location-link flow, variants, scope
|
2026-08-08 14:25:11 +10:00 |
|
|
|
b63374d23e
|
admin: sync MinIO disk config + Filament photo upload + flysystem dep back to repo
|
2026-08-08 10:01:24 +10:00 |
|
|
|
d5919315fa
|
photo-object-storage: MinIO on .13 (9010/9011), Go upload+serve /photos, admin S3 disk + Filament upload, migrated, deployed
|
2026-08-08 10:01:02 +10:00 |
|
|
|
61f16742ca
|
openspec: photo-object-storage change — MinIO on .13, Go upload/serve, admin S3 disk
|
2026-08-08 09:55:43 +10:00 |
|
|
|
87dcf4634a
|
roadmap: phase 5-lite (gating+limits) done, gateway deferred
|
2026-08-08 09:25:17 +10:00 |
|
|
|
3d242fdcaa
|
scan-limits-gating: paid-order gating + per-tag daily cap + per-IP hourly rate (6/6 scenarios) — no gateway
|
2026-08-08 09:25:06 +10:00 |
|
|
|
92ccf3d0f3
|
openspec: scan-limits-gating change — paid-order gating + daily/IP alert caps (no gateway)
|
2026-08-08 09:22:09 +10:00 |
|