🧱 THE FOSS STACK
(latest · maintained · interconnected — Jun 2026)
| 🧩 Layer | 🛠️ Tool | 🔖 Latest | ⚖️ License | 💚 Upkeep | 🎯 Role in QuizWizz |
|---|---|---|---|---|---|
| 🏛️ Platform | WordPress | 7.0 “Armstrong” (May 20, 2026) | GPLv2+ | ✅ active | Host CMS + admin + REST |
| 🐘 Runtime | PHP | 8.5 (min recommended 8.3) | PHP License | ✅ | Server language |
| 🗄️ DB | MariaDB | 11.x LTS | GPLv2 | ✅ | Quizzes / attempts |
| 📦 Deps | Composer | 2.x | MIT | ✅ | PSR-4 autoload |
| 🧬 Data model | WP CPTs + REST API | core 7.0 | GPLv2+ | ✅ | quiz / question types |
| 🧠 AI plumbing | WP Abilities API | new in 7.0 | GPLv2+ | ✅ new | Expose quiz-gen to AI hub |
| 🗂️ Admin UI | WP Data Views + @wordpress/components | core 7.0 | GPLv2+ | ✅ | Genius backend config |
| 🧱 Embed | Block API v3 (@wordpress/create-block) | 4.x | GPLv2+ | ✅ | Drop quiz on any page |
| 🎮 Browser play | Alpine.js | 3.15.x (~7.1 kB, no build step) | MIT | ✅ (May 2026 release) | Client-side render + grade |
| 📚 Dataset (ready MCQ) | OpenTDB | live API | CC BY-SA 4.0 | ✅ | Instant playable questions |
| 📚 Dataset (big EN) | TriviaQA | ~95k Qs | CC BY 4.0 | stable | Volume bank |
| 🌍 Dataset (pre-translated) | Global-MMLU | 42 langs / ~590k | open* | ✅ | Skip translation entirely |
| 🤖 AI gateway | OpenRouter | live (400+ models) | ⚠️ SaaS, not FOSS | ✅ | Translate + chat agent |
| 🔄 Model picker | GET /api/v1/models | edge-cached, sortable (newest/price/popular) | — | ✅ | Hourly-refreshed dropdown |
| 🖨️ Print (simple) | window.print() + @media print | web std | — (native) | ✅ | Printable results + key |
| 📄 PDF (server) | mPDF | 8.3.1 · PHP 8.5 since 8.2.6 | GPL-2.0 | ✅ | Saved/emailed/non-Latin |
| 📤 Share | Web Share API | web std | — (native) | ✅ | Socials |
| ✅ Compliance | Plugin Check | latest | GPLv2+ | ✅ | Mandatory pre-ship gate |
| 🧹 Standards | PHPCS + WPCS | 3.x | BSD/MIT | ✅ | Lint to WP rules |
| 🧪 Tests | PHPUnit | 11.x | BSD-3 | ✅ | Unit/integration |
Target topology
| Component | Value |
|---|---|
| Domain / webroot | qwizz.0rk.de → /var/www/qwizz.0rk.de (created fresh; absent today) |
| DNS | qwizz.0rk.de A → 173.212.213.72 = this host (verified) → ACME HTTP-01 will pass |
| TLS | new Let’s Encrypt cert via certbot certonly --webroot (none exists yet) |
| PHP | 8.4 FPM via deb.sury.org · socket /run/php/php8.4-fpm.sock · pool user www-data |
| DB | MariaDB 10.11.11 · db quizwizz (+ quizwizz_test) · user quizwizz_user@localhost · prefix wp_ |
| WordPress | latest stable (7.0; wp core download --version=latest) · permalinks /%postname%/ |
| Plugin slug | quizwizz → /var/www/qwizz.0rk.de/wp-content/plugins/quizwizz |
| Block name | quizwizz/quiz (apiVersion 3, dynamic, server-rendered) · REST quizwizz/v1 |
| SSOT doc | /home/dv/quartz-ssot/content/projects/quizwizz/plan.md → npm run quartz build |
Two command helpers used throughout (www-data owns all webroot files; HOME/caches must be writable):
WP="sudo -u www-data env HOME=/tmp WP_CLI_CACHE_DIR=/tmp/.wp-cli wp --path=/var/www/qwizz.0rk.de"
RUN="sudo -u www-data env HOME=/tmp COMPOSER_HOME=/tmp/.composer" # for cwd-bound npm/npx/composer