Synaplan
기업을 위한 오픈소스 AI 플랫폼
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Upload the case's Excel file (Applications + Territories, with the fixed Existing stores sheet). Every applicant gets a recommendation (Recommended, Waitlist, On hold or Rejected), the reason, next steps, a training plan and an email draft. A chat panel answers "why" questions and takes new facts ("APP-012 has now found a ground-floor space"), then re-runs the whole batch and reports every knock-on change.
No login. The file is read in the browser.
npm install
cp .env.example .env.local # add OPENROUTER_API_KEY (or GEMINI_API_KEY)
npm run dev # http://localhost:3000
The app works without a key too: the chat falls back to built-in handling of simple questions and updates.
OPENROUTER_API_KEY (and optionally OPENROUTER_MODEL, default google/gemini-3.7-flash). Or use a Google AI Studio key: GEMINI_API_KEY and GEMINI_MODEL. If both keys are set, OpenRouter is used.If the model ever returns errors (for example, a retired model name), set OPENROUTER_MODEL (or GEMINI_MODEL) to a current Flash model and redeploy. The dashboard keeps working either way.
Code decides; Gemini only explains and turns chat messages into data updates. Same input, same output, every time.
Minimum investment: Tier 1 ₹30 lakh, Tier 2 ₹22 lakh, Tier 3 ₹18 lakh. All thresholds are editable under "Brand rules" in the app.
public/sample-applications.xlsx is built on the real template and plants the traps judges are likely to use:
| Applicant | Trap | Expected |
|---|---|---|
| APP-005 | Pin 570009 already has ST-06 | Rejected |
| APP-016 | Pin outside every territory | Rejected |
| APP-009 | ₹18 lakh in Tier 1 | Rejected |
| APP-008 | ₹26 lakh in Tier 1 (small shortfall) | On hold |
| APP-007 | No space yet, 2-month launch | On hold |
| APP-012 | Upper floor | On hold → Recommended after "found a ground-floor space", which pushes APP-013 off pin 572101 |
| APP-015 | City Mangaluru, pin from Mysuru | On hold |
| APP-017 | "Not yet identified" but gives size and floor | On hold |
| APP-018 | Investment blank | On hold |
| APP-019 | Form says Ground, notes say second floor | On hold |
| APP-020 | 260 sq ft | On hold |
| APP-004, APP-010 | Lose slots to higher scorers | Waitlist |
| APP-014 | Score below a Low-priority territory's bar | Waitlist |
npm run check # 48 checks against the sample file
docs/: the original case PDF and template, plus HANDOFF.md
scripts/check-sample.mjs: the self-check
lib/parse.js: reads the template (skips the grey example rows, keeps pin codes as text)
lib/engine.js: rules, scoring, allocation, before/after comparison
lib/plan.js: next steps, training plans, email drafts
lib/snapshot.js, app/api/chat/route.js: what Gemini sees, and the server call (key never reaches the browser)
lib/chatLocal.js: chat fallback without Gemini
app/page.js, app/components/*: the dashboard