Skip to content

Abd453/gccountdown

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

38 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŽ“ GC Countdown

A modern, real-time graduation countdown and event planner โ€” built for the graduating class of 2026.

Next.js React TypeScript Tailwind CSS Framer Motion License

Live Demo ยท Report a Bug ยท Request a Feature


๐Ÿ“– Overview

GC Countdown is a personal graduation countdown and milestone tracking app built for students approaching their graduation day. It provides a live, second-by-second countdown to June 20, 2026, tracks all key academic milestones, lets you manage your own custom events, and sends browser notifications when important dates are approaching.

The interface is built with a dark, premium glassmorphism aesthetic โ€” featuring smooth animations, urgency-based color cues, real-time progress tracking, and a fully guided onboarding tour.


โœจ Features

๐Ÿ• Live Countdown

  • Real-time days / hours / minutes / seconds countdown to graduation day
  • Color urgency system โ€” green โ†’ yellow โ†’ red as the date approaches
  • Motivational message that rotates daily

๐Ÿ“… Milestone Events

Predefined system events covering the full academic endgame:

Event Date(s)
Exit Exam Model Apr 17, 2026
5th Year CSE & SE Grad Defence May 25 & 26, 2026
Final Exams May 11 โ€“ May 22, 2026
Exit Exam Jun 10 โ€“ Jun 17, 2026
Graduation Day ๐ŸŽ“ Jun 20, 2026

๐Ÿ“ Custom Events

  • Add your own personal events with title, start date, end date, start time, and end time
  • Edit any custom event at any time via the kebab menu (โ‹ฎ) on the card
  • Delete events one by one or enter selection mode to bulk-delete multiple custom events at once
  • Responsive UI: Custom events seamlessly adapt to small screens, showing up to three cards initially with "Show more / Show less" expansion buttons
  • All custom events are persisted to localStorage โ€” they survive page refreshes

๐Ÿ“Š Journey Progress Bar

  • Visual progress bar from the first milestone to graduation day
  • Shows how far along the journey you are in real time

โฑ๏ธ Today's Panel

  • Dynamically shows countdowns for events starting or ending today
  • Displays hours/minutes/seconds remaining for precise scheduling

๐Ÿ”” Browser Notifications

  • Request native browser notification permission in one click
  • Automatic alerts triggered at:
    • 1 week before an event starts
    • 1 day before an event starts
    • The day an event starts
    • While an event is ongoing (on app open)
  • Each notification fires only once per condition per event (deduped via localStorage)

๐Ÿ—บ๏ธ Onboarding Tour

  • A step-by-step interactive tour for first-time visitors
  • Highlights: Countdown, Events, Notifications, Custom Events sections
  • Tour state is remembered across sessions

๐Ÿ—‚๏ธ Project Structure

gccountdown/
โ”œโ”€โ”€ src/
โ”‚   โ”œโ”€โ”€ app/
โ”‚   โ”‚   โ”œโ”€โ”€ layout.tsx              # Root layout, fonts, metadata
โ”‚   โ”‚   โ”œโ”€โ”€ page.tsx                # Main application page & state
โ”‚   โ”‚   โ”œโ”€โ”€ globals.css             # Global base styles
โ”‚   โ”‚   โ”œโ”€โ”€ exit-exam-model/        # Detail page: Exit Exam Model
โ”‚   โ”‚   โ””โ”€โ”€ milestone-info/         # Detail pages: system milestones
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ components/
โ”‚   โ”‚   โ”œโ”€โ”€ EventCard.tsx           # Event card with kebab menu (edit/delete)
โ”‚   โ”‚   โ”œโ”€โ”€ EditEventModal.tsx      # Full edit modal for custom events
โ”‚   โ”‚   โ”œโ”€โ”€ ConfirmDeleteModal.tsx  # Confirmation dialog for deletion
โ”‚   โ”‚   โ”œโ”€โ”€ CustomEventForm.tsx     # Form to add new custom events
โ”‚   โ”‚   โ”œโ”€โ”€ CountdownCard.tsx       # Live days/hours/minutes/seconds display
โ”‚   โ”‚   โ”œโ”€โ”€ ProgressCard.tsx        # Journey progress bar
โ”‚   โ”‚   โ”œโ”€โ”€ TodayPanel.tsx          # Today's event countdowns
โ”‚   โ”‚   โ”œโ”€โ”€ ToastMessage.tsx        # Animated toast notifications
โ”‚   โ”‚   โ””โ”€โ”€ OnboardingTour.tsx      # Interactive first-visit tour
โ”‚   โ”‚
โ”‚   โ”œโ”€โ”€ hooks/
โ”‚   โ”‚   โ””โ”€โ”€ useCountdown.ts         # Tick-every-second countdown hook
โ”‚   โ”‚
โ”‚   โ””โ”€โ”€ lib/
โ”‚       โ”œโ”€โ”€ events.ts               # All event logic, helpers & utilities
โ”‚       โ”œโ”€โ”€ storage.ts              # localStorage load/save with validation
โ”‚       โ””โ”€โ”€ types.ts                # Shared TypeScript types
โ”‚
โ”œโ”€โ”€ public/                         # Static assets
โ”œโ”€โ”€ next.config.ts                  # Next.js configuration
โ”œโ”€โ”€ tailwind.config / postcss       # Styling configuration
โ””โ”€โ”€ tsconfig.json                   # TypeScript configuration

๐Ÿง  Architecture & Design Decisions

State Management

All state lives in page.tsx and is passed down via props โ€” no external state library is needed given the scope. The key pieces of state are:

State Purpose
customEvents User-created events, synced to localStorage on every change
eventPendingDelete The event queued for deletion (opens confirm modal)
eventPendingEdit The event queued for editing (opens edit modal)
toastMessage Current toast text, auto-cleared after 2.2 seconds
notificationPermission Browser notification permission status

Custom Event Persistence

Custom events are stored as JSON in localStorage under the key graduation-custom-events. On load, data is validated field-by-field to prevent corrupt data from crashing the app (storage.ts).

Notification Deduplication

Each notification is keyed by event-notification-{id}-{condition}. Once fired, the key is written to localStorage so the same notification never re-fires even if the user refreshes.

Urgency Color System

The getUrgencyTone() helper in events.ts maps days remaining to a color tone:

โ‰ฅ 30 days  โ†’  green   (calm)
10โ€“29 days โ†’  yellow  (alert)
< 10 days  โ†’  red     (urgent)

Date Handling

All dates are parsed with parseLocalDate() which uses the Date constructor with explicit year/month/day to avoid UTC offset issues that arise from new Date("YYYY-MM-DD").


๐Ÿ› ๏ธ Tech Stack

Technology Version Role
Next.js 16.2 Framework (App Router)
React 19 UI library
TypeScript 5 Type safety
Tailwind CSS 4 Utility-first styling
Framer Motion 12 Animations & transitions
Space Grotesk โ€” Primary typeface
JetBrains Mono โ€” Monospace / code elements

๐Ÿš€ Getting Started

Prerequisites

  • Node.js 18.17 or newer
  • npm (or yarn / pnpm / bun)

Installation

# 1. Clone the repository
git clone https://github.com/Abd453/gccountdown.git
cd gccountdown

# 2. Install dependencies
npm install

# 3. Start the development server
npm run dev

Open http://localhost:3000 in your browser.

Available Scripts

Command Description
npm run dev Start local dev server with hot reload
npm run build Build the production bundle
npm run start Run the production build locally
npm run lint Run ESLint across the project

๐ŸŒ Deployment

The easiest way to deploy GC Countdown is on Vercel โ€” the platform built by the creators of Next.js.

# Install the Vercel CLI globally
npm install -g vercel

# Deploy from the project root
vercel

Or connect your GitHub repository directly at vercel.com/new and Vercel will auto-detect the Next.js project and deploy on every push to main.


๐Ÿค Contributing

Contributions are welcome! To get started:

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/your-feature-name
  3. Commit your changes: git commit -m "feat: add your feature"
  4. Push to your fork: git push origin feature/your-feature-name
  5. Open a Pull Request against main

Please keep components focused, reuse existing styles, and follow the TypeScript patterns already in place.


๐Ÿ“„ License

This project is open source and available under the MIT License.


Built with โค๏ธ by Abdallah Abdurazak

โญ Star this repo if it helped you stay motivated through graduation!

About

Its about graduation date countdown

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages