Leashline v1
ForgeKit · June 18, 2026 · Leashline · NewProduct · Website
ShowUp parked. Leashline born. Full v0.1 scaffold built in one session — database, seed data, Today's Route screen, Clients, Schedule, Clerk auth, deployed. The about page got a new philosophy section. The ForgeKit family has a third product.
Chapter 1
Product Decision
ShowUp parked → Leashline committed
Chapter 2
Build
Full scaffold · schema · seed · 4 screens
Chapter 3
Design Principle
AI prepares · humans deliver
Chapter 1
The Product Decision
What Shipped
ShowUp Parked
- Market saturated — Square, GlossGenius, Fresha already bundle reminders
- No clear distribution path without Zeb's network
- Parked, not killed — revisit if sales friend finds an opening
- Memory updated: project_showup.md status → PARKED
Leashline Committed
- Seed customer: Katie, Zeb's neighbor, solo pet sitter/dog walker
- Positioning: 'Don't lose the route'
- Not a no-show app — a route-and-proof tool for solo sitters
- Product family: Forge (lead) · PilotLight (workflow) · Leashline (route)
- memory/project_leashline.md written
What Worked Well
🎯
Seed customer beats market research
The drum teacher proved the product logic. Katie proved the customer. Having a real person 50 feet away who runs a real business out of iMessage is worth more than any market analysis. Build for Katie, let her sand it down with reality.
🚫
Knowing when NOT to build is a product decision
ShowUp was a good idea that ran into a crowded market and no clear distribution path. Parking it instead of building it saved a session of wasted effort. The right call is often 'not yet' — not 'never.'
Chapter 2
Leashline v0.1 — Built
What Shipped
App Scaffold
- Next.js 16, Tailwind 4, Drizzle/Neon, Clerk auth — same stack as Forge
- Warm earthy brand palette: leash-green, amber, cream, bark
- Mobile-first layout — Katie checks this with a dog on a leash
- Dark sidebar nav (desktop) + bottom nav (mobile)
Database Schema
- clients — name, phone, address, payment status, reliability score
- pets — feeding, meds, access notes, vet, emergency contact
- visits — date, time, service type, status enum, recurring, internal note
- changeLog — audit trail for cancellations, adds, time changes
Today's Route Screen
- Heart of the app — one screen, one job
- Visit cards: time, pet emoji, breed, address, care notes, access notes
- Internal notes flagged in amber
- Status actions: On my way → Done → Issue / Cancel
- Tomorrow preview banner at bottom
- Unpaid clients surfaced inline
SMS Draft Flow
- 'Done' marks visit complete, opens native SMS app with pre-drafted message
- Katie reads it, adds her words + photo, sends from her own number
- AI prepared it. Katie delivered it.
- Button says 'Text Sarah' (first name) — not 'Text owner'
Clients & Pets Page
- All clients with pet profiles, care notes, meds in amber
- Reliability badge: Reliable / Watch / Flaky
- Payment status per client
Schedule Page
- 7-day view with visit counts per day
- Status dots: upcoming / on the way / done / issue / canceled
- Today badge
Seed Data
- 5 clients on Elmwood Dr, Maple Creek Ln, Brookfield Ct — real Medina street feel
- 6 pets: Bella, Rocky, Mochi, Duke, Peanut, Chester
- Real care notes, access codes, meds, recurring schedules
- Today + tomorrow visits pre-loaded
Clerk + Neon Wired
- clerk init linked to app_3FJMrhiM8I5H9y1kvLMghRWjRwo
- proxy.ts with /__clerk/:path* matcher
- db:push + db:seed both run clean
Where We Spun
@base-ui/react not in deps
undefined
Port collision on dev server
undefined
Prerender error without force-dynamic
undefined
What Worked Well
📱
SMS deep-link is the right pattern for relationship-first apps
Instead of auto-sending a text, the 'Done' button opens Katie's native SMS with a pre-drafted message. She reads it, personalizes it, adds a photo, and sends from her real number. The AI did the boring part. Katie delivered the relationship. This is the right model for any app where the human's voice IS the product.
🌱
Fake seed data with real texture beats placeholder data
Naming the pets Bella, Rocky, Mochi, Duke, Peanut, Chester — with real feeding instructions, real Medina addresses, and real care notes — makes the app feel lived-in immediately. When you demo it, it looks like a real business. That's what closes.
🔁
Same stack = faster second product
Because Leashline uses the exact same stack as Forge (Next.js 16, Tailwind 4, Drizzle, Neon, Clerk), the scaffold took one session. No new tools to learn, no new deployment patterns, no new auth flows. ForgeKit compounding in practice.
Chapter 3
The Design Principle
What Shipped
AI/Human Balance Rule
- Named and saved to memory: feedback_human_ai_balance.md
- Rule: match automation level to the user's relationship with their customers
- Katie (relationship-first): AI drafts, human sends
- Gino (outcome-first): auto-send is a feature, not a shortcut
- Applied immediately to Leashline SMS flow
About Page — Philosophy Section
- New section: 'AI that works behind the scenes, not in front of the relationship.'
- Sally + contractor + instructor as concrete examples
- Removed redundant values section (4 cards → covered elsewhere)
- Removed redundant products section (listed on homepage)
- About page is now tighter and more opinionated
What Worked Well
🤝
The best design principles come from real users
The 'AI prepares, humans deliver' rule came directly from thinking about Katie — someone who loves animals and whose personal warmth IS her competitive advantage. Designing for her revealed a principle that now applies across all ForgeKit products. That's why seed customers matter.
✂️
Cutting sections makes pages stronger
The about page had a values section and a products section that both existed elsewhere on the site. Removing them made the page faster to read and more distinctive. The question 'what does this add that isn't already here?' should be asked about every section on every page.
Rules Added to Playbook
1
Add export const dynamic = 'force-dynamic' to any page with DB reads
Next.js will try to statically prerender pages at build time. If the page hits a database, it fails. Add this export at the top of any server component that queries the DB — do it first, not after the build fails.
2
Check installed deps before copying components from another app
Forge uses @base-ui/react. Leashline doesn't. Copying a Forge component verbatim caused an immediate build failure. Before copying any component, check what it imports and whether those packages exist in the destination project.
3
Know what's running on port 3000 before launching a dev server
Multiple apps running simultaneously land on different ports and cause confusion. Before starting a new dev server, check what's already running (netstat -ano | findstr :300x) so you know where to find the app.
4
Match automation level to the user's relationship with their customers
Auto-send is right for Gino (volume, transactional). Draft-and-send is right for Katie (personal, relationship-driven). Before wiring any outbound communication, ask: does this user's value come from the relationship, or from the outcome? Design the default accordingly.
5
Seed data with real texture — names, addresses, notes that feel lived-in
Placeholder data makes demos feel fake. Real-feeling seed data (Medina street names, actual pet breeds, real feeding instructions) makes the app feel like a going concern. The demo is part of the product.
AI prepared it. Katie delivered it. That's the whole principle.
Design session · Leashline · Medina OH · 2026-06-18
Next Session — Start Here
Open Items
UX
Leashline UX pass — next session — App is functional but unstyled beyond basics. Next session: full UX pass on Today's Route screen. Mobile feel, card polish, status button sizing, typography, color. Design it like Katie is going to show it to a client.
Feature
Add visit to existing client flow — Currently no way to add a visit through the UI — only via seed data. Need a simple 'Add visit' action on the route or schedule page.
Feature
Add client + pet form — No way to add a new client or pet through the UI. Needed before Katie can actually use this for real clients.
Discovery
Talk to Katie — 15 minutes — Six questions: how do clients book, what do they text most, what falls through the cracks, do you have a waitlist, how do you handle cancellations, what would make tomorrow easier. Her answers reshape the MVP.