Synaplan
기업을 위한 오픈소스 AI 플랫폼
rtylr은 업무·재무·고객·팀·운영·영업을 한 곳에서 관리하고 AI인 Caret가 내장된 워크스페이스이며 베타 기간 무료입니다
rtylr is one workspace for running your business: work, finance, customers, team, operations and sales, with Caret, the AI built in. Free during the beta.
비즈니스GitHub @rtylrs온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
저장소 정보는 아직 수집하지 않았습니다.
아직 감지된 업데이트가 없습니다. 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.