Discover what technologies you actually use.
Branch analyzes your GitHub repositories to show you a complete picture of your tech stack - languages, frameworks, and tools you work with most.
- 🔐 GitHub OAuth login - Secure authentication with GitHub
- 🔍 Automatic repository scanning - Analyzes repos for tech stack
- 📊 Tech stack analysis - Languages, frameworks, tools, and AI assistance
- 🤖 AI tool detection - Identifies Claude, ChatGPT, Copilot, and more
- 🏷️ Smart tagging system - Tag users and automatically tag "Vibe Coders"
- 👥 Social connections - View followers, following, and tech stack overlap
- 🌐 GitHub network integration - See forks and contributors
- 📈 Visual breakdown - Usage statistics and repository details
- ⚡ Built with Bun - Blazing fast performance
- 🎨 Vibe Coding section - Dedicated showcase for AI-assisted developers
- 👤 Profile names - Shows real names (e.g., "K. Mike Merrill") not just usernames
- 💀 Skeleton UI - Friendly loading states for unscanned profiles
- ⚡ Fast scan option - Quick profile scan without full repo analysis
- 🚀 Full scan option - Complete tech stack analysis
- 📊 Stats dashboard - Total users, repos, technologies tracked
curl -fsSL https://bun.sh/install | bashCreate a new OAuth App at https://github.com/settings/developers
- Application name: Branch (or whatever you like)
- Homepage URL:
http://localhost:3000 - Authorization callback URL:
http://localhost:3000/api/auth/callback
Copy the Client ID and Client Secret.
cp .env.example .env
# Edit .env with your GitHub credentialsbun run index.tsVisit http://localhost:3000 and login with GitHub!
- Login - OAuth flow with GitHub
- Scan - Fetches your repositories and README files
- Analyze - Detects:
- Programming languages
- Frameworks and tools from topics
- AI tools mentioned in READMEs (Claude, ChatGPT, Copilot, etc.)
- GitHub services used
- Tag - Automatically tags "Vibe Coders" who use AI tools
- Connect - Imports social network (followers, following)
- Display - Shows comprehensive tech stack with usage stats
- Runtime: Bun
- Database: SQLite (via Bun's built-in sqlite)
- Frontend: Vanilla HTML/CSS/JS
- Auth: GitHub OAuth
GET /- Landing page with stats and vibe coding sectionGET /dashboard.html- User profile dashboardGET /tech.html- Technology detail pageGET /tag.html- Tag detail page
GET /api/auth/github- Start OAuth flowGET /api/auth/callback- OAuth callbackGET /api/logout- Logout user
GET /api/scan?username=<user>&scanner=<scanner>- Full repo scan with README analysisGET /api/rescan-profile?username=<user>&scanner=<scanner>- Fast profile-only scanGET /api/rescan?username=<user>&scanner=<scanner>- Rescan existing userGET /api/techstack?username=<user>- Get user's tech stackGET /api/stats- Homepage statistics (users, repos, popular tech)GET /api/technology?name=<tech>- Get users and repos for a technologyGET /api/tag?name=<tag>- Get users and repos for a tag
GET /api/followers?username=<user>- Get user's followersGET /api/following?username=<user>- Get users they follow
POST /api/tag- Add tag to user or repoDELETE /api/tag- Remove tag
id- Primary keygithub_id- GitHub user ID (unique)username- GitHub usernamename- Real name (e.g., "K. Mike Merrill")bio- Profile bioavatar_url- Profile pictureaccess_token- OAuth token (encrypted in production!)user_type- "authenticated" or "scanned"followers_count- Number of followersfollowing_count- Number followingcreated_at- First loginlast_scan- Last repo scan
id- Primary keyuser_id- Foreign key to usersname- Repository namedescription- Repository descriptionurl- GitHub URLstars- Star countlanguage- Primary languagecreated_at- Repo creation date
id- Primary keyuser_id- Foreign key to userstechnology- Name (e.g., "JavaScript", "react")category- "language", "framework", or "topic"repo_count- How many repos use itupdated_at- Last update
id- Primary keyuser_id- Foreign key to usersrepo_id- Foreign key to repositoriesai_tool- Name of AI tool (e.g., "Claude", "ChatGPT")
id- Primary keyuser_id- Foreign key to usersservice_name- GitHub service name
id- Primary keytagged_by_user_id- Who added the tagtagged_entity_type- "user" or "repository"tagged_entity_id- ID of tagged entitytag- Tag text (e.g., "Vibe Coder")
id- Primary keyuser_id- Foreign key to usersconnection_user_id- Foreign key to connected userconnection_type- "follower" or "following"
id- Primary keyrepo_id- Foreign key to repositoriesforked_from_user- Original userforked_from_repo- Original repo name
id- Primary keyrepo_id- Foreign key to repositoriescontributor_username- GitHub usernamecontributions- Number of contributions
Core MVP
- ✅ GitHub OAuth Login
- ✅ Auto-Scan on Login
- ✅ Display Tech Stack
Extended Features
- ✅ View other users' tech stacks
- ✅ Social connections (followers/following)
- ✅ AI tool detection from READMEs
- ✅ Smart tagging system
- ✅ Auto-tagging for "Vibe Coders"
- ✅ Technology and tag detail pages
- ✅ Homepage stats dashboard
- ✅ Skeleton UI for unscanned profiles (Issue #2)
- ✅ Profile names instead of usernames
- ✅ Fast profile scan option
- ✅ Vibe Coding section on homepage
- ✅ Repository tracking with forks and contributors
- Track tech stack changes over time
- Export/share your tech stack as image
- Technology recommendations
- Developer discovery based on tech overlap
- Integration with GitHub Graph Spider
- Advanced filtering and search
Railway has native Bun support and is the fastest way to deploy.
-
Push to GitHub:
cd /Users/kmikeym/Projects/Branch git init git add . git commit -m "Initial commit" gh repo create branch --public --source=. --push
-
Deploy to Railway:
- Visit railway.app
- Click "New Project" → "Deploy from GitHub repo"
- Select your
branchrepository - Railway will auto-detect Bun
-
Configure Environment:
- Go to your project → Variables tab
- Add:
GITHUB_CLIENT_IDandGITHUB_CLIENT_SECRET - Railway will provide your public URL (e.g.,
branch-production.up.railway.app)
-
Update GitHub OAuth App:
- Go to https://github.com/settings/developers
- Update your OAuth app callback URL to:
https://your-app.up.railway.app/api/auth/callback
-
⚠️ CRITICAL: Add Persistent Storage (DO THIS NOW!)Without this step, your database will be wiped on every deployment!
- In Railway project view, click "+ New" button
- Select "Volume"
- Name it:
branch-database(or any name you like) - Size: 1 GB (free tier includes this)
- Click "Add Volume"
- After volume is created, click on it
- Set Mount Path:
/data - Click "Save"
- Your app will redeploy automatically
The SQLite database file
branch.dbnow persists across deployments! 🎉To verify it's working:
- Scan some repositories
- Push a new code change and let Railway redeploy
- Check if your scan data is still there (it should be!)
Done! Your app is live with persistent data. 🎉
Great for edge deployment with more control.
-
Install Fly CLI:
curl -L https://fly.io/install.sh | sh -
Create Dockerfile:
FROM oven/bun:1 WORKDIR /app COPY . . RUN bun install EXPOSE 3000 CMD ["bun", "run", "index.ts"]
-
Initialize and Deploy:
fly launch fly secrets set GITHUB_CLIENT_ID=your_id GITHUB_CLIENT_SECRET=your_secret fly volumes create branch_data --size 1 fly deploy -
Update GitHub OAuth callback to your Fly.io URL
Simple deployment with predictable pricing.
-
Push to GitHub (same as Railway step 1)
-
Create App:
- Go to DigitalOcean Apps
- Click "Create App" → Select your GitHub repo
- Choose "Bun" as runtime
-
Configure:
- Build Command:
bun install - Run Command:
bun run index.ts - Add environment variables for GitHub OAuth
- Build Command:
-
Update GitHub OAuth callback to your DO app URL
If deployments are stuck or failing:
-
Check Railway Status First: https://status.railway.app/
- Railway sometimes has platform outages that affect all users
- If there's an active incident, just wait for it to resolve
- Don't waste time debugging if it's a Railway infrastructure issue!
-
Check deployment logs:
- Click "View Logs" on the stuck deployment
- Look for actual error messages (not just "Initializing")
-
Common issues:
- Missing environment variables
- Database volume not mounted correctly
- Code syntax errors (should show in build logs)
- Update GitHub OAuth callback URL to production domain
- Test login flow end-to-end
- Verify SQLite database persists between deploys
- Check logs for any errors
- Test with your own GitHub account
See CLAUDE.md for detailed project context and instructions.
MIT
Part of the Quarterly Systems ecosystem