Summary
The repo has no tests, no linting, and no CI. As features pile up the regression risk grows. This issue sets up the minimum viable dev infra so PRs can be gated on automated checks.
Scope
Tests
- Frontend: Vitest + React Testing Library. Cover
AuthContext, ProtectedRoute, login/register form happy + error paths, and the calendar multi-day/recurrence rendering logic in src/pages/CalendarPage.jsx:161-221 (the most fragile code in the app).
- Backend: Vitest + Supertest against a temp SQLite DB. Cover every route in
server/index.js for: auth required vs not, validation failures, happy paths.
Linting and formatting
- ESLint flat config with
eslint-config-react-app (or equivalent).
- Prettier with the same config across frontend and backend.
lint-staged + Husky pre-commit hook running eslint --fix and prettier --write on staged files.
CI
- GitHub Actions workflow on PR + push to main: install, lint, build, run frontend tests, run backend tests.
- Branch-protect
main to require the workflow to pass.
Acceptance Criteria
Summary
The repo has no tests, no linting, and no CI. As features pile up the regression risk grows. This issue sets up the minimum viable dev infra so PRs can be gated on automated checks.
Scope
Tests
AuthContext,ProtectedRoute, login/register form happy + error paths, and the calendar multi-day/recurrence rendering logic insrc/pages/CalendarPage.jsx:161-221(the most fragile code in the app).server/index.jsfor: auth required vs not, validation failures, happy paths.Linting and formatting
eslint-config-react-app(or equivalent).lint-staged+ Husky pre-commit hook runningeslint --fixandprettier --writeon staged files.CI
mainto require the workflow to pass.Acceptance Criteria
npm testruns frontend tests; passes locally.cd server && npm testruns backend tests; passes locally.npm run lintproduces zero errors on the current codebase.