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