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.