Skip to content

GeorgeStrakhov/hungryfools.dev

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

56 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

HungryFools.dev

PacDuck Logo

a directory of hungry and foolish vibecoders who ship human-level stuff at superhuman speed

by vibecoders, for vibecoders

GitHub License TypeScript Next.js

🎯 About

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.

Key Features

  • πŸ” 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

πŸ› οΈ Tech Stack

πŸš€ Getting Started

Prerequisites

  • Node.js 18+
  • pnpm 8+
  • A Neon Postgres database
  • GitHub OAuth App
  • Cloudflare account (for AI services and R2 storage)

1. Clone the Repository

git clone https://github.com/GeorgeStrakhov/hungryfools.dev.git
cd hungryfools.dev

2. Install Dependencies

pnpm install

3. Environment Variables

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]

4. Database Setup

Enable Required Extensions

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;

Run Database Migrations

# Generate migration files
pnpm db:generate

# Apply migrations to your database
pnpm db:migrate

5. Set Up External Services

GitHub OAuth App

  1. Go to GitHub Developer Settings
  2. Create a new OAuth App with:
    • Homepage URL: http://localhost:3000 (for development)
    • Authorization callback URL: http://localhost:3000/api/auth/callback/github
  3. Copy the Client ID and Client Secret to your .env.local

Cloudflare Setup

  1. Create a Cloudflare account and get your Account ID from the dashboard
  2. Create an API Token with these permissions:
    • Zone: Zone Settings:Read, Zone:Read
    • Account: Cloudflare Workers:Edit, Account Settings:Read
  3. Create an R2 bucket for file storage
  4. Generate R2 API tokens for bucket access

Postmark (Email)

  1. Create a Postmark account
  2. Create a server and get the Server API Token
  3. Verify your sender domain/email

PostHog (Analytics)

  1. Create a PostHog account (choose EU region)
  2. Get your Project API Key from the settings

Groq (LLM)

  1. Create a Groq account
  2. Get your API key from the console
  3. Add to .env.local: GROQ_API_KEY=your-groq-api-key
  4. Used for structured LLM responses (query parsing, profile generation) with the kimi-k2-instruct model

6. Start Development Server

pnpm dev

Visit http://localhost:3000 to see the application.

7. Setting up Admin Access

To grant admin privileges to users:

# Open Drizzle Studio
pnpm db:studio
  1. Navigate to the users table in Drizzle Studio (opens at http://localhost:4983)
  2. Find the user you want to make an admin
  3. Set the isAdmin field to true
  4. 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)

8. Testing the Search System (Optional)

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

πŸ“ Project Structure

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

πŸ› οΈ Available Scripts

# 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

πŸ” Key Features

Authentication & Profiles

  • 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}

Project Showcase

  • 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

Intelligent Search

  • 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"

Admin Dashboard

  • User and content management
  • System monitoring and analytics
  • Service testing endpoints (LLM, S3, embeddings, email)
  • Moderation tools

🌍 Privacy & Compliance

  • 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

🚒 Deployment

Environment Variables for Production

Update your production environment variables:

NEXT_PUBLIC_APP_URL="https://yourdomain.com"
# ... other variables with production values

Deploy to Vercel

  1. Connect your GitHub repository to Vercel
  2. Set your environment variables in the Vercel dashboard
  3. Important: Set the build command to pnpm db:migrate && pnpm build to run migrations on production
  4. Deploy automatically on git push

🀝 Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/amazing-feature
  3. Commit your changes: git commit -m 'Add amazing feature'
  4. Push to the branch: git push origin feature/amazing-feature
  5. Open a Pull Request

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

πŸ™ Acknowledgments

  • 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

Happy Coding! πŸ¦†

About

a directory of proud vibecoders who ship human-level stuff at superhuman speed

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages