Commit 1da0194
Day 8: Splash screen + license gate flow
Rust IPC commands:
LicenseResult, ExaminerProfile, DriveInfo structs
check_license() → returns dev pro license result (replaces stub)
activate_license(key) → accepts STRATA-* keys, returns Pro tier;
rejects others with "Invalid license key format" error
start_trial() → returns Trial tier with 30 days
get_examiner_profile() → returns empty profile (replaces stub)
save_examiner_profile(profile) → console-prints saved name
list_drives() → 2 mock drives: Macintosh HD (system, blocked) +
Wolfmark Systems Backup (931 GB external, permitted)
select_evidence_drive(id) → returns evidence path
TypeScript IPC:
Mirrored types and 7 functions (checkLicense, activateLicense,
startTrial, getExaminerProfile, saveExaminerProfile, listDrives,
selectEvidenceDrive). All wired with IN_TAURI fallbacks so the
full flow works in Vite preview.
Store additions:
AppGate type ('splash' | 'examiner' | 'drive' | 'main')
gate (default 'splash'), licenseResult, examinerProfile,
selectedDriveId, evidencePath, isDevMode (default true)
setGate, setLicenseResult, setExaminerProfile (also updates
examinerName), setSelectedDrive
Shared gate components:
GateBackground — full-screen radial-gradient wrapper
ChevronMark — extracted reusable SVG (Day 7's About-tab chevron)
DevSkip — bottom-left amber-bordered DEV SKIP button
SplashScreen (production):
Full-screen with radial gradient. Chevron 100x88, STRATA 52px
wordmark, tagline, version line. Animated entrance via gateFadeUp
+ gateFade keyframes (CSS animations: chevron up, then text rows
staggered 200/400/500/700/800ms). Centered divider gradient.
License key input (44px, monospace, validates) with error state
border. Start Trial button (white gradient, primary). Activate
License button switches style when key is typed. Footer
copyright. DEV SKIP advances to examiner gate.
ExaminerSetup:
480px card on gradient background. ID-card icon, title, subtitle.
4 form fields (Name/Agency/Badge required, Email optional) with
inline validation, red borders + error text on submit. Continue
button validates then saves profile + advances to drive gate.
Back link returns to splash. DEV SKIP fills dev values + advances.
DriveSelection:
520px card. Floppy icon, title, 2-line warning. Loads drives via
listDrives on mount. Each drive row: monitor/disc icon, name +
free/total GB, monospace mount path, red warning text + ✗ for
not-permitted, ✓ for selected. System drive non-clickable +
greyed out. Hover state for permitted drives. Refresh button.
Evidence path preview when drive selected. Begin Examination
button disabled until selection. Back link returns to examiner.
DEV SKIP picks Wolfmark drive + advances to main.
App.tsx:
Added gate routing — splash/examiner/drive return their respective
components, main returns the existing layout.
TopBar:
LicenseBadge component with Pro/Trial/None variants.
Case name now shows "{shortName} · {caseName}" when examiner
profile is set. shortName turns "Dev Examiner" → "D. Examiner".
CSS animations:
Added @Keyframes gateFade and gateFadeUp to index.css for the
splash screen entrance.
Verified in browser preview:
- Splash renders with chevron, STRATA wordmark, license card,
DEV SKIP visible
- DEV SKIP → Examiner Setup with 4 fields, ID icon, primary button
- DEV SKIP → Drive Selection with 2 drives (1 blocked, 1 selectable)
- Click Wolfmark drive → blue selection + ✓, evidence path preview,
Begin Examination button activates
- Click Begin Examination → Main workspace with case name
"D. Examiner · Unsaved Session"
- Zero console errors
Builds:
npm run build: 316 KB JS, 7.15 KB CSS, 52 modules — clean
cargo check: clean
cargo tauri build --no-bundle: 8.8 MB binary
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>1 parent e6664c1 commit 1da0194
43 files changed
Lines changed: 4055 additions & 873 deletions
File tree
- .github/workflows
- apps
- strata-desktop/src-tauri
- capabilities
- src
- strata-ui
- src
- assets
- components
- data
- ipc
- store
- themes
- views
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
0 commit comments