Basefox

Overnight build · iOS app (codename Larch)
Aug 24, 2026 · morning briefing

The iOS app is built and running on an iPhone 16 Pro simulator — every one of the five spec screens, driven by a hand-authored dataset that stands in for the pipeline until it ships. Tonight I took it from a working skeleton to something with a face: real typefaces, a copper fox mark, frictionless search, and a full visual polish pass. 14 tests green

Open it in Xcode

The project is generated from project.yml via XcodeGen. From the repo:

# from Basefox/app
xcodegen generate
open Larch.xcodeproj  # run on any iOS 17+ simulator (⌘R)

Bundle ID com.larch.ios · display name Basefox. Source of truth is basefox-spec-v03.md. Build/run notes in app/README.md.

What I built tonight

Identity

Copper fox mark + app icon

One shared geometry drives the in-app mark and a generated 1024px icon — fox on ink, warm not tacticool.

Type

The three real typefaces

Space Grotesk, Barlow, Spline Sans Mono bundled & registered. Variable faces driven by their weight axis.

Flow

Frictionless live search

Results the moment you type — brands, categories, occasions, grouped, each with its best discount.

Honesty

“Coming soon” affordances

The deferred community write-path renders as real, self-explaining controls — never a silent dead button.

Feel

Tactile polish

Press-scale on every card, navigation haptics, instant content on launch (no splash flicker).

Confidence

14 unit tests

Ranking, staleness, eligibility, verified-negative, tax-free valuation, search order, deep-link builder.

The screens

Home — fox mark, live exchange ticker, The Reveille
Home — fox mark, live exchange ticker, The Reveille
Route board — every door, best route highlighted
Route board — every door, best route highlighted
Live search — grouped results as you type
Live search — grouped results as you type
Eligibility — dimmed exception, plain-language line
Eligibility — dimmed exception, plain-language line

Also live in the app (drive them by tapping): the category board with sort chips + the Foxhole section, the occasion board (Back to School) with baskets and a timing banner, the verified-negative brand view (“no discount anywhere — we checked”), and the profile sheet with the tax-math widget.

The mark

Basefox app icon

The fox on base — clever on your behalf, the one who knows where everything is. Geometry is shared between the icon and the in-app header mark, so they can never drift. Accent #DE5527 on ink #20242B.

Every spec rule, verified running

Decisions & open questions

flag  The v3 mockup (checkpoint-v3.html) isn’t in the repo. I built to the written design tokens in the spec — exact palette, the three fonts, 12pt radii, hairlines. I can’t claim pixel-fidelity to a mockup I don’t have. If you drop it in, I’ll reconcile.

flag  The tax widget uses one “best discount” across the whole catalog, not per-category. Fine for a demo; worth revisiting once the dataset is large.

Deliberately deferred (per spec): remote fetch is wired but dormant (DataStore.remoteURL is nil until the pipeline publishes); dark mode skipped in v0; community write-path, push, and accounts are Phase 2. Codename Larch keeps “Basefox” to display strings only, so renames stay cheap.

Where we could go next

Basefox · codename Larch · SwiftUI + Observation, iOS 17+ · built overnight Aug 24, 2026. Confidence this is a strong, explorable v0 foundation: 86 / 100 — deductions for no mockup to check against and the pre-pipeline sample data.