Deadline completion previously shared the green Ready presentation with a full roster and remained visible forever. An abandoned call therefore looked ready to launch and required its creator to return and cancel it. Give elapsed calls a distinct Time's up state and a five-minute grace period in which the creator can start or extend them. After that, both the reducer and peer store remove the call as a unit. Filled calls remain ready until their deadline, and active calls continue to retain complete history for late joiners. Test Plan: - `just fmt` -- passed - `just clippy` -- passed - `just test` -- passed, 147 peer tests - `just frontend-test` -- passed, 22 tests - `just build` -- passed - `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).