Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
A small web tool for 2–5 person groups to give each other feedback (agile-retro
style). The starter picks a questionnaire and generates a share link; members
fill it in while the system gatekeeps for constructive feedback in real time;
once everyone is done the starter closes the session and the group reviews the
results together.
Built with Next.js (App Router) + TypeScript + Tailwind, Supabase
(Postgres + RLS + Realtime), and Google Gemini for moderation (and
coming-next AI summaries).
Phase 1 (this build): the core flow.查看完整 README ↗A small web tool for 2–5 person groups to give each other feedback (agile-retro style). The starter picks a questionnaire and generates a share link; members fill it in while the system gatekeeps for constructive feedback in real time; once everyone is done the starter closes the session and the group reviews the results together.
Built with Next.js (App Router) + TypeScript + Tailwind, Supabase (Postgres + RLS + Realtime), and Google Gemini for moderation (and coming-next AI summaries).
Phase 1 (this build): the core flow.
lib/blocklist.ts) instantly flags blatant personal
insults, andPOST /api/moderate, Google Gemini) judges
constructive / emotional and returns a friendly rewrite suggestion.
Failures degrade to the keyword list and let the user through — the
gate never blocks on our outage.owner_token httpOnly cookie).Phase 2 (this build): select-to-comment + AI summary.
POST /api/comments). Anonymous mode never stores/returns author
names.POST /api/summarize, Google Gemini): summarizes the whole
session (de-identified, text only) into themes / positives / improvements /
concrete next steps as markdown, with multi-turn follow-up questions.Copy .env.example to .env.local and fill in:
cp .env.example .env.local
| Variable | Where it's used | Exposed to browser? |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | anon client + Realtime + server | yes |
NEXT_PUBLIC_SUPABASE_ANON_KEY | anon client + Realtime | yes |
SUPABASE_SERVICE_ROLE_KEY | server routes (privileged writes) | no |
GEMINI_API_KEY (optional) | /api/moderate | no |
The service-role and Gemini keys are server-only and never bundled into the client.
sessions.owner_tokenis likewise never exposed — the browser client is never granted access to thesessionstable.
Run the migration against your Supabase project. Either paste
supabase/migrations/0001_init.sql into the Supabase SQL editor, or with the
Supabase CLI:
supabase db push
This creates the retro_sessions, retro_participants, retro_answers,
retro_comments tables (prefixed so it can share a Supabase project with other
apps), the RLS policies, and enables Realtime on retro_comments.
npm install
npm run dev
Open http://localhost:3000, create a session, and open the share link
(/s/<session_id>) in another browser/incognito to fill it in.
Import the repo into Vercel, set the four environment variables in the project settings, and deploy. No extra config needed.
app/
page.tsx create-session form
s/[session_id]/page.tsx fill-in form (+ deadline countdown, moderation)
s/[session_id]/results/page.tsx grouped results + owner close
api/
sessions/route.ts create session (sets owner cookie)
sessions/[id]/close/route.ts close (owner-token gated)
answers/route.ts submit answers (open + not expired)
moderate/route.ts single-answer gatekeeping (Google Gemini)
lib/
supabase/{server,client}.ts service-role + anon clients
templates.ts 3 built-in questionnaires
blocklist.ts 中英 insult keyword list
owner.ts owner-token cookie helpers
types.ts
components/ form + results UI
supabase/migrations/0001_init.sql