Synaplan
기업을 위한 오픈소스 AI 플랫폼
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 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.