Turn any GitHub repo into an interactive map of its architecture, modules, and risks.
GitVerse is built for the moment you open a new codebase and ask: βWhere do I start?β
Open-source and internal repos are hard to contribute to because context is scattered across folders, commits, and tribal knowledge.
Repos are larger, teams are more distributed, and AI can finally summarize + connect the dots fast enough to change the contributor experience.
Paste a repo β GitVerse builds a visual map + AI onboarding so contributors can understand architecture and pick a starting point in minutes.
- Faster onboarding for new contributors
- Clearer ownership and hotspots
- Better PR quality (less back-and-forth)
- Paste a GitHub URL
- GitVerse generates:
- Architecture / module map (visual)
- Modules + dependencies
- Top risks / hotspots
- 3 concrete improvement suggestions
- Click a module β ask AI: βWhat does this do?β βWhere should I start contributing?β
- Visualize repository structure and key paths
- Explore commits/branches and contributor activity
- Ask AI questions about files, folders, and architecture
- Generate analysis jobs and track progress
The canonical onboarding and setup guide is:
Additional setup docs:
npm install
cp .env.example .env.local
cp .env.local .env
npm run prisma:generate
npm run prisma:migrate
npm run devGitVerse is designed to make contributing to unfamiliar repos easier:
- βHow do I run this project?β
- βWhere is auth?β
- βExplain this folder like Iβm new.β
- βGive me 3 beginner-friendly issues.β
Thatβs the MVP: turn repo complexity into a contributor roadmap.
- Next.js 14 (App Router), React, TypeScript, Tailwind
- Prisma + Postgres (Neon)
- Gemini for AI analysis
- D3/Recharts for visualizations
- Auth: NextAuth (Google) + credentials
gitverse-nextjs/
βββ app/
β βββ api/ # API routes
β β βββ auth/ # Authentication endpoints
β β βββ repositories/ # Repository management
β β βββ ai/ # AI-powered features
β β βββ users/ # User management
β β βββ integrations/ # Git platform integrations
β βββ (pages)/ # Page routes
β βββ layout.tsx # Root layout
β βββ page.tsx # Home page
βββ src/
β βββ components/ # React components
β β βββ ai/ # AI components
β β βββ auth/ # Authentication components
β β βββ layout/ # Layout components
β β βββ repository/ # Repository components
β β βββ ui/ # Reusable UI components
β β βββ visualizations/ # Data visualization components
β βββ contexts/ # React contexts
β βββ hooks/ # Custom React hooks
β βββ pages/ # Page components
β βββ services/ # API service functions
β βββ utils/ # Utility functions
βββ lib/
β βββ services/ # Backend services
β β βββ gitService.ts # Git operations
β β βββ geminiService.ts # AI integration
β β βββ repositoryService.ts # Repository logic
β βββ prisma.ts # Prisma client
β βββ auth.ts # Authentication utilities
β βββ middleware.ts # Auth middleware
βββ prisma/
β βββ schema.prisma # Database schema
βββ public/ # Static assets
βββ package.json # Dependencies
- Primary: Deep Blue (#1E3A8A) - Professional and trustworthy
- Secondary: Slate Gray (#475569) - Neutral and sophisticated
- Accent: Electric Green (#10B981) - Active elements and success states
- Supporting: Orange (#F59E0B) for warnings, Red (#EF4444) for errors
- Headings: Inter
- Body: Source Sans 3
- Code: JetBrains Mono
npm run dev- Start development servernpm run build- Build for productionnpm start- Start production servernpm run lint- Run Next.js linternpm run format- Format code with Prettiernpm run prisma:generate- Generate Prisma clientnpm run prisma:migrate- Run database migrationsnpm run prisma:studio- Open Prisma Studio
All API routes are available under /api:
/api/auth/*- Authentication (login, signup, logout, me)/api/repositories- Repository CRUD operations/api/repositories/[id]- Specific repository operations/api/repositories/[id]/stats- Repository statistics/api/repositories/[id]/analyze- Trigger repository analysis/api/ai/analyze-repository- AI repository analysis/api/ai/analyze-code- AI code analysis/api/ai/chat- AI chat interface/api/users/profile- User profile management/api/integrations/*- Git platform integrations
To ensure consistent performance and predictability, paginated API endpoints in GitVerse use cursor-based pagination instead of traditional offset pagination.
| Parameter | Type | Default | Description |
|---|---|---|---|
limit |
number |
10 |
The maximum number of items to return (clamped to max 50 for safety). |
cursor |
string |
null |
The ID of the last item received in the previous page. Omit for the first page. |
GET /api/auth/sessions?limit=20&cursor=clq123abcAll paginated endpoints return an object containing an items array and a nextCursor string. If nextCursor is present, it indicates there is more data available.
{
"items": [
{ "id": "clq123abd", "expires": "2026-05-21T00:00:00.000Z" },
{ "id": "clq123abe", "expires": "2026-05-20T00:00:00.000Z" }
],
"nextCursor": "clq123abf"
}When fetching data in the UI (e.g., via infinite scrolling or "Load More" buttons), keep track of the nextCursor and pass it to subsequent requests. Avoid duplicate fetches by ensuring UI loading states block concurrent requests.
const loadMore = async () => {
if (!nextCursor || isLoading) return;
setIsLoading(true);
try {
const res = await fetch(`/api/auth/sessions?limit=20&cursor=${nextCursor}`);
const data = await res.json();
setItems((prev) => [...prev, ...data.items]);
setNextCursor(data.nextCursor);
} finally {
setIsLoading(false);
}
};- Push your code to GitHub.
- Import the project in the Vercel dashboard.
- Under Settings β Environment Variables, add every variable listed in the Environment Variables section below. Vercel automatically makes them available at build time and runtime.
- For
NEXTAUTH_URL, set the value to your Vercel deployment URL (e.g.https://gitverse.vercel.app). In local development, set it tohttp://localhost:3000in your.env.localto avoid missing-URL warnings. - Mark sensitive secrets (e.g.
JWT_SECRET,NEXTAUTH_SECRET,GOOGLE_CLIENT_SECRET,GEMINI_API_KEY) as Sensitive in Vercel so they are never exposed in logs.
- For
- Click Deploy.
Tip: Vercel re-deploys automatically on every push to
main. If you update an environment variable in the dashboard, trigger a redeploy from Deployments β Redeploy for the new value to take effect.
docker build -t gitverse-nextjs .
docker run -p 3000:3000 \
-e DATABASE_URL="..." \
-e JWT_SECRET="..." \
-e GEMINI_API_KEY="..." \
gitverse-nextjsThis repo includes App Hosting config in apphosting.yaml.
- Create Secret Manager entries (names must match
apphosting.yaml):
firebase apphosting:secrets:set webapp-firebase-api-key
firebase apphosting:secrets:set gemini-api-key
firebase apphosting:secrets:set database-url
firebase apphosting:secrets:set jwt-secret
firebase apphosting:secrets:set nextauth-url
firebase apphosting:secrets:set nextauth-secret
firebase apphosting:secrets:set google-client-id
firebase apphosting:secrets:set google-client-secret- Deploy:
firebase deploy- In Google Cloud Console (OAuth client), add redirect URI:
https://<your-domain>/api/auth/callback/google
Copy .env.example to .env.local and fill in the values before starting the dev server:
cp .env.example .env.localNever commit
.env.localor any file containing real secrets. It is already listed in.gitignore.
| Variable | Description | How to obtain |
|---|---|---|
DATABASE_URL |
PostgreSQL connection string (with SSL) | Create a free database on Neon β Connection Details β copy the connection string. Append ?sslmode=require&schema=public if not already present. |
JWT_SECRET |
Secret used to sign custom JWT tokens | Generate with openssl rand -base64 32 or any random string β₯ 32 characters. |
GEMINI_API_KEY |
Google Gemini API key for AI features | Go to Google AI Studio β Create API key. |
| Variable | Description | How to obtain |
|---|---|---|
NEXTAUTH_URL |
Canonical base URL of your deployment | Set to http://localhost:3000 in development. On Vercel, set to your deployment URL (e.g. https://gitverse.vercel.app). |
NEXTAUTH_SECRET |
Secret used to sign NextAuth session tokens | Generate with openssl rand -base64 32. Must be a strong random string. |
GOOGLE_CLIENT_ID |
Google OAuth 2.0 client ID | Google Cloud Console β APIs & Services β Credentials β Create Credentials β OAuth client ID (Web application). |
GOOGLE_CLIENT_SECRET |
Google OAuth 2.0 client secret | Obtained alongside GOOGLE_CLIENT_ID in the same step above. |
| Variable | Description | How to obtain |
|---|---|---|
GITHUB_APP_ID |
Numeric ID of your GitHub App | GitHub Developer Settings β create or open your App β copy App ID. |
GITHUB_APP_PRIVATE_KEY |
RSA private key for the GitHub App | In your GitHub App settings β Generate a private key β paste contents with literal \n line breaks. |
GITHUB_APP_SLUG |
URL slug of your GitHub App | The part after github.com/apps/ in the App's public URL. |
GITHUB_WEBHOOK_SECRET |
Secret to verify webhook payloads | Set any strong random string here and enter the same value in your GitHub App's webhook configuration. |
| Variable | Description | Default |
|---|---|---|
NEXT_PUBLIC_API_URL |
Base URL for client-side API calls | Current domain (e.g. http://localhost:3000) |
NEXT_PUBLIC_FIREBASE_API_KEY |
Firebase API key (App Hosting only) | Not required for local dev or Vercel |
GITHUB_APP_STATE_SECRET |
Additional signing secret for OAuth state | Falls back to NEXTAUTH_SECRET if unset |
Add these Authorized redirect URIs in Google Cloud Console β OAuth client:
| Environment | URI |
|---|---|
| Local dev | http://localhost:3000/api/auth/callback/google |
| Vercel | https://<your-domain>/api/auth/callback/google |
Cause: DATABASE_URL is missing, malformed, or the database is unreachable.
Fix:
- Verify
.env.localcontainsDATABASE_URLand the value is correct. - Ensure your Neon database is not paused (Neon free-tier databases sleep after inactivity β open the Neon console to wake it).
- Confirm the connection string includes
?sslmode=require. - Run
npm run prisma:generatefollowed bynpm run prisma:migrateafter any schema change.
Cause: NEXTAUTH_URL, GOOGLE_CLIENT_ID, or GOOGLE_CLIENT_SECRET is wrong, or the redirect URI is not registered in Google Cloud Console.
Fix:
- Double-check
NEXTAUTH_URLmatches the origin you are accessing (including protocol and port). - In Google Cloud Console β OAuth client β Authorized redirect URIs, ensure
<NEXTAUTH_URL>/api/auth/callback/googleis listed. - On Vercel, set
NEXTAUTH_URLto the exact deployment URL (no trailing slash).
Cause: NEXTAUTH_SECRET is missing from the environment.
Fix: Generate a secret and add it to .env.local:
openssl rand -base64 32On Vercel, add it under Settings β Environment Variables.
Cause: GEMINI_API_KEY is missing or invalid.
Fix:
- Confirm
GEMINI_API_KEYis set in.env.local. - Verify the key is active in Google AI Studio.
- Check that the Gemini API is enabled for your Google Cloud project.
Fix: Restart the development server β Next.js reads .env.local only at startup:
# Stop the server (Ctrl+C), then:
npm run devOn Vercel, trigger a redeploy (Deployments β β― β Redeploy) after changing any environment variable in the dashboard.
Cause: Local database is out of sync with the migration history.
Fix (development only β do not run in production):
npx prisma migrate reset
npm run prisma:migrateFix: Kill the process using port 3000, or start on a different port:
# Windows
netstat -ano | findstr :3000
taskkill /PID <PID> /F
# macOS / Linux
lsof -ti:3000 | xargs kill -9
# Or run on a different port
npm run dev -- -p 3001Fix:
- Ensure all required environment variables are set in the Vercel dashboard β missing vars can cause build-time type errors.
- Run
npm run buildlocally first to catch errors before pushing. - Check that your Node.js version in Vercel matches the one used locally (see
enginesinpackage.json).
- Fork the repository
- Create a 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.
- Next.js team for the amazing framework
- Vercel for hosting solutions
- Google for Gemini AI
- NeonDB for serverless PostgreSQL
- All contributors and users of GitVerse
Made with β€οΈ by the GitVerse Team