# FeedBack Constitution > FeedBack is a self-hosted, single-user web app for browsing, playing, and > practicing interactive music notation, built around its own open `.sloppak` > chart format (charts imported from Guitar Pro / MusicXML or authored in the > built-in editor). This constitution captures the non-negotiable principles > that govern its core (`server.py`, `lib/`, `static/`) and that all in-tree > plugins (`plugins//`) inherit by default. It is a *retrospective* > document — the codebase came first, the principles below were distilled from > `CLAUDE.md`, `README.md`, and the shape of the existing implementation. ## Core Principles ### I. Self-Hosted, Single-User, Docker-First FeedBack targets one user running one container against a personal song library folder. There is no multi-tenant model, no authentication, no rate limiting, and no shared backend. Deployment is expressed as a single `docker compose up -d` against the bundled `Dockerfile`; everything required (vgmstream, FFmpeg, FluidSynth, Python) is baked into the image so the host machine needs only Docker. Native (non-Docker) launch is supported for development but not the primary supported path. **Non-negotiable rules** - Do not introduce a user/account model, multi-tenant data partitioning, or auth middleware. All endpoints assume one trusted local user. - New runtime dependencies (binaries, Python modules) must be installable inside the existing `Dockerfile`. If something cannot run in the container, it does not ship in core. - `DLC_DIR` and `CONFIG_DIR` are the only required configuration inputs. Adding a new mandatory path/env var is a constitutional change. ### II. Vanilla Frontend — No Frameworks The frontend (`static/app.js`, `static/highway.js`, `static/v3/index.html`, `static/style.css`) is plain JavaScript with the `fetch` API, direct DOM manipulation, and the Canvas 2D / WebGL2 APIs. The only style framework is Tailwind CSS, served as a prebuilt static stylesheet (`static/tailwind.min.css`, regenerated by `scripts/build-tailwind.sh`) — never the runtime Play CDN, whose on-the-fly JIT rescans the DOM on the main thread and caused sustained frame drops with the 3D highway (feedBack-desktop#110). No React, Vue, Svelte, bundler, transpiler, or TypeScript appears in the core static tree, and no build step runs on the serve path: the Tailwind build is a maintainer-only one-shot whose output is committed, so Docker / desktop / end users never build. New features extend `app.js` and the existing globals (`window.playSong`, `window.showScreen`, `window.createHighway`, `window.feedBack`). Native ES modules are a first-class, build-free extension mechanism. Because `