Local solo EM workbench for evidence-backed performance reviews and promotion cases.
ICs never log in. Self and peer input arrives as JSON import bundles. Your vault stays on disk: Lock & encrypt seals SQLite and dossier files at rest.
Dark · Coral — one of sixteen appearance combinations
Most review tools are either a shared HR portal (everyone logs in) or a blank Google Doc. This app is for one engineering manager who wants:
- A year-round dossier so writing season is not a scavenger hunt
- Role frameworks as the bar so ratings map to expectations, not vibes
- Evidence-linked drafts so extreme scores and promo claims stay grounded
- Local custody so private notes and underperformance plans stay on your machine until you export
The product is intentionally single-user. Peers and ICs participate by filling exported forms that you import back. That keeps anonymity and trust simple for v1.
upload role R&R → assign people → capture dossier evidence
→ open a cycle → import self/peer bundles → writing desk (+ AI)
→ consistency + team performance check → share export → history / promo packets
| Stage | Intent |
|---|---|
| Roles + people | Define what "good" means before you score anyone |
| Dossier | Accumulate achievements, goals, feedback, docs, and concerns all year |
| Cycle + bundles | Time-box the review without building a multi-user portal |
| Writing desk | Draft, cite, lint, finalize, then share a subject packet |
| Consistency / team performance | Catch clustering, thin evidence, and odd rating shapes before you ship |
| Promotions | Reuse the same role bar for next-level / promo cases |
pnpm install
pnpm rebuild better-sqlite3 # if native module missing
pnpm dev| UI | http://localhost:5173 |
| API | http://127.0.0.1:8787 |
| Seed password (demo only) | workbench |
First load: choose Empty workspace or Demo team (8-person org). Demo mode pre-fills password workbench for exploration only — never put real employee data behind it. Empty workspaces require an explicit password (8+ characters); the API never invents a default. Between sessions use Lock & encrypt. To wipe and start over, use Delete workspace in Settings (or Erase workspace on the unlock screen) — password + type DELETE.
Requires pnpm 10.33.3 (see AGENTS.md if Corepack hands you pnpm 11).
pnpm desktop:dev # native window (needs WebView + Rust)
pnpm desktop:buildDesktop installers:
- Artifacts only: Actions → Desktop Installers → Run workflow (defaults to Windows + Linux; uploads
desktop-windows-x86_64/desktop-linux-x86_64, optional macOS) - GitHub Release: Actions → Release → Run workflow with version
0.1.0-alpha.1(or push tagv0.1.0-alpha.1)
Merges to main only run unit tests + typecheck. Details: apps/desktop/README.md.
pnpm mcpSetup: packages/mcp/README.md · .cursor/mcp.json.example.
Settings → Appearance picks dark / light / system plus one of eight accents. That is sixteen looks on the same product surface.
| Accents | |
|---|---|
| Classic | Teal · Ocean · Forest · Slate |
| Vibrant | Coral · Amber · Magenta · Citrus |
| Teal | Ocean | Forest | Slate |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Coral | Amber | Magenta | Citrus |
![]() |
![]() |
![]() |
![]() |
| Teal | Ocean | Forest | Slate |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Coral | Amber | Magenta | Citrus |
![]() |
![]() |
![]() |
![]() |
Every main page was also captured in every accent × mode. Browse the matrix under docs/screenshots/themes/ or the index in docs/screenshots/THEMES.md.
Regenerate with pnpm screenshots (UI + API running; demo password workbench). The tour below rotates accents so you see the product across the palette.
Intent: Keep the workspace sealed when you walk away.
How it works: On first run you create a workspace password and choose an empty vault or a seeded demo org. Later sessions decrypt with that password. Lock & encrypt re-seals SQLite and files. Wipe with Erase workspace / Delete workspace (password + type DELETE).
Intent: Answer "who is blocked, and what should I do next?"
How it works: Pick a cycle for pipeline status, deadline nudges, writing-time / evidence dashboard, and Needs director attention (flags only — no private note bodies). Sticky On this page jumps between cycle, attention, dashboard, and queue.
Intent: Maintain the roster of directs you manage reviews for.
How it works: List, add, or CSV-import people (EM required first), then open a dossier. Role assignment and cycle participation hang off these records.
Intent: Build a citation pool all year so writing season is not empty.
How it works: Achievements, goals, feedback (optional 1:1 themes), documents, concerns, integrations, and a Timeline. Visibility keeps EM-only material out of subject exports.
Intent: Make the evaluation bar explicit.
How it works: Author or import RoleDefinitions, assign current / next roles, extract from R&R docs. Writing desks and promo packets read from these definitions.
Intent: Time-box a review season without live IC login.
How it works: Create a cycle, export self/peer JSON bundles, import responses, waive with a reason when needed.
Intent: Evidence-backed manager review in a bounded time (target ≤45 min/person).
How it works: Score against the assigned role, link evidence, draft (optionally with AI), lint, finalize (freezes cites), then share HTML with private / EM-only stripped. Skip-level talking points and a per-person director card for upward share.
Intent: Reuse the same role bar for next-level cases.
How it works: Mark gaps vs demonstrating, draft the case, then Promo committee export for a printable packet with allowlisted cites.
Intent: Catch unfair shape in your own drafts before anyone else sees them.
How it works: Rating distribution, per-person cards, flags (thin evidence, extreme overall, unassigned role). Calibration bundles for director handoff and encrypted read-only .prm.enc packs.
Intent: See rating and coaching shape as graphs.
How it works: Distribution, evidence scatter, competency averages, promo readiness, writing-time buckets, themes, cross-cycle trends, and a printable director briefing.
Intent: Coaching view for a date window, not final ratings.
How it works: Last 7 / 14 / 30 days or custom range — throughput, themes, concerns, evidence freshness.
Intent: Unblock writing when dossiers are still thin after first adopt.
How it works: Wizard for starter evidence, or MCP / integrations for bulk load.
Intent: Grounded questions over the workspace or a dossier without inventing evidence.
How it works: Scoped chat with allowlisted cites; respects private-tier egress settings.
Intent: Providers, privacy gates, appearance, and vault maintenance.
How it works: AI providers, egress toggles, Jira / Bitbucket / GitHub / Linear, backup / restore, activity verify, and the eight-accent appearance picker. Danger zone erases the vault.
- Encrypted vault (AES-256-GCM) for DB and dossier files on lock
- People / roles / cycles with self and peer JSON bundles
- Writing desk: competencies, evidence links, citation freeze, HTML subject packets
- Consistency and team performance views before you share
- Director / upward packs: briefing HTML, calib room pack, promo committee export, skip-level talking points
- Sprint pulse for date-window coaching
- Eight accents × dark/light appearance system (Coral, Amber, Magenta, Citrus plus Teal, Ocean, Forest, Slate)
- AI: digests, section draft, peer synthesize, chat, with citation allowlist
- Desktop packaging (Tauri); installers via Actions → Desktop Installers or tagged Release- Delete / recreate workspace from Unlock or Settings
Product and architecture live under /docs. Start with docs/PRODUCT_BRIEF.md. Core loop evaluation: docs/CORE_LOOP_EVAL.md. Theme matrix: docs/screenshots/THEMES.md. Public flip checklist: docs/PUBLIC_RELEASE.md. Cursor cloud notes: AGENTS.md.
- License:
LICENSE(MIT) - Third-party notices (bundled Node sidecar):
THIRD_PARTY.md - Changelog:
CHANGELOG.md - Security reports:
SECURITY.md - Contributing:
CONTRIBUTING.md - Code of conduct:
CODE_OF_CONDUCT.md



































