← Back to Projects
Claude CLI Integration Real-Time Streaming Job Pipeline Skills Assessment Full-Stack TypeScript

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.

7,453Lines of Code
65API Endpoints
28Database Tables
338Skills Tracked
46Jobs in Pipeline

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.

CareerForge chat panel showing real-time Claude conversation with workspace file explorer and chat history sidebar

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.

Frontend
React 19 + Vite
Zustand State
TailwindCSS
↓ WebSocket + REST ↓
Backend
Express 5 API
WebSocket Server
File Watchers
↓ Spawn + Stream ↓
AI Layer
Claude CLI Bridge — stdin/stdout streaming, session resume, message queue
↓ Read / Write ↓
Data Layer
SQLite (28 tables)
File System
3 Auto-Indexers

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
						
Session Resume

First message uses --session-id, subsequent messages use --resume. Full conversation context preserved across exchanges.

Mid-Stream Steering

Inject guidance via stdin while Claude is actively responding. \n\n[USER STEERING]: message\n\n

Message Queue

Messages queue when Claude is busy. processQueue() automatically sends the next message after each response completes.

Orphaned Bridge Recovery

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.

CareerForge job pipeline showing Kanban board with Netflix, Block, and Moov Financial opportunity cards with fit scores and artifact links
Auto-Indexing

File watcher monitors jobs/opportunities/ and auto-indexes new postings with metadata extraction from markdown.

Artifact Generation

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.

CareerForge skills assessment showing 338 skills across 10 categories with 1-10 rating buttons, category filters, and resume-ready indicators
338Skills Tracked
10Categories
261Resume-Ready (6+)

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.

CareerForge journal showing entries with mood badges, energy indicators, and topics spanning architecture decisions, Kafka deep dives, powerlifting, and interview prep

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.

CareerForge study guide showing generated topics with question counts and progress tracking

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

FrontendReact 19, Vite 6, TailwindCSS 4, Zustand 5
BackendExpress 5, Node.js 20, 65 API endpoints
DatabaseSQLite 3 (better-sqlite3) — 28 tables, WAL mode
AI IntegrationClaude CLI via child_process — stdin/stdout streaming
Real-TimeWebSocket (ws) — session management, orphaned bridge recovery
File WatchingChokidar — 3 indexers (opportunities, journals, study gaps)
Schedulingnode-cron — job scans, follow-up reminders
Markdownreact-markdown + rehype-raw + remark-gfm + syntax highlighting

Key Architecture Decisions

ADR-001
Claude CLI over API

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.

ADR-002
SQLite over PostgreSQL

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.

ADR-003
WebSocket for Chat, REST for CRUD

WebSocket handles streaming AI responses and real-time events. REST handles all data CRUD operations. Clean separation — WebSocket for push, REST for pull.

ADR-004
File-Based Indexing

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.