Synaplan
기업을 위한 오픈소스 AI 플랫폼
MEST Africa AI for SMEs 워크숍에서 몇 가지 질문에 답하고 맞춤형 90일 AI 도입 계획을 PDF로 이메일 받기
Answer a few questions from the MEST Africa AI for SMEs Workshop and get a personalised 90-day AI adoption plan for your business, emailed as a PDF.
비즈니스TypeScript · CSSGitHub @Steev-vhoo온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗This web app goes with the MEST Africa "AI for SMEs" Workshop (6 November 2026). SME owners fill in a 5-step form about their business, their pain points and their workshop takeaways. A Claude-powered planning agent then writes a personalised 90-day AI adoption plan. The app turns the plan into a branded PDF and emails it to the owner. The owner can also download it on the spot.
docs/sample-plan-mock-data.pdf shows the PDF layout, filled with placeholder data.
Form (5 steps) → POST /api/plan
├─ Input guardrails: schema validation, sanitising, honeypot, rate limits, prompt-injection screen
├─ Planning agent (Claude Opus 5.5, structured JSON output)
│ · system prompt built from the concept note: Modules 1–5, partners Oze / Kudobuzz / Intelli
│ · respects the owner's budget, weekly hours, devices and AI familiarity
│ · scope check: rejects non-genuine or harmful businesses and injection attempts
├─ Output guardrails: 3 phases covering weeks 1–13, 3–5 processes, KPIs, safeguards,
│ and a ban on guaranteed results, fake reviews, scraped contact lists, pirated software, etc.
│ → one self-correction retry, then fail closed
├─ PDF (@react-pdf/renderer, MEST branding)
├─ Email with the PDF attached (Gmail/SMTP or Resend), optional BCC to a MEST inbox
└─ Optional lead webhook (Google Sheet / Airtable via Zapier, Make or Apps Script)
The form follows the workshop agenda:
Each PDF contains: a summary, strengths and opportunities, quick wins for this week, 3–5 priority processes with tools and costs, a week-by-week roadmap for weeks 1–13 in 3 phases, KPIs, a budget in GHS, responsible-AI safeguards (including Ghana's Data Protection Act, 2012 (Act 843)), skills to build, and next steps with MEST.
Push this folder to a GitHub repository.
In Vercel, choose Add New → Project, import the repository, and keep the defaults (Next.js is detected automatically).
Add these Environment Variables:
| Variable | Required | Notes |
|---|---|---|
ANTHROPIC_API_KEY | ✅ | From console.anthropic.com |
SMTP_USER / SMTP_PASS | email, option A | A Gmail / Google Workspace address and its app password. No DNS changes needed. |
RESEND_API_KEY | email, option B | From resend.com. The sending domain must be verified in Resend. |
EMAIL_FROM | ✅ for email | e.g. MEST Africa <[email protected]>. With Gmail it must be SMTP_USER or one of its aliases. |
EMAIL_BCC | optional | MEST inbox that gets a copy of every plan |
LEADS_WEBHOOK_URL | optional | Receives each submission as JSON. Use it to build the SME lead list. |
RATE_LIMIT_PER_HOUR | optional | Requests per IP per hour (default 5) |
GOOGLE_SERVICE_ACCOUNT_EMAIL / GOOGLE_PRIVATE_KEY | for certificates | See "Certificates" below |
CERT_SHEET_ID and/or CERT_FOLDER_ID | for certificates | Where to find each attendee's certificate |
Click Deploy.
Notes:
maxDuration = 300, which needs Vercel Fluid Compute (on by default for new projects). On a plan with a lower limit, raise the function duration in Project Settings → Functions.RESEND_API_KEY the app still works: users see the "download PDF" option instead of email delivery.lib/guardrails.ts).RATE_LIMIT_PER_HOUR (for example to 200). The per-email limit of 3 per hour still applies./certificate (the "Get certificate" button in the nav) lets attendees download their certificate by entering the email they registered with. Certificates stay in Google Drive and don't need to be shared publicly. The app reads them through a Google service account.
GOOGLE_SERVICE_ACCOUNT_EMAIL (client_email from the JSON) and GOOGLE_PRIVATE_KEY (private_key from the JSON).CERT_SHEET_ID, the ID in the sheet's URL): a header row with an Email column and a column with each certificate's Drive link, such as the "Merged Doc URL" column Autocrat writes. An optional Name column personalises the greeting.CERT_FOLDER_ID, the ID in the folder's URL): each certificate's file name contains the attendee's email, e.g. [email protected]./api/health shows "certificates": true.Google Docs and Slides certificates are converted to PDF automatically. Keep each certificate under about 4 MB (Vercel's response limit).
cp .env.example .env.local # fill in ANTHROPIC_API_KEY (and Resend if you want to test email)
npm install
npm run dev # http://localhost:3000
app/page.tsx Landing page (light theme, images, scroll animations, CTA to /plan)
app/plan/page.tsx Form page
app/certificate/page.tsx Certificate download page (animated headline)
lib/certificates.ts Google Drive / Sheets certificate lookup
components/PlanForm.tsx 5-step form, loading and result screens, PDF download
app/api/plan/route.ts Pipeline: validate → agent → PDF → email → lead webhook
lib/schema.ts Form options, form schema, AI output schema
lib/agent.ts System prompt and Claude call (structured output, refusal fallback, self-correction)
lib/guardrails.ts Input, prompt and output guardrails, rate limiting
lib/pdf.tsx Branded PDF document
lib/email.ts Email template and sending