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

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
🎯

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

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

@base-ui/react not in deps

undefined

Port collision on dev server

undefined

Prerender error without force-dynamic

undefined

📱

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

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
🤝

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.

1
New product
30
Files committed
4
Screens built
6
Fake clients seeded
1
Design principle named
1
Deploy
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

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.