Skip to content

A modern, full-stack web application for tracking academic progress with a clean, maintainable architecture. Built with Next.js, TypeScript, and Prisma, following atomic design principles for maximum scalability and code organization.

Notifications You must be signed in to change notification settings

mattheskaiser/study-tracker

Repository files navigation

πŸ“š Study Tracker

A modern, full-stack web application for tracking academic progress with a clean, maintainable architecture. Built with Next.js, TypeScript, and Prisma, following atomic design principles for maximum scalability and code organization.

Study Tracker Overview

✨ Features

  • πŸ” Secure Authentication: PIN-based user authentication with sign-in and sign-up flows
  • πŸ“Š Course Management: Add, edit, and delete courses with comprehensive status and grade tracking
  • πŸ“ˆ Progress Analytics: Visual progress tracking with detailed statistics and grade analysis
  • 🌍 Multi-language Support: Available in English, German, and Spanish
  • πŸ“± Responsive Design: Seamless experience across desktop, tablet, and mobile devices
  • ⚑ Real-time Updates: Dynamic course status updates with optimistic UI patterns
  • 🎨 Modern UI: Clean, accessible interface built with Tailwind CSS and Shadcn

πŸ–ΌοΈ Application Screenshots

Authentication Flow

Sign In Sign Up Logged In
Sign In Sign Up Signed In

Course Management

Course Creation Overview & Statistics
Course Creation Overview

Course Organization Views

Status View Semester View
Status View Semester View

πŸ—οΈ Architecture & Tech Stack

Frontend

  • Next.js 15 - React framework with App Router
  • React 19 - Latest React with concurrent features
  • TypeScript - Type-safe development
  • Tailwind CSS - Utility-first CSS framework
  • R - Accessible component primitives
  • Lucide React - Beautiful, customizable icons

Backend & Database

  • PostgreSQL - Robust relational database
  • Prisma ORM - Type-safe database client
  • Next.js API Routes - Serverless API endpoints

State Management & Forms

  • TanStack Query - Server state management
  • Nuqs - URL state management
  • React Hook Form - Performant forms with easy validation
  • Zod - TypeScript-first schema validation

Development & Quality

  • ESLint - Code linting with custom rules
  • Prettier - Code formatting
  • TypeScript - Static type checking
  • Atomic Design - Component architecture pattern

🎯 Project Structure

This project follows Atomic Design principles for maximum maintainability and scalability:

src/
β”œβ”€β”€ app/                          # Next.js App Router
β”‚   β”œβ”€β”€ api/                     # API routes
β”‚   β”‚   β”œβ”€β”€ courses/            # Course management endpoints
β”‚   β”‚   └── user/               # User authentication endpoints
β”‚   β”œβ”€β”€ layout.tsx              # Root layout with navigation
β”‚   └── page.tsx                # Main application page
β”‚
β”œβ”€β”€ components/                   # Component library (Atomic Design)
β”‚   β”œβ”€β”€ atoms/                   # Basic building blocks
β”‚   β”‚   β”œβ”€β”€ Button.atom.tsx     # Reusable button component
β”‚   β”‚   β”œβ”€β”€ Text.atom.tsx       # Typography component
β”‚   β”‚   β”œβ”€β”€ Toast.atom.tsx      # Notification system
β”‚   β”‚   └── EmptyState.atom.tsx # Empty state displays
β”‚   β”‚
β”‚   β”œβ”€β”€ molecules/               # Composite components
β”‚   β”‚   β”œβ”€β”€ auth/               # Authentication components
β”‚   β”‚   β”‚   β”œβ”€β”€ EmailForm.molecule.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ ModeSelector.molecule.tsx
β”‚   β”‚   β”‚   └── LoggedInUser.molecule.tsx
β”‚   β”‚   β”œβ”€β”€ course/             # Course-related components
β”‚   β”‚   β”‚   β”œβ”€β”€ ViewSelector.molecule.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ ViewTab.molecule.tsx
β”‚   β”‚   β”‚   └── CourseTabDropdown.molecule.tsx
β”‚   β”‚   β”œβ”€β”€ general/            # Shared/reusable components
β”‚   β”‚   β”‚   β”œβ”€β”€ Card.molecule.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Navbar.molecule.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ Select.molecule.tsx
β”‚   β”‚   β”‚   └── LoadingSpinner.molecule.tsx
β”‚   β”‚   └── statistics/         # Analytics components
β”‚   β”‚       β”œβ”€β”€ OverviewBox.molecule.tsx
β”‚   β”‚       └── ProgressBar.molecule.tsx
β”‚   β”‚
β”‚   β”œβ”€β”€ organisms/               # Complex, feature-complete components
β”‚   β”‚   β”œβ”€β”€ auth/               # Authentication flows
β”‚   β”‚   β”‚   β”œβ”€β”€ Authentication.organism.tsx
β”‚   β”‚   β”‚   └── AccountFinderCard.organism.tsx
β”‚   β”‚   β”œβ”€β”€ course/             # Course management
β”‚   β”‚   β”‚   β”œβ”€β”€ CourseList.organism.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ CourseTab.organism.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ CreateCourse.organism.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ StatusView.organism.tsx
β”‚   β”‚   β”‚   β”œβ”€β”€ SemesterView.organism.tsx
β”‚   β”‚   β”‚   └── CourseColumn.organism.tsx
β”‚   β”‚   └── statistics/         # Analytics & overview
β”‚   β”‚       β”œβ”€β”€ StudyOverview.organism.tsx
β”‚   β”‚       └── OverviewCard.organism.tsx
β”‚   β”‚
β”‚   └── ui/                     # Shadcn/ui components
β”‚       β”œβ”€β”€ button.tsx          # Base button primitives
β”‚       β”œβ”€β”€ input.tsx           # Form input components
β”‚       β”œβ”€β”€ select.tsx          # Dropdown components
β”‚       └── ...                 # Other UI primitives
β”‚
β”œβ”€β”€ hooks/                       # Custom React hooks
β”‚   β”œβ”€β”€ useCourses.hook.tsx     # Course data fetching
β”‚   β”œβ”€β”€ useCourseMutations.hook.tsx # Course CRUD operations
β”‚   └── useTranslation.hook.tsx # Internationalization
β”‚
β”œβ”€β”€ lib/                        # Utility libraries
β”‚   β”œβ”€β”€ prisma.ts              # Database client
β”‚   β”œβ”€β”€ react-query.ts         # Query client configuration
β”‚   └── utils.ts               # General utilities
β”‚
β”œβ”€β”€ schemas/                    # Validation schemas
β”‚   β”œβ”€β”€ dynamicSchemas.ts      # Dynamic form validation
β”‚   └── schema.ts              # Static schemas
β”‚
β”œβ”€β”€ translations/               # Internationalization
β”‚   β”œβ”€β”€ en.translations.ts     # English translations
β”‚   β”œβ”€β”€ de.translations.ts     # German translations
β”‚   └── esp.translations.ts    # Spanish translations
β”‚
β”œβ”€β”€ types/                      # TypeScript definitions
β”‚   β”œβ”€β”€ course.types.ts        # Course-related types
β”‚   β”œβ”€β”€ email-form.types.ts    # Form types
β”‚   └── general.types.ts       # Shared types
β”‚
└── utils/                      # Utility functions
    β”œβ”€β”€ validation.utils.ts    # Validation helpers
    └── semester.utils.ts      # Semester formatting

πŸš€ Getting Started

Prerequisites

  • Node.js 18+
  • PostgreSQL database
  • npm or yarn

Installation

  1. Clone the repository:

    git clone <repository-url>
    cd study-tracker
  2. Install dependencies:

    npm install
  3. Set up environment variables:

    cp .env.local.example .env.local

    Configure your database URL and other environment variables.

  4. Set up the database:

    npm run prisma:migrate
    npm run prisma:generate
  5. Run the development server:

    npm run dev
  6. Open http://localhost:3000 in your browser

πŸ“œ Available Scripts

Command Description
npm run dev Start development server
npm run build Build for production
npm run start Start production server
npm run lint Run ESLint with custom rules
npm run format Format code with Prettier
npm run ts:check Type check without emitting
npm run prisma:studio Open Prisma Studio
npm run prisma:migrate Run database migrations
npm run prisma:generate Generate Prisma client

🎨 Design System

Atomic Design Implementation

This project implements Atomic Design methodology for component organization:

  • βš›οΈ Atoms: Basic building blocks (buttons, inputs, text)
  • 🧬 Molecules: Groups of atoms functioning together (forms, cards)
  • 🦠 Organisms: Groups of molecules forming distinct sections (headers, course lists)
  • πŸ“„ Templates: Page-level objects placing components into layout
  • πŸ“± Pages: Specific instances of templates with real content

Benefits of This Architecture

  1. πŸ”„ Reusability: Components can be easily reused across different parts of the application
  2. πŸ§ͺ Testability: Each component can be tested in isolation
  3. πŸ“ˆ Scalability: New features can be built by composing existing components
  4. πŸ› οΈ Maintainability: Changes to base components automatically propagate up
  5. πŸ‘₯ Team Collaboration: Clear component hierarchy makes it easy for teams to work together

🌟 Key Features Explained

Authentication System

  • PIN-based Authentication: Simple yet secure 6-digit PIN system
  • User Registration: New users can create accounts with email and PIN
  • Session Management: Persistent login state using URL parameters

Course Management

  • CRUD Operations: Full create, read, update, delete functionality
  • Status Tracking: Courses can be "Open", "In Progress", or "Done"
  • Grade Management: Numerical grades (1.0-6.0) with validation
  • Semester Organization: Courses organized by semester (1-6)

Data Visualization

  • Progress Statistics: Visual representation of course completion
  • Grade Analytics: Average grade calculation and display
  • Multiple Views: Switch between status-based and semester-based organization

Internationalization

  • Multi-language Support: English, German, and Spanish
  • Dynamic Translation: Runtime language switching
  • Localized Validation: Error messages in user's preferred language

🀝 Contributing

This project follows strict coding standards and architectural patterns. When contributing:

  1. Follow the atomic design principles
  2. Maintain TypeScript strict mode compliance
  3. Use the established folder structure
  4. Write comprehensive tests for new components
  5. Ensure all linting rules pass

πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.


Built with ❀️ using modern web technologies and clean architecture principles

Live Demo β€’ Report Bug β€’ Request Feature

About

A modern, full-stack web application for tracking academic progress with a clean, maintainable architecture. Built with Next.js, TypeScript, and Prisma, following atomic design principles for maximum scalability and code organization.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published