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
One account for the apps a team runs on: Events for ticketing, Forms for intake, Flow for projects, Notes for shared canvases, and Grey for answers from your files.
BusinessJavaScript · PLpgSQLGitHub @bhargavjoshi1237OnlineOwner 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
Front door to the Geiger suite: marketing site, accounts, organisations and billing, plus the routing hub that serves every product on one domain.
Taken from the repository README
Loading the full README.
Read the full README ↗The front door to the Geiger suite.
The marketing site, the account system, and the routing hub that stitches every Geiger product into one experience at one domain.
Part of the Geiger suite.
Geiger Dash is the parent application of the Geiger suite. It owns everything that is shared rather than product-specific:
/flow, /notes, /events, /forms, /content, /campaign, /assets, /property, /audio), so the suite shares one domain and one session.Because every product is proxied through Dash and every product app runs under its own base path on that origin, a user signs in once and moves between applications without another handshake.
| Area | What it does |
|---|---|
| Public site | Home, product and per-product feature pages, solutions, pricing, contact, privacy and terms, rendered with SEO metadata and OpenGraph images. |
| Blog & changelog | Published posts and release notes with their own routes, widgets, and a daily automation job that drafts posts from search plus an LLM. |
| Help Center | Suite documentation served from /help/[...slug] (with ⌘K search and Ask AI), edited by content editors in Studio at /studio/help. /docs belongs to the Geiger Docs product. |
| Auth & onboarding | Login, signup, OAuth with PKCE, an auth callback, onboarding, and token-based invites. |
| Organisations | Org creation and settings, membership, roles, and per-org usage. |
| Billing | Stripe subscriptions, checkout, and a webhook endpoint for lifecycle events. |
| Studio | Internal authoring tools — a content studio, a pages studio, and post management. |
| Admin | Email template management, built on React Email and delivered via Resend. |
| Free tools | Public utilities — image converter, crop, and resize — used as top-of-funnel surfaces. |
| Analytics | PostHog instrumentation across the public site and app. |
| SEO | Generated sitemap.xml and robots.txt, refreshed daily by a cron job. |
@geiger/ui component library@geiger/orm@xyflow/react), Mermaidnpm install
Create a .env file in the project root:
# Site
NEXT_PUBLIC_APP_URL=http://localhost:3000
NEXT_PUBLIC_ROOT_DOMAIN=geiger.studio
NEXT_PUBLIC_COOKIE_DOMAIN=.geiger.studio
# Supabase
NEXT_PUBLIC_SUPABASE_URL=your-supabase-url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
# Postgres (scripts and migrations)
DATABASE_URL=your-pooled-postgres-url
DIRECT_URL=your-direct-postgres-url
# Stripe
GEIGER_STRIPE_SECRET_KEY=your-stripe-secret-key
GEIGER_STRIPE_WEBHOOK_SECRET=your-stripe-webhook-signing-secret
# Email
EMAIL_FROM=your-sender-address
# Analytics
NEXT_PUBLIC_GEIGER_POSTHOG_PROJECT_TOKEN=your-posthog-token
NEXT_PUBLIC_GEIGER_POSTHOG_HOST=your-posthog-host
# Cron (server-only)
CRON_SECRET=your-vercel-cron-secret
# Blog automation (optional)
BLOG_LLM_BASE_URL=...
BLOG_LLM_API_KEY=...
BLOG_LLM_MODEL=...
BLOG_SEARCH_API_URL=...
BLOG_SEARCH_API_KEY=...
Schema changes are timestamped SQL migrations in supabase/migrations/, applied
in version order by @geiger/orm
and recorded in public.geiger_migrations:
npm run db:status # applied vs pending
npm run db:new -- <name> # scaffold a migration
npm run db:push # apply everything pending
npm run db:seed # re-runnable data
See MIGRATION_CONVENTIONS.md before writing any DDL.
Email templates have their own commands:
npm run email:migrate
npm run email:seed
npm run dev
Open http://localhost:3000 in your browser.
Two Vercel cron jobs are declared in vercel.json, both authenticated with CRON_SECRET:
| Schedule | Endpoint | Purpose |
|---|---|---|
0 5 * * * | /api/cron/refresh-sitemap | Regenerates sitemap.xml from the permanent public routes and published blog posts (cached for one day). |
0 0 * * * | /api/cron/blog-automation | Drafts and publishes automated blog content. |
To refresh the sitemap manually:
$env:CRON_SECRET="your-vercel-cron-secret"
npm run sitemap:refresh
Set SITE_URL when refreshing a preview or local deployment instead of https://geiger.studio.
app/
page.js, product/, features/, solutions/, pricing/ Public marketing site
blog/, changelog/, docs/, tools/, contact/, legal Content and utility surfaces
login/, signup/, auth/, onboarding/, invite/ Account flows
org/[ORGID]/, billing/ Organisations and billing
studio/, admin/ Internal authoring and email admin
api/ Cron, email, OAuth, Stripe, studio endpoints
lib/
product-routes.mjs Product rewrites — the suite routing table
org/, billing/ Organisation and subscription logic
oauth/ PKCE, providers, session
email/, blog-*/ Email delivery and blog automation
sitemap/, seo SEO generation
supabase/migrations/ Timestamped @up/@down migrations (npm run db:push)
scripts/ Sitemap and email seed runners
docs/ Automation and pricing documentation
Dash is linked to Vercel auto-deploy, and its rewrites depend on the deployed product apps. Pushing to main triggers builds across the linked repositories, so land work on a branch and merge deliberately.
Adding a new product to the suite means adding its rewrite pair to lib/product-routes.mjs — that also registers it as a valid post-login redirect target.
This codebase follows a consistent set of patterns. Read these before contributing:
MODULE_CONVENTIONS.md — how to build a workspace screenSUPABASE_CONVENTIONS.md — the data-layer playbookMIGRATION_CONVENTIONS.md — schema changes and @geiger/ormcrafting.md — UI craft and quality bardocs/blog-automation.md — how the blog automation job worksGeiger Dash is the parent app of the Geiger suite. The products it serves — Flow, Notes, Events, Forms, Content, Campaign, Comms, Docs, Property, Assets, Office — each live in their own repository, share one Supabase project, and use the @geiger/ui component library so the whole suite feels like one product.
Private and unpublished. All rights reserved.