A global-first digital platform for student founders. Validate ideas, connect with world-class experts, and build with confidence.
| Layer | Technology |
|---|---|
| Frontend | Next.js 16 (App Router), React 19, TypeScript, TailwindCSS v4 |
| Auth | Clerk β identity, sessions, role management |
| Database | PostgreSQL β Drizzle ORM (Next.js) + SQLAlchemy async (Python) |
| Python Backend | FastAPI, SQLAlchemy async, asyncpg |
| Nodemailer (SMTP) | |
| Webhooks | Svix (Clerk webhook verification) |
| Deployment | Vercel (frontend) + Render (Python backend) |
GSF/
βββ app/ # Next.js App Router pages
β βββ (auth)/ # Sign-in / sign-up routes
β βββ (student)/ # Student dashboard routes
β βββ (expert)/ # Expert dashboard routes
β βββ (admin)/ # Admin routes
β βββ api/ # Next.js API route handlers (23 endpoints)
β βββ actions/ # Next.js Server Actions
β βββ layout.tsx # Root layout (Clerk, ThemeProvider, Navbar)
β βββ globals.css # Global styles + CSS custom properties
β
βββ components/ # Reusable React components
β βββ ui/ # Base UI primitives
β βββ layout/ # Navbar, ThemeProvider, PageTransition
β βββ landing/ # Marketing/landing components
β βββ experts/ # Expert profile components
β βββ matching/ # Matching engine UI
β βββ ...
β
βββ lib/ # Core business logic
β βββ api/
β β βββ client.ts # β Centralized Python backend API client
β β βββ route-helpers.ts # Next.js route handler utilities
β βββ db/
β β βββ index.ts # Drizzle DB singleton
β β βββ schema.sql # Raw SQL schema reference
β βββ schema.ts # Drizzle ORM schema definitions
β βββ auth.ts # Clerk β AuthUser mapping
β βββ matchingEngine.ts # Expert-founder matching algorithm
β βββ credits-server.ts # Credit management (server-side)
β βββ subscription.ts # Subscription plan logic
β βββ ...
β
βββ hooks/ # Custom React hooks
βββ types/ # TypeScript global type declarations
βββ utils/ # Utility functions
βββ migrations/ # SQL migration files
β
βββ python-backend/ # FastAPI Python backend
β βββ routers/ # Route handlers (sessions, credits, ventures)
β βββ main.py # App entry point (CORS, routers, health check)
β βββ auth.py # Clerk JWT validation via JWKS
β βββ database.py # SQLAlchemy async engine
β βββ models.py # SQLAlchemy models
β βββ requirements.txt # Python dependencies
β βββ .env.example # Backend environment template
β βββ Dockerfile # Production Docker image
β βββ render.yaml # Render deployment config
β
βββ .github/
β βββ workflows/ # 41 GitHub Actions workflows
β β βββ readme.md # Complete workflow reference
β βββ reviewers/ # Mentor pool & stats JSON files
β βββ labels/ # Label definitions (gssoc-labels.json)
β
βββ docs/ # Internal developer documentation
β βββ CLERK_GUIDE.md
β βββ SUBSCRIPTION_SYSTEM.md
β βββ REALTIME_NOTIFICATIONS.md
β βββ ...
β
βββ .env.example # Frontend environment template β START HERE
βββ vercel.json # Vercel deployment config
βββ next.config.ts # Next.js config
βββ drizzle.config.ts # Drizzle Kit config
βββ tailwind.config.ts # TailwindCSS config
- Node.js 20+ (download)
- npm 9+
- Python 3.11+ (for the Python backend only)
- PostgreSQL database β free tier at neon.tech or supabase.com
- Clerk account β free at clerk.com
git clone https://github.com/Ayushh-Sharmaa/GSF.git
cd GSF# Install dependencies
npm install
# Copy the environment template and fill in your values
cp .env.example .env.localEdit .env.local:
- Clerk keys β from Clerk Dashboard β Your App β API Keys
- DATABASE_URL β your PostgreSQL connection string (Neon or Supabase)
- NEXT_PUBLIC_API_URL β
http://localhost:8000for local development
# Run the dev server
npm run dev
# β http://localhost:3000cd python-backend
# Create a virtual environment
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Copy and fill in environment variables
cp .env.example .envEdit python-backend/.env:
- DATABASE_URL β same PostgreSQL database as the frontend
- CLERK_DOMAIN β your Clerk frontend API domain (e.g.
your-app.clerk.accounts.dev) - FRONTEND_URL β
http://localhost:3000
# Run the backend
uvicorn main:app --reload --port 8000
# β http://localhost:8000
# β Health check: http://localhost:8000/health| Command | Description |
|---|---|
npm run dev |
Start Next.js dev server |
npm run build |
Production build |
npm run start |
Start production server |
npm run lint |
Run ESLint via next lint |
npm run lint:fix |
Auto-fix ESLint errors |
npm run format |
Format all files with Prettier |
npm run type-check |
TypeScript type check (no emit) |
npm run test |
Run Vitest test suite |
npm run test:watch |
Run Vitest in watch mode |
See .env.example for the full list with descriptions.
Frontend (.env.local):
| Variable | Required | Description |
|---|---|---|
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY |
β | Clerk publishable key |
CLERK_SECRET_KEY |
β | Clerk secret key |
DATABASE_URL |
β | PostgreSQL connection string |
NEXT_PUBLIC_API_URL |
β | Python backend URL |
SVIX_SECRET |
β | Svix webhook signing secret |
EMAIL_* |
For email features | SMTP credentials |
Python backend (python-backend/.env):
| Variable | Required | Description |
|---|---|---|
DATABASE_URL |
β | PostgreSQL connection string |
CLERK_DOMAIN |
β | Clerk JWKS domain for JWT validation |
FRONTEND_URL |
β | Allowed CORS origin(s) |
- Push to GitHub
- Import the repo in Vercel
- Set all environment variables from
.env.examplein Vercel Dashboard β Project β Settings β Environment Variables - Deploy β Vercel auto-deploys on every push to
main
- Connect the repo in Render
- Use
python-backend/render.yamlas the service definition - Set
DATABASE_URL,CLERK_DOMAIN,FRONTEND_URLin Render Dashboard β Environment - First deploy triggers automatically
cd python-backend
docker build -t gsf-api .
docker run -p 8000:8000 --env-file .env gsf-apiThis repo has 41 automated workflows handling assignment management, PR pipelines, spam detection, mentor systems, leaderboards, code quality, and AI-assisted reviews.
See .github/workflows/readme.md for the complete reference.
Required secrets (set in GitHub β Repo β Settings β Secrets):
| Secret | Used by |
|---|---|
OPENAI_API_KEY |
AI slop detection, Tenet PR review |
PROJECTS_TOKEN |
GitHub Projects board management |
Required repo variables (Settings β Variables):
| Variable | Default | Used by |
|---|---|---|
MENTOR_LEADERBOARD_ISSUE |
1 |
Mentor leaderboard |
CONTRIBUTOR_LEADERBOARD_ISSUE |
2 |
Contributor leaderboard |
PROJECT_BOARD_NUMBER |
1 |
Project board management |
We welcome contributions! Please read CONTRIBUTING.md before submitting a PR.
- Pick an issue and comment
/assignto claim it - Fork the repo and create a branch:
git checkout -b feat/your-feature - Make your changes with DCO sign-off:
git commit -s -m "feat: add X" - Open a PR β our automated pipeline will guide you through the rest
MIT License Β© 2025 GSF β Global Society of Founders