Files changed: .obsidian/workspace.json archive/README.md archive/projects/DEPLOY-API-KEYS-TAB.md archive/projects/arr-stack-runbook.md archive/projects/arr-wiring-runbook.md archive/projects/cc-deploy-watchtower-v2.md archive/projects/headscale-full-deployment.md archive/projects/last-ember-project.md archive/projects/mmud/last-ember-chronicle.html archive/projects/mmud/last-ember-howto.html archive/projects/mmud/last-ember.html archive/projects/mmud/mmud-phase5-prompt.md archive/projects/mmud/mmud-phase6-prompt.md archive/projects/mmud/mmud-prompts/mmud-prompts/01-update-planned.md archive/projects/mmud/mmud-prompts/mmud-prompts/02-npc-nodes.md archive/projects/mmud/mmud-prompts/mmud-prompts/03-darkcragg.md archive/projects/mmud/mmud-prompts/mmud-prompts/04-dcrg-node.md archive/projects/mmud/mmud-prompts/mmud-prompts/05-phase5.md archive/projects/mmud/mmud-prompts/mmud-prompts/06-phase6.md archive/projects/mmud/mmud-prompts/mmud-prompts/README.md archive/projects/mmud/mmud-prompts/mmud-prompts/mmud-project.md archive/projects/openwebui-theme-deploy.md archive/projects/peertube-phase2-project.md archive/projects/peertube-rebuild.md archive/projects/utility-caddy-initial-setup.md archive/projects/vaultwarden-deployment.md archive/reports/logistics_migration.md archive/reports/post_validation_report.md archive/reports/task_a_aurora_validation.md archive/reports/task_c_watchdog_test.md projects/deploy-livesync.md
2.6 KiB
2.6 KiB
Last Ember — MMUD Web Dashboard
CONSOLIDATED: Last Ember has been merged into the MMUD repo at
src/web/. The standalone repo at/home/zvx/projects/last-emberis archived (deprecation notice committed).
Spectator dashboard and admin panel for MMUD (Mesh Multi-User Dungeon). Flask web app that reads from the game's SQLite database. Themed as The Last Ember — the bar that never changes.
Status
Phase: Consolidated into MMUD. No longer a separate project.
Location
- Code:
/home/zvx/projects/mmud/src/web/ - Archived repo:
/home/zvx/projects/last-ember(deprecated, read-only reference)
Relationship to MMUD
Last Ember now runs in-process with the MMUD mesh daemon as a background daemon thread. Same process, same DB file, WAL mode handles concurrency. Flask starts automatically unless --no-web is passed.
Key Files
src/web/__init__.py— Flask app factory (create_app)src/web/config.py— Web-specific settings (host, port, secret, polling intervals)src/web/routes/— public.py, api.py, admin.py (session auth)src/web/services/— gamedb.py, dashboard.py, chronicle.py, admin_service.pysrc/web/templates/— Jinja2 templates (dark tavern aesthetic)src/web/static/— ember.css (design system), embers.js (particles), app.js (AJAX)src/web/prototypes/— Original HTML design references (visual source of truth)src/db/migrations/004_web_tables.sql— Web tables (node_config, admin_log, banned_players, npc_journals)
Stack
- Python 3.11+, Flask 3.x, Jinja2
- SQLite WAL mode (read-only public, read-write admin)
- No build step, no React, no SPA. Server-rendered templates with AJAX polling.
- Docker (python:3.11-slim, /data volume for SQLite)
CLI
--web-port PORT— override dashboard port (default: 5000)--no-web— disable web dashboard entirelyMMUD_WEB_PORT,MMUD_WEB_HOST,MMUD_WEB_SECRET,MMUD_ADMIN_PASSWORDenv vars
Pages
Public (no auth):
- Main dashboard — live epoch status, leaderboard, broadcasts, bounties, mode status, secrets
- Chronicle — epoch history, NPC daily journals (Grist, Maren, Torval, Whisper)
- How to Play — game guide, command reference
API (JSON, polled by frontend):
/api/status(30s),/api/broadcasts(15s),/api/bounties,/api/mode,/api/leaderboard
Admin (session auth):
- Dashboard — active players, epoch day, node health
- Nodes — assign Meshtastic node IDs to 6 sim node roles
- Players — view, ban, kick, reset
- Epoch — force advance day, force Breach, manual broadcast
- System — DB stats, node config, admin log