The card hid Start now until the roster filled or the deadline elapsed, preventing groups from starting early with fewer players. Expose the existing start action for every unfinished caller-owned call, including scheduled calls before check-in. Keep check-in controls and launch only after core acceptance. Add rendered-card regressions for six-of-eight players, solo and scheduled starts, creator authority, terminal states, and unavailable local games. Use installed React packages for these tests without rewriting the app lockfile, and document the caller's control over start time. Test Plan: - `just frontend-test` -- passed, 107 tests including 8 rendered-card tests - `just test` -- passed, 797 Rust tests - `just clippy` -- passed with warnings denied - `just fmt` -- passed - `deno task build` -- passed TypeScript and Vite production build - `git diff --cached --check` -- passed
SoftLAN Launcher — Design Handoff
This folder is the complete, current state of design for the SoftLAN Launcher. Everything an implementor needs to build the product is in here — and nothing that isn't. (The exploration mockups, logo concept boards, and variant studies live back in the project workspace; they're history, not handoff.)
Target codebase: Tauri + React desktop app. The references here are HTML/React prototypes that communicate the intended look, layout, and behavior — recreate them inside the codebase using its own patterns. They are not meant to be shipped as-is.
What's inside
design_handoff_softlan_launcher/
├── README.md ← you are here — start here
│
├── launcher/ ← THE APP
│ ├── SPEC.md full spec: every screen, component, token, interaction
│ └── design_reference/ the working prototype the spec describes
│ ├── SoftLAN Launcher.html open this to see all screens/variants
│ ├── styles.css
│ ├── data.jsx mock catalog + LAN peer roster + format helpers
│ ├── components.jsx Icon set, cards, modals, Settings dialog
│ ├── ctp-chat.jsx Call-to-Play chat panel + shared helpers
│ ├── calltoplay.jsx Call-to-Play: quick bars, overlay, create form
│ └── launcher.jsx composes chrome + grid + modals + Call to Play
│
└── logo/ ← THE BRAND MARK
├── INTEGRATION.md how to ship the logo (component + assets + lockup)
├── pixel-live.jsx the live animated "S" + Wordmark + Lockup components
├── demo.html open to see the mark animate + the lockup
└── assets/
├── softlan-mark.svg static S (currentColor)
├── softlan-mark-blue.svg static S (fixed blue)
├── softlan-tile.svg app-icon tile (gradient + white S)
├── softlan-lockup.svg full lockup (icon + wordmark), on dark
├── softlan-lockup-ink.svg full lockup, on light
└── favicon.svg = tile, drop-in favicon
Two pieces, one product
| launcher/ | logo/ | |
|---|---|---|
| What | The full launcher UI redesign | The brand mark + wordmark lockup |
| Read first | launcher/SPEC.md |
logo/INTEGRATION.md |
| Preview | open launcher/design_reference/SoftLAN Launcher.html |
open logo/demo.html |
| Fidelity | High — final colors/type/spacing/interactions | Final — recolors live via the accent token |
The two share one design language. The accent color is a single token
(--accent, default #3b82f6) that drives the launcher's primary actions and
the logo — wire it once and both follow. The brand mark in the launcher's top
bar (launcher/SPEC.md → "Top bar → Brand") is the logo component from
logo/pixel-live.jsx at size={28}; the static 28px "S" in the mock is a
placeholder for it.
Recommended reading order
- This file — the map.
launcher/SPEC.md— the bulk of the work. Screens, components, data shapes, design tokens, interactions, and what's out of scope. Start at "Screens / views" and keep the "Design tokens" section open alongside.logo/INTEGRATION.md— drop the live mark and the wordmark lockup into the chrome. Short; mostly a component API + static-asset reference.- Open both preview files in a browser to see the real thing in motion.
Status
- Launcher: high-fidelity, decisions locked. Variant A is the chosen
chrome. Includes Call to Play (rally the LAN around a game + time — live
or scheduled, with RSVP, check-in window, and per-call chat). Open questions
(empty/error states, logs viewer, keyboard grid nav, German strings, "server
running" state, real-time transport for Call to Play) are listed at the end of
SPEC.md. - Logo: final. Live component + static assets + horizontal lockup (dark and light) all included.
Do not ship the Babel-in-browser setup, the design-canvas wrappers, or the
Tweaks panel from the prototypes — they're presentation scaffolding. The Tweaks
panel is superseded by the in-app Settings dialog (spec'd in SPEC.md).