itsrubberduck 32f3998d6c fix(routing): catch the paths the split left pointing at nothing
Three dead ends, one cause: these routes resolved to pages that stayed on the
website, and nothing here answered them any more.

/start — this page became the app's front page in the split (it is index.vue
now), so every pre-split bookmark and the website's own redirect landed on a
404. Caught here so the app's old URLs work without waiting for the website to
be redeployed.

/login — the app has no login by design, identity comes from the issuer. But
five call sites still send people there: logout, the live-atc session guard,
the bridge pairing screen. In the monorepo that path was the website's login
form; since the split it was nothing, so signing out dropped the user on a
blank page. It is a forwarder to the issuer, not a login form.

/logout — after clearing the app session it sent the user to /login, which
under SSO means an issuer where they are still signed in: they would be handed
a fresh code and land straight back inside. It now signs them out at the issuer
too, which bumps tokenVersion and invalidates every refresh token.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-28 19:37:27 +02:00
2026-07-28 19:17:18 +02:00
2026-02-17 18:19:55 +01:00
2025-09-19 16:42:20 +02:00
2025-09-20 22:48:04 +02:00
2025-10-18 14:03:14 +02:00
2026-05-28 21:04:09 +02:00
2025-09-14 21:09:47 +02:00

Self-host OpenSquawk

OpenSquawk is a browser-based aviation radio training application. It provides Live ATC scenarios with spoken controller responses, a classroom learning mode, and optional simulator/cockpit bridge integration.

This repository contains the Nuxt application and its H3 API. Live ATC routing and authoritative session state are provided by the separate OpenSquawk-API service.

Requirements

  • Node.js 22 and Yarn 4
  • MongoDB
  • Python 3.12 and Poetry for OpenSquawk-API
  • An OpenAI-compatible service for cloud STT/TTS, or a configured local speech provider

The simulator/cockpit bridge is optional.

Start locally

Start MongoDB, then prepare the Nuxt application:

corepack enable
cp .env.example .env
yarn install

Generate strong values for JWT_SECRET, APP_JWT_SECRET, and SERVICE_SECRET. Keep AUTH_MODE=open for a self-hosted instance without a login. Configure the speech provider variables required by your setup.

In a separate checkout of OpenSquawk-API, start the decision backend:

poetry install
poetry run uvicorn main:app --reload

It listens on http://127.0.0.1:8000 by default. If it runs elsewhere, set NUXT_PUBLIC_RADIO_BACKEND_URL accordingly.

Start the Nuxt application:

AUTH_MODE=open yarn dev

The application is then available at http://localhost:3000.

Configuration

All documented variables and self-hosting defaults are in .env.example. MongoDB stores user state, learning progress, bug reports, and transmission logs locally. Telemetry forwarding is disabled when TELEMETRY_URL is empty.

Services

  • OpenSquawk-API: decision flows, routing, and Live ATC session state
  • MongoDB: application identities, progress, reports, and logs
  • OpenAI-compatible or local speech service: transcription and controller audio
  • Optional bridge: simulator and cockpit integration

License

OpenSquawk is licensed under the GNU Affero General Public License v3.0 only.

Description
No description provided
Readme AGPL-3.0 53 MiB
Languages
TypeScript 67.3%
Vue 31.8%
CSS 0.6%
JavaScript 0.3%