How rjmad1/careerpropel works
1. System shape
- This repository is a Next.js 14 / React 18 / TypeScript application centered on a career-management dashboard.
- The architecture is primarily frontend-driven, with a clear separation between page composition, domain components, shared UI primitives, and integration layers.
2. Primary entry points
- src/app/layout.tsx and src/app/page.tsx are the top-level App Router entry points.
- src/components/Layout/AppLayout.tsx likely provides the persistent shell around the main workspace, while the page itself hosts the core dashboard experience.
3. Main product surface
- The core experience is a Kanban / swimlane job pipeline with supporting views for agent activity, notifications, and analytics.
- The readme describes a 14-stage pipeline, and the file tree confirms the dashboard is organized around src/components/Kanban, src/components/Agent, src/components/Notifications, and src/components/analytics.
4. Domain-specific UI subsystems
- Kanban/ contains board-level composition and item rendering: KanbanBoard, Swimlane, and JobCard.
- Agent/ visualizes autonomous workflow activity through AgentCard, AgentLog, and AgentRail.
- Notifications/ handles in-app alerting and toast delivery.
- analytics/ contains export actions, suggesting reporting is a first-class feature rather than a background concern.
5. State and interaction model
- src/hooks/useJobBoard.ts is the likely coordinator for board data, filtering, drag-and-drop state, and optimistic updates.
- src/hooks/useRealTime.ts suggests a separate synchronization layer for live events, keeping the UI updated without full refreshes.
- Together, these hooks imply the app is organized around client-side state orchestration plus live event reconciliation.
6. Integration boundary
- src/lib/api/client.ts is the generic HTTP/API access layer.
- src/lib/websocket/client.ts and src/lib/websocket/types.ts define the real-time transport boundary and event contracts.
- The architecture separates request/response data fetching from push-based synchronization, which is important for the board’s live behavior.
7. Cross-cutting services
- src/lib/notifications/manager.ts centralizes notification logic rather than embedding it in individual components.
- src/lib/analytics/export.ts indicates analytics output is handled as a shared service, likely feeding export buttons and reporting workflows.
- src/lib/config.ts, src/lib/utils.ts, and src/lib/design-tokens.ts provide shared configuration, helpers, and visual consistency.
8. Data model and type contracts
- prisma/schema.prisma defines the persistence schema, which is the main source of truth for jobs, agents, and related records.
- src/types/job.ts, src/types/agent.ts, and src/types/index.ts provide typed domain contracts for the UI and integration layers.
- This suggests the app keeps database schema, transport payloads, and UI models closely aligned.
9. UI foundation
- src/components/ui/ contains the design-system primitives: buttons, cards, inputs, badges, modals, spinners, and so on.
- Tailwind is part of the styling stack, with tailwind.config.js and design tokens likely used to enforce consistency across the dashboard.
10. Forms and workflow controls
- src/components/forms/AdvancedJobFilterForm.tsx indicates the board is not just static display; it supports richer query and filtering workflows.
- This sits between the user-facing board and the job-board state layer, shaping how records are narrowed and acted on.
11. Quality and validation
- Cypress end-to-end tests cover the key user journeys: kanban behavior, drag-and-drop, filters, notifications, realtime updates, analytics, and agent visibility.
- lighthouse.config.js and lighthouse-budget.json show performance budgets are part of the architecture, not an afterthought.
12. Operational support
- The repo includes backup/runbook documentation and scripts/weekly-backup.sh, which indicates production operations are considered part of the system design.
- The readme also references Docker, PostgreSQL, Redis, OAuth, and monitoring/tracing infrastructure, but those are not fully represented in the visible source tree here; they should be treated as the intended runtime environment and service boundaries rather than as locally implemented modules.
13. How data flows through the app
- User actions start in the dashboard UI, move through feature hooks, then into API or websocket clients.
- Responses and live events update shared state, which re-renders kanban lanes, agent panels, notifications, and analytics surfaces.
- Persistence is modeled through Prisma, while real-time updates are handled separately so the board can stay responsive under concurrent changes.
14. How to diagram it
- A good architecture diagram would show a single Next.js front end composed of domain modules, backed by typed API and websocket integration layers, with Prisma-backed persistence and live synchronization/notification services as the main external boundaries.
Main entry points: KanbanBoard.tsx Kanban board · page.tsx Dashboard page · useJobBoard.ts Job board hook · useRealTime.ts Realtime hook
Components 24
App shell
Next.js entry points and persistent layout composition
- App layout · Root app router layout and global composition
src/app/layout.tsx - Dashboard page · Main routed dashboard experience
src/app/page.tsx - Workspace shell · Persistent application chrome and page framing
src/components/Layout/AppLayout.tsx
Product UI
Core dashboard features and shared interaction surfaces
- Kanban board · Primary job pipeline view with lanes and cards
src/components/Kanban/KanbanBoard.tsx - Swimlanes · Lane grouping and pipeline structure
src/components/Kanban/Swimlane.tsx - Job card · Individual job item presentation and actions
src/components/Kanban/JobCard.tsx - Job filters · Advanced filtering and query controls
src/components/forms/AdvancedJobFilterForm.tsx - Agent card · Autonomous agent status and activity summary
src/components/Agent/AgentCard.tsx - Agent log · Agent event and execution history
src/components/Agent/AgentLog.tsx - Agent rail · Compact activity rail for agent monitoring
src/components/Agent/AgentRail.tsx - Notifications · In-app notification center and toast delivery
src/components/Notifications/NotificationCenter.tsx - Toast · Transient notification presentation
src/components/Notifications/Toast.tsx - Analytics export · Export actions for analytics and reporting
src/components/analytics/AnalyticsExportButtons.tsx
Integration
Client, realtime, and cross-cutting service boundaries
- Job board hook · Board state, filtering, drag-and-drop, optimistic updates
src/hooks/useJobBoard.ts - Realtime hook · Live event subscription and UI reconciliation
src/hooks/useRealTime.ts - API client · Request/response integration boundary
src/lib/api/client.ts - WebSocket client · Push transport for live updates
src/lib/websocket/client.ts - Notification manager · Central notification orchestration
src/lib/notifications/manager.ts - Export service · Shared analytics export logic
src/lib/analytics/export.ts
Data and ops
Persistence model, validation, and operational support
- Prisma schema · Persistence schema for jobs, agents, and related records
prisma/schema.prisma - Job types · Typed job contracts shared across the UI
src/types/job.ts - Agent types · Typed agent contracts shared across the UI
src/types/agent.ts - Design tokens · Shared visual constants and theme primitives
src/lib/design-tokens.ts - Config · Application configuration and environment wiring
src/lib/config.ts
Connections 28
- App layout → Workspace shell: composes · Root layout wraps the persistent application shell
- App layout → Dashboard page: hosts · App router renders the dashboard page inside the layout
- Dashboard page → Kanban board: renders · Main page centers on the kanban pipeline
- Dashboard page → Agent card: shows · Dashboard surface includes agent monitoring
- Dashboard page → Notifications: shows · Dashboard surface includes notifications
- Dashboard page → Analytics export: shows · Dashboard surface exposes export/reporting actions
- Workspace shell → Kanban board: frames · Workspace shell provides consistent page chrome around the board
- Kanban board → Swimlanes: organizes · Board is structured into swimlanes
- Kanban board → Job card: renders · Board displays individual jobs as cards
- Kanban board → Job filters: filters by · Board supports advanced filtering controls
- Job filters → Job board hook: updates · Filter state feeds the job board hook
- Job board hook → API client: fetches · Board state layer loads and mutates data through API calls
- Job board hook → Prisma schema: reflects · Board logic mirrors persisted job and workflow records
- Realtime hook → WebSocket client: subscribes to · Realtime hook listens to websocket events
- Realtime hook → Job board hook: reconciles · Live events update board state
- Realtime hook → Notification manager: triggers · Incoming events can surface notifications
- Notifications → Notification manager: uses · Notification center relies on shared notification orchestration
- Notifications → Toast: displays · Notification center renders toast feedback
- Analytics export → Export service: uses · Export buttons call the shared export service
- Agent card → Agent log: drills into · Agent summary connects to detailed logs
- Agent card → Agent rail: surfaces · Agent summary also feeds the activity rail
- Kanban board → Job types: types · Kanban UI is driven by job domain contracts
- Agent card → Agent types: types · Agent UI is driven by agent domain contracts
- Job board hook → Job types: consumes · Board state logic uses job contracts
- Realtime hook → Agent types: consumes · Realtime layer exchanges agent-related event types
- Workspace shell → Design tokens: styles · Layout and shared components use design tokens
- Kanban board → Design tokens: styles · Kanban visuals follow shared tokens
- API client → Config: reads · API client depends on shared configuration