Leashline UX + Architecture

ForgeKit · June 18, 2026 · Leashline · Architecture

Full route UX overhaul. Sally's five edge cases handled. First deploy to leashline.forgekits.build. Rail + Rounds engines named. Armory splits into two catalogs.

Start
Route UX: 'On my way' → 'Start visit'
Tappable phone, address, access notes
1h
Finish panel + Issue workflow built
Editable SMS draft, 7 issue chips, log or text owner
2h
Running late + injury chip + badges
Unpaid + Watch reliability, pre-written lateness text
3h
Leashline brand applied
Nunito Sans, full token set, real SVG logo, favicon, OG, PWA
4h
GitHub + Vercel deploy
leashline.forgekits.build live, Jungebez/leashline repo created
End
Rail + Rounds named, Armory split documented
PROJECT_INDEX + forge-platform + armory.md all updated
Route UX — renamed 'On my way' to 'Start visit' / 'In progress' badge
Tappable phone (tel:) and address (Google Maps) on visit cards and clients page
Access notes tap-to-copy with clipboard confirmation
Finish visit inline panel — editable SMS draft, optional soft note toggle, skip text option
Issue workflow — 7 quick chips, free-text note, log + text owner or log only
Running late button — pre-written lateness text, logs to change_log
Injury chip surfaces vet note + emergency contact inline
Unpaid + Watch reliability badges on individual visit cards
Leashline brand — Nunito Sans, full brand token set, real SVG logo in sidebar/mobile header
Favicon, apple-touch-icon, OG image, PWA theme-color wired into layout.tsx
GitHub repo created (Jungebez/leashline), connected to Vercel, deployed to leashline.forgekits.build
PROJECT_INDEX, docs/forge-platform.md, docs/armory.md — all updated with Rail+Rounds framing
SMS chip label leaked into message body
15 min
Separate chip label from the draft string — chip selects a category, draft is built independently
Brand assets took multiple rounds to apply consistently
20 min
Build brand drop-in package format: CLAUDE_PROMPT.txt + brand-tokens.json + organized SVG/PNG folder
Rail vs Rounds rule: if clients come to the operator → Rail. If operator goes to client → Rounds. This cleanly separates vet clinic (Rail) from mobile vet (Rounds), insurance agent (Rail) from house cleaner (Rounds).
Forge and Leashline are sibling products, not parent/child. They serve different operator types with fundamentally different UX shapes.
The Armory splits into two catalogs — Rail configs for Forge, Rounds configs for Leashline. The six Forge capabilities don't apply to Leashline.
Leashline brand stays Leashline permanently — 'Forge for Pet Sitters' is positioning, not UI.
Inline action panels (no modal, no navigation) work one-handed and feel native on mobile. This is the right pattern for route-based apps.

Inline action panel (finish/issue)

Expand a card in-place to show an action panel with editable content and 2-button confirmation. No modal, no navigation. Works one-handed.

SMS draft builder

Build pre-written text from visit metadata (pet, service type, note). Open via sms: link. User edits and sends natively.

Quick chip selector

Pill buttons for categorical selection. One selection at a time, tap to deselect. Used for issue categorization.

Tap-to-copy with confirmation

Inline button copies to clipboard and shows a checkmark for 1.8s. No toast needed.

Server action + client state machine

Visit card manages local status state optimistically. Server action persists to DB. revalidatePath syncs on next navigation.

Brand drop-in package format

Brand assets delivered as a folder with CLAUDE_PROMPT.txt, brand-tokens.json, and organized SVG/PNG files. Drop into public/, follow the prompt.

1

Rail vs Rounds: operator direction determines the engine

Clients come to operator → Rail. Operator goes to client → Rounds. Use this to assign any new vertical without debate.

2

SMS chip label must be separate from draft string

Chip selects a category. The draft is built from visit metadata, not from the chip label. Never concatenate UI copy into message bodies.

3

Brand drop-in package format

Deliver brand assets as: CLAUDE_PROMPT.txt + brand-tokens.json + organized SVG/PNG. Drop into public/. Claude applies it. Repeatable across all apps.

9
UX improvements
2
Named engines
5
Rounds configs sketched
6
Reusable patterns
1
Live deploy

Name the engine. Then every new vertical is just a config.

Architecture insight — June 18
Next

Forge Phase 0 for Gino — Contractor CRM, Gino's Electric, Medina OH. This is the 30-day revenue target.

Website

Update homepage: Rail + Rounds + 4 products — Homepage needs to reflect the engine naming and full product lineup.

Phase 1

Leashline — add/edit client, pet, visit flows — Katie needs these for real usage. Cancel/reschedule with open slot detection.