@wayofmono/wo-cto-dashboard
v0.6.3
Published
CTO Dashboard & Developer Portal for Way-Of projects
Readme
WayOfDev CTO Dashboard
Production CTO Dashboard & Developer Portal for Way-Of projects (WayOfMono, WayOfWork, OptiCat)
🚀 Quick Start
One-liner (no clone, no install)
npx @wayofmono/wo-cto-dashboardGlobal install (use wodev anywhere)
# Option A: local prefix (recommended — no sudo, everything works)
npm config set prefix ~/.npm-global
echo 'export PATH="$PATH:~/.npm-global/bin"' >> ~/.bashrc
source ~/.bashrc
npm install -g @wayofmono/wo-cto-dashboard
wodev # production server (default)
# Option B: sudo global install
sudo npm install -g @wayofmono/wo-cto-dashboard
sudo wodev --build # one-time build (needs root for .next/)
wodev # production server (read-only, works as user)
# Option C: development mode (hot reload)
wodev --devFrom source (clone)
git clone https://github.com/Way-Of/wayofdev.git
cd wayofdev
pnpm install
pnpm devCLI Reference
| Command | Mode | Description |
|---------|------|-------------|
| wodev | production | Starts production server (read-only, requires build) |
| wodev --dev | development | Starts dev server with hot reload (writes .next/) |
| wodev --build | build | Builds for production (writes .next/) |
| wodev --update | — | Updates to latest npm version |
| wodev --setup | — | Configure GitHub OAuth (per-user, one-time) |
| wodev --uninstall | — | Remove dashboard globally |
| wodev --version | — | Prints version |
| wodev --help | — | Shows help |
Port: http://localhost:6969 (override with PORT=8080 wodev)
📋 Features
| View | Description | |------|-------------| | Overview | Ticket stats, velocity, blockers | | Tickets | Kanban with filters, review queue, GitHub/Local source switch + branch selector | | Standup | Daily async check-ins (yesterday/today/blockers) | | Skills | Real-time skill health across all machines | | Ideas | Prioritized idea board with voting | | Developers | Workflow and assignment tracking | | Docs | Architecture docs and decision records |
🔐 GitHub Authentication
Optional — the dashboard works with pincode login alone. GitHub login is only needed for authenticated API calls (private repo ticket fetching, 5000 req/hr vs 60).
Pre-Configured (Zero Setup)
The npm package ships with the Way-Of org's shared OAuth App pre-embedded.
Just run wodev and click "Sign in with GitHub" — no setup required.
npm install -g @wayofmono/wo-cto-dashboard
wodev
# Open http://localhost:6969 → click "Sign in with GitHub"Custom OAuth (For Other Orgs)
If you're using the dashboard for your own organization, run wodev --setup to
configure your own OAuth App:
wodev --setup
# Creates OAuth at https://github.com/settings/developers
# Callback: http://localhost:6969/api/auth/callback/github
# Enter your Client ID + Secret
sudo wodev --build
wodevCredentials are saved to ~/.config/wodev/.env and auto-loaded (overrides embedded defaults).
How Developer Mapping Works
When you sign in with GitHub, the dashboard looks up your GitHub username in
the team's developer list (thoughts/ repo). If your GitHub username matches
a registered developer, you're recognized with your role and permissions.
Without GitHub Auth
Use the pincode login with your GitHub username + team pincode. All features work normally; only the "GitHub source" ticket switcher requires OAuth.
📦 Data Source
Tickets loaded from f-rr-d (förråd) GitHub repo: https://github.com/Way-Of/f-rr-d
- Projects: WayOfMono (WOMONO), WayOfWork (WOW), OptiCat (OPT)
- Source switch: Local filesystem ↔ GitHub (main/develop/staging branches)
- Fallback: Auto-falls back to local if GitHub unavailable
🛠️ Commands
pnpm dev # Start dev server (port 6969)
pnpm build # Production build
pnpm start # Run production build
pnpm lint # Run ESLint
pnpm db:push # Push Prisma schema to SQLite🖥️ Electron App
pnpm electron:dev # Dev with Electron wrapper
pnpm electron:build # Build distributable
pnpm electron:dist # Build + package (no publish)📁 Project Structure
wayofdev/
├── src/
│ ├── app/ # Next.js 16 App Router
│ │ ├── api/ # API routes (tickets, developers, docs, auth)
│ │ └── page.tsx # Login page
│ ├── components/
│ │ ├── dashboard/ # Dashboard views
│ │ └── ui/ # Radix UI components
│ ├── lib/
│ │ ├── auth.ts # NextAuth.js GitHub provider
│ │ ├── thoughts.ts # f-rr-d data fetching (GitHub API)
│ │ └── types.ts # TypeScript types
│ └── store/
│ └── dashboard-store.ts # Zustand state
├── prisma/
│ └── schema.prisma # SQLite schema
├── electron/ # Electron main/preload
├── public/ # Static assets
└── .github/workflows/ # CI/CD🔧 Tech Stack
- Framework: Next.js 16 (App Router, Turbopack)
- Auth: NextAuth.js (GitHub OAuth)
- Database: Prisma + SQLite (dev), PostgreSQL (prod)
- State: Zustand
- UI: Radix UI + Tailwind CSS
- Icons: Lucide React
- Desktop: Electron 30
🌐 Deployment
Vercel (Recommended)
vercel --prodAdd env vars in Vercel dashboard.
Docker
docker build -t wayofdev .
docker run -p 6969:6969 --env-file .env wayofdevElectron Auto-Updates
Built with electron-builder, publishes to GitHub Releases on wayofdev repo.
📊 API Endpoints
| Method | Endpoint | Description |
|--------|----------|-------------|
| GET | /api/health | Health check |
| GET | /api | Dashboard data (tickets, devs, docs) |
| GET | /api?type=tickets&source=github&branch=main | Tickets from GitHub |
| GET | /api?type=developers&source=github | Developers from GitHub |
| GET | /api?type=docs | Documentation |
| POST | /api/ideas | Create idea |
| POST | /api/standup | Create standup entry |
| POST | /api/news | Create news item |
| GET | /api/skills/report | Skills health |
📝 Environment Variables
| Variable | Required | Description |
|----------|----------|-------------|
| GITHUB_CLIENT_ID | No* | GitHub OAuth App Client ID (set via wodev --setup) |
| GITHUB_CLIENT_SECRET | No* | GitHub OAuth App Secret (set via wodev --setup) |
| NEXTAUTH_SECRET | No | Auto-generated as random hex |
| NEXTAUTH_URL | No | Auto-set to http://localhost:{PORT} |
| DATABASE_URL | No | SQLite: file:./dev.db |
*Only needed for private GitHub repo access
🤝 Contributing
- Fork the repo
- Create feature branch
- Make changes
- Run
pnpm lintandpnpm build - Open PR
📄 License
MIT © Way-Of
