A production-grade, full-stack to-do application built to showcase best practices in software engineering, from architecture to developer experience.
This project was approached as a real-world product simulation. It tells the story of "EzraTask," a simple internal tool built for a fast-growing startup.
The "Internal POC" began by fulfilling the core request for a simple to-do app. The "Product-Market Fit" Moment imagines the tool's popularity exploding, creating an urgent need to evolve it into the Production-Grade Application you see here. This narrative is the "why" behind every architectural decision and feature.
- Create, View, and Complete Todos: Core task management functionality.
- Rich Data Models: Todos can be assigned a Priority (
None,Low,Medium,High) and an optional Due Date. - Soft Delete (Archiving): Tasks can be archived to de-clutter the main view instead of being permanently deleted.
- View Archived Tasks: Users can toggle between viewing active and archived tasks.
- Clean Architecture: A simple, effective Service Layer pattern in the .NET API avoids over-engineering.
- Robust Validation: DTO-based validation and global exception handling in the backend ensure data integrity.
- Polished UX: The frontend handles loading, error, and empty states to provide a smooth user experience.
- Comprehensive Testing: The project includes unit tests (xUnit for backend, Vitest for frontend) and a full end-to-end test suite (Cypress) that validates the entire user lifecycle.
- One-Command Setup: The entire development environment can be launched with a single
docker-compose upcommand.
This project is fully containerized for a seamless local development experience. The only prerequisite is to have Docker installed.
To get the entire full-stack application running locally, simply run the following command from the repository root:
docker-compose up --buildThis will:
- Build the Docker images for both the frontend and backend services.
- Start the containers.
- The frontend will be available at
http://localhost:5173. - The backend API will be available at
http://localhost:8080.
To ensure consistency with the CI environment and produce reliable results, all tests should be run within their respective Docker containers.
docker-compose run --rm api dotnet testdocker-compose run --rm ui npm run _test:unit:localdocker-compose run --rm e2eThe application follows a classic, scalable client-server architecture. For a detailed breakdown of the technology stack, components, and guiding principles, please see the Architectural Decision Records.
This project uses Architectural Decision Records (ADRs) to document significant architectural choices, their context, and their consequences.
You can find all ADRs in the /docs/adr directory.
Please see our Contribution Guide for details on our development process and code review standards.