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
A read-only view of ExpertOps running on sample data.
Translation pending
BusinessTypeScript · CSSGitHub @yds233013OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Operations workspace for an expert network: screening, matching, staffing, work review and payment export, with human approval gates. Next.js + Postgres job queue.
Loading the full README.
Read the full README ↗An operations workspace for running an expert network end to end: sourcing and screening people, staffing them onto client projects, reviewing their work and preparing payment, with a human sign-off at every consequential step.
Live demo: https://web-production-09e7e.up.railway.app — opens on the
public, read-only /demo
page (no login). The applicant side is at
/apply/opportunities.
Demo runs on synthetic data; email is simulated and no money moves.
rules-v1) that shows why each expert was ranked or excluded.Stack: Next.js 15 (App Router) · React 19 · TypeScript · Prisma · PostgreSQL 16 · Tailwind 4 · Vitest · Playwright · deployed on Railway (web + worker + Postgres).
npm install && cp .env.example .env
npm run db:up && npm run db:migrate && npm run db:generate && npm run db:seed
npm run dev # web on http://localhost:3000
npm run worker # background worker, in a second terminal
The core lifecycle:
application → screening → human qualification → onboarding → operator
verification → invitation → acceptance → availability → staffing assignment →
work submission → human review → payment preparation → export → offboarding
Routine coordination is automated. Consequential decisions are not: ten named approval gates require a signed-in human, and every one is recorded against the operator who made it. There are no paid APIs and no language models; matching is deterministic rules.
| Tool | Version used | Notes |
|---|---|---|
| Node.js | 20.11 or newer (built on 24.1) | |
| Docker | any recent release | Only used to run PostgreSQL |
| PostgreSQL | 16 | Supplied by docker compose |
git clone <this repository>
cd expertops
npm install
cp .env.example .env # every default points at a local service
npm run db:up # starts PostgreSQL on host port 5433
npm run db:migrate # applies prisma/migrations
npm run db:generate # generates the Prisma client
npm run db:seed # loads repeatable synthetic data
npm run db:up publishes PostgreSQL on 5433, not 5432, so it does not
collide with a PostgreSQL you may already run locally. It creates three
databases: expertops for development, expertops_test for the test suite, and
expertops_e2e for the browser suite. The two test databases are truncated on
every run; the development one is never touched by a test.
To point at your own PostgreSQL instead, set DATABASE_URL, TEST_DATABASE_URL
and E2E_DATABASE_URL in .env and skip npm run db:up. The guard in
src/lib/database-safety.ts will refuse any name it does not recognise as a
test or end-to-end database, which is deliberate; see
Test database safety.
To run the browser suite you also need its browser once:
npx playwright install chromium
The application is two processes. Run them in separate terminals.
# terminal 1 — web application on http://localhost:3000
npm run dev
# terminal 2 — background worker (job queue + scheduler)
npm run worker
Then open http://localhost:3000 and sign in with one of the demo credentials.
The worker is not optional. Invitations are queued by the UI and sent by the
worker, so without it invitations stay in DRAFT and the simulated outbox never
drains. The Worker screen in the app shows queue depth and schedule state.
This is the beginning of the README. Read the rest at the original. Read the full README ↗