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.