Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
尚未收集仓库信息。
尚未检测到更新。GitHub 发布版本后会显示在这里。
The rtylr business platform in one monorepo: Portal, public menu, POS, landing and docs sites, plus the Go backend (Onion) and API contracts.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗Run everything. From one workspace.
One workspace to run a small business — work, finance, customers, team, operations and sales, with Caret, the AI built in.
Beta · Free while we build it with you.
Start free → · Website · Docs · Self-host
| Module | What it does |
|---|---|
| Flow | Projects, tasks, roadmaps, cycles, team workload |
| CRM | Customers, loyalty tiers, campaigns, segments |
| Finance | Invoices, expenses, P&L, tax, reconciliation |
| ERP | Inventory, suppliers, purchasing, stock |
| HR | Staff, shifts, payroll, time off, reviews |
| POS | Point-of-sale terminal, Vite web app + Tauri desktop shell |
| Menu | Public customer menu with QR codes, served from the Portal origin |
| Insights | Cross-app analytics, revenue, operations, reports |
| Recruit | Careers sites and an HR submissions inbox |
| Caret | The built-in AI: asks about overdue invoices, drafts, and answers across modules |
Each app is standalone. A business can buy one module and use it without ever touching the others — there is no all-or-nothing switch.
Requires pnpm 10.33 (pinned in clients/package.json), Node 20.19+ or 22.12+
(Vite 7's floor), and Go 1.27+ if you want the backend.
git clone https://github.com/rtylrs/rtylr.git
cd rtylr
pnpm -C clients install --frozen-lockfile
make -C voxie generate # contracts are generated, not committed
git config core.hooksPath .githooks # committed hooks; git does not track this
pnpm -C clients --filter @rtylr/portal dev
The Portal comes up on http://localhost:5175. The landing site runs with
pnpm -C clients/web/landing dev on port 4200.
Typecheck everything, or one member:
pnpm -C clients -r typecheck
pnpm -C clients --filter @rtylr/portal typecheck
| Path | What it is |
|---|---|
clients/ | The pnpm workspace root. Everything JavaScript/TypeScript. |
clients/app/ | The Portal application: business modules, the public customer menu, plus separate SSO and public Recruit entrypoints. |
clients/web/landing/ | Marketing site, Next.js static export. |
clients/web/docs/ | Documentation site, Next.js static export. |
clients/mcp/ | The MCP server — gives AI agents access to Flow, CRM, Finance, ERP. |
clients/pos/ | POS terminal: Vite web app plus the Tauri desktop shell in core/. |
clients/packages/ | Shared @voxire/* library layer and the generated contracts package. |
voxie/ | API contracts (.onk) plus generated Go and OpenAPI output. In-tree, single source of truth. |
services/onion/ | The Go backend: modules, platform packages, sqlc, worker. |
rtylrs/infra and rtylrs/pipelines stay separate — infrastructure and the
reusable build-and-deploy workflows.
Everything under clients/ is a member of the pnpm workspace rooted at
clients/, with a single lockfile. Apps depend on the shared layer through
workspace:*.
This is deliberate. Separate installs for the same packages gave a linked package one copy of its dependencies per consumer, and type identity needs the same declaration files, not the same versions.
Stack: React 19, Vite 7, Next.js 15 (landing and docs), TypeScript 5.9 in strict mode, Tailwind CSS, TanStack Query v5, Zustand, neverthrow, motion. Backend is Go with MySQL, sqlc, and Protocol Buffer contracts.
API request and response types are Protocol Buffers in voxie/proto, shared
between frontend and backend as the single source of truth.
voxie/proto/
common/v1/ # pagination, errors, timestamps
auth/v1/ # login, register, password reset
hub/v1/ # team, business, apps, dashboard, billing, developer
Change a .onk file, regenerate, and every consumer moves with it in one
commit. Generated TypeScript is committed.
Every API call returns a Result instead of throwing:
import { createApiClient, safeFetch, unwrap } from '@voxire/api';
const api = createApiClient('crm');
const safe = safeFetch(api);
export function useProducts() {
return useQuery({
queryKey: ['products'],
queryFn: () => unwrap(storeApi.listProducts()),
});
}
safeFetch returns ResultAsync<T, ApiError>; unwrap() bridges into React
Query. Network failures, validation errors and auth errors are values you match
on, not exceptions that escape a component.
apps/{name}/src/
features/{feature}/ # screen component + co-located hook
shared/ # components, lib, services, hooks, stores
layouts/DefaultLayout.tsx
routes/AppRoutes.tsx
clients/mcp ships an MCP server so an assistant can read and write your
workspace — tasks, invoices, customers, inventory:
npx @rtylr/mcp
See clients/mcp/README.md for Claude Desktop and
other client configuration.
Run rtylr on your own infrastructure with Helm or Docker Compose. Self-hosting is free — you pay only if you want support or managed hosting.
git clone https://github.com/rtylrs/rtylr-self-host.git
cd rtylr-self-host
helm upgrade --install rtylr ./helm/rtylr \
--set-string secrets.jwtSecret=$(openssl rand -hex 32) \
--set ingress.domain=example.com
Or Docker Compose: docker compose --env-file .env up -d.
Installers live in rtylrs/rtylr-self-host.
That repository contains no product source; it pulls public images and wires
the API, worker, upload service and frontends together.
Issues and pull requests are welcome. For anything larger than a bug fix, open an issue first so we can agree on the shape before you write the code.
pnpm -C clients lint
pnpm -C clients -r typecheck
pnpm -C clients -r test
MIT. See LICENSE.
You can use, modify, self-host and redistribute rtylr commercially. Support and managed hosting are available separately.