# Canaveral: Bun TanStack Start launch pad — web, Electron, Expo, Caddy

Source: https://www.michaelchurley.com/blog/canaveral-bun-tanstack-start-web-desktop-mobile-caddy  
Published: 2026-05-14  
Author: Michael C. Hurley  
Tags: canaveral, tanstack-start, tanstack-router, bun, monorepo, caddy, localhost, electron, expo, clerk, convex, stripe, resend, sentry, posthog, biome, tsgo, freview, fallow, blacksmith, hurleyus

## Who

I keep starting the same product spine: TanStack Start web, Electron shell, Expo screen, shared Zod/forms/state, Clerk–Convex–Stripe–Resend–Sentry–PostHog wiring, then re-deriving Caddy HTTPS and the lint gate.

For operators who want that monorepo launch pad as one private repo. An empty hustlestack husk is the wrong clone.

## What

I built **Canaveral**, private https://github.com/HurleyUS/canaveral. HEAD `df2c041`. **11** commits. Version **0.1.0**. Bun **1.3.1** workspaces: web (TanStack Start), desktop (Electron), mobile (Expo), pub, shared/*.

![Workspace map](/blog/canaveral-bun-tanstack-start-web-desktop-mobile-caddy/screenshots/workspace-map.png)

Starter home: waitlist (RHF+Zod client parse), launch checklist (Zustand), Test Resend/Stripe via createServerFn. Lazy Clerk when key present. Caddy in-repo: `https://canaveral.localhost` port **5337**.

![Caddy localhost](/blog/canaveral-bun-tanstack-start-web-desktop-mobile-caddy/screenshots/caddy-localhost.png)

house-checks ban any/unknown and useEffect/useState. gate.mts runs ten checks including ~/bin/freview. Blacksmith CI ends with freview --ci. REVIEW.md 1003 lines / six sections.

![Gate + freview](/blog/canaveral-bun-tanstack-start-web-desktop-mobile-caddy/screenshots/gate-freview.png)

Gaps: package.json lint is oxlint-only while AGENTS.md sells Biome to house to freview; five OPEN manifesto issues still want loaders/useActionState/hydration fixes.

## Where

Code: [github.com/HurleyUS/canaveral](https://github.com/HurleyUS/canaveral), private. No public deploy.

```bash
bun install && cp .env.example .env && bun run env:check && bun run dev
# https://canaveral.localhost (Vite :5337 behind Caddy)
```

## When

**2026-05-04.** init (+6074).

**2026-05-14.** Blacksmith×7 + FReview RN observability + formatter. HEAD df2c041.

**2026-06-09.** five manifesto issues (still OPEN).

**2026-06-18.** queue pushed_at.

![Commit arc](/blog/canaveral-bun-tanstack-start-web-desktop-mobile-caddy/screenshots/commit-arc.png)

## Why

A launch pad should know its localhost slug, env contract, and which gates fail before the first feature branch.

**Engagement Q:** Web + desktop + mobile on day one. Wire Caddy HTTPS, freview, or Convex SSR loaders first?
