CareerForge
An AI-powered career intelligence platform that streams Claude CLI conversations in real time, manages a 46-job pipeline with auto-generated resumes and cover letters, tracks 338 skills with 1-10 self-assessment ratings, generates study materials, and maintains a structured journal with mood tracking and principle extraction.
Real-Time AI Chat
CareerForge streams Claude CLI responses in real time over WebSocket. The chat system supports multi-session conversations, mid-stream steering, message queuing, and file attachments. Each session persists to SQLite and can be resumed across browser reconnections.
System Architecture
A full-stack TypeScript application with a React 19 frontend, Express 5 backend, SQLite database, and a custom Claude CLI bridge that spawns and manages AI sessions as child processes with full duplex streaming.
The Claude CLI Bridge
The defining technical challenge. CareerForge spawns claude as a child process,
pipes messages through stdin, and parses streaming JSON from stdout in real time.
Sessions persist across browser reconnections via "orphaned bridge" management —
if a client disconnects while Claude is processing, the bridge keeps running and
reattaches when the client returns.
sequenceDiagram
participant Browser
participant WebSocket
participant Bridge as Claude Bridge
participant CLI as Claude CLI
Browser->>WebSocket: chat message
WebSocket->>Bridge: sendMessage(text)
Bridge->>CLI: spawn claude -p --stream-json
Bridge->>CLI: write to stdin
loop Streaming Response
CLI-->>Bridge: stdout JSON chunks
Bridge-->>WebSocket: emit "stream" event
WebSocket-->>Browser: real-time text delta
end
CLI-->>Bridge: process close
Bridge->>Bridge: save to DB + disk
Bridge-->>WebSocket: emit "complete"
WebSocket-->>Browser: full response
First message uses --session-id, subsequent messages use --resume. Full conversation context preserved across exchanges.
Inject guidance via stdin while Claude is actively responding. \n\n[USER STEERING]: message\n\n
Messages queue when Claude is busy. processQueue() automatically sends the next message after each response completes.
If the browser disconnects mid-response, the bridge keeps processing. Client reconnects and reattaches to the active session.
Job Pipeline
A Kanban-style job board tracking 46 opportunities through a 13-stage pipeline — from initial discovery through interviews to offer negotiation. Each job card shows fit score, compensation range, and links to auto-generated artifacts: tailored resume, cover letter, and skill gap analysis.
File watcher monitors jobs/opportunities/ and auto-indexes new postings with metadata extraction from markdown.
Each opportunity gets a tailored resume, cover letter, skill gaps analysis, and interview prep — all generated via Claude.
Skills Assessment
338 skills across 10 color-coded categories, extracted from job opportunities and the master resume. Each skill gets a 1-10 self-rating with button-style selectors. Skills rated 6+ are flagged as resume-ready. Generate Study triggers Claude to create study materials that auto-populate the Study Guide with multiple-choice interview prep questions.
Structured Journal
AI-powered journaling with auto-parsed sections, mood tracking, energy levels, inline hashtag extraction, and principle linking. Journal entries are created through Claude chat sessions in a special "journal mode" that structures freeform thoughts into categorized sections with action items.
Data Architecture
28 SQLite tables across 7 migrations manage the full lifecycle — from job discovery through skill assessment, study generation, journaling, and interview preparation. Three auto-indexers watch the file system for changes and keep the database synchronized.
flowchart LR
subgraph Indexers["Auto-Indexers"]
OI["Opportunity
Indexer"]
SI["Study
Indexer"]
JI["Journal
Indexer"]
end
subgraph FS["File System"]
OPP["jobs/opportunities/
44 folders"]
JRN["content/journal/
Markdown files"]
end
subgraph DB["SQLite (28 tables)"]
JOBS["Jobs Pipeline
13 statuses"]
SKILLS["Skill Assessments
338 skills"]
STUDY["Study Topics
+ MC Questions"]
JOURNAL["Journal Entries
Sections + Tags"]
CHAT["Chat Sessions
+ History"]
end
FS --> Indexers
OI --> JOBS
OI --> STUDY
SI --> STUDY
JI --> JOURNAL
style Indexers fill:#1a1000,stroke:#f59e0b
style FS fill:#0a1520,stroke:#22d3ee
style DB fill:#0a1a15,stroke:#10b981
Study Guide Generation
When you click "Generate Study" on a skill, the system creates multiple-choice interview prep questions immediately (adapted to your self-rated proficiency level), then queues a background Claude CLI job to generate comprehensive study material with learning paths, practice exercises, and curated resources.
Feature Inventory
Claude Chat with Streaming
Multi-session conversations with real-time token streaming, agent activity indicators, file attachments, and persistent history.
Job Pipeline (Kanban)
46 jobs across 13 statuses with auto-indexing, fit scoring, interview tracking, contact management, and salary negotiation notes.
Skills Assessment
338 skills across 10 categories with 1-10 rating. Resume/Jobs source badges. Study material generation triggers.
Study Guide + MC Questions
Auto-generated multiple-choice questions adapted to proficiency level. Background Claude jobs for deep study material.
Structured Journal
Mood/energy tracking, auto-categorized sections, principle extraction, action items, and markdown file indexing.
Workspace File Explorer
Directory tree browser with file preview, security bounds checking, and Chokidar-based file watching for live updates.
Interview Preparation
Per-job interview round tracking, questions asked, interviewer notes, follow-up draft composition, and prep packages.
Auto-Indexing Pipeline
Three file watchers (opportunities, journals, skill gaps) that parse markdown, extract metadata, and sync to SQLite in real time.
Technology Stack
Key Architecture Decisions
Spawning claude as a subprocess instead of calling the Anthropic API directly. Gets full agent capabilities (tool use, file access, project context) without reimplementing them. Session resume via --resume flag maintains conversation continuity.
Zero-config embedded database with WAL mode. No Docker dependency for development. Synchronous better-sqlite3 driver simplifies code. Sufficient for single-user workstation use case.
WebSocket handles streaming AI responses and real-time events. REST handles all data CRUD operations. Clean separation — WebSocket for push, REST for pull.
Job opportunities, journals, and skill gaps are markdown files on disk. Auto-indexers parse and sync to SQLite. Source of truth stays human-readable and version-controllable.
The Bottom Line
CareerForge treats job hunting like a systems engineering problem — pipeline management, data-driven skill assessment, AI-augmented preparation, and structured reflection. 7,400+ lines of TypeScript. 65 API endpoints. 28 database tables. One engineer building the machine that builds the career.