HungryFools.dev is a directory where AI-first developers can show off their work, find people to collab with, and get hired.
π Register at hungryfools.dev or clone and run your own instance.
- π GitHub OAuth Authentication - Sign in with your GitHub account
- π€ Developer Profiles - Show off your skills, interests, location, and if you're available
- π Project Portfolios - Show your best work with images and videos
- π Smart Search - AI-powered search that actually works
- π’ Company Directory - Companies can hire vibecoders
- π¨ Dynamic OG Images - Beautiful social media previews with custom branding and Pixelify Sans font
- π± Responsive Design - Built on Tailwind CSS and shadcn/ui
- π GDPR Compliant - EU-first data residency with simplified cookie consent
- Frontend: Next.js 15 with App Router, React 19, TypeScript
- Styling: Tailwind CSS, shadcn/ui
- Authentication: Auth.js v5 with GitHub OAuth
- Database: Neon Postgres 17 with Drizzle ORM
- File Storage: Cloudflare R2
- AI Services: Groq (LLM via kimi-k2-instruct), Cloudflare Workers AI (BGE-M3 embeddings)
- Analytics: PostHog (EU region)
- Email: Postmark
- Deployment: Vercel
- Package Manager: pnpm
- Node.js 18+
- pnpm 8+
- A Neon Postgres database
- GitHub OAuth App
- Cloudflare account (for AI services and R2 storage)
git clone https://github.com/GeorgeStrakhov/hungryfools.dev.git
cd hungryfools.dev
pnpm install
Copy env.example
to .env.local
and fill in the values:
cp env.example .env.local
Required environment variables:
# Auth.js (generate with: npx auth secret)
AUTH_SECRET=your-auth-secret
# GitHub OAuth (create at https://github.com/settings/developers)
AUTH_GITHUB_ID=your-github-client-id
AUTH_GITHUB_SECRET=your-github-client-secret
# Database (Neon Postgres)
DATABASE_URL=postgres://user:password@host:port/dbname?sslmode=require
# Analytics (PostHog)
NEXT_PUBLIC_POSTHOG_KEY=your-posthog-key
NEXT_PUBLIC_POSTHOG_HOST=https://eu.i.posthog.com
# AI APIs
GROQ_API_KEY=your-groq-api-key
OPENROUTER_API_KEY=your-openrouter-key
REPLICATE_API_KEY=your-replicate-key
# Cloudflare (for BGE-M3 embeddings)
CLOUDFLARE_ACCOUNT_ID=your-account-id
CLOUDFLARE_API_KEY=your-api-key
# S3 Storage (Cloudflare R2 recommended)
S3_ENDPOINT_URL=your-r2-endpoint
S3_BUCKET_NAME=your-bucket-name
S3_ACCESS_ID_KEY=your-access-key
S3_SECRET_ACCESS_KEY=your-secret-key
S3_REGION=auto
S3_PUBLIC_ENDPOINT=https://cdn.yourdomain.com
# Email (Postmark)
POSTMARK_KEY=your-postmark-key
[email protected]
Connect to your Neon database and enable the required extensions:
-- Enable pgvector for embeddings (required for search)
CREATE EXTENSION IF NOT EXISTS vector;
-- Enable pg_stat_statements for query monitoring (optional)
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
# Generate migration files
pnpm db:generate
# Apply migrations to your database
pnpm db:migrate
- Go to GitHub Developer Settings
- Create a new OAuth App with:
- Homepage URL:
http://localhost:3000
(for development) - Authorization callback URL:
http://localhost:3000/api/auth/callback/github
- Homepage URL:
- Copy the Client ID and Client Secret to your
.env.local
- Create a Cloudflare account and get your Account ID from the dashboard
- Create an API Token with these permissions:
- Zone: Zone Settings:Read, Zone:Read
- Account: Cloudflare Workers:Edit, Account Settings:Read
- Create an R2 bucket for file storage
- Generate R2 API tokens for bucket access
- Create a Postmark account
- Create a server and get the Server API Token
- Verify your sender domain/email
- Create a PostHog account (choose EU region)
- Get your Project API Key from the settings
- Create a Groq account
- Get your API key from the console
- Add to
.env.local
:GROQ_API_KEY=your-groq-api-key
- Used for structured LLM responses (query parsing, profile generation) with the kimi-k2-instruct model
pnpm dev
Visit http://localhost:3000 to see the application.
To grant admin privileges to users:
# Open Drizzle Studio
pnpm db:studio
- Navigate to the
users
table in Drizzle Studio (opens at http://localhost:4983) - Find the user you want to make an admin
- Set the
isAdmin
field totrue
- Save the changes
Admin users will have access to the admin interface at /admin
which includes:
- User management
- Content moderation tools
- System monitoring
- Service testing endpoints (LLM, S3, embeddings, email)
To test the intelligent search functionality, you can generate mock profiles:
# Generate 30 diverse test profiles with AI-generated content
npx tsx scripts/generate-batch-test-profiles.ts 3
# Test the hybrid search system
npx tsx scripts/test-hybrid-search.ts
# Try specific test queries
npx tsx scripts/test-hybrid-search.ts all
The generated profiles include:
- Diverse developers from different companies (OpenAI, Anthropic, Mastra.ai, etc.)
- Global locations (Berlin, San Francisco, London, Remote, etc.)
- Varied tech stacks (Next.js, Python, AI/ML, TypeScript, etc.)
- Realistic projects with embeddings for semantic search
- Personal interests for complex query testing
Example test queries that work:
"AI developers in Berlin"
"Next.js experts who like music"
"Python developers building automation"
"machine learning engineers interested in photography"
Cleanup when done:
# Remove all test users and data
npx tsx scripts/cleanup-test-users.ts
hungryfools/
βββ public/ # Static assets
β βββ images/ # Logos and images
βββ src/
β βββ app/ # Next.js App Router pages
β β βββ (app)/ # Main application routes
β β βββ admin/ # Admin dashboard
β β βββ api/ # API endpoints
β βββ components/ # React components
β β βββ ui/ # shadcn/ui components
β β βββ [feature]/ # Feature-specific components
β βββ db/ # Database configuration
β β βββ schema/ # Drizzle ORM schemas
β βββ lib/ # Utility functions and services
β β βββ actions/ # Server actions
β β βββ services/ # External service integrations
β β βββ utils/ # Helper functions
β βββ types/ # TypeScript type definitions
βββ drizzle/ # Database migrations
βββ scripts/ # Utility scripts
βββ docs/ # Documentation
# Development
pnpm dev # Start development server with Turbopack
pnpm build # Build for production
pnpm start # Start production server
pnpm lint # Run ESLint
pnpm lint:fix # Fix ESLint issues
pnpm format # Format code with Prettier
# Database
pnpm db:generate # Generate migration files
pnpm db:migrate # Run database migrations
pnpm db:studio # Open Drizzle Studio for database management
# Testing & Development
npx tsx scripts/generate-test-profiles.ts # Generate 5 test profiles
npx tsx scripts/generate-batch-test-profiles.ts 3 # Generate 30 test profiles (3 batches)
npx tsx scripts/test-hybrid-search.ts # Test search with sample queries
npx tsx scripts/test-hybrid-search.ts all # Test all search queries
npx tsx scripts/cleanup-test-users.ts # Remove all test users
# Code Quality
pnpm prettier # Check code formatting
pnpm prettier:fix # Fix code formatting
- GitHub OAuth integration with Auth.js v5
- Multi-step onboarding flow with LLM content normalization
- Rich developer profiles with skills, interests, and availability
- Public profile pages at
/u/{handle}
- Full CRUD system for developer projects
- Media uploads (images/videos) via Cloudflare R2 including automatic image transformations and optimizations
- Individual project pages at
/u/{handle}/p/{slug}
- Content moderation with LLM + profanity filtering
- Hybrid search combining:
- BM25 keyword matching (wink-nlp)
- Vector similarity search (BGE-M3 embeddings)
- BGE reranking for optimal results
- Natural language queries like "Next.js developers in Berlin who like music"
- User and content management
- System monitoring and analytics
- Service testing endpoints (LLM, S3, embeddings, email)
- Moderation tools
- EU-first architecture with data residency in Europe
- GDPR compliant with simplified cookie consent (required for service use)
- Content moderation using AI + manual review
- Secure authentication with encrypted sessions
Update your production environment variables:
NEXT_PUBLIC_APP_URL="https://yourdomain.com"
# ... other variables with production values
- Connect your GitHub repository to Vercel
- Set your environment variables in the Vercel dashboard
- Important: Set the build command to
pnpm db:migrate && pnpm build
to run migrations on production - Deploy automatically on git push
- 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 - see the LICENSE file for details.
- Built with love by the vibecoder community
- Powered by cutting-edge AI and modern web technologies
- Inspired by the hungry and foolish developers who ship fast