itsrubberduck 084ff860fa Group readback label and field so they wrap together
Detlef reported that the prompt for a blank (e.g. "runway") often ended
up on the line above the input itself, forcing him to look back up to
remember what he was typing.

Each preceding text segment is now paired with its following input field
into a `.cloze-group`. The group uses `inline-flex; flex-wrap: nowrap`
so its label and input stay on one line, while the outer `.cloze`
container still wraps groups normally. On narrow viewports (<640px) the
group falls back to wrapping internally so it never overflows.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-26 10:37:33 +02:00
2026-05-06 15:28:55 +02:00
2026-02-20 23:47:48 +01:00
2026-02-17 18:19:55 +01:00
2025-09-19 16:42:20 +02:00
2026-02-13 14:18:29 +01:00
2025-09-14 23:20:11 +02:00
2025-09-20 22:48:04 +02:00
2026-02-13 08:50:02 +01:00
2025-10-18 14:03:14 +02:00
2025-09-15 11:20:30 +02:00
2026-02-18 18:05:12 +01:00
2025-09-14 21:09:47 +02:00

OpenSquawk

OpenSquawk is an open, cost-efficient AI-ATC platform for flight simulators. Built with Nuxt 4, it provides a web interface that combines training, radio communication, and classroom content for simulator pilots. On the server side, via Node.js Open AI deliver speech synthesis, decision trees, and account management. Goal: a community-driven alternative to other costly AI-ATC solutions while being open and extensible.

Current Features

  • Modern web UI (Nuxt 4, Tailwind, Vuetify) with landing and classroom pages
  • Server APIs for ATC logic, decision trees, classroom content, and authentication
  • MongoDB storage
  • OpenAI integration for speech and text models with configurable voices
  • Optional local Speaches server for self-hosted speech in/output

Roadmap & Integrations

  • Simulator Bridges: Planned connection to Microsoft Flight Simulator and X-Plane to receive live flight data. Implementation is scheduled but will take a few more months.
  • SimBrief: Upcoming direct integration of SimBrief data (flight plans, briefings) for seamless cockpit dispatch info.
  • VATSIM: No integration for now due to unclear licensing. We are monitoring the situation but will avoid coupling until approval is granted.

Requirements

Component Note
Node.js 22 Specified in package.json.
Yarn
MongoDB 7+ Local instance or hosted database. Configure via MONGODB_URI.
ffmpeg Needed for audio processing (fluent-ffmpeg), must be on the system PATH.
OpenAI API Key For TTS and LLM calls (OPENAI_API_KEY).
Optional: Piper TTS For local speech (pip install "piper-tts[http]").

You can connect to any OpenAI-compatible (self-hosted or third-party) API by setting OPENAI_BASE_URL to the service's base URL.

Setup

  1. Clone the repository:

    git clone https://github.com/OpenSquawk/OpenSquawk.git
    cd OpenSquawk
    
  2. Enable corepack and install dependencies:

    corepack enable
    yarn install
    
  3. Configure environment variables:

    cp .env.example .env
    

    Key variables:

    • MONGODB_URI: MongoDB connection string (default mongodb://127.0.0.1:27017/opensquawk).
    • JWT_SECRET & JWT_REFRESH_SECRET: Random strings for tokens.
    • OPENAI_BASE_URL: Optional override for any OpenAI APIcompatible service; defaults to the OpenAI platform when unset.
    • OPENAI_API_KEY, optional OPENAI_PROJECT, LLM_MODEL, TTS_MODEL, VOICE_ID.
    • ATC_OUT_DIR: Directory for generated audio files.
    • FLIGHTLAB_TTS_CACHE_DIR: Disk cache directory for FlightLab TTS audio (defaults to ./.cache/flightlab-tts, git-ignored).
    • USE_PIPER, PIPER_PORT: Enable local Piper TTS instance.
    • SMTP settings (NOTIFY_*) if emails should be sent.
  4. Start MongoDB and ensure ffmpeg is on the PATH.

  5. Launch the dev server:

    yarn dev
    

    Interface runs at http://localhost:3000 with hot-reload.

Production & Preview

  • Build:

    yarn build
    
  • Local preview:

    yarn preview
    
  • For custom hosting, serve the Nuxt directory (yarn start).

Optional Local Speech Services

Piper TTS

For speech output without OpenAI:

pip install "piper-tts[http]"
piper-http-server --port 5001

Set USE_PIPER=true and adjust PIPER_PORT. Model ID (SPEECH_MODEL_ID) can also be set in .env.

Local STT/TTS

Local models via WSL+Docker is planned but not yet implemented. Placeholders and TODOs exist in the code.

Project Structure

app/          # Nuxt frontend (pages, components, stores)
server/       # API routes, services, utilities (ATC, Auth, LLM)
shared/       # Shared types and helpers
content/      # Markdown news & CMS content

Contributing & Community

We welcome issues, pull requests, and ideas—especially Nuxt/Node expertise, ATC knowledge, MSFS/X-Plane test flights, and infrastructure/cost optimization. Contact: info@opensquawk.de.

OpenSquawk thrives on community collaboration—priorities are set together. Join in!

Description
No description provided
Readme AGPL-3.0 24 MiB
Languages
Vue 57.8%
TypeScript 41.2%
HTML 0.6%
CSS 0.4%