Revolutionary AI Agentic GitHub Portfolio Generator
Powered by Multi-Agent AI System
Features β’ Demo β’ Architecture β’ Installation β’ Usage β’ API
GRWM (Get README With Me) is an AI Agentic system that transforms your GitHub profile into a stunning, personalized portfolio README in seconds. Unlike traditional generators, GRWM uses a Multi-Agent AI architecture where three specialized AI agents collaborate to analyze your GitHub profile and craft custom-toned professional portfolios.
- Creating a compelling GitHub README is time-consuming
- Generic templates don't capture your unique developer identity
- Keeping your profile updated is tedious
- Choosing the right tone and style is challenging
GRWM automates the entire process using AI Agentic Workflows with three specialized agents working in harmony:
- π Detective Agent: Investigates your GitHub profile, analyzes repositories, and gathers comprehensive data
- π§ CTO Agent: Performs deep technical analysis, identifies skills, determines developer archetype, and calculates impact metrics
- βοΈ Ghostwriter Agent: Crafts personalized, engaging README content with custom tones and styles
- 3 Specialized AI Agents working collaboratively
- LangGraph-powered workflow orchestration
- Real-time progress streaming with Server-Sent Events (SSE)
- Autonomous decision-making with intelligent routing
- 4 Style Presets: Professional, Creative, Minimal, Detailed
- Custom Tone Control: Tailor the writing style to your preference
- Personalized Descriptions: Add specific requirements or highlights
- Live Preview: Dark/Light mode markdown preview
- Grind Score Calculation: Measures your GitHub activity and impact
- Developer Archetype Detection: Identifies your coding personality
- Tech Stack Recognition: Automatically detects languages, frameworks, and tools
- Key Project Identification: Highlights your most impactful repositories
- Social Proof Metrics: Analyzes stars, forks, and community engagement
- Frontend: Next.js 16.1.1, React 19, TypeScript, TailwindCSS 4
- Backend: Python 3.11+, FastAPI, LangGraph, LangChain
- AI: Google Gemini Flash (Free Tier)
- Real-time: Server-Sent Events (SSE) for live updates
- PWA: Installable as Progressive Web App
- Instant download and clipboard copy
- Social media sharing with screenshot capture
- Responsive brutalist design
- SEO optimized with comprehensive metadata
- Zero-cost AI model (Gemini Flash free tier)
Visit the live application: getreadmewithme.vercel.app
- Enter GitHub Username - Start with any public GitHub profile
- Watch AI Agents Work - See real-time progress as each agent completes its task
- Choose Your Style - Select from 4 professional style options
- Get Your README - Download, copy, or share your personalized portfolio
π System Architecture (Click to expand)
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Frontend (Next.js) β
β βββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β Home Screen βββ Progress View βββ Preview & DL β β
β βββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
ββββββββββββββββββββββββββ¬βββββββββββββββββββββββββββββββββββββ
β SSE Connection
β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Backend (FastAPI + SSE) β
β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
β β LangGraph Orchestration β β
β β β β
β β ββββββββββββββββ β β
β β β π DETECTIVE β Fetches Profile Data β β
β β β AGENT β β’ GitHub API Client β β
β β β β β’ Repository Analysis β β
β β β β β’ Tech Stack Detection β β
β β ββββββββ¬ββββββββ β β
β β β State Flow β β
β β β β β
β β ββββββββββββββββ β β
β β β π§ CTO β Technical Analysis β β
β β β AGENT β β’ Language Analysis β β
β β β β β’ Skill Mapping β β
β β β β β’ Archetype Detection β β
β β β β β’ Grind Score Calculation β β
β β ββββββββ¬ββββββββ β β
β β β Awaits User Style Selection β β
β β β β β
β β ββββββββββββββββ β β
β β ββοΈ GHOSTWRITERβ Content Generation β β
β β β AGENT β β’ Gemini Flash LLM β β
β β β β β’ Tone Instructions β β
β β β β β’ Style Templates β β
β β β β β’ Markdown Generation β β
β β ββββββββββββββββ β β
β βββββββββββββββββββββββββββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Each agent maintains and transforms a shared state object:
AgentState = {
"username": str,
"user_preferences": {
"tone": str, # professional/creative/minimal/detailed
"style": str, # user's selected style
"description": str # custom requirements
},
"raw_data": dict, # Detective's gathered data
"analysis": dict, # CTO's analysis results
"final_markdown": str, # Ghostwriter's output
"messages": list, # Agent communication log
"error": str, # Error tracking
"retry_count": int, # Retry logic
"intermediate_results": dict,
"generation_history": list
}π Detective Agent - Data Gathering (Click to expand)
The Detective is the first agent in the pipeline, responsible for gathering comprehensive GitHub profile data.
Key Components:
- GitHubAPIClient: Interfaces with GitHub REST API
- ProfileDetective: Fetches user profile information
- RepositoryStalker: Analyzes repositories (stars, forks, languages)
- ExReadme: Checks for existing README files
- TechStackDetective: Identifies technologies and frameworks
Data Collected:
{
"profile": {
"name", "username", "bio", "location",
"company", "public_repos", "followers", "following"
},
"repositories": [
{
"name", "description", "stars", "forks",
"language", "topics", "is_pinned", "is_archived"
}
],
"social_proof": {
"total_stars", "total_forks", "total_repos"
},
"contributions": {
"total_commits", "active_streak"
},
"existing_readme": str # If found
}Performance Optimization:
- Parallel API requests using
asyncio - Smart caching for rate limit management
- Efficient data batching
π§ CTO Agent - Technical Analysis (Click to expand)
The CTO Agent performs deep technical analysis of the developer's profile and codebase.
Analysis Components:
-
Language Analysis
- Primary and secondary languages
- Language distribution percentages
- Specialization detection
-
Tech Stack Mapping
- Framework identification
- Tool detection
- Technology categorization
-
Developer Archetype
- Personality classification (e.g., "The Full-Stack Wizard", "The Backend Architect")
- Based on language diversity and project patterns
-
Grind Score Calculation
factors = [ ("Commit Frequency", 0.25), ("Code Consistency", 0.20), ("Project Diversity", 0.15), ("Community Impact", 0.20), ("Code Quality", 0.20) ] # Score: 0-100 with emoji indicators
-
Key Projects Identification
- Sorts by stars, forks, and recency
- Identifies most impactful repositories
- Extracts project metadata
-
Impact Metrics
- Social proof aggregation
- Contribution patterns
- Community engagement scores
Output Structure:
{
"grind_score": {"score": int, "label": str, "emoji": str},
"developer_archetype": {"title": str, "full_title": str},
"language_analysis": {"primary": dict, "distribution": list},
"skill_mapping": {"languages": list, "frameworks": list, "tools": list},
"tech_diversity": {"score": float, "description": str},
"key_projects": list,
"impact_metrics": dict
}βοΈ Ghostwriter Agent - Content Generation (Click to expand)
The Ghostwriter is the creative director, transforming raw data and analysis into engaging README content.
Generation Process:
-
Tone Selection (4 options)
- Professional: Polished, corporate-ready language
- Creative: Bold, expressive with personality
- Minimal: Clean, data-focused, concise
- Detailed: Comprehensive, thorough coverage
-
Style Templates (4 options)
- Professional Style: Clean sections, organized skills, business impact
- Creative Style: Unique formatting, storytelling, visual elements
- Minimal Style: Essential info only, whitespace-focused
- Detailed Style: Comprehensive sections, extensive project showcase
-
LLM Integration
- Uses Google Gemini Flash (free tier)
- Structured prompts with tone and style instructions
- Custom requirements injection from user input
- Post-processing for markdown formatting
-
Content Structure
# Personalized Header with Archetype ## About Me (tone-adjusted) ## Skills & Technologies (categorized) ## Featured Projects (key projects highlighted) ## GitHub Statistics (visual badges) ## Connect With Me (social links)
-
Smart Features
- Shields.io badge integration
- GitHub stats widgets
- Responsive image handling
- Markdown optimization
Revision Support:
- Maintains generation history
- Supports revision instructions
- Version tracking
π Real-time Communication - SSE Implementation (Click to expand)
GRWM uses SSE for real-time, unidirectional streaming from backend to frontend.
Why SSE over WebSockets?
- Simpler implementation for one-way updates
- Better for event streaming
- Automatic reconnection
- Lower overhead
- HTTP/2 multiplexing support
Event Flow:
Frontend subscribes to SSE endpoint:
GET /api/generate/{session_id}/stream
Backend emits events:
{
type: "detective_progress" | "detective_complete" |
"cto_progress" | "cto_complete" |
"ghostwriter_progress" | "ghostwriter_complete" |
"awaiting_style_selection",
stage: "detective" | "cto" | "ghostwriter",
message: string,
timestamp: ISO string,
data?: any
}Session Management:
- UUID-based session tracking
- In-memory storage (scalable to Redis)
- Thread-safe queues for event routing
- Automatic cleanup on completion
Frontend Integration:
const eventSource = new EventSource(`/api/generate/${sessionId}/stream`);
eventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
// Update UI based on event type
setEvents(prev => [...prev, data]);
};- Node.js 18+ (for frontend)
- Python 3.11+ (for backend)
- GitHub Personal Access Token (for API access)
- Google Gemini API Key (free tier available)
# Navigate to backend directory
cd backend
# download uv first
# pip install uv
uv sync
# Activate virtual env
source venv/bin/activate # On Windows: venv\Scripts\activate
# Create .env file
cat > .env << EOL
GITHUB_PAT=your_github_token_here
GEMINI_API_KEY=your_gemini_api_key_here
EOL
# Run the server
python api.py# Navigate to frontend directory
cd frontend
# Install dependencies
npm install
# Create .env.local file
cat > .env.local << EOL
NEXT_PUBLIC_API_URL=http://localhost:8000
EOL
# Run development server
npm run dev-
Start the Application
- Open
http://localhost:3000in your browser - Or visit the live demo at getreadmewithme.vercel.app
- Open
-
Enter GitHub Username
- Type any public GitHub username
- Press Enter or click "START"
-
Watch the Agents Work
- π Detective gathers profile data (5-10 seconds)
- π§ CTO analyzes your tech stack (5-8 seconds)
- βΈοΈ System awaits your style selection
-
Customize Your README
- Choose from 4 style options
- (Optional) Add custom description for specific requirements
-
Get Your README
- βοΈ Ghostwriter generates your portfolio (10-15 seconds)
- Preview in dark/light mode
- Download, copy, or share
Testing Individual Agents (Click to expand)
cd backend
# Test Detective Agent only
python test_agents.py
# Select option 1
# Test CTO Agent (requires Detective data)
python test_agents.py
# Select option 2
# Test Ghostwriter Agent (requires both)
python test_agents.py
# Select option 3
# Test complete pipeline
python test_agents.py
# Select option 4Direct Agent Usage (Click to expand)
from agents import (
create_detective_graph,
create_initial_state,
GhostwriterAgent
)
# Create the agent graph
app = create_detective_graph()
# Initialize state
initial_state = create_initial_state(
username="octocat",
preferences={
"tone": "professional",
"style": "modern"
}
)
# Run Detective and CTO
for event in app.stream(initial_state):
print(event)
# Get final state
final_state = next(iter(event.values()))
# Run Ghostwriter separately
ghostwriter = GhostwriterAgent()
result = ghostwriter(final_state)
print(result["final_markdown"])Start a new README generation session.
Request:
{
"username": "octocat",
"tone": "professional",
"style": "modern"
}Response:
{
"session_id": "uuid-string",
"message": "Generation started"
}Server-Sent Events endpoint for real-time progress updates.
Events:
detective_progress: Detective agent workingdetective_complete: Detective finishedcto_progress: CTO agent analyzingcto_complete: CTO finishedawaiting_style_selection: Waiting for user to choose styleghostwriter_progress: Ghostwriter generatingghostwriter_complete: README ready
Continue generation after style selection.
Request:
{
"style": "professional",
"description": "Highlight my open-source contributions"
}Response:
{
"session_id": "uuid-string",
"message": "Continuing with Ghostwriter"
}Get the final generated README.
Response:
{
"session_id": "uuid-string",
"username": "octocat",
"markdown": "# Full README content...",
"analysis": {
"grind_score": {...},
"developer_archetype": {...}
}
}π Complete API Reference (Click to expand)
All endpoints return standardized error responses:
{
"detail": "Error message",
"error": "INTERNAL_ERROR | NOT_FOUND | VALIDATION_ERROR",
"timestamp": "2025-12-29T12:00:00Z"
}- GitHub API: 5000 requests/hour (authenticated)
- Gemini API: Free tier limits apply
- SSE connections: 100 concurrent per server
allow_origins = [
"http://localhost:3000",
"https://*.vercel.app"
]cd backend
# Run test suite
python test_agents.py
# Test options:
# 1. Detective Agent Only
# 2. CTO Agent Only
# 3. Ghostwriter Agent Only
# 4. Complete Pipelinecd frontend
# Run type checking
npm run type-check
# Build test
npm run build
# Lint
npm run lintAdding New Tones (Click to expand)
Edit backend/agents.py:
def _get_tone_instructions(self, tone: str) -> str:
instructions = {
"professional": "...",
"creative": "...",
"minimal": "...",
"your_new_tone": """
TONE: Your Custom Tone Description
- Instruction 1
- Instruction 2
"""
}
return instructions.get(tone, instructions["professional"])Adding New Styles (Click to expand)
Edit backend/agents.py:
def _get_style_instructions(self, style: str) -> str:
instructions = {
"professional": "...",
"creative": "...",
"minimal": "...",
"your_new_style": """
STYLE: Your Custom Style
SECTIONS TO INCLUDE:
- Section 1
- Section 2
"""
}
return instructions.get(style, instructions["professional"])Update frontend LoadingPanel.tsx:
const styles = [
{ id: 'professional', name: 'Professional', icon: Briefcase, color: 'bg-blue-50' },
// Add your new style
{ id: 'your_new_style', name: 'Your Style', icon: YourIcon, color: 'bg-custom' },
];- Framework: Next.js 16.1.1 (React 19.2.3)
- Language: TypeScript 5
- Styling: TailwindCSS 4 (Brutalist Design)
- UI Components: Custom + Lucide Icons
- Markdown: ReactMarkdown + remark-gfm + rehype-raw
- PWA: Service Worker + Web Manifest
- Screenshot: html2canvas-pro
- Framework: FastAPI 0.115+
- Language: Python 3.11+
- AI/ML: LangGraph, LangChain, Google Gemini Flash
- GitHub API: PyGithub + httpx
- State Management: LangGraph MemorySaver
- Async: asyncio, uvicorn
- Environment: python-dotenv
- Frontend Hosting: Vercel
- Backend Hosting: Railway/Render/Fly.io
- CDN: Vercel Edge Network
- Domain: Custom domain support
Contributions are welcome! Here's how you can help:
- Fork the Repository
- Create a Feature Branch
git checkout -b feature/AmazingFeature
- Commit Your Changes
git commit -m 'Add some AmazingFeature' - Push to the Branch
git push origin feature/AmazingFeature
- Open a Pull Request
- Follow the existing code style
- Add tests for new features
- Update documentation as needed
- Ensure all tests pass before submitting
This project is licensed under the MIT License - see the LICENSE file for details.
- Google Gemini for providing free-tier AI models
- LangGraph for agent orchestration framework
- GitHub API for profile data access
- Shields.io for beautiful badges
- Vercel for seamless deployment
- Single session per user (no concurrent generations)
- In-memory session storage (not production-scalable)
- Limited to public GitHub profiles
- GitHub API rate limits apply
- Redis-based session storage
- User authentication & saved READMEs
- Multiple README versions
- Private repository support (OAuth)
- More customization options
- Batch generation for organizations
- Analytics dashboard
- API key management for users
Created by: Parampreet Singh
Email: connectwithparam.30@gmail.com
Portfolio: parampreetsingh.me
GitHub: @Param302
Live Demo: getreadmewithme.vercel.app