Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
Progress-Quest-style task board demo for hackerspaces (Noisebridge)
Translation pending
BusinessPython · HTMLGitHub @nthmostOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A quest board for the Actropolis network of makerspaces — a Progress-Quest-style task board built so a future "real" version can be inherited from the same codebase without rewriting.
Live: https://quests.actropolis.org/
Formerly the "Noisebridge Quest Board." Now rebranded Actropolis and generalized to span multiple makerspaces:
/register, changed via the
profile panel (/me/password). Admin bootstrap/reset: python -m scripts.set_password <user>.spaces table models member sites (Noisebridge, Sequoia
Fabrica, OpenCircuit SF, Omni Commons). Users pick a primary makerspace on their
profile; quests can be scoped to a space (shown on cards + detail, filterable in browse).quests.actropolis.org (Apache reverse-proxy → uvicorn :8080 on
zephyr). Admin allow-list lives at /home/nthmost/.questboard-economy.yaml (outside the
repo, pointed to by an ECONOMY_YAML_PATH systemd drop-in).⚠ Civic-hours caveat. SPEC §1 / §4 and the DESIGN_NOTES civic-hours certificate depended on the fact that wiki accounts were issued only after in-person admin verification — making
wiki_username≈ a verified human. Independent self-serve signup breaks that chain. Before using Actropolis records for volunteer-hour / civic-credit certification, re-establish a personhood-verification step (e.g. admin approval of accounts, or per-space vouching). See SPEC.md §1.
This project carries two product visions side by side. The schema, code, and architecture are designed to support both; only configuration and a handful of toggles distinguish them.
| Demo (now) | Real (eventually) | |
|---|---|---|
| Audience | Anyone who wants to play | Noisebridge members |
| Profile | One per account | One per account |
| NPC posters | Yes (system voice = "The Quartermaster") | None — humans post real asks |
| Auto-play | Characters claim/complete on a sim clock | No — humans drive every action |
| Sim clock | 30× speedup, ~1 month per real day | Wall clock, no compression |
| Verification step | Off | Configurable per quest |
| URL | quests.actropolis.org | likely quests.noisebridge.net |
The demo is the immediate deliverable. The real productivity tool is where this is headed once people see what the rhythm of a quest board could feel like.
This repo holds the product/design docs. The ops/deployment docs
(STATUS.md, DEPLOYMENT.md, ANSIBLE_future.md) live one level up in the
Actropolis controller directory that coordinates this repo's two deployments
(the Actropolis demo and the Noisebridge Quest Board).
Read these in order:
demo.enabled = false.# Postgres running locally (assumed)
createdb questboard
git clone https://github.com/nthmost/quest-board.git
cd quest-board
python3 -m venv .venv
.venv/bin/pip install -e ".[dev]"
export DATABASE_URL="postgresql+psycopg://localhost/questboard"
export ECONOMY_YAML_PATH="$(pwd)/economy.example.yaml"
export SESSION_SECRET="$(openssl rand -base64 48)"
.venv/bin/alembic upgrade head # migrations 0001..0011
.venv/bin/python scripts/seed.py # guilds, locations, 3 test users
.venv/bin/python scripts/ingest_pool.py # ~348 NB-flavored quests
.venv/bin/uvicorn app.main:app --reload --port 8080
Then http://localhost:8080/ for the front page, http://localhost:8080/api/v1/docs for the OpenAPI explorer.
To poke as an admin locally, edit economy.example.yaml and add your username (case-insensitive) to admin.usernames, then
SIGHUP or restart.
actropolis/ # controller dir (not this repo)
├── README.md # controller overview
├── STATUS.md # current build state
├── DEPLOYMENT.md # ops runbook
├── ANSIBLE_future.md # multi-host future sketch
└── quest-board/ # ← this repo
├── README.md # ← you are here
├── SPEC.md # the "real" productivity tool
├── DEMO.md # Progress Quest demo, delta on SPEC
├── UI.md # visual reference
│
├── pyproject.toml # FastAPI + SQLAlchemy + Alembic + Jinja
├── alembic.ini
├── alembic/versions/0001..0011 # full migration chain
├── economy.example.yaml # all economy knobs in one file
│
├── app/
│ ├── main.py # FastAPI factory, SIGHUP handler, asset_v
│ ├── config.py # YAML loader
│ ├── db.py # SQLAlchemy engine + session
│ ├── auth.py # local login/register, admin gate, view-as toggle
│ ├── local_auth.py # Argon2id password hashing / validation
│ ├── models/ # one file per table
│ ├── schemas/ # Pydantic in/out
│ ├── services/ # business logic (tiny, pure-ish)
│ ├── routes/ # pages.py, me.py, admin.py, api routers
│ ├── templates/ # Jinja
│ └── static/css/nes.css # all styles
│
├── data/
│ ├── skill_vocab.yaml # 32-slug controlled vocabulary
│ └── quest_templates/
│ ├── discord_mined.yaml # raw mined Discord candidates (~600)
│ └── discord_tagged.yaml # 348 LLM-curated + skill-tagged seeds
│
└── scripts/
├── seed.py # guilds, locations, sample users + quests
├── mine_discord.py # walk archives, surface task-shaped messages
├── curate_discord.py # LLM pass: is_task / clean title / xp
├── tag_skills.py # LLM pass: pick 1-3 skills from vocab
└── ingest_pool.py # YAML → live quests table
Adapted from the standards in ~/projects/git/neon-nerdsnipe/CLAUDE.md:
Mapped[...] columns.ruff check app/ scripts/ alembic/versions/ runs clean. B008 is
ignored (Depends-in-defaults is the canonical FastAPI pattern).
Architecture commitments locked in:
character_id. Users are pure local
identity (username + password). One profile per account in both modes —
the single profile row is created at signup.quartermaster is reserved as the system voice (default attribution
on quests with no concrete poster). Players can't pick it as a class.internal_notes is admin-only; everything else is public-safe by
default with authed reads getting more.Recent decisions worth not relitigating:
#help-wanted,
#facilities, #fabrication-n-lasers, etc.), curated through the
LiteLLM router, and skill-tagged against data/skill_vocab.yaml. We
don't run LLM gen at runtime — that was a one-shot data-prep step.economy.example.yaml (deployed copies on
zephyr at /home/nthmost/.questboard-economy.yaml and
/home/nthmost/.questboard-nb-economy.yaml, pointed to by an
ECONOMY_YAML_PATH systemd drop-in). SIGHUP reloads.Where the live service runs: two instances on zephyr behind its
Apache (HTTPS) — the Actropolis demo (questboard.service, :8080) and the
Noisebridge Quest Board (questboard-nb.service, :8081). enki holds
quiesced cold storage. See the controller's DEPLOYMENT.md "Two instances"
table.