451 Commits

Author SHA1 Message Date
itsrubberduck
c680bd4dfa preview 2026-02-22 16:39:10 +01:00
itsrubberduck
0a8e63821a feat(classroom): finish expansion with emergency tracks and decision mode 2026-02-15 18:30:18 +01:00
itsrubberduck
eb37d201de docs: add remaining TODOs, decisions & lessons learned for classroom expansion
Captures all open tasks (Emergency modules, Decision Mode engine,
ATC Perspective, unlock system), key design decisions, implementation
lessons learned, and ICAO conformity notes from the planning session.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 15:16:11 +01:00
itsrubberduck
e40e171603 feat(classroom): add Abnormal Comms module (8 lessons)
Lessons: Conditional Runway Crossing, Complex Holding Pattern, Amended
Departure Clearance, Speed Then Altitude, Immediate Traffic Avoidance,
Multiple STAR Crossing Restrictions, TCAS RA Override, Late Runway
Change on Approach. All ICAO-standard phraseology with multiple fields.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 15:10:00 +01:00
itsrubberduck
aac357cf38 fix(classroom): improve VATSIM Essentials lessons
Radio Check: remove readability field (pilot can't know it before
controller responds), focus on initiating the check call.
Say Again: make expected answer concrete ("all before [SID]") instead
of subjective, improve hints to guide the answer.
Monitor vs Contact: simplify by replacing huge initial-call field with
a yes/no "do you transmit?" field.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 15:06:40 +01:00
itsrubberduck
8b20dc9131 feat(classroom): add VATSIM Essentials module (6 lessons) in Abnormal track
Lessons: Unicom Blind Call, Radio Check & Readability, Say Again
(Targeted), Monitor vs Contact, Two-Step Frequency Change, ATIS
Update During Taxi. All with multiple meaningful fields and
ICAO-standard phraseology.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 10:51:36 +01:00
itsrubberduck
c6e60fc88d feat(classroom): extend Scenario with emergency/abnormal fields
Adds soulsOnBoard, fuelMinutes, positionDescription, holding pattern
data (fix, inbound, turn, legTime, EFC), and crossing restriction
data (two fixes with altitudes and restriction types) to the
scenario generator.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 10:49:41 +01:00
itsrubberduck
f76c7452b6 feat(classroom): render Hub with track sections instead of flat module list
Hub now imports learnTracks and renders modules grouped by track with
track title, subtitle, and aggregate progress bar. modules computed
is derived from tracks.flatMap for backward compat with search/progress.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 10:48:47 +01:00
itsrubberduck
02d9d48dae feat(classroom): add TrackDef type and wrap existing modules into core track
Adds TrackDef type to shared/learn/types.ts and creates learnTracks
export in learnModules.ts with existing 4 modules grouped under
'Core Flight Missions' track. Backward compatible — learnModules
flat array still exported.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 10:46:57 +01:00
itsrubberduck
3449f1289b Add classroom expansion implementation plan (15 tasks, 8 phases)
Phased plan covering Track system, VATSIM Essentials, Abnormal Comms,
Emergency Basics/Scenarios, Decision Mode engine, and ATC Perspective
modules. Each phase independently deployable.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 10:43:56 +01:00
itsrubberduck
c23a78147e Add classroom expansion design doc — new training tracks
Introduces Track-based hub architecture with 3 tracks:
- Core Flight Missions (existing modules, regrouped)
- Abnormal & Emergency Missions (VATSIM Essentials, Abnormal Comms, Emergency Basics, Emergency Scenarios)
- ATC Perspective Missions (Controller Workflow, Think Like ATC, Reverse Sim with new Decision Mode exercise engine)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 10:39:40 +01:00
itsrubberduck
5a25e212d7 fix(classroom): audio speed slider now actually changes playback speed with pitch correction
- Fix client: playbackRate was set to 1 for non-native-speed providers (Speaches/Piper),
  making the speed slider ineffective in the main Pizzicato audio path
- Fix server: pass speed parameter to Speaches TTS API
- Add pitch-preserving playback via MediaElementSourceNode when rate != 1,
  routing through the same Web Audio effects chain (radio filters, distortion, etc.)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-15 01:01:02 +01:00
itsrubberduck
ea51e1dcc3 feat(classroom): integrate user feedback — audio speed, METAR TTS, phonetics, UI fixes
- Lower default audio speed to 0.85x, extend slider range to 0.5-1.3x
- Add METAR normalization for intelligible TTS (wind, vis, clouds, temp, QNH)
- Expand SID/STAR suffix regex to handle spaces (SUGOL 2S)
- Add approach suffix phonetic expansion (ILS 08R Y → Yankee)
- Fix "Soll:" → "Expected:" in readback feedback
- Accept numeric values for pushback delay field
- Add news article documenting the changes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 14:21:35 +01:00
itsrubberduck
04b2ec1e4f Add classroom feedback implementation plan
6 tasks covering audio speed, UI fixes, phonetics, and METAR normalization.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 14:08:43 +01:00
itsrubberduck
d866404490 Add classroom feedback integration design doc
Documents all user feedback issues and planned fixes for audio speed,
METAR normalization, phonetics, and UI text.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 14:06:44 +01:00
itsrubberduck
77ecd49334 feat(flightlab): sidebar, progress bars, skip speech, SimBridge telemetry & auth
- Add collapsible sidebar with phase stepper (jump between phases)
- Add SimBridge conditions panel in sidebar (live values, progress bars, targets)
- Add global progress bar (top edge, glowing) + phase-local TTS progress bar
- Add skip button to skip TTS speech while ATC is speaking
- Add skipSpeech() to audio composable (stops current Pizzicato sound)
- Wire up bridge data.post.ts with user auth (JWT) + example payload
- Add server-side telemetry store with pub/sub for Bridge→WS relay
- Extend WS handler with subscribe-telemetry message + userId tracking
- Extend sync composable with subscribeTelemetry() + onTelemetry() callback
- Add require-auth middleware to all flightlab pages
- Fix instructor station ECONNREFUSED via import.meta.client guard
- Add animations: phase transitions, button lists, fade-scale, check-pop, pulse

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-14 10:14:33 +01:00
itsrubberduck
2efa24f7f5 umalute fixen 2026-02-13 18:49:56 +01:00
itsrubberduck
a915af4398 dont log users id on transmission 2026-02-13 18:44:34 +01:00
itsrubberduck
b73746d843 fix(flightlab): use ~~ alias for shared imports instead of relative paths
Vite cannot resolve ~/../../shared - use ~~/shared which maps to project root.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 18:08:21 +01:00
itsrubberduck
25378db177 fix(flightlab): resolve TypeScript strict null checks in engine composable
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 18:01:05 +01:00
itsrubberduck
61811d0804 feat(flightlab): add audio directory with README for cockpit sound effects
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 14:49:15 +01:00
itsrubberduck
494acdc8c5 feat(flightlab): add instructor control panel with full scenario control
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 14:48:58 +01:00
itsrubberduck
ef382cadbe feat(flightlab): add participant view with scripted phases, TTS, and session sync
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 14:47:41 +01:00
itsrubberduck
28ef1b8ba8 feat(flightlab): add landing page with scenario selection grid
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 14:46:38 +01:00
itsrubberduck
9923cbbd5d feat(flightlab): add WebSocket sync composable for instructor-participant sessions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 14:45:45 +01:00
itsrubberduck
fad56ee28d feat(flightlab): add WebSocket handler for instructor-participant session sync
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 14:45:18 +01:00
itsrubberduck
4696885f8b feat(flightlab): add audio composable with TTS radio effects and ambient cockpit sounds
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 14:44:33 +01:00
itsrubberduck
ea878662f8 feat(flightlab): add scenario engine composable with phase navigation and progress tracking
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 14:23:32 +01:00
itsrubberduck
f778f60ac9 feat(flightlab): add complete takeoff EDDF scenario with all phases and comfort branches
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 14:23:05 +01:00
itsrubberduck
e8b36177ed feat(flightlab): add type definitions for FlightLab scenario engine
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 14:20:26 +01:00
itsrubberduck
db715aeddf chore: add .worktrees to gitignore 2026-02-13 14:18:29 +01:00
itsrubberduck
6c18e07cd9 feat(flightlab): add detailed implementation plan with 11 tasks
Covers types, scenario data, engine/audio/sync composables,
WebSocket server, participant/instructor pages, and integration testing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 14:12:27 +01:00
itsrubberduck
79ddefd612 Add FlightLab takeoff experience design document
Design for guided A320 takeoff scenario targeting people with flight
anxiety. Covers scripted phases, WebSocket instructor sync, audio
pipeline, and tablet-optimized UI.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 14:03:13 +01:00
itsrubberduck
fa8ebbf2fa fix pm 2026-02-13 08:50:59 +01:00
itsrubberduck
d90b494334 fix pm 2026-02-13 08:50:02 +01:00
Remi
ff6c546163 Translate unsubscribe page to English 2025-11-21 00:09:51 +01:00
Remi
93fed93d41 Add unsubscribe endpoint and email footers 2025-11-20 23:29:44 +01:00
itsrubberduck
43cd53780d merge 2025-11-20 21:28:57 +01:00
Remi
040783f679 Style feedback drip email like invites 2025-11-20 21:26:55 +01:00
Remi
55e02aca6c Add waitlist drip cron route 2025-11-20 21:10:50 +01:00
itsrubberduck
6e04501c4d add todo for najan 2025-10-19 21:03:52 +02:00
Remi
3dee67b3a5 Add bidirectional airport geocode and name-aware taxi routing 2025-10-19 19:17:18 +02:00
Remi
cc7e4927e4 Remove explicit type hints from airport geocode lookup 2025-10-19 19:07:23 +02:00
Remi
9d43c69539 Infer airport geocode types from query text 2025-10-19 19:00:32 +02:00
Remi
c8e35a140e Add airport geocode endpoint 2025-10-19 18:56:48 +02:00
itsrubberduck
e8b9a9ee81 better form 2025-10-19 17:39:10 +02:00
Remi
f1165531e1 Add optional notes field to hero signup 2025-10-19 17:39:09 +02:00
Remi
0c8a9b24ab Align hero signup with waitlist endpoint 2025-10-19 17:39:09 +02:00
Remi
aa50e345a7 Populate user notes from waitlist entry 2025-10-19 17:35:30 +02:00
itsrubberduck
4dc273bab3 Merge branch 'codex/fix-readback-field-validation-issue' 2025-10-19 16:48:41 +02:00