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 = ...)
This commit is contained in:
2026-09-01 12:53:53 +10:00
parent aabaa750f4
commit 2a101e9a62
9 changed files with 223 additions and 3 deletions

View File

@@ -40,9 +40,25 @@
</div>
</div>
</nav>
<!-- Promo banner: consistent across every page -> order page -->
<div class="bg-red-600 text-white">
<a href="/order" class="mx-auto flex max-w-4xl items-center justify-center gap-2 px-4 py-2.5 text-center text-sm font-bold tracking-wide hover:bg-red-500">
<span>🛡️ Protect &amp; recover your valuables</span>
<span class="rounded bg-white px-2 py-0.5 text-xs font-extrabold text-red-600">ORDER NOW — tags from $5</span>
</a>
</div>
<main class="mx-auto max-w-4xl px-4 py-8">
{{template "content" .}}
</main>
<footer class="border-t border-stone-200 py-6">
<div class="mx-auto flex max-w-4xl flex-wrap items-center justify-center gap-x-6 gap-y-2 px-4 text-sm text-stone-500">
<a href="/order" class="font-semibold text-red-600 hover:underline">🛡️ Order tags — from $5</a>
<a href="/about" class="hover:underline">About</a>
<a href="/what-is-this" class="hover:underline">What is this?</a>
<a href="/contact" class="hover:underline">Get in touch</a>
<span>🐕 Where Woof — every item deserves a way home</span>
</div>
</footer>
</body>
</html>
{{end}}

View File

@@ -2,10 +2,47 @@
<div class="mx-auto max-w-2xl">
<h1 class="text-3xl font-extrabold tracking-tight">Get in touch</h1>
<p class="mt-4 text-stone-700">Questions, lost-tag help, or bulk orders? We'd love to hear from you.</p>
{{if .Data.Sent}}
<div class="mt-6 rounded-xl border border-green-200 bg-green-50 p-6 text-center shadow-sm">
<div class="text-4xl">📨</div>
<h2 class="mt-2 text-lg font-bold text-green-800">Message sent!</h2>
<p class="mt-1 text-green-700">Thanks for reaching out — we'll get back to you shortly (usually within a day).</p>
</div>
{{else}}
<div class="mt-6 rounded-xl border border-stone-200 bg-white p-6 shadow-sm">
{{if .Data.Error}}
<p class="mb-4 rounded border border-red-200 bg-red-50 px-4 py-2 text-sm text-red-700">{{.Data.Error}}</p>
{{end}}
<form method="post" action="/contact" class="space-y-4">
<div class="grid gap-4 sm:grid-cols-2">
<div>
<label class="block text-sm font-semibold text-stone-700" for="name">Your name</label>
<input id="name" name="name" required class="mt-1 w-full rounded-lg border border-stone-300 px-3 py-2 text-sm focus:border-amber-500 focus:outline-none" placeholder="Jane Smith">
</div>
<div>
<label class="block text-sm font-semibold text-stone-700" for="email">Your email</label>
<input id="email" name="email" type="email" required class="mt-1 w-full rounded-lg border border-stone-300 px-3 py-2 text-sm focus:border-amber-500 focus:outline-none" placeholder="you@example.com">
</div>
</div>
<div>
<label class="block text-sm font-semibold text-stone-700" for="subject">Subject</label>
<input id="subject" name="subject" class="mt-1 w-full rounded-lg border border-stone-300 px-3 py-2 text-sm focus:border-amber-500 focus:outline-none" placeholder="Bulk order for a park / trail">
</div>
<div>
<label class="block text-sm font-semibold text-stone-700" for="message">Message</label>
<textarea id="message" name="message" required rows="5" class="mt-1 w-full rounded-lg border border-stone-300 px-3 py-2 text-sm focus:border-amber-500 focus:outline-none" placeholder="Tell us what you need…"></textarea>
</div>
<button type="submit" class="rounded-full bg-stone-900 px-6 py-2.5 text-sm font-bold text-white hover:bg-stone-700">Send message</button>
</form>
</div>
{{end}}
<div class="mt-6 space-y-3 rounded-xl border border-stone-200 bg-white p-6 text-sm shadow-sm">
<p><strong>Email:</strong> <a href="mailto:info@where-woof.com" class="text-amber-600 hover:underline">info@where-woof.com</a></p>
<p><strong>Email:</strong> <a href="mailto:hello@where-woof.com" class="text-amber-600 hover:underline">hello@where-woof.com</a></p>
<p><strong>Website:</strong> <a href="/" class="text-amber-600 hover:underline">where-woof.com</a></p>
<p><strong>Order tags:</strong> <a href="/order" class="text-amber-600 hover:underline">yeah, take my money</a> — from $5 + GST.</p>
<p class="text-stone-500">For bulk tags (parks, trails, campgrounds) mention your use case and volume.</p>
</div>
</div>
{{end}}
{{end}}

View File

@@ -0,0 +1,60 @@
{{define "content"}}
<div class="mx-auto max-w-3xl">
{{if .Data.Thanks}}
<div class="mb-6 rounded-xl border border-green-200 bg-green-50 p-6 text-center shadow-sm">
<div class="text-4xl">✅</div>
<h2 class="mt-2 text-xl font-bold text-green-800">Thanks for your order!</h2>
<p class="mt-1 text-green-700">We've received your payment and will ship your tags soon. Watch your inbox for the email from <strong>hello@where-woof.com</strong> with activation details.</p>
</div>
{{end}}
<h1 class="text-3xl font-extrabold tracking-tight">Order tags</h1>
<p class="mt-2 text-stone-700">Stick a Where Woof tag on anything you don't want to lose — a dog collar, a school bag, ski gear, a toolbox. If it's found, whoever finds it scans the tag and you get an SMS with its location, instantly.</p>
<div class="mt-8 grid gap-6 sm:grid-cols-2">
<!-- Single tag -->
<div class="flex flex-col rounded-2xl border border-stone-200 bg-white p-6 shadow-sm">
<div class="text-4xl">🏷️</div>
<h2 class="mt-3 text-xl font-bold">Single tag</h2>
<p class="mt-1 text-sm text-stone-600">One tag for one item. Plastic laminate, QR + NFC.</p>
<p class="mt-4 text-2xl font-extrabold">$5.00 <span class="text-sm font-normal text-stone-500">+ GST ($5.50)</span></p>
<p class="mt-1 text-xs text-stone-500">+ $10/yr subscription (50 SMS alerts included)</p>
<div class="mt-auto pt-5">
<a href="{{.Data.SingleLink}}" class="block rounded-full bg-stone-900 px-5 py-3 text-center font-bold text-white hover:bg-stone-700">
Order now
</a>
<p class="mt-2 text-center text-xs text-stone-500">Need 2, 3 … 7? Pick the quantity at checkout (up to 25).</p>
</div>
</div>
<!-- 10-pack -->
<div class="flex flex-col rounded-2xl border-2 border-red-600 bg-white p-6 shadow-sm">
<div class="flex items-center justify-between">
<div class="text-4xl">🎒🐾</div>
<span class="rounded-full bg-red-600 px-2.5 py-1 text-xs font-extrabold text-white">BEST VALUE</span>
</div>
<h2 class="mt-3 text-xl font-bold">10-pack</h2>
<p class="mt-1 text-sm text-stone-600">Tag the whole family — collars, bags, keys, skis.</p>
<p class="mt-4 text-2xl font-extrabold">$20.00 <span class="text-sm font-normal text-stone-500">+ GST ($22.00)</span></p>
<p class="mt-1 text-xs text-stone-500">$2 per tag · + $10/yr subscription (50 SMS alerts included)</p>
<div class="mt-auto pt-5">
<a href="{{.Data.PackLink}}" class="block rounded-full bg-red-600 px-5 py-3 text-center font-bold text-white hover:bg-red-500">
Order the 10-pack
</a>
<p class="mt-2 text-center text-xs text-stone-500">Up to 2 packs per account (20 tags, fits the 25-tag limit).</p>
</div>
</div>
</div>
<div class="mt-8 rounded-xl border border-stone-200 bg-white p-6 text-sm shadow-sm">
<h3 class="font-bold">How it works</h3>
<ol class="mt-2 list-decimal space-y-1 pl-5 text-stone-700">
<li>Order your tags — they arrive ready to scan (QR + NFC).</li>
<li>When they arrive, create a free account and add each tag.</li>
<li>Set the item's name and your phone number.</li>
<li>If it's ever lost and found, you get an SMS with a map link — instantly.</li>
</ol>
<p class="mt-3 text-stone-500">Questions? <a href="/contact" class="text-amber-600 hover:underline">Get in touch</a> — hello@where-woof.com</p>
</div>
</div>
{{end}}