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.
- π 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
- 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
- PostgreSQL - Robust relational database
- Prisma ORM - Type-safe database client
- Next.js API Routes - Serverless API endpoints
- TanStack Query - Server state management
- Nuqs - URL state management
- React Hook Form - Performant forms with easy validation
- Zod - TypeScript-first schema validation
- ESLint - Code linting with custom rules
- Prettier - Code formatting
- TypeScript - Static type checking
- Atomic Design - Component architecture pattern
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
- Node.js 18+
- PostgreSQL database
- npm or yarn
-
Clone the repository:
git clone <repository-url> cd study-tracker
-
Install dependencies:
npm install
-
Set up environment variables:
cp .env.local.example .env.local
Configure your database URL and other environment variables.
-
Set up the database:
npm run prisma:migrate npm run prisma:generate
-
Run the development server:
npm run dev
-
Open http://localhost:3000 in your browser
| 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 |
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
- π Reusability: Components can be easily reused across different parts of the application
- π§ͺ Testability: Each component can be tested in isolation
- π Scalability: New features can be built by composing existing components
- π οΈ Maintainability: Changes to base components automatically propagate up
- π₯ Team Collaboration: Clear component hierarchy makes it easy for teams to work together
- 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
- 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)
- Progress Statistics: Visual representation of course completion
- Grade Analytics: Average grade calculation and display
- Multiple Views: Switch between status-based and semester-based organization
- Multi-language Support: English, German, and Spanish
- Dynamic Translation: Runtime language switching
- Localized Validation: Error messages in user's preferred language
This project follows strict coding standards and architectural patterns. When contributing:
- Follow the atomic design principles
- Maintain TypeScript strict mode compliance
- Use the established folder structure
- Write comprehensive tests for new components
- Ensure all linting rules pass
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