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
Free project management for software studios and teams: boards, tasks, issues, releases, clients, docs and team chat across all your organizations, with roles and private-by-default data.
BusinessTypeScript · PLpgSQLGitHub @m-shinanOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Free, open-source project management for software teams: boards, tasks, issues, releases, clients, docs and team chat. Next.js + Supabase.
Loading the full README.
Read the full README ↗Free, open-source project management for software studios and teams. Kanban boards, tasks, issues, releases, clients, docs and team chat, across any number of organizations with one login, with private-by-default data.
Live app · Architecture · Contributing · Security · License: AGPL-3.0
mso-pm is an MCP server at
https://pm.mshinan.com/api/mcp (or /api/mcp on your own copy). Add that URL
in your AI app, sign in with your mso-pm account, and click Allow:
| App | Where |
|---|---|
| Claude (web and desktop) | Settings → Connectors → Add custom connector |
| ChatGPT | Settings → Connectors, with developer mode on |
| Claude Code | claude mcp add --transport http mso-pm https://pm.mshinan.com/api/mcp, then /mcp to sign in |
| Cursor | .cursor/mcp.json: { "mcpServers": { "mso-pm": { "url": "https://pm.mshinan.com/api/mcp" } } } |
| VS Code | .vscode/mcp.json: { "servers": { "mso-pm": { "type": "http", "url": "https://pm.mshinan.com/api/mcp" } } } |
Tools: list_organizations, list_projects, list_tasks, get_task,
create_task, update_task, add_comment. Then just ask, for example
"What's assigned to me in WEB?" or "Move WEB-41 to Review and comment that it's ready."
Every call runs as you, so the AI sees and changes only what you could in the app, and your teammates get the usual notifications.
Next.js 16 (App Router, Server Components) · Supabase (Postgres, Auth,
Realtime, Vault, pg_cron, pg_net, OAuth 2.1 server) · Tailwind CSS v4 ·
MCP (@modelcontextprotocol/server, @supabase/server) · Cloudflare R2 for
files · Resend for email · Vercel for hosting.
Every table has row-level security, so the database itself decides who can
read or change what: the UI only hides what you can't do. The model, schema
and trade-offs are in docs/ARCHITECTURE.md, and
tests/rls.test.ts checks them against a real database with real users.
Everything below fits in free tiers: Supabase (database and auth), Vercel Hobby (hosting, personal and non-commercial use), Cloudflare R2 (10 GB of files, free downloads) and Resend (3,000 emails a month).
Create a project at supabase.com.
cp .env.example .env.local and fill in the Supabase values (Project
Settings → API keys and Database → connection string, session pooler).
Apply the schema and make yourself the platform admin:
npm install
npm run db:push
node --env-file=.env.local scripts/platform-admin.mjs [email protected]
npm run dev # http://localhost:3000
Sign up with the email you made admin, confirm it with the code, and create an
organization. In Supabase → Authentication → URL Configuration, add your app's
URLs to the redirect list (http://localhost:3000/** and your production URL).
Supabase's built-in email only reaches members of your Supabase team, so add your own sender before inviting anyone:
In Resend, verify your domain and create an API key.
Supabase → Authentication → Emails → SMTP: host smtp.resend.com, port
465, user resend, the API key as password, and your sender address.
Store the same settings for notification emails (read from the environment, so the key never lands in your shell history):
RESEND_API_KEY=re_... node --env-file=.env.local scripts/email-setup.mjs "mso-pm <[email protected]>" https://your-app.example
After deploying (step 5), switch the sign-up and reset emails to codes:
node --env-file=.env.local scripts/auth-emails.mjs (needs
SUPABASE_ACCESS_TOKEN).
mso-pm-attachments) and add a CORS rule that
allows GET and PUT with header content-type from your app's origins.R2_ACCOUNT_ID, R2_ACCESS_KEY_ID, R2_SECRET_ACCESS_KEY and
R2_BUCKET in .env.local.Without R2, everything works except attachments, which say storage isn't set up.
This is the beginning of the README. Read the rest at the original. Read the full README ↗