Live Demo: https://mokaily.github.io/absence_manager/
This project is my solution for the Crewmeister Frontend Coding Challenge.
It implements the Absence Manager feature, allowing company owners to manage employee absences such as vacations and sickness.
The application is built with Flutter, follows Clean Architecture principles, uses BLoC for state management, and includes unit tests for core business logic.
- Flutter SDK (stable channel)
- Dart SDK
git clone https://github.com/mokaily/crewmeister_frontend_coding_challenge
cd crewmeister_absence_manager
flutter pub get
# want to run test files, first build mocked files
flutter pub run build_runner build- Display a list of absences including employee names
- Pagination (first 10 absences with the ability to load more)
- Display total number of absences
- Absence details:
- Member name
- Type of absence
- Period
- Member note (if available)
- Status (
Requested,Confirmed,Rejected) - Admitter note (if available)
- Filter absences by:
- Absence type
- Date range
- Loading state while data is fetched
- Error state when data is unavailable
- Empty state when no results are found
- 🔍 Search absences by member name
- 📅 Date range filtering
- 📄 iCal file generation (importable into Outlook)
- 🌍 Responsive UI supporting Web and Mobile
- ✅ Unit tests for business logic
- 🧼 Clean Architecture with clear separation of concerns
- CI/CD to github pages
The project follows Clean Architecture, structured into:
- Presentation
- UI widgets
- BLoC / Cubits
- UI states (loading, success, empty, error)
- Domain
- Entities
- Use cases
- Repository contracts
- Data
- Data sources (mock JSON)
- Repository implementations
- Models and mappers
This ensures:
- Testability
- Scalability
- Clear separation of responsibilities
- BLoC (flutter_bloc) is used for predictable state management
- Explicit states:
- Loading
- Success
- Empty
- Error
- UI reacts deterministically to state changes
- Unit tests written using the flutter_test library
- Focus on:
- Use cases
- Repositories
- Models (JSON Manipulation)
- DataSources
- BLoC logic
- State transitions
- Mocked data sources ensure isolated and deterministic tests
- ✅ Web (Android/IOS)
- ✅ Mobile (responsive layout)
- Adaptive UI based on screen size
