echo6-docs/projects/last-ember-project.md
Matt Johnson e9231ac24a Migration: consolidate Echo6 docs to cortex with full infrastructure cleanup sync
- Documents recent infrastructure cleanup (8 CTs destroyed, 35 DNS records removed, Headscale cleanup)
- Adds 24 new runbooks covering Authentik, PeerTube, Meshtastic, RECON, Proxmox, Mailcow, Internet Archive, GPU routing
- Adds project documentation for headscale, vaultwarden, peertube, matrix, mmud, advbbs, arr stack
- Updates services.md, environment.md, caddy.md, authentik.md to match live infrastructure
- Removes 4 deprecated runbook duplicates (canonical versions live in projects/)
- Adds .gitignore for binary archives and editor temp files

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-13 06:02:16 +00:00

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-ember is 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.py
  • src/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 entirely
  • MMUD_WEB_PORT, MMUD_WEB_HOST, MMUD_WEB_SECRET, MMUD_ADMIN_PASSWORD env 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