CompanyOS — The Intelligent Company Operating System
A next-generation company operating system that unifies HR, project management, CRM, meetings, email, approvals, and reporting into one coherent platform.
Every user logs into a different application — role-based dashboards, navigation, widgets, and workflows.
Architecture
company-os/
├── client/ # React + Vite + Tailwind (role-based UI)
├── server/ # Node.js + Express + Prisma (modular monolith)
└── shared/ # Shared types, permissions, dashboard configs
Core Systems
| System | Description |
|---|
| RBAC | Role-based access with module visibility, action permissions, and data scope |
| Event Bus | Event-driven architecture — every action publishes events |
| Workflow Engine | Trigger → Conditions → Actions → Notifications |
| Decision Workflows | Business events generate decision cards with predefined options |
| Notification Center | Read, snooze, delegate, complete, archive, pin |
| Integration Registry | Adapter pattern for Slack, GitHub, Jira, Google, Salesforce, etc. |
| Audit Log | Every action recorded with who, what, when, and previous/new values |
| Unified Search | Cross-module search across employees, tasks, clients, ideas |
| Chat & Messaging | Direct messages, group chats, @mentions, share items, real-time via WebSocket |
Quick Start
# Install dependencies
npm install
# Start local Postgres (or use a hosted Postgres URL in server/.env)
docker compose up -d
cp server/.env.example server/.env
# Set up database and seed demo data
npm run db:push
npm run db:seed
# Start dev servers (API on :3001, UI on :5173)
npm run dev
Open http://localhost:5173
Demo Accounts
All accounts use password: password123
| Role | Email | Experience |
|---|
| Developer | dev@companyos.com | Tasks, sprints, PRs, meetings |
| HR | hr@companyos.com | Employees, leaves, payroll, policies |
| Talent Acquisition | ta@companyos.com | ATS pipeline, candidates, interviews, CVs |
| Sales | sales@companyos.com | Clients, deals, pipeline, renewals |
| Finance | finance@companyos.com | Invoices, expenses, budget |
| Engineering Head | eng@companyos.com | Team productivity, decisions |
| CEO | ceo@companyos.com | Company health, all KPIs |
| Admin | admin@companyos.com | Workflows, integrations, audit |
Role-Based Dashboards
Each role gets a completely different experience:
- Different navigation — only modules relevant to the role
- Different widgets — stat cards, lists, charts tailored per role
- Different decisions — business event cards assigned by role
- Different permissions — module visibility, actions, and data scope
Third-Party Integrations
Built-in adapter stubs for:
- Slack, GitHub, Jira, Google Workspace, Microsoft 365
- Salesforce, QuickBooks, BambooHR, Zoom
- Custom webhooks
Each integration supports inbound/outbound/bidirectional sync and module-level enablement.
API Endpoints
| Endpoint | Description |
|---|
POST /api/auth/login | Authenticate and get role config |
GET /api/notifications | User notifications |
GET /api/tasks | Role-scoped tasks |
GET /api/decisions | Pending decision cards |
POST /api/decisions/:id/decide | Record a business decision |
GET /api/integrations | Third-party integrations |
GET /api/search?q= | Unified search |
GET /api/health | Company health KPIs |
GET /api/timeline | Company event timeline |
GET /api/audit | Audit log |
GET /api/chat/conversations | User's conversations |
POST /api/chat/conversations | Create DM or group chat |
POST /api/chat/conversations/:id/messages | Send message with @mentions or shared items |
Guiding Principle
Every action answers four questions:
- Who can see it? — RBAC + module visibility
- Who can act on it? — Action permissions + approval authority
- What happens next? — Workflows + event-driven automation
- How is it recorded? — Audit log + company timeline
Tech Stack
- Frontend: React 19, Vite, Tailwind CSS 4, Zustand, React Router
- Backend: Node.js, Express, Prisma (PostgreSQL), Socket.io
- Shared: TypeScript types for roles, permissions, events, integrations
Deploy (Railway — single service)
One Railway service serves the React UI and API from the same domain.
1. Railway setup
- railway.app → New Project → Deploy from GitHub → select
company-os
- Delete the
@company-os/client service if Railway created it — keep only server
- Add PostgreSQL (+ New → Database → PostgreSQL)
- On the server service → Variables:
DATABASE_URL — reference from Postgres
JWT_SECRET — openssl rand -hex 32
CLIENT_URL — optional; set to your Railway public URL after first deploy
- Settings → confirm Root Directory is repo root (empty or
/)
- Build/start commands are in
railway.toml at repo root
- Deploy → Settings → Networking → Generate Domain
- Seed once in Shell:
npm run db:seed --workspace=server
2. Verify
- App:
https://your-app.up.railway.app
- API health:
https://your-app.up.railway.app/api/health
- Login:
ceo@companyos.com / password123
No VITE_API_URL needed — the UI uses /api on the same domain.