Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Self-hosted web app to organize a band — events, availability, repertoire, setlists, files, equipment and finances in one place. Next.js + SQLite, AGPL-3.0.
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
🇩🇪 Dieses README gibt es auch auf Deutsch.
Bandplaner is a self-hosted, open-source band management web app. Rehearsals and gigs, who's available, the repertoire with keys and sheet music, setlists, equipment and packing lists, the band's finances, venues, and shared files — all in one place, instead of scattered across email, WhatsApp groups, and spreadsheets. It runs on your own server, a NAS, or a Raspberry Pi; there is no cloud and no subscription, and your data stays with you.
Built with Next.js and SQLite, packaged as a single Docker container. Interface in English and German.檢視完整 README ↗🇩🇪 Dieses README gibt es auch auf Deutsch.
Bandplaner is a self-hosted, open-source band management web app. Rehearsals and gigs, who's available, the repertoire with keys and sheet music, setlists, equipment and packing lists, the band's finances, venues, and shared files — all in one place, instead of scattered across email, WhatsApp groups, and spreadsheets. It runs on your own server, a NAS, or a Raspberry Pi; there is no cloud and no subscription, and your data stays with you.
Built with Next.js and SQLite, packaged as a single Docker container. Interface in English and German.
A user account can be a member of several bands and switch between them. Within each band there is a role model: Administrator (full rights including member and role management), Member, and Guest/Substitute with time-limited access (an "access until" date). New members and guests are added via an invitation link. Open self-registration is disabled by default — only the first account and invited people can register; set REGISTRATION_ENABLED=true for open registration (see INSTALLATION.md).
Independently of that, any number of people can be flagged as finance admin — deliberately decoupled from the role, so that the same person can be both administrator and finance admin, and so that several people can look after the finances. Finance admins are the only ones who see the complete financial overview, and they additionally get admin-equivalent rights for songs, equipment, files, and events — but no access to member management or the management page.
Sign-in works with either an email address or a username. All users can change their own password in their profile; admins can additionally set a new initial password for a member, which that member must change at the next login. After 5 consecutive failed login attempts an account is automatically locked for 2 days (protection against brute-force attempts); the lock then expires on its own or is lifted immediately by an admin password reset.
The interface is available in German and English, switchable via a language picker in the header. The choice is stored permanently in the user profile and applies across all bands; before login the app detects the language automatically from the browser settings.
An illustrated, English-language user handbook is linked from the info icon (ⓘ) in the header of every page (handbook, link to the source-code repository, license note, and current app version) and is also available as a standalone HTML file at public/docs/handbook/index.html.
Modules currently implemented:
The complete, more detailed functional specification – including planned, not-yet-implemented extensions such as polls / to-dos and AI-assisted setlist suggestions – is in Funktionsspezifikation-Bandplaner.md (German).
Larger modules can be enabled/disabled per band under Band → Management, so that the interface stays limited to what the group actually uses:
| Module | Default | Note |
|---|---|---|
| Equipment | on | – |
| Packing lists | on | requires Equipment |
| Finances | off | whoever enables it automatically becomes a finance admin if the band has none yet |
| Communication | off | sending mail additionally needs SMTP (see INSTALLATION.md) |
| Chat | off | one group chat per band plus private 1:1 messages, live update via polling |
| Media player | off | only controls playback; files and links remain usable regardless |
| within it: key detection | on | sub-toggle, only effective when the media player is active |
| Venues | off | without the module enabled, events keep just a free-text location field, as before |
Disabled modules disappear from the navigation but delete no data – everything is available again unchanged as soon as the module is re-enabled. The one deliberate exception: disabling public file links also blocks links that already exist, since it is meant as a security barrier.
A band is the central starting point: almost every other object belongs to exactly one band.
erDiagram
BAND }o--o{ MEMBER : "membership (role)"
BAND ||--o{ EVENT : has
BAND ||--o{ SONG : has
BAND ||--o{ SETLIST : has
BAND ||--o{ PACKING_LIST : has
BAND ||--o{ VENUE : has
BAND ||--o{ FINANCE_ENTRY : has
BAND ||--o{ FILE : has
BAND |o--o{ EQUIPMENT : "band-owned"
MEMBER |o--o{ EQUIPMENT : "personally owned"
MEMBER }o--o{ EVENT : "availability"
MEMBER }o--o{ SONG : "voting & notes"
MEMBER }o--o{ FINANCE_ENTRY : "fee / cost share"
EVENT |o--o| VENUE : "takes place at"
EVENT }o--o{ SETLIST : uses
EVENT }o--o{ PACKING_LIST : uses
EVENT ||--o{ FINANCE_ENTRY : causes
EVENT }o--o{ FILE : has
SETLIST }o--o{ SONG : "contains (ordered)"
SONG }o--o{ FILE : has
PACKING_LIST }o--o{ EQUIPMENT : contains
EQUIPMENT }o--o{ FILE : has
VENUE }o--o{ FILE : has
Reading aid:
(Not shown, to keep the overview readable: invitations, personal song notes, stage cues on setlist entries, finance-admin assignment.)
Is Bandplaner free? Yes. It is open-source software under the GNU AGPL-3.0. There is no subscription, no paid tier, and no account on anyone else's server.
Does it need the cloud or an internet connection? No. Bandplaner is self-hosted — it runs entirely on your own machine and all data stays there. The only optional outbound calls are the new-song assistant's metadata lookups (MusicBrainz, Discogs, Spotify) and venue address search (OpenStreetMap); each can be left disabled.
Can it run on a Synology NAS or a Raspberry Pi?
Yes. The Docker image is multi-arch (linux/amd64 + linux/arm64), so it runs on x86 servers, most modern Synology/QNAP NAS models, and a Raspberry Pi 4/5.
Is it a self-hosted alternative to BandHelper, Set List Maker, or Gig-o-Matic? It covers much of the same ground — shared repertoire with keys, setlists, scheduling, availability, and files — with a practice player on top. The trade-off: you host and update it yourself, and in return it is free, private, and has no per-seat pricing.
How many bands and members can I have? Unlimited. One account can belong to several bands and switch between them; each band has its own members, repertoire, and settings.
Is there a hosted version or a public demo? No. Bandplaner is self-hosted only — you run your own instance. Setup with Docker takes about a minute (see below).
Is there a mobile app? No native app. The interface is responsive and works in a phone browser; you can "Add to Home Screen" for an app-like shortcut.
What about GDPR / my members' data? Since you host it, you are the data controller. Bandplaner includes a personal data export and self-service account deletion for every user.
Next.js 16 (App Router), Prisma 7 with SQLite (better-sqlite3 adapter), NextAuth (Auth.js) v5, TypeScript, Tailwind CSS.
npm install
cp .env.example .env # adjust values, see the comments in the file
npx prisma migrate dev
npm run dev
Open http://localhost:3000. On first start, create an account via /register; the first band member automatically becomes the administrator of the first band they create.
For production use, a prebuilt multi-arch Docker image (amd64/arm64) is published at ghcr.io/maxxs78/bandplaner – no local build needed.
Quick start (details, HTTPS/reverse proxy, and platform-specific steps in the installation guide):
mkdir bandplaner && cd bandplaner
curl -fsSLO https://raw.githubusercontent.com/maxxs78/bandplaner/main/docker-compose.yml
curl -fsSL https://raw.githubusercontent.com/maxxs78/bandplaner/main/.env.example -o .env
# edit .env: set AUTH_SECRET (openssl rand -base64 32) and NEXT_PUBLIC_APP_URL
docker compose up -d
Updates: docker compose pull && docker compose up -d. Database migrations run automatically at start; data lives in three named volumes and survives updates.
To modify the code yourself, build the image locally – see docker-compose.build.yml and CONTRIBUTING.md.
Bandplaner is a hobby project, built in spare time.
Bug reports and feature requests are welcome – via the issues using the provided templates. There is no guarantee whether or when anything is implemented.
Pull requests are not accepted. Reviewing and taking responsibility for external code is more than a one-person hobby project can sustain; PRs from forks are closed automatically with a pointer to the issues. Forking and modifying under the AGPL-3.0 is of course allowed. Details: CONTRIBUTING.md.
Please report security vulnerabilities privately – see SECURITY.md, not as a public issue. Code of conduct: CODE_OF_CONDUCT.md.
Bandplaner is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-only). Anyone who makes a modified version available over a network must provide its complete source code to users (AGPL § 13); for unmodified use, a pointer to this repository is sufficient.
The software is provided without any warranty, and use is at your own risk (see LICENSE, sections 15–17). For production use and hosting on behalf of others, backups, data protection, and availability are entirely the operator's responsibility.
.zip, and restore it later – as a copy on the same server, or on a different Bandplaner instance to migrate the band. Restoring always creates a brand-new band; nothing is ever overwritten.