shell-a-flyout.htmlTwo shells. Pick one per product.
Every LMV product that needs an app, not an article, starts from one of two reusable dark-shell skeletons. Both were lifted out of real apps we already ship. You do not merge them. You look at the product, pick the one that fits, and build inside it. Same navy rail, same warm tokens, same grammar as the rest of this book, just turned toward software instead of newsprint.
Two reusable shells. Ship both, pick one per product.
Not a merge · Both billing-agnosticWe extracted two SaaS shells from two real LMV apps. The whole point is that they stay separate. You ship both into the toolkit and pick the one that fits the product you are building. A record-centric app gets the fly-out. A net-new product that wants the strongest foundation gets the primitive library. Trying to fuse them into one mega-shell is how you end up with a skeleton nobody wants to reuse.
The summary-to-detail move.
An 88px navy rail and a list of records. Click a row and a rich detail drawer flies in from the right edge while the list stays put. Built for products where people live in a list-then-detail loop.
The strongest foundation.
An 86px navy rail, a Cmd/Ctrl-K command palette, a full typed primitive library, and an auth seam that degrades to demo mode with no keys. Built for starting a new product on solid ground.
#123260, rust #c24c32, gold #e6bf4a, warm-white #fffaf0. Inter-led UI, Fraunces for headers, JetBrains Mono for meta. Sharp corners, no pills, no gradients, styled scrollbars. The token set was reconciled to one canonical layer during extraction, so there is no drift between the two.
A vs B
Source · Signature move · When to pickRead this top to bottom, decide once, then commit. The two shells share an anatomy but answer different questions. A is for products that already know their records. B is for products that are still finding their shape and want the richest starting kit.
Fly-out
Primitives
shell-b-primitives.htmllmc-* primitive layer, and the command palette, lifted straight out of the live app.Cmd/Ctrl-K palette over a clean typed library: buttons, inputs, select, switch, card, badges, tabs, segmented control, progress, empty states, plus a demo-mode auth seam.Option A · Fly-out
From lightbreak-v2 · Record-centricA live preview of the fly-out shell. The screen is an Issues list. Click any row and watch the detail drawer fly in from the right while the list holds its place. That single move is the whole reason this shell exists.
Option B · Primitives
From coaching-os · Strongest foundationA live preview of the primitives shell. Same navy rail, but the value is the command palette and the full typed primitive library underneath it. Hit the keyboard shortcut to summon the palette, then browse the components it ships with.
Billing is a future add-on module
Kept out on purposeNeither shell ships a plan, upgrade, or pricing screen, and that is deliberate. Billing is a future add-on module that bolts on when a product needs it. Kept out, the shell stays a clean, reusable skeleton you can sell or drop into the next product without ripping payment logic back out. Add the money layer when the product earns it, not before.
A clean reusable skeleton
- Billing-agnostic by designNo plan, upgrade, or pricing UI baked into either shell.
- One canonical token setNavy, rust, gold, warm-white, reconciled across both shells with no drift.
- Drop-in starting pointPick one, build the product inside it, keep the LMV grammar for free.
Not a finished product
- Not a merge of A and BYou pick one per product. Fusing them defeats the reuse.
- No payment logic to rip outBilling arrives later as a module, never wired into the skeleton.
- Not the place for pricing pagesThe money layer is a separate, opt-in surface added when earned.