A modern, full-stack web application for entrepreneurs to share, discover, and collaborate on startup ideas. Built with Next.js 16, TypeScript, Prisma, and NextAuth, this platform provides a seamless experience for the startup community to connect and innovate.
https://user-images.githubusercontent.com/Screen%20Recording%202026-01-23%20114757.mp4
Watch the platform in action - from browsing startup ideas to creating your own
- Features
- Tech Stack
- Project Structure
- Getting Started
- Development
- Usage
- API Routes
- Database Schema
- Authentication
- Deployment
- Contributing
- License
- π― Share Startup Ideas: Create and publish your startup concepts with detailed descriptions
- π Browse & Discover: Explore innovative startup ideas from entrepreneurs worldwide
- π€ User Profiles: Manage your startups and track your submissions
- π Secure Authentication: GitHub OAuth integration via NextAuth v5
- π View Tracking: Monitor engagement with view counts on each startup
- π·οΈ Category System: Organize startups by categories (Tech, Health, Finance, Education, etc.)
- π± Fully Responsive: Mobile-first design with seamless experience across all devices
- β‘ Server-Side Rendering: Optimized performance with Next.js App Router
- π¨ Modern UI: Beautiful interface with Tailwind CSS and custom animations
- π Real-time Updates: Form submissions with React Server Actions
- ποΈ Type-Safe Database: Prisma ORM with PostgreSQL
- π‘οΈ Form Validation: Comprehensive client and server-side validation
- π Animated Components: Smooth animations and transitions
- π Rich Content: Support for detailed pitches and descriptions
- Next.js 16.1.1 - React framework with App Router
- React 19.2.3 - UI library
- TypeScript 5 - Type-safe JavaScript
- Tailwind CSS 4.1.18 - Utility-first CSS framework
- Lucide React - Beautiful icon library
- Class Variance Authority - CSS class composition utility
- NextAuth 5 - Authentication solution
- Prisma 7.2.0 - Modern ORM
- PostgreSQL - Primary database
- LibSQL - Alternative database support
- ESLint - Code linting
- PostCSS - CSS processing
- npm 11.6.2 - Package manager
startup/
βββ app/ # Next.js App Router
β βββ (root)/ # Root route group
β β βββ layout.tsx # Root layout wrapper
β β βββ page.tsx # Homepage with hero section
β βββ api/ # API routes
β β βββ auth/ # Authentication endpoints
β β βββ [...nextauth]/ # NextAuth.js handler
β β βββ route.ts # Auth API route
β βββ components/ # Shared components
β β βββ Navbar.tsx # Navigation bar component
β βββ startup/ # Startup feature routes
β β βββ create/ # Create startup page
β β βββ page.tsx # Create page wrapper
β β βββ StartupForm.tsx # Startup creation form
β βββ startups/ # Browse startups
β β βββ page.tsx # Startups listing page
β βββ globals.css # Global styles
β βββ layout.tsx # Root application layout
βββ data/ # Static data files
β βββ startups.json # Sample startup data
βββ lib/ # Utility functions
β βββ actions.ts # Server actions
β βββ db.ts # Database operations
β βββ utils.ts # Helper functions
βββ prisma/ # Database configuration
β βββ schema.prisma # Database schema
β βββ prisma.config.ts # Prisma configuration
βββ public/ # Static assets
βββ auth.ts # NextAuth configuration
βββ components.json # shadcn/ui configuration
βββ eslint.config.mjs # ESLint configuration
βββ next-env.d.ts # Next.js TypeScript declarations
βββ next.config.ts # Next.js configuration
βββ package.json # Project dependencies
βββ postcss.config.mjs # PostCSS configuration
βββ tailwind.config.ts # Tailwind CSS configuration
βββ tsconfig.json # TypeScript configuration
βββ README.md # Project documentation
Before you begin, ensure you have the following installed:
- Node.js: Version 20 or higher (Download)
- npm: Version 11.6.2 or higher (comes with Node.js)
- PostgreSQL: Version 12 or higher (Download)
- Git: For version control (Download)
- GitHub Account: For OAuth authentication
-
Clone the repository
git clone <your-repository-url> cd startup
-
Install dependencies
npm install
-
Set up environment variables (see Environment Variables)
-
Initialize the database (see Database Setup)
Create a .env file in the root directory with the following variables:
# Database Configuration
DATABASE_URL="postgresql://username:password@localhost:5432/startup_db?schema=public"
# Alternative LibSQL Configuration (optional)
# TURSO_DATABASE_URL="libsql://your-database.turso.io"
# TURSO_AUTH_TOKEN="your-auth-token"
# NextAuth Configuration
AUTH_SECRET="your-super-secret-key-here" # Generate with: openssl rand -base64 32
AUTH_GITHUB_ID="your-github-oauth-app-id"
AUTH_GITHUB_SECRET="your-github-oauth-app-secret"
# Application URL
NEXTAUTH_URL="http://localhost:3000"- Go to GitHub Developer Settings
- Click "New OAuth App"
- Fill in the details:
- Application name: Startup Ideas Platform
- Homepage URL:
http://localhost:3000 - Authorization callback URL:
http://localhost:3000/api/auth/callback/github
- Copy the Client ID to
AUTH_GITHUB_ID - Generate a Client Secret and copy it to
AUTH_GITHUB_SECRET
-
Create a PostgreSQL database
# Using psql psql -U postgres CREATE DATABASE startup_db; \q
-
Generate Prisma client
npx prisma generate
-
Run database migrations
npx prisma db push
-
Optional: Seed the database
# You can create a seed script or manually add data through the app npx prisma studio # Opens Prisma Studio for manual data entry
npm run devOpen http://localhost:3000 in your browser to see the application.
The development server features:
- π₯ Hot Module Replacement: Instant updates as you edit files
- π TypeScript Support: Real-time type checking
- π¨ Tailwind JIT: Just-in-time CSS compilation
- π Error Overlay: Detailed error messages in the browser
| Command | Description |
|---|---|
npm run dev |
Start development server on port 3000 |
npm run build |
Create production build |
npm start |
Start production server |
npm run lint |
Run ESLint for code quality |
npx prisma studio |
Open Prisma Studio (database GUI) |
npx prisma generate |
Generate Prisma client |
npx prisma db push |
Push schema changes to database |
npx prisma migrate dev |
Create and apply migrations |
-
Create a new feature branch
git checkout -b feature/your-feature-name
-
Make your changes with hot reloading enabled
-
Run linter to check code quality
npm run lint
-
Test your changes in the browser
-
Commit and push
git add . git commit -m "Add: your feature description" git push origin feature/your-feature-name
- Sign in with your GitHub account
- Navigate to "Share Your Idea" or click the button on the homepage
- Fill in the startup form:
- Title: Name of your startup (min. 3 characters)
- Category: Select from available categories
- Description: Detailed description (min. 100 characters)
- Image URL: Optional image for your startup
- Pitch: Your elevator pitch
- Stage: Current stage (Idea, MVP, Growth, etc.)
- Click "Submit Your Startup"
- Navigate to "Browse Startups" from the homepage
- Browse through all submitted startup ideas
- Click on any card to view more details
- View counts are automatically tracked
- View all your submissions in the Startups page
- Each startup displays:
- Title and category
- Description and pitch
- Current stage
- View count
- Creation date
- Author information
NextAuth.js catch-all route handling all authentication requests.
Supported Providers:
- GitHub OAuth
Endpoints:
/api/auth/signin- Sign in page/api/auth/signout- Sign out/api/auth/session- Get current session/api/auth/callback/github- GitHub OAuth callback
Server action to create a new startup.
Location: lib/actions.ts
Parameters:
formData: FormData object containing:title(string, required, min 3 chars)category(string, required)description(string, required, min 100 chars)image(string, optional)pitch(string, optional)stage(string, default: "idea")
Returns:
- Success:
{ success: true }+ redirect to startups page - Error:
{ error: string, success: false }
Authentication: Required
model User {
id String @id @default(cuid())
name String?
email String @unique
emailVerified DateTime?
image String?
createdAt DateTime @default(now())
startups Startup[] // One-to-many relationship
}Fields:
id: Unique identifier (CUID)name: User's display nameemail: Unique email addressemailVerified: Email verification timestampimage: Profile image URLcreatedAt: Account creation timestamp
model Startup {
id String @id @default(cuid())
title String
category String
description String
image String?
pitch String?
stage String @default("idea")
views Int @default(0)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
authorId String
author User @relation(fields: [authorId], references: [id], onDelete: Cascade)
@@index([authorId])
@@index([createdAt])
}Fields:
id: Unique identifier (CUID)title: Startup name/titlecategory: Startup categorydescription: Full descriptionimage: Optional image URLpitch: Elevator pitchstage: Development stage (idea, mvp, growth, etc.)views: View countcreatedAt: Creation timestampupdatedAt: Last update timestampauthorId: Foreign key to Userauthor: Relation to User model
Indexes:
authorId: For efficient user startup queriescreatedAt: For chronological sorting
This application uses NextAuth.js v5 (Beta) for authentication.
- User clicks "Sign In" on the Navbar
- Redirected to GitHub OAuth consent page
- User authorizes the application
- GitHub redirects back with authorization code
- NextAuth exchanges code for access token
- User session is created and stored
- User is redirected back to the application
- Sessions are handled server-side
- Session data is encrypted and stored in cookies
- Protected routes check for valid session
auth()helper provides current user information
Routes that require authentication:
/startup/create- Create new startup
- Users can only create startups when authenticated
- All users can browse public startup listings
- User information is embedded in startup submissions
-
Push your code to GitHub
git add . git commit -m "Initial commit" git push origin main
-
Import your repository on Vercel
- Go to Vercel
- Click "Import Project"
- Select your repository
-
Configure environment variables
- Add all variables from your
.envfile - Update
NEXTAUTH_URLto your production domain
- Add all variables from your
-
Set up PostgreSQL database
- Use Vercel Postgres
- Or use Neon
- Or use Supabase
- Update
DATABASE_URLin Vercel environment variables
-
Deploy
- Vercel will automatically build and deploy
- Run database migrations after first deployment
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npx prisma generate
RUN npm run build
EXPOSE 3000
CMD ["npm", "start"]-
Build the application
npm run build
-
Set up environment variables on your server
-
Run database migrations
npx prisma db push
-
Start the production server
npm start
Contributions are welcome! Here's how you can help:
- Check if the bug has already been reported in Issues
- If not, create a new issue with:
- Clear title and description
- Steps to reproduce
- Expected vs actual behavior
- Screenshots if applicable
- Your environment (OS, Node version, etc.)
- Check Issues for existing feature requests
- Create a new issue with:
- Clear description of the feature
- Use cases and benefits
- Possible implementation approach
- Fork the repository
- Create a feature branch
git checkout -b feature/amazing-feature
- Make your changes
- Run linter and tests
npm run lint
- Commit your changes
git commit -m "Add: amazing feature" - Push to your fork
git push origin feature/amazing-feature
- Open a Pull Request
- Follow existing code conventions
- Use TypeScript for type safety
- Write meaningful commit messages
- Comment complex logic
- Keep functions small and focused
This project is licensed under the MIT License - see the LICENSE file for details.
- Next.js - The React Framework
- Vercel - Deployment platform
- Prisma - Next-generation ORM
- NextAuth.js - Authentication solution
- Tailwind CSS - CSS framework
- Lucide - Icon library
If you have any questions or need help, please:
- π§ Open an issue in this repository
- π¬ Start a discussion in the Discussions tab
- π Check the Next.js Documentation
- π Search existing issues and discussions
Future features and improvements:
- User profiles with bio and social links
- Startup detail pages with comments
- Like/upvote system
- Search and filtering functionality
- Tags/hashtags for better discovery
- Email notifications
- Startup collaboration features
- Analytics dashboard
- Export startup data
- Dark mode support
- Multi-language support
- Admin panel
- Rate limiting
- API documentation
- Mobile app
Built with β€οΈ by entrepreneurs, for entrepreneurs
Last Updated: January 2026