Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 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.