Skip to content

adtytiw/gradwork

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

6 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

gradWork

A modern job platform connecting undergraduate students with internships and entry-level positions.

Next.js NestJS TypeScript Supabase Prisma

πŸš€ Features

For Students

  • πŸŽ“ Create a professional profile
  • πŸ” Browse internships and entry-level jobs
  • πŸ“ One-click job applications
  • πŸ“Š Track application status in real-time

For Companies

  • 🏒 Company profile management
  • πŸ“‹ Post and manage job listings
  • πŸ‘₯ Review candidate applications
  • βœ… Accept/reject applicants

πŸ› οΈ Tech Stack

Frontend

Technology Purpose
Next.js 14 React framework with App Router
TypeScript Type safety
Tailwind CSS Utility-first styling
Supabase Auth Authentication
TanStack Query Server state management
React Hook Form Form handling
Zod Schema validation

Backend

Technology Purpose
NestJS Node.js framework
Prisma 7 Database ORM
PostgreSQL Database (via Supabase)
Passport JWT JWT authentication
class-validator DTO validation

Infrastructure

Service Purpose
Supabase Auth, Database, Storage

πŸ“ Project Structure

gradwork/
β”œβ”€β”€ frontend/                 # Next.js 14 application
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ app/             # App Router pages
β”‚   β”‚   β”‚   β”œβ”€β”€ (auth)/      # Auth pages (login, register)
β”‚   β”‚   β”‚   β”œβ”€β”€ (dashboard)/ # Protected dashboard pages
β”‚   β”‚   β”‚   └── page.tsx     # Landing page
β”‚   β”‚   β”œβ”€β”€ components/      # Reusable UI components
β”‚   β”‚   β”œβ”€β”€ hooks/           # Custom React hooks
β”‚   β”‚   └── lib/             # Utilities (API client, Supabase)
β”‚   └── package.json
β”‚
β”œβ”€β”€ backend/                  # NestJS application
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ auth/            # Authentication module
β”‚   β”‚   β”œβ”€β”€ users/           # User profile management
β”‚   β”‚   β”œβ”€β”€ jobs/            # Job CRUD operations
β”‚   β”‚   β”œβ”€β”€ applications/    # Application management
β”‚   β”‚   └── prisma/          # Prisma service
β”‚   β”œβ”€β”€ prisma/
β”‚   β”‚   └── schema.prisma    # Database schema
β”‚   └── package.json
β”‚
└── llm/                      # Development logs
    β”œβ”€β”€ environment_llm.txt   # Project specifications
    └── mvp_log.md           # Development progress

🚦 Getting Started

Prerequisites

  • Node.js 20+ (via nvm)
  • npm or yarn
  • Supabase account

1. Clone the Repository

git clone https://github.com/yourusername/gradwork.git
cd gradwork

2. Set Up Supabase

  1. Create a new project at supabase.com
  2. Go to Settings β†’ API and note your:
    • Project URL
    • Anon/Public key
  3. Go to Settings β†’ JWT Keys β†’ Legacy JWT Secret for the JWT secret
  4. Go to Authentication β†’ Providers β†’ Email and disable "Confirm email" for development

3. Configure Environment Variables

Frontend (frontend/.env.local):

NEXT_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
NEXT_PUBLIC_API_BASE_URL=http://localhost:4000

Backend (backend/.env):

PORT=4000
NODE_ENV=development
FRONTEND_URL=http://localhost:3000

DATABASE_URL="postgresql://postgres:[password]@db.[project-id].supabase.co:5432/postgres"
SUPABASE_PROJECT_URL=https://your-project.supabase.co
SUPABASE_JWT_SECRET=your-jwt-secret

4. Install Dependencies

# Frontend
cd frontend
npm install

# Backend
cd ../backend
npm install

5. Run Database Migrations

cd backend
npx prisma migrate dev

6. Start Development Servers

# Terminal 1 - Backend (port 4000)
cd backend
npm run start:dev

# Terminal 2 - Frontend (port 3000)
cd frontend
npm run dev

Visit http://localhost:3000 to see the app!

πŸ“‘ API Endpoints

Authentication

Method Endpoint Description
POST /auth/register Create user profile
GET /auth/me Get current user

Users

Method Endpoint Description
GET /users/profile Get own profile
PATCH /users/profile/student Update student profile
PATCH /users/profile/company Update company profile

Jobs

Method Endpoint Description
GET /jobs List all jobs
GET /jobs/:id Get job details
POST /jobs Create job (Company)
PATCH /jobs/:id Update job (Owner)
DELETE /jobs/:id Delete job (Owner)

Applications

Method Endpoint Description
GET /applications/my My applications (Student)
GET /applications/received Received applications (Company)
POST /applications Apply to job (Student)
PATCH /applications/:id/status Update status (Company)

πŸ—„οΈ Database Schema

model User {
  id visually String @id
  email       String @unique
  role        Role   @default(STUDENT)
  
  studentProfile  StudentProfile?
  companyProfile  CompanyProfile?
  jobs            Job[]
  applications    Application[]
}

model Job {
  id          String   @id
  title       String
  description String
  location    String
  type        JobType
  salary      String?
  company     User     @relation
  applications Application[]
}

model Application {
  id        String @id
  status    ApplicationStatus @default(PENDING)
  student   User   @relation
  job       Job    @relation
}

🎨 Screenshots

Landing Page

Modern dark theme with gradient effects, inspired by Vercel/Next.js design.

Dashboard

Role-based dashboard with sidebar navigation for students and companies.

Job Listings

Browse and filter job opportunities with application tracking.

πŸ”’ Authentication Flow

  1. User signs up via Supabase Auth (email/password)
  2. Supabase issues JWT token
  3. Frontend stores session and sends token to backend
  4. Backend verifies JWT via Supabase JWKS endpoint
  5. Protected routes require valid JWT in Authorization header

🚧 Roadmap (v0.2)

  • Resume upload (Supabase Storage)
  • Job search and filters
  • Email notifications
  • Admin dashboard
  • AI-powered job matching

πŸ“ License

MIT License - feel free to use this for your own projects!

πŸ™ Acknowledgments


gradWork v0.1 - Built for undergraduates, by developers who care.

About

yep this is gradwork, y'all undergrads gettin

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors