Synaplan
開源 AI 平台,供企業使用:自行託管的 AI 代理、符合 GDPR 的聊天機器人小工具、RAG 知識庫、WhatsApp 與 Outlook AI、MCP、多模型路由。Docker、Kubernetes 或託管於 Germ
AI 翻譯
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Front door to the Geiger suite: marketing site, accounts, organisations and billing, plus the routing hub that serves every product on one domain.
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 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.