Skip to content
parinith-webPublic

About

A full-stack GATE exam preparation platform

Resources

Stars

1 star

Watchers

0 watching

Forks

Latest commit

 

History

123 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

GATEquest

Go React TypeScript Postgres

A full-stack GATE exam preparation platform that helps students prepare for the GATE exam through structured roadmaps, quests with live leaderboards, a large question bank, and Pulse — a real-time community feed with a live post-contest debrief chat.

image

Features

Learning

  • Roadmaps — Subject-wise learning paths broken into topics and quests
  • Question Bank — MCQ, MSQ, and NAT questions filterable by subject, topic, and difficulty
  • Theory Snippets — Quick concept notes attached to individual questions
  • Activity Heatmap — GitHub-style contribution graph tracking daily solves and streaks
  • Progress Tracking — Per-branch solve counts, XP, and rank

Quests & Contests

  • Timed Contests — Server-scheduled quests that open, run, and auto-close on a clock
  • Live Leaderboards — Redis-backed real-time rankings while a quest is live
  • Rating History — Track how your rank has moved across past quests
  • Auto-Settlement — Results and ratings compute automatically when a contest closes

Pulse (Community)

  • Feed Posts — Share experiences, resources, and doubts with the community
  • Hashtag Channels — Tag posts with #hashtags to file them under a topic
  • Reactions & Comments — Upvote/downvote, reply threads, and save posts for later
  • Media Attachments — Attach images or videos to a post via Cloudinary
  • Trending Tags — See what topics are most active right now
  • Live Mock Debrief — A single always-on chat room that opens after each contest closes, streamed over SSE

Account & Profile

  • Passkey Login — Usernameless WebAuthn sign-in (Face ID / Touch ID / security key)
  • Google Sign-In — Standard OAuth 2.0 + PKCE as an alternative to passkeys
  • Branch Selection — Choose your GATE branch (CSE, Data Science & AI, and more) during onboarding
  • Avatar & Username — Customize your public profile

Tech Stack

Frontend

Technology Purpose
React 18 UI library
TypeScript Type safety
Vite Dev server & build tool
React Router Client-side routing
Tailwind CSS Styling
Framer Motion Scroll & page animations
Radix UI Accessible component primitives
TanStack Query Server-state data fetching
Recharts Charts (rating history, progress)
Three.js / React Three Fiber 3D roadmap visuals

Backend

Technology Purpose
Go + Chi HTTP server & routing
Postgres (Neon) Primary database, via pgx/v5
Redis Live quest leaderboards
go-webauthn Passkey (WebAuthn) authentication
Cloudinary Pulse image/video uploads
Server-Sent Events Live debrief chat streaming

Getting Started

Prerequisites

  • Node.js 18+
  • Go 1.23+
  • A Neon Postgres database
  • A Redis instance (optional — only needed for live quest leaderboards; Upstash free tier works well)
  • A Cloudinary account (optional — only needed for Pulse media uploads)
  • A Google Cloud OAuth client (optional — only needed for Google sign-in)

Installation

# Clone the repository
git clone https://github.com/parinith-web/GATEquest.git
cd GATEquest

# Install frontend dependencies
cd frontend
npm install

# Install backend dependencies
cd ../backend
go mod download

Environment Variables

Backend — copy backend/.env.example to backend/.env:

PORT=8081
DATABASE_URL=                          # Neon connection string
FRONTEND_URL=http://localhost:8080
SESSION_SECRET=                        # openssl rand -base64 32

# Google OAuth (optional)
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
GOOGLE_REDIRECT_URL=http://localhost:8081/api/auth/google/callback

# WebAuthn / Passkeys
RP_ID=localhost
RP_DISPLAY_NAME=GATEquest
RP_ORIGINS=http://localhost:8080

# Cookies
COOKIE_DOMAIN=
COOKIE_SECURE=false

# Redis (optional — live quest leaderboards)
REDIS_URL=redis://localhost:6379

# Cloudinary (optional — Pulse media uploads)
CLOUDINARY_URL=

Frontend — the dev server proxies /api to your local backend by default; no .env needed for local development.

Run Development Servers

# Terminal 1 — backend (from backend/)
go run .

# Terminal 2 — frontend (from frontend/)
npm run dev

Open http://localhost:8080 to view the app.

Project Structure

GATEquest/
├── backend/                  # Go API server
│   ├── internal/
│   │   ├── api/              # HTTP handlers (questions, quests, pulse, profile)
│   │   ├── auth/              # Google OAuth + WebAuthn passkey handlers
│   │   ├── config/            # Environment config loading
│   │   ├── debrief/            # Live debrief chat room + hub
│   │   ├── media/              # Cloudinary upload client
│   │   ├── quest/               # Quest scheduler + Redis leaderboards
│   │   └── store/                # Postgres data access layer
│   ├── migrations/               # SQL schema migrations
│   ├── scripts/                    # One-off data import scripts
│   └── main.go                      # Server entrypoint & route wiring
├── frontend/                  # React app
│   ├── client/
│   │   ├── components/          # UI components
│   │   │   ├── landing/          # Marketing/landing page sections
│   │   │   ├── pulse/            # Debrief panel, post cards
│   │   │   └── ui/               # Reusable primitives (shadcn/radix)
│   │   ├── pages/                # Route-level pages
│   │   ├── lib/                  # API clients, auth context, utilities
│   │   └── hooks/                # Shared React hooks
│   └── public/                    # Static assets, brand marks
└── README.md

Architecture

Auth Flow

User → Google OAuth or Passkey (WebAuthn) → Session cookie → Protected API routes

Quest Lifecycle

Scheduled → (scheduler polls every 15s) → Live
                                             ↓
                                    Submissions + live Redis leaderboard
                                             ↓
                                    Closes automatically → Settlement + rating update

Pulse Real-time

Post created → Postgres                Debrief message → in-memory hub → SSE stream
                  ↓                                                          ↓
        Feed, comments, reactions                              All connected clients
        (fetched via polling/refetch)                          (instant delivery)

Available Scripts

Frontend (from frontend/)

Command Description
npm run dev Start development server
npm run build Build for production
npm run preview Preview a production build locally
npm run typecheck Run TypeScript type checking
npm run format.fix Format code with Prettier

Backend (from backend/)

Command Description
go run . Start the API server
go build && ./gatequest-auth Build and run the production binary
go test ./... Run tests

About

A full-stack GATE exam preparation platform

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages