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
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.
BusinessTypeScript · CSSGitHub @Steev-vhooOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full 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