This repository is a lightweight interview/pair-programming playground that contains:
- a dashboard-like frontend (visual focus, intentionally simple)
- a minimal backend API for ToDos
- NX-based monorepo orchestration for multiple packages
The project is designed to be easy to extend during a coding session and to discuss architecture/refactoring decisions.
- Provides a realistic but stripped-down dashboard UI for frontend exercises.
- Provides a simple Express API for ToDo retrieval/creation.
- Demonstrates monorepo organization with separate frontend/backend packages managed by NX.
- Monorepo / Tooling
NXnpm workspacesESLint
- Frontend (
pkgs/frontend)React+TypeScript(.tsx)ViteMaterial Symbols(Google Fonts)
- Backend (
pkgs/backend)Node.jsExpresscors
.
├─ nx.json
├─ package.json
└─ pkgs
├─ frontend
│ ├─ index.html
│ ├─ package.json
│ ├─ tsconfig.json
│ ├─ vite.config.js
│ ├─ public/
│ └─ src/
└─ backend
├─ package.json
└─ src/Run all commands from repository root.
npm install- Install all workspace dependencies.
npm run dev- Start frontend (Vite dev server).
npm run server- Start backend API (
http://localhost:3001).
- Start backend API (
npm run dev:all- Start frontend and backend in parallel via NX.
npm run lint- Lint frontend and backend.
npm run build- Build frontend production bundle.
npm run preview- Preview the built frontend.
npx nx show projects- List all inferred NX projects.
npx nx run frontend:devnpx nx run backend:devnpx nx run-many -t lint --projects frontend,backend
Base URL (local): http://localhost:3001
GET /api/todos- Returns all todos.
POST /api/todos- Creates a new todo.
- Request body example:
{
"title": "Neue Aufgabe"
}Notes:
- Data is currently stored in memory (no database yet).
- Server restart resets todos to seed data.
- The dashboard page is implemented as a React component.
- The ToDo card fetches todos from
GET /api/todoson component mount. - If backend is unavailable, the card shows a simple loading/error fallback message.
npm installnpm run dev:all- Open the frontend URL shown by Vite (usually
http://localhost:5173) - Verify API manually if needed:
GET http://localhost:3001/api/todos
- No persistence layer (in-memory backend only).
- No authentication/authorization.
- No frontend create/update/delete actions for todos yet.