A GitHub-based candidate discovery tool designed for API-first deployment as interconnected modules. Cartoelf transforms the challenging task of finding developers into a data-driven process that identifies candidates through their relationships, contributions, and skills.
Cartoelf discovers talented open source developers by analyzing GitHub connections, contributions, and skills. It builds a graph of relationships between developers, repositories, and organizations to identify candidates who match specific criteria.
Key Benefits:
- API-First Design: Ready for service deployment and integration
- Instant Search: Sub-second response times with in-memory graph processing
- Smart Filtering: Multi-dimensional filtering with percentile-based ranking
- Web Interface: Modern SvelteKit frontend with interactive visualizations
- Scalable Architecture: Handles 100K+ users and 1M+ repositories
- Production Ready: Completed MVP with proven functionality
- 🔍 Smart Data Collection: Crawl GitHub starting from users, repos, or organizations
- 📊 Intelligent Filtering: Focus collection on active, relevant developers
- 🌐 Graph Analysis: Build connection graphs to find developers through relationships
- 💻 Skill Extraction: Identify skills from repository languages and contributions
- 🎯 Unified Search: Flexible search algorithm with parameter tuning
- 🤖 AI Agent Search: LLM-powered candidate discovery with natural language input
- 📤 Export Options: CSV for Looker, JSON for programmatic use
- 🚀 Graph Services: In-memory graph processing for instant search responses
- 🌐 Web Interface: Modern SvelteKit frontend with interactive visualizations
- Node.js 18+ and npm
- GitHub Personal Access Token with appropriate permissions
- Anthropic API Key (for AI Agent functionality)
- Completed data collection and analysis (see pipeline below)
# Clone the repository
git clone https://github.com/andyschwab/cartoelf.git
cd cartoelf
# Install dependencies
npm install
# Build the project
npm run build
# Set up your tokens
echo "GITHUB_TOKEN=your_token_here" > .env
echo "ANTHROPIC_API_KEY=your_anthropic_key_here" >> .env# 1. Collect data from GitHub
cartoelf collect octocat,microsoft --depth 2
# 2. Load data into SQLite database
cartoelf load
# 3. Analyze and build graph with scoring
cartoelf analyze
# 4. Search for candidates with percentile filtering
cartoelf search --nexus microsoft --skills typescript --export csv
cartoelf search --top-technical 10 --top-skill typescript:5 --export json
cartoelf search --top-impact 5 --limit 20 --export csv
# 5. (Optional) Launch web interface for interactive search
npm run dev
## Core Pipeline
### 1. Collect ✅
Gather GitHub data with smart caching and SQLite indexing.
```bash
cartoelf collect <nexus> [options]
# Examples
cartoelf collect torvalds --depth 2
cartoelf collect microsoft/vscode,facebook/react
cartoelf collect github --org-expansionFeatures: Depth-based discovery, dual storage strategy, intelligent filtering, rate limit management
Transform cached data into normalized SQLite database.
cartoelf load [options]
# Examples
cartoelf load # Incremental loading
cartoelf load --force # Force reload everything
cartoelf load --dry-run # Preview changesFeatures: Resilient processing, inline relationships, phase-based execution, progress tracking
Calculate comprehensive scores and percentile rankings.
cartoelf analyze [options]
# Examples
cartoelf analyze # Full analysis pipeline
cartoelf analyze --force # Force recalculation
cartoelf analyze --percentiles # Calculate percentiles onlyFeatures: Modular scoring, incremental processing, percentile calculation, skill extraction
Unified search with flexible parameter tuning and web interface.
# CLI Search
cartoelf search [options]
# Examples
cartoelf search --nexus microsoft --skills typescript --export csv
cartoelf search --top-technical 10 --top-skill typescript:5 --export json
cartoelf search --top-impact 5 --limit 20 --export csv
# Unified Server (NEW)
npm run start:unified # Full server with graph
npm run start:unified:no-graph # Fast startup without graphFeatures: CLI search, web interface, API endpoints, parameter tuning, percentile filtering
Modern web interface with comprehensive API access.
Unified Server (http://localhost:3002):
- Natural Search: LLM-powered candidate discovery with natural language
- Query Builder: Visual boolean query construction (coming soon)
- API Explorer: Interactive testing of all V1 endpoints
- Graph Visualization: Interactive relationship exploration
- Analytics Dashboard: Database statistics and insights
API Endpoints:
- Legacy API (
/api/*): Backward-compatible search and agent endpoints - V1 API (
/api/v1/*): Production-ready REST API with comprehensive search - System API (
/health,/graph/*): Health checks and graph management
LLM-powered candidate discovery with natural language input.
# Start the unified server with agent support
npm run start:unified
# Access the Natural Search at http://localhost:3002/agent
# Or use the API directly:
curl -X POST http://localhost:3002/api/agent \
-H "Content-Type: application/json" \
-d '{"input": "Looking for a senior React developer with TypeScript experience"}'Features: Natural language input, AI-generated keywords, intelligent ranking, detailed explanations
GitHub APIs → Collect → Load → Analyze → Search → Results
↓ ↓ ↓ ↓ ↓ ↓
Raw Data Cache Database Scores Search Export
src/collect/- GitHub data collection and cachingsrc/load/- Data transformation and database loadingsrc/analyze/- Scoring algorithms and percentile calculationsrc/search/- Unified search engine and filteringsrc/agent/- AI-powered candidate search with LLM integrationsrc/services/- HTTP API service and graph servicessrc/client/- Modern web interface (SvelteKit)src/cli/- Command-line interface (thin wrapper)
- API-First: Core modules ready for service deployment
- Dual Storage: File cache + SQLite index for performance + resilience
- Incremental Processing: Smart detection of what needs updating
- Error Isolation: Individual failures don't stop the entire process
- Scalable Architecture: Designed for 100K+ users and 1M+ repositories
Create a .env file in the project root:
# Required
GITHUB_TOKEN=your_github_personal_access_token
# Optional
GITHUB_API_URL=https://api.github.com
RATE_LIMIT_REQUESTS_PER_HOUR=4500
CACHE_TTL_DAYS=30
LOG_LEVEL=infoCore Functionality:
- Data collection from GitHub with smart caching and SQLite indexing
- Resilient data loading with inline relationship processing
- Modular scoring algorithms with percentile calculations
- Unified search engine with flexible parameter tuning
- Graph services for instant search responses
- Comprehensive export functionality (CSV/JSON)
Performance Characteristics:
- Collection: 1000+ users/hour with rate limit management
- Loading: 1000+ entities/minute with inline processing
- Analysis: 1000+ users/minute with incremental processing
- Search: Sub-second response times for most queries
Architecture Features:
- Dual Storage: File cache + SQLite index for optimal performance
- In-Memory Graph: Instant search responses with graph services
- Error Handling: Graceful degradation and comprehensive recovery
- API-First Design: Ready for service deployment and integration
- Web Interface: Modern frontend demonstrating API capabilities
- Core Modules: Business logic separated from CLI concerns
- Programmatic Interface: Functions can be imported and used directly
- Service Architecture: HTTP API service implemented and ready for production
- Scalable Design: Supports distributed processing and deployment
- Resilient Processing: Error isolation and resumable operations
- ARCHITECTURE.md - Complete system architecture overview
- collect.md - GitHub data collection and caching system
- load.md - Data transformation and database loading
- analyze.md - Scoring algorithms and percentile calculation
- search.md - Unified search engine and filtering capabilities
- graph.md - Graph services and in-memory relationship analysis
- frontend.md - Web interface and API demonstration
- POST_MVP.md - Future enhancements and planned features
# Find TypeScript developers
cartoelf search --skills "typescript,react" --hireable
# Find developers connected to Microsoft
cartoelf search --nexus "microsoft" --skills "python" --max-depth 2
# Find top 10% technical performers
cartoelf search --top-technical 10 --skills "javascript"
# Content-based search for specific expertise
cartoelf search --content "machine learning" --skills "python"# Multiple percentile filters
cartoelf search --top-technical 25 --top-activity 10 --top-impact 15
# Skill-specific percentiles
cartoelf search --top-skill typescript:10 --top-skill python:5
# Content-based search
cartoelf search --content "machine learning" --skills "python"# CSV export for Looker
cartoelf search --skills "react" --export csv --output react_devs.csv
# JSON export for API consumption
cartoelf search --nexus "github" --skills "typescript" --export json# Install dependencies
npm install
# Build project
npm run build
# Run tests
npm test
# Development mode
npm run dev# Start development mode (all services)
npm run dev
# Start individual services
npm run start:search-service # HTTP API service
npm run dev:client # Frontend developmentThis project is under active development. Contributions are welcome!
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with TypeScript, Node.js, and SQLite
- Uses Graphology for graph processing
- Powered by GitHub's GraphQL API
- Designed for API-first deployment and service integration