Skip to content

Navigation Menu

Sign in
Sign up

Repository files navigation

ExamTracker Logo

ExamTracker

Never miss another exam date.
A beautifully minimal mobile app to track upcoming exams, set smart reminders, and keep all your resources in one place.

Platform Expo SDK Supabase License


✨ Features

Feature Description
πŸ“‹ Watchlist Pin exams you care about and see a "Next Up" hero card with a live countdown
πŸ” Explore All Exams Browse, search, and filter exams by category (UPSC, SSC, Banking, Railways, etc.)
⏰ Smart Reminders Schedule notifications at customizable offsets β€” 1 week, 1 day, 1 hour before, or any custom value
πŸ“„ Resource Links One-tap access to syllabus PDFs, previous year papers, and official websites
πŸŒ— Dark & Light Themes A pure black/white theme system with persistent preference
πŸš€ Onboarding Flow Smooth first-launch experience β€” enter your name, pick exams, and get started
πŸ“± Skeleton Loading Polished loading states with animated skeletons while data loads
πŸ“Š Analytics Sync Anonymous device-level usage synced to Supabase for growth insights

πŸ› οΈ Tech Stack

Layer Technology
Framework React Native via Expo (SDK 54)
Navigation React Navigation (Bottom Tabs)
Database Supabase (PostgreSQL + Row Level Security)
Local Storage AsyncStorage for watchlist, preferences, and offline state
Notifications expo-notifications with custom scheduling
Fonts Google Fonts β€” Instrument Sans & DM Mono
Animations React Native Reanimated + Gesture Handler

πŸ“‚ Project Structure

ExamTracker/
β”œβ”€β”€ App.js # Root β€” fonts, providers, tab navigation
β”œβ”€β”€ src/
β”‚ β”œβ”€β”€ components/
β”‚ β”‚ β”œβ”€β”€ ExamDetailSheet.js # Full-screen exam detail modal
β”‚ β”‚ β”œβ”€β”€ RichText.js # Markdown-style content renderer
β”‚ β”‚ β”œβ”€β”€ SkeletonCard.js # Loading skeleton for exam cards
β”‚ β”‚ β”œβ”€β”€ SkeletonWatchCard.js # Loading skeleton for watchlist cards
β”‚ β”‚ β”œβ”€β”€ ThemeSwitch.js # Dark/light mode toggle switch
β”‚ β”‚ β”œβ”€β”€ TimerBlocks.js # Countdown timer UI (block layout)
β”‚ β”‚ └── TimerInline.js # Countdown timer UI (inline layout)
β”‚ β”œβ”€β”€ context/
β”‚ β”‚ β”œβ”€β”€ AppContext.js # Global state β€” exams, watchlist, user
β”‚ β”‚ └── ThemeContext.js # Theme provider (dark/light colors)
β”‚ β”œβ”€β”€ lib/
β”‚ β”‚ └── supabase.js # Supabase client initialization
β”‚ β”œβ”€β”€ screens/
β”‚ β”‚ β”œβ”€β”€ AllExamsScreen.js # Browse & search all exams
β”‚ β”‚ β”œβ”€β”€ CalendarScreen.js # Calendar view of exams
β”‚ β”‚ β”œβ”€β”€ OnboardingScreen.js # First-launch onboarding flow
β”‚ β”‚ β”œβ”€β”€ SettingsScreen.js # Notification & theme preferences
β”‚ β”‚ └── WatchlistScreen.js # Pinned exams with "Next Up" hero
β”‚ └── utils/
β”‚ β”œβ”€β”€ notifications.js # Notification scheduling & management
β”‚ β”œβ”€β”€ time.js # Date/time formatting helpers
β”‚ └── urlUtils.js # URL validation & linking helpers
β”œβ”€β”€ supabase/
β”‚ β”œβ”€β”€ schema.sql # Full database schema with RLS policies
β”‚ β”œβ”€β”€ migration.sql # Incremental migration scripts
β”‚ └── seedingdata.sql # Sample exam data for development
β”œβ”€β”€ assets/ # App icons, splash screens, animations
└── android/ # Android native project (EAS Build)

πŸš€ Getting Started

Prerequisites

  • Node.js 18+ (LTS recommended)
  • npm or yarn
  • Expo Go on your phone, or an Android/iOS emulator

1. Clone & Install

git clone https://github.com/ipmen-in/ExamTracker.git
cd ExamTracker
npm install

2. Configure Environment

Create a .env file in the project root:

EXPO_PUBLIC_SUPABASE_URL=https://your-project.supabase.co
EXPO_PUBLIC_SUPABASE_ANON_KEY=your-anon-key-here

3. Set Up Supabase

  1. Create a new project at supabase.com
  2. Open the SQL Editor and run supabase/schema.sql to create tables with RLS policies
  3. (Optional) Run supabase/seedingdata.sql to populate sample exam data

4. Start Development

npx expo start

Scan the QR code with Expo Go or press a for Android emulator / i for iOS simulator.

5. Build for Android

npx expo run:android

Note: Full notification scheduling with channels requires a custom dev client or standalone build β€” Expo Go has limitations.


Security model:

  • categories and exams are read-only for all app users β€” only service_role can modify data
  • users can only read/update their own row (matched by device_id header)
  • Exam images stored in a public read-only Supabase Storage bucket

πŸ“¦ Key Dependencies

Package Purpose
@supabase/supabase-js Database client
@react-navigation/bottom-tabs Tab-based navigation
react-native-reanimated Smooth animations
react-native-gesture-handler Swipe & gesture support
react-native-safe-area-context Safe area inset handling
@react-native-async-storage/async-storage Persistent local storage
expo-notifications Local push notifications
expo-image-picker Image selection

πŸ—‚οΈ Local Storage Keys

Key Type Description
watchlist string[] Array of pinned exam IDs
notification_prefs number[] Minutes-before values, e.g. [10080, 1440, 60]
notification_ids object Scheduled notification IDs keyed by exam ID
userName string User's display name from onboarding
onboardingComplete "true" Whether onboarding has been completed
theme "dark" | "light" Preferred color scheme
deviceId string Persistent UUID for analytics

🀝 Contributing

Contributions are welcome! Here's how to get started:

  1. Fork the repository
  2. Create a branch β€” git checkout -b feat/your-feature
  3. Make your changes β€” test on both Android and iOS
  4. Add migrations β€” any DB changes go in supabase/migration.sql
  5. Open a PR with a clear description

Ideas for Contribution

  • GitHub Actions CI (lint, typecheck, build)
  • End-to-end tests for onboarding & notification flows
  • Exam sharing via deep links
  • Study timer / Pomodoro integration
  • Push notification support via Supabase Edge Functions

πŸ“„ License

This project is licensed under the MIT License β€” see the LICENSE file for details.


Built with ❀️ by Team IPMen

About

A beautifully minimal mobile app to track upcoming Indian competitive exams, set smart reminders, and keep all your resources in one place.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /