Skip to content

Aditya-br/FutureStack

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

141 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

FutureTracker πŸš€

Build Your Future, One Opportunity at a Time : Your all-in-one opportunity tracker for internships, hackathons, and career growth

React Tailwind CSS Clerk Supabase License Live Demo Docs on Devin

πŸ“‹ Table of Contents

🎯 Overview

FutureTracker is a modern, full-featured SaaS application designed to help students and professionals track their career opportunities. Whether you're applying for internships, participating in hackathons, or managing multiple job applications, FutureTracker provides an intuitive interface to organize, track, and manage all your opportunities in one place.

Why FutureTracker?

  • πŸ” Secure Authentication: Sign in with Google, GitHub, or email via Clerk
  • ⚑ Real-time Sync: Instant updates across all devices via Supabase Realtime
  • πŸ“Š Visual Management: Kanban-style status board for easy progress tracking
  • πŸ“ˆ Analytics Dashboard: Track success rates, trends, and conversion funnels
  • πŸ“… Deadline Management: Never miss an important deadline with calendar integration
  • πŸ“„ PDF Reports: Export detailed reports for your records
  • πŸ“± Responsive Design: Works seamlessly on desktop, tablet, and mobile

Demonstration Videos

🌐 Live Demo

Frontend: https://futuretracker.online
Backend API: https://futurestack-api.onrender.com

✨ Features

Core Features

  • πŸ” Authentication: Secure OAuth login with Google, GitHub, and email (powered by Clerk)
  • πŸ“Š Dashboard: Real-time statistics, analytics, and upcoming deadline tracking
  • βž• CRUD Operations: Create, read, update, and delete opportunities
  • πŸ” Search & Filter: Quickly find opportunities by title, status, or category
  • πŸ“… Calendar View: Visual representation of all deadlines
  • πŸ“‹ Status Board: Kanban-style board with drag-and-drop status updates
  • πŸ“ˆ Analytics: Charts for status distribution, weekly trends, conversion funnels, and deadline heatmaps
  • πŸ“„ PDF Export: Generate professional reports with multiple export options
  • πŸ“Ž Documents: Upload resumes, cover letters, and portfolio links; track which documents were used for each internship
  • 🎯 Interview pipeline: Multi-round tracking for internships (OA β†’ technical β†’ HR β†’ final) with timeline UI and auto-synced Kanban status β€” see docs/interview-rounds.md
  • 🎨 Modern UI: Clean, dark-themed interface with smooth animations
  • πŸ“± Responsive: Fully responsive design for all screen sizes

Technical Features

  • ⚑ Real-time Updates: WebSocket-powered instant sync via Supabase Realtime
  • πŸ”„ JWT Authentication: Secure API access with Clerk tokens
  • πŸ›‘οΈ Row-Level Security: Data isolation at the database level
  • πŸ“¦ Error Handling: Comprehensive error handling with user-friendly messages
  • ⏳ Loading States: Skeleton loading indicators for premium UX
  • πŸ”” Toast Notifications: Instant feedback for all actions
  • 🎯 Auto-logout on 401: Expired sessions handled gracefully

πŸ›  Tech Stack

Frontend

Technology Version Purpose
React 19.2.0 UI library with hooks
React Router DOM 7.9.6 Client-side routing
Tailwind CSS 3.4.18 Utility-first CSS framework
Clerk React 5.59.2 Authentication SDK
Supabase JS 2.89.0 Realtime subscriptions
Recharts 3.6.0 Data visualizations
Framer Motion 12.23.24 Animations
React Calendar 6.0.0 Calendar component
jsPDF 3.0.3 PDF generation
Axios 1.13.2 HTTP client

Backend

Technology Purpose
Node.js + Express RESTful API server
Clerk SDK JWT verification
Supabase Client PostgreSQL database access

External Services

Service Purpose
Clerk OAuth authentication (Google, GitHub, Email)
Supabase PostgreSQL database + Realtime WebSockets
Vercel Frontend hosting
Render Backend hosting

πŸ— System Architecture

flowchart TB
    subgraph Browser["User Browser"]
        React["React App (Vercel)"]
        ClerkSDK["Clerk Auth SDK"]
        SupaClient["Supabase Client<br/>(Realtime subscriptions)"]
        Axios["Axios API Client"]
    end

    subgraph Backend["Express API (Render)"]
        AuthMW["Auth Middleware<br/>(Clerk JWT verification)"]
        Routes["REST Routes<br/>/api/*"]
        Admin["Supabase Admin Client<br/>(user-scoped queries)"]
    end

    subgraph Services["External Services"]
        Clerk["Clerk"]
        PG[("Supabase PostgreSQL")]
        RT["Realtime Engine"]
    end

    React --> ClerkSDK
    React --> SupaClient
    React --> Axios
    ClerkSDK -.->|"OAuth / session"| Clerk
    Axios -->|"JWT + API requests"| AuthMW
    AuthMW --> Routes
    Routes --> Admin
    AuthMW -.->|"Verify token"| Clerk
    Admin --> PG
    SupaClient -.->|"WebSocket"| RT
    RT -.-> PG
Loading

πŸ—„ Database Schema

erDiagram
    USERS ||--o{ OPPORTUNITIES : tracks
    USERS ||--o{ DOCUMENTS : owns
    USERS ||--o{ OPPORTUNITY_ROUNDS : owns
    OPPORTUNITIES ||--o{ OPPORTUNITY_DOCUMENTS : uses
    OPPORTUNITIES ||--o{ OPPORTUNITY_ROUNDS : has
    DOCUMENTS ||--o{ OPPORTUNITY_DOCUMENTS : linked_to

    USERS {
        uuid id PK
        text clerk_id UK
        text email
        text full_name
        text avatar_url
        timestamptz created_at
    }

    OPPORTUNITIES {
        uuid id PK
        uuid user_id FK
        text title
        text description
        text link
        date deadline
        text category
        text status
        int current_round_number
        int rejected_round_number
        text notes
        timestamptz created_at
        timestamptz updated_at
    }

    OPPORTUNITY_ROUNDS {
        uuid id PK
        uuid opportunity_id FK
        uuid user_id FK
        int round_number
        text round_type
        date scheduled_date
        text result
        text notes
        timestamptz created_at
        timestamptz updated_at
    }

    DOCUMENTS {
        uuid id PK
        uuid user_id FK
        text name
        text type
        text file_url
        text version
        boolean is_external
        timestamptz created_at
    }

    OPPORTUNITY_DOCUMENTS {
        uuid id PK
        uuid opportunity_id FK
        uuid document_id FK
        timestamptz submitted_at
    }
Loading

All tables use Row-Level Security (RLS) so each user only accesses their own data. Full SQL migrations live in docs/supabase-schema.sql, docs/documents-migration.sql, and docs/opportunity-rounds-migration.sql.

πŸš€ Getting Started

Prerequisites

Installation

  1. Clone the repository

    git clone https://github.com/Venkat-Kolasani/FutureStack.git
    cd FutureStack
  2. Install frontend dependencies

    npm install
  3. Install backend dependencies

    cd backend
    npm install
    cd ..
  4. Set up environment variables (see Environment Variables)

  5. Start the backend

    cd backend
    npm run dev
  6. Start the frontend (in a new terminal)

    npm start

The app will open at http://localhost:3000

πŸ” Environment Variables

Frontend (.env in root)

# Clerk Authentication
REACT_APP_CLERK_PUBLISHABLE_KEY=pk_test_...

# Backend API URL
REACT_APP_API_URL=http://localhost:3001/api

Backend (backend/.env)

# Server
PORT=3001
NODE_ENV=development

# CORS (Frontend URL)
CORS_ORIGIN=http://localhost:3000

# Clerk Authentication
CLERK_SECRET_KEY=sk_test_...

# Clerk JWT Public Key (recommended for production - see below)
# CLERK_JWT_PUBLIC_KEY=-----BEGIN PUBLIC KEY-----\nMIIB...\n-----END PUBLIC KEY-----

# Supabase Database
SUPABASE_URL=https://your-project.supabase.co
SUPABASE_SERVICE_ROLE_KEY=eyJ...

🚒 Deployment

Frontend (Vercel)

  1. Push your code to GitHub
  2. Connect your repo to Vercel
  3. Add environment variables:
    • REACT_APP_CLERK_PUBLISHABLE_KEY
    • REACT_APP_API_URL (your Render backend URL + /api)
  4. Deploy

Backend (Render)

  1. Create a new Web Service on Render
  2. Connect your GitHub repo, set root directory to backend
  3. Add environment variables:
    • NODE_ENV=production
    • CORS_ORIGIN (your Vercel frontend URL)
    • CLERK_SECRET_KEY
    • CLERK_JWT_PUBLIC_KEY (recommended - see note below)
    • SUPABASE_URL
    • SUPABASE_SERVICE_ROLE_KEY
  4. Deploy

CLERK_JWT_PUBLIC_KEY (Recommended for Production)

Setting CLERK_JWT_PUBLIC_KEY enables local JWT verification without network calls to Clerk's JWKS endpoint. This prevents TypeError: fetch failed errors that can occur on cloud platforms.

To get the key:

  1. Go to Clerk Dashboard > Configure > API Keys
  2. Click "Show JWT Public Key"
  3. Copy the entire PEM key

Format: If your hosting doesn't support multi-line env vars, replace newlines with \n:

-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkq...\n-----END PUBLIC KEY-----

The middleware automatically normalizes both formats.

πŸ“ Project Structure

futurestack/
β”œβ”€β”€ public/                    # Static files
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ components/           # Reusable components
β”‚   β”‚   β”œβ”€β”€ auth/            # Authentication components
β”‚   β”‚   β”‚   └── ProtectedRoute.jsx
β”‚   β”‚   β”œβ”€β”€ common/          # Common UI components
β”‚   β”‚   β”‚   β”œβ”€β”€ Button.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Card.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Modal.jsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Navbar.jsx
β”‚   β”‚   β”‚   └── ErrorBoundary.jsx
β”‚   β”‚   β”œβ”€β”€ dashboard/       # Dashboard components
β”‚   β”‚   β”‚   β”œβ”€β”€ DeadlineWidget.jsx
β”‚   β”‚   β”‚   └── StatsCard.jsx
β”‚   β”‚   β”œβ”€β”€ opportunities/   # Opportunity components
β”‚   β”‚   β”‚   └── OpportunityForm.jsx
β”‚   β”‚   └── statusboard/     # Kanban board components
β”‚   β”œβ”€β”€ hooks/               # Custom React hooks
β”‚   β”‚   └── useAuthToken.js  # JWT token management
β”‚   β”œβ”€β”€ lib/                 # Library configurations
β”‚   β”‚   └── supabase.js      # Supabase client
β”‚   β”œβ”€β”€ pages/               # Page components (routes)
β”‚   β”‚   β”œβ”€β”€ Home.jsx
β”‚   β”‚   β”œβ”€β”€ Dashboard.jsx
β”‚   β”‚   β”œβ”€β”€ InternshipList.jsx
β”‚   β”‚   β”œβ”€β”€ HackathonList.jsx
β”‚   β”‚   β”œβ”€β”€ AddOpportunity.jsx
β”‚   β”‚   β”œβ”€β”€ EditOpportunity.jsx
β”‚   β”‚   β”œβ”€β”€ StatusBoard.jsx
β”‚   β”‚   β”œβ”€β”€ Calendar.jsx
β”‚   β”‚   β”œβ”€β”€ Analytics.jsx
β”‚   β”‚   └── Reports.jsx
β”‚   β”œβ”€β”€ services/            # API services
β”‚   β”‚   └── api.js           # Axios instance + interceptors
β”‚   β”œβ”€β”€ utils/               # Utility functions
β”‚   β”‚   β”œβ”€β”€ dateHelpers.js
β”‚   β”‚   └── pdfExport.js
β”‚   β”œβ”€β”€ App.js               # Main app component
β”‚   └── index.js             # Entry point
β”œβ”€β”€ backend/                  # Express API server
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ server.js        # Express entry point
β”‚   β”‚   β”œβ”€β”€ middleware/
β”‚   β”‚   β”‚   └── auth.js      # Clerk JWT verification
β”‚   β”‚   β”œβ”€β”€ routes/
β”‚   β”‚   β”‚   β”œβ”€β”€ opportunities.js
β”‚   β”‚   β”‚   └── analytics.js
β”‚   β”‚   └── lib/
β”‚   β”‚       └── supabase.js  # Supabase admin client
β”‚   └── package.json
β”œβ”€β”€ docs/                     # Documentation
β”œβ”€β”€ tailwind.config.js       # Tailwind configuration
└── package.json             # Frontend dependencies

πŸ”Œ API Documentation

Base URL

  • Development: http://localhost:3001/api
  • Production: https://futurestack-api.onrender.com/api

Authentication

All endpoints except /health require a valid Clerk JWT token:

Authorization: Bearer <clerk_jwt_token>

Endpoints

Method Endpoint Description Auth
GET /health Health check ❌
GET /opportunities List user's opportunities βœ…
GET /opportunities/:id Get single opportunity βœ…
POST /opportunities Create opportunity βœ…
PATCH /opportunities/:id Update opportunity βœ…
DELETE /opportunities/:id Delete opportunity βœ…
GET /opportunities/:id/rounds List interview rounds (internships) βœ…
POST /opportunities/:id/rounds Create round; returns { round, opportunity, rounds } βœ…
PATCH /opportunities/:id/rounds/:roundId Update round; returns synced payload βœ…
DELETE /opportunities/:id/rounds/:roundId Delete round; returns synced payload βœ…
GET /analytics Get dashboard analytics βœ…
GET /me Get current user info βœ…

Example: Create Opportunity

POST /api/opportunities
Authorization: Bearer <token>
Content-Type: application/json

{
  "title": "Software Engineer Intern",
  "description": "Full-stack development role",
  "link": "https://example.com/apply",
  "deadline": "2025-12-31",
  "category": "internship",
  "status": "applied",
  "notes": "Prepare portfolio"
}

πŸ“Έ Screenshots

Landing Page

Clean, modern landing page with animated hero section Landing Page

Dashboard

Real-time statistics with color-coded cards:

  • Internships (Blue)
  • Hackathons (Orange)
  • Shortlisted (Yellow)
  • Selected (Green) Dashboard

Status Board

Kanban-style board with 5 columns for visual progress tracking Status Board

Calendar View

Interactive calendar with deadline visualization Calendar

Reports

Flexible PDF export with multiple options Reports

🎨 Design System

Color Palette

  • Primary: Blue (#3B82F6) - Internships, Primary actions
  • Secondary: Orange (#F97316) - Hackathons
  • Success: Green (#10B981) - Selected status
  • Warning: Yellow (#F59E0B) - Shortlisted status
  • Danger: Red (#EF4444) - Rejected status, Errors
  • Background: Gray-900 (#111827) - Dark theme

Typography

  • Font Family: Inter, system-ui, sans-serif
  • Headings: Bold, 2xl-3xl
  • Body: Regular, sm-base
  • Labels: Medium, sm

🀝 Contributing

FutureStack is part of GSSoC 2026. Please read CONTRIBUTING.md before requesting an issue assignment or opening a PR.

πŸ“š Documentation

  • Devin Wiki – canonical, always-current runbook with high-level decisions, architecture diagrams, and demo notes.
  • Interview rounds – feature design, status sync, performance fix (good for technical interviews).
  • Local references: docs/DOCUMENTATION.md, docs/TESTING.md, and docs/opportunity-rounds-migration.sql provide offline deep dives, test steps, and schema.

Built with ❀️ by Venkat Kolasani

About

Build Your Future, One Opportunity at a Time : Your all-in-one opportunity tracker for internships, hackathons, and career growth

Resources

Contributing

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • JavaScript 98.3%
  • Other 1.7%