A specialized outreach and CRM platform for developers, job seekers, and builders who want to connect with startup founders and early-stage companies. Discover founders, generate AI-powered personalized outreach messages, and track relationships through a comprehensive CRM system.
This platform solves a critical problem for technical professionals: finding and connecting with startup founders is fragmented and inefficient. Developers waste time bouncing between scattered communities (Slack groups, email lists, forums) trying to discover interesting startups, and most people don't know how to craft professional outreach messages that get responses.
Our Solution:
- Centralized Discovery: Browse hundreds of verified startup founders in one place
- AI-Powered Outreach: Generate personalized, high-converting messages using Google Gemini AI
- Systematic Tracking: Full CRM tools to manage outreach pipelines across email and LinkedIn
- Advanced Filtering: Filter by contact availability (Apply Link, LinkedIn, Email)
- Smart Search: Search across company names, founder names, and descriptions
- Flexible Display: Sort by newest, oldest, or alphabetically with 8/25/50 items per page
- Rich Information: Company details, founder roles, tech stack, hiring needs, contact info
- Context-Aware: Powered by Google Gemini 2.5 Flash with PDF resume analysis
- Multiple Formats: Email (formal) or LinkedIn (casual) message styles
- Three Outreach Types: Job opportunities, collaboration, or networking
- Enriched Data: Automatically scrapes company websites and LinkedIn for context
- Auto-Save: All generated messages saved for tracking and history
- Contact Management: Save and organize founder contacts
- Outreach Tracking: See current status of all conversations
- Search & Filter: Find contacts by company, name, or keywords
- Profile Setup: Upload resume (PDF or text) and set personalization goals
- Complete Archive: Searchable history of all generated messages
- Dual Pipelines: Separate boards for Email and LinkedIn tracking
- Email Stages: Sent → Responded → In Talks → Interviewing → Rejected
- LinkedIn Stages: Sent → Responded → Connected → Ghosted
- Drag & Drop: Smooth @dnd-kit powered card movement
- Auto-Sync: Real-time updates every 30 seconds
- Notes Support: Add manual notes for offline conversations
- Client-Side Parsing: Extract text from PDFs using PDF.js
- Multimodal AI: Gemini can directly read and analyze PDF resumes
- Automatic Context: Resume data automatically enriches AI-generated messages
- Tiered Access: Free users can browse, Pro users access contact details
- Smart Paywall: LinkedIn profiles and email addresses behind subscription
- Subscription Management: Stripe integration for seamless payments
- Discover: Browse
/opportunitiesto find early-stage startups hiring - Filter: Use filters to find companies with specific skills or apply links
- Save: Click "Save" to add interesting founders to dashboard
- Profile Setup: Upload resume and set job search goals
- Generate: Create personalized outreach emails with AI
- Send: Copy message and send via email or LinkedIn
- Track: Drag contact through Kanban stages as conversation progresses
- Follow-up: Reference Archive for previous messages
- Browse: Find founders working on complementary technologies
- Save: Add interesting builders to dashboard
- Context: Add projects and collaboration interests to profile
- Generate: Create collaboration-focused outreach messages
- Connect: Send via LinkedIn for casual peer-to-peer tone
- Track: Monitor responses on LinkedIn board
- Note: Add manual notes about offline conversations
- Discover: Find builders in similar tech spaces
- Save: Build network of interesting people
- Generate: Create friendly networking messages
- Connect: Send casual LinkedIn DMs
- Maintain: Keep relationships organized in Connected stage
- Engage: Use Archive to remember previous conversations
Frontend:
- Next.js 16 (App Router with Turbopack)
- React 19.2
- TypeScript 5
- Tailwind CSS v4
- Framer Motion (animations)
- @dnd-kit (drag & drop)
Backend & Services:
- Firebase Firestore (database)
- Firebase Storage (file uploads)
- Clerk (authentication)
- Google Gemini 2.5 Flash (AI)
- Stripe (payments)
- PDF.js (document processing)
Development:
- ESLint (code quality)
- Next.js Turbopack (3x faster builds)
- Custom webpack config for PDF.js compatibility
App Router with RSC: Leverages Next.js 15+ App Router with React Server Components for optimal performance and SEO.
Route Protection: Clerk middleware protects routes (/dashboard/*, /opportunities/*, /billing/*, /outreach/*, /admin/*) while keeping landing page public.
Hybrid Rendering: Strategic mix of server-side rendering and client components for best UX.
Real-time Sync: Firestore enables real-time updates across dashboard and outreach boards with 30-second auto-refresh.
Singleton Pattern: Firebase client uses singleton pattern to prevent multiple app instances.
Turbopack Default: Next.js 16 uses Turbopack by default for significantly faster development builds.
entry - Directory of startup founders
company,name,role,company_infolinkedinurl,email,company_url,apply_urlpublished(timestamp),looking_for(tags)
saved_jobs - User's saved contacts
userId,jobId(reference to entry)savedAt, duplicated job fields for offline access
outreach_records - Generated messages & tracking
ownerUserId,contactId,founderName,companymessageType(email/linkedin),outreachType(job/collaboration/friendship)generatedMessage,stage,createdAt,updatedAtlinkedinUrl,emailfor reference
user_profiles - User context for AI generation
resumeText,resumePdfBase64,resumeFilenamegoals,name,title,skills,experience,projectsupdatedAt
users - Stripe subscription data
stripeCustomerId,subscriptionId,subscriptionStatusplan(monthly/yearly),expiresAt
startupfoundersdata/
├── app/
│ ├── api/ # API routes
│ │ ├── generate-outreach/ # AI message generation endpoint
│ │ ├── save-outreach/ # Outreach record persistence
│ │ ├── user-profile/ # Profile management with PDF support
│ │ ├── stripe/ # Payment integration
│ │ │ ├── create-checkout-session/
│ │ │ ├── create-portal-session/
│ │ │ ├── refresh-subscription/
│ │ │ └── webhooks/
│ │ ├── subscription/ # Check subscription status
│ │ └── admin/ # Admin functionality
│ ├── dashboard/ # Saved contacts CRM
│ ├── opportunities/ # Founder directory browser
│ ├── outreach/ # Kanban boards for tracking
│ ├── billing/ # Subscription management
│ ├── admin/ # Admin tools
│ ├── components/ # Shared React components
│ │ ├── Navigation.tsx
│ │ ├── Toast.tsx
│ │ └── [outreach components]
│ ├── layout.tsx # Root layout with auth
│ ├── page.tsx # Landing page
│ └── globals.css # Global styles
├── lib/
│ ├── firebase/
│ │ ├── clientApp.ts # Firebase client config
│ │ └── serverApp.ts # Firebase server config
│ └── utils.ts # Utility functions
├── public/
│ └── js/
│ └── pdf.worker.min.js # PDF.js worker files
├── middleware.ts # Clerk authentication middleware
├── next.config.ts # Next.js configuration
├── tailwind.config.ts # Tailwind CSS configuration
├── tsconfig.json # TypeScript configuration
├── CLAUDE.md # Detailed project documentation
└── package.json
- Node.js 18+ and npm
- Firebase project (Firestore + Storage enabled)
- Clerk account for authentication
- Google AI API key (Gemini 2.5)
- Stripe account (test mode for development)
Create a .env.local file in the root directory:
# Clerk Authentication
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_...
CLERK_SECRET_KEY=sk_test_...
# Google AI (Gemini)
GEMINI_API_KEY=...
# Firebase
NEXT_PUBLIC_FIREBASE_API_KEY=...
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com
NEXT_PUBLIC_FIREBASE_PROJECT_ID=your-project
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=your-project.appspot.com
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=...
NEXT_PUBLIC_FIREBASE_APP_ID=...
# Stripe
STRIPE_SECRET_KEY=sk_test_...
STRIPE_PUBLISHABLE_KEY=pk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...# Clone the repository
git clone <your-repo-url>
cd startupfoundersdata
# Install dependencies
npm install
# Set up environment variables
cp .env.example .env.local
# Edit .env.local with your credentials
# Run development server with Turbopack (recommended)
npm run dev --turbopack
# Or run standard dev server
npm run dev
# Build for production
npm run build
# Start production server
npm start
# Run linting
npm run lintThe development server will start at http://localhost:3000
npm run dev --turbopack- Start development server with Turbopack (3x faster)npm run build- Build the application for productionnpm run start- Start production servernpm run lint- Run ESLint to check code quality
Firestore Schema: Documented in CLAUDE.md - refer to Data Model section above for collection structures.
Client vs Server:
- Use
lib/firebase/clientApp.tsfor browser code - Use
lib/firebase/serverApp.tsfor API routes and server components - Singleton pattern prevents multiple Firebase app instances
Security Rules: Ensure Firestore security rules allow:
- Users to read/write their own data
- Public read access to
entrycollection - Write access to
saved_jobsandoutreach_recordsfor authenticated users
Gemini API: Located in /app/api/generate-outreach/route.ts
Features:
- Multimodal input (can read PDF resumes directly)
- Web scraping via jina.ai reader for company context enrichment
- Three prompt variations for different outreach types
- Configurable tone (formal email vs casual LinkedIn)
Context Building:
- User's resume (PDF or text)
- User's goals/interests
- Founder's company website (scraped)
- Founder's LinkedIn profile data (scraped)
- Job listing details
Custom Configuration: Next.js 16 requires special Turbopack config for PDF.js
Worker Files: PDF.js worker files must be in /public/js/pdf.worker.min.js
Usage:
- Client-side text extraction from uploaded resumes
- Base64 encoding for Firestore storage
- Gemini can read PDFs directly for multimodal analysis
Webpack Config: See next.config.ts for canvas aliasing and fallback configuration needed for PDF.js browser compatibility.
Clerk Setup:
- Middleware in
middleware.tsprotects routes - Protected:
/dashboard/*,/opportunities/*,/billing/*,/outreach/*,/admin/* - Public: Landing page (
/)
Subscription Checking:
- Use
useSubscription()hook in client components - Check
subscriptionStatus === 'active'for Pro features - Stripe webhook updates subscription status in Firestore
Tailwind CSS v4:
- Uses new
@tailwindcss/postcssplugin - CSS variables for theming in
globals.css - Dark theme by default
Animations:
- Framer Motion for page transitions and interactive elements
- Custom animations in
tw-animate-css
Next.js 16 uses Turbopack by default, providing up to 3x faster builds compared to webpack in development mode.
Real-time synchronization capabilities are essential for CRM features. Firestore's NoSQL structure perfectly fits the flexible contact and outreach data model.
Multimodal capabilities allow the AI to directly read PDF resumes, eliminating text extraction errors. Gemini 2.5 Flash offers excellent quality at low cost.
Best-in-class authentication with minimal setup. Provides pre-built UI components and comprehensive middleware for route protection.
Drag-and-drop UX requires significant screen real estate. Mobile users can still view and update records, but the Kanban board is optimized for desktop workflow.
Users manage email and LinkedIn conversations in separate applications. Manual stage updates match the actual workflow better than attempting automated tracking.
We welcome contributions! Here's how you can help:
- 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
- Follow existing TypeScript and React patterns
- Use Tailwind CSS for styling (no inline styles)
- Add comments for complex logic
- Run
npm run lintbefore committing
- Use GitHub Issues to report bugs
- Include reproduction steps and environment details
- Check existing issues before creating new ones
- CLAUDE.md: Comprehensive project documentation with architectural details
- API Routes: Each API route has inline documentation
- Components: Key components have JSDoc comments
[Add your license here]
Built with:
- Next.js - React framework
- Firebase - Backend services
- Clerk - Authentication
- Google AI - Gemini API
- Stripe - Payment processing
- Tailwind CSS - Styling
- Framer Motion - Animations
For detailed technical documentation, see CLAUDE.md