This repository is a monorepo for a task management app built as a technical exam. It includes:
- 🖥️ Backend: .NET 9 Web API using Entity Framework Core and PostgreSQL
- ⚛️ Frontend: React (Vite + Axios)
The objective was to:
- Connect frontend and backend seamlessly
- Fix data quirks and API issues
- Implement full CRUD (Tasks & Users)
- Add modern features such as:
- 🧩 Drag & Drop sorting
- 🌗 Dark mode toggle (persistent)
- ⚡ Optimistic UI updates
- Maintain clean, structured, and readable code
⏱️ Built in approximately 4–5 hours with focus on clarity, structure, and commit-based documentation.
This section provides a high-level setup guide. Refer to backend/README.md and frontend/README.md for detailed configurations.
git clone https://github.com/<your-account>/full-stack-evaluator.git
cd full-stack-evaluator💡 Tip: Push frequent commits showing incremental progress.
git add .
git commit -m "init: setup monorepo structure"- Node.js v18+
- .NET 9 SDK
- PostgreSQL v14+
See backend/README.md for:
- EF Core packages and tools
- DB configuration (
appsettings.json)
See frontend/README.md for:
- Node dependencies installation (
npm install) - Libraries: Tailwind CSS, Framer Motion, React Hot Toast
📝 If starting from scratch:
npm init vite@latest frontend dotnet new webapi -o backend
cd backend
dotnet ef database update # Creates database schema
dotnet run # Starts API serverSwagger available at → http://localhost:5215/swagger
cd frontend
npm install
npm run devFrontend runs at → http://localhost:5173
- Swagger: Test
/api/tasksendpoints - UI:
- Create a user →
/users - Add/sort tasks →
/tasks - Check stats → Dashboard
- Create a user →
- Dark Mode: Toggle in header (persists via
localStorage)
For detailed instructions → see subfolder READMEs.
Backend:
- Completed CRUD for
TasksandUsers - Reorder & toggle task completion
- Added logging and validation
- Used EF Core with indexes and cascading rules
- Swagger for documentation
Frontend:
- Axios-based API service with interceptors
- Responsive layout with sidebar and dark mode
- Tasks:
- Create/Edit/Delete modals
- Drag & Drop sorting (
dnd-kit) - Validation and optimistic updates
- Users:
- Search, add, delete with validation
- Dashboard: Dynamic stats with Recharts
- Custom hooks for syncing data
- Toasts for user feedback
Connections:
- Configured proxy in
vite.config.jsfor CORS - Handled missing/partial API data gracefully
| Category | Assumption |
|---|---|
| 🧑💻 Local Setup | Backend runs on http://localhost:5215, frontend on 5173 |
| 🗄️ Database | Local PostgreSQL (credentials in appsettings.json) |
| 🔐 Authentication | None (Open API for evaluation) |
| 🎨 Styling | Tailwind + Framer Motion (focus on clarity) |
| ⚙️ API Quirks | Missing fields handled with fallbacks |
| ⏰ Time Limit | Focused on CRUD, skipped testing/real-time |
- JWT-based authentication (user ownership)
- Unit and e2e testing (Cypress planned)
- Pagination for large datasets
- Real-time sync (e.g., SignalR)
- Redux Toolkit (hooks used instead)
- Setup: Follow the run order above.
- Basic Flow:
- Create a user →
/users - Add tasks →
/tasks - Toggle completion, reorder via drag
- Delete with confirmation
- Toggle dark mode and refresh (check persistence)
- Create a user →
- Advanced:
- Edit task details
- Check Dashboard stats update
- Simulate errors (e.g., invalid email, backend down)
- Database Check:
- Use pgAdmin to verify inserted/updated data
- Confirm relational links (Users ↔ Tasks)
📚 For more details:
🧠 Built with precision, clarity, and modern full-stack practices.