AI-powered GitHub and portfolio to company matching service. Analyzes your GitHub profile, resume, and personal statement to find the best company matches using semantic AI matching.
- GitHub Integration: Analyzes your public/private repos, languages, and contributions
- AI-Powered Matching: Uses OpenAI GPT-4o for deep semantic reasoning and high-precision matching
- Resume Analysis: Upload your resume for comprehensive skill matching
- Personal Statement: Provide context about your career goals
- Company Database: Pre-seeded with companies seeking various tech skills
- Match Scoring: Get detailed match scores with reasoning and skill alignment
- Portfolio Export: Generate professional PDF portfolios with technical evidence
- Framework: Next.js 16 (App Router)
- Language: TypeScript
- Database: PostgreSQL (Neon) with Prisma ORM
- Authentication: NextAuth.js with GitHub OAuth
- AI: OpenAI GPT-4o (Reasoning Model)
- Styling: TailwindCSS + Custom CSS
- Deployment: Vercel
- Node.js 20+
- npm/yarn/pnpm
- GitHub Account (for OAuth)
- Neon PostgreSQL Database
- OpenAI API Key
git clone <your-repo-url>
cd connect
npm installCopy .env.example to .env and fill in your credentials:
cp .env.example .envRequired environment variables:
DATABASE_URL: Your Neon PostgreSQL connection stringGITHUB_ID: GitHub OAuth App Client IDGITHUB_SECRET: GitHub OAuth App Client SecretNEXTAUTH_URL:http://localhost:3000(local) or your production URLNEXTAUTH_SECRET: Generate withopenssl rand -base64 32OPENAI_API_KEY: Your OpenAI API keyGITHUB_TOKEN: (Optional) Personal access token for higher rate limits
- Go to GitHub Developer Settings
- Create a new OAuth App
- Set Homepage URL:
http://localhost:3000 - Set Authorization callback URL:
http://localhost:3000/api/auth/callback/github - Copy Client ID and Client Secret to
.env
# Push schema to database
npx prisma db push
# Seed with sample companies
npx prisma db seed
# OR use the API endpoint: http://localhost:3000/api/seednpm run devOpen http://localhost:3000 in your browser.
connect/
├── prisma/
│ ├── schema.prisma # Database schema
│ ├── seed.ts # Database seeding script (Excel + JSON)
│ └── migrations/ # Database migrations
├── src/
│ ├── app/
│ │ ├── api/ # API routes
│ │ │ ├── analyze/ # GitHub analysis
│ │ │ ├── companies/ # Company listing
│ │ │ ├── match/ # AI matching engine
│ │ │ ├── scrape/ # Web scraping endpoint
│ │ │ └── seed/ # Database seeding endpoint
│ │ ├── admin/ # Admin dashboard
│ │ │ └── scrape/ # Career page scraper UI
│ │ ├── layout.tsx # Root layout
│ │ ├── page.tsx # Home page
│ │ └── globals.css # Global styles
│ ├── components/ # React components
│ │ └── Providers.tsx # NextAuth & Theme providers
│ ├── lib/
│ │ ├── agents.ts # AI Agent orchestration
│ │ ├── auth.ts # NextAuth configuration
│ │ ├── github.ts # GitHub API client
│ │ ├── scraper.ts # Web scraping engine
│ │ ├── parse-resume.ts # PDF/Word resume parser
│ │ ├── pdf.ts # PDF generation library
│ │ └── prisma.ts # Prisma client
│ └── types/ # TypeScript definitions
├── public/ # Static assets
└── ...config files
npm run dev # Start development server
npm run build # Build for production
npm start # Start production server
npm run lint # Run ESLint
npx prisma studio # Open Prisma Studio (database GUI)POST /api/analyze- Analyze GitHub profileGET /api/companies- Get all companiesPOST /api/match- Generate AI-powered matchesGET /api/seed- Seed database with sample companies/api/auth/*- NextAuth endpoints
See DEPLOY.md for detailed deployment instructions to Vercel with custom domain.
- Push code to GitHub
- Import project in Vercel
- Add environment variables
- Deploy!
Remember to:
- Update GitHub OAuth callback URL to production URL
- Set
NEXTAUTH_URLto production URL - Run database migrations and seeding in production
- Authentication: Users sign in with GitHub OAuth
- Data Collection: System fetches GitHub profile, repos, and languages
- Analysis: OpenAI analyzes user's profile against company requirements
- Matching: Heuristic filtering + AI semantic analysis generates match scores
- Results: Users see top matches with detailed reasoning
- Never commit
.envfile - Keep API keys secure
- Use environment variables for all secrets
- Enable GitHub OAuth app restrictions in production
MIT
Contributions welcome! Please open an issue or PR.
Built with ❤️ by Basely