# Frontend Architecture (Next.js)

**Note:** This document describes a *conceptual* architecture and is not a final, binding requirement.

The frontend uses **Next.js** with **TypeScript** and **FPTS** for functional programming.

## Project Structure

```
timetracker-frontend/
├── public/                         # Statische Dateien
│   ├── assets/
│   └── locales/                    # i18n Übersetzungen
├── src/
│   ├── app/                        # Next.js App Router
│   │   ├── api/                    # API Routes
│   │   ├── (auth)/                 # Auth Pages
│   │   ├── dashboard/
│   │   ├── time-tracking/
│   │   ├── projects/
│   │   └── ...
│   ├── domain/                     # Domain Model (analog zu Backend)
│   │   ├── entities/               # Domain Entities
│   │   │   ├── user.ts
│   │   │   ├── timeEntry.ts
│   │   │   ├── project.ts
│   │   │   └── ...
│   │   └── valueObjects/           # Value Objects
│   │       ├── money.ts
│   │       ├── duration.ts
│   │       └── ...
│   ├── application/                # Anwendungsfälle
│   │   ├── auth/                   # Auth Use Cases
│   │   ├── timeTracking/           # Time Tracking Use Cases
│   │   ├── projects/               # Projects Use Cases
│   │   └── ...
│   ├── infrastructure/             # Infrastruktur
│   │   ├── api/                    # API Client
│   │   │   ├── apiClient.ts        # Axios Konfiguration
│   │   │   ├── endpoints.ts        # API Endpunkte
│   │   │   └── interceptors.ts     # Request/Response Interceptors
│   │   ├── storage/                # Lokale Speicherung
│   │   │   ├── localStorage.ts
│   │   │   └── sessionStorage.ts
│   │   └── external/               # Externe Dienste
│   │       └── ...
│   ├── presentation/               # Präsentationsschicht
│   │   ├── components/             # UI Komponenten
│   │   │   ├── common/             # Allgemeine Komponenten
│   │   │   │   ├── Button/
│   │   │   │   ├── Card/
│   │   │   │   └── ...
│   │   │   ├── layout/             # Layout Komponenten
│   │   │   │   ├── Navbar/
│   │   │   │   ├── Sidebar/
│   │   │   │   └── ...
│   │   │   ├── timeTracker/        # Zeiterfassung Komponenten
│   │   │   │   ├── Timer/
│   │   │   │   ├── EntryForm/
│   │   │   │   └── ...
│   │   │   └── ...
│   │   ├── hooks/                  # Custom React Hooks
│   │   │   ├── useAuth.ts
│   │   │   ├── useTimeTracking.ts
│   │   │   └── ...
│   │   ├── providers/              # Context Provider
│   │   │   ├── AuthProvider.tsx
│   │   │   ├── ThemeProvider.tsx
│   │   │   └── ...
│   │   └── pages/                  # Page Components (für App Router)
│   │       ├── DashboardPage.tsx
│   │       ├── TimeTrackingPage.tsx
│   │       └── ...
│   ├── utils/                      # Utilities
│   │   ├── fp/                     # Funktionale Programmierung (FPTS)
│   │   │   ├── option.ts
│   │   │   ├── result.ts
│   │   │   └── ...
│   │   ├── date/                   # Datumsfunktionen
│   │   │   └── dateUtils.ts
│   │   ├── formatting/             # Formattierung
│   │   │   ├── numberFormat.ts
│   │   │   └── ...
│   │   └── validation/             # Validierung
│   │       └── validators.ts
│   ├── types/                      # TypeScript Typendefinitionen
│   │   ├── api.ts                  # API Response/Request Typen
│   │   ├── auth.ts                 # Auth Typen
│   │   └── ...
│   └── styles/                     # Globale Styles
│       ├── globals.css
│       └── theme.ts
├── docu/                           # Frontend-spezifische Dokumentation
│   ├── component_library.md
│   ├── state_management.md
│   └── ...
├── next.config.js
├── tailwind.config.js
├── tsconfig.json
├── package.json
└── README.md
```
