Files
fete/spec/setup-tasks.md
nitrix a55174b323 T-1: initialize monorepo structure with backend and frontend scaffolds
Backend: Spring Boot 3.5.11 on Java 25, Maven with wrapper, hexagonal
architecture package layout (domain/application/adapter/config), health
endpoint with integration test. Originally planned for Spring Boot 4.0
but pivoted due to massive package reorganization in 4.0 (see addenda
in research and plan docs).

Frontend: Vue 3 scaffolded via create-vue with TypeScript, Vue Router,
Vitest, ESLint, Prettier. Pivoted from Svelte due to ecosystem maturity
concerns (broken router ecosystem for Svelte 5).

Also: extended .gitignore for Java/Maven and Node/Vue artifacts, updated
CLAUDE.md with tech stack, build commands, agent documentation sections,
and document integrity rule.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 01:32:18 +01:00

73 lines
4.2 KiB
Markdown

# Setup Tasks
<!-- Technical setup tasks that are prerequisites for user story implementation. -->
<!-- These are not user stories — they describe infrastructure and project scaffolding work. -->
## Tasks
### T-1: Initialize monorepo structure
**Description:** Set up the repository structure with separate directories for backend and frontend, scaffolded with the chosen tech stack.
**Acceptance Criteria:**
- [ ] Single repository with `backend/` and `frontend/` directories
- [ ] Backend: Java (latest LTS), Spring Boot, Maven, hexagonal/onion architecture scaffold
- [ ] Frontend: Vue 3 with Vite as bundler, TypeScript, Vue Router
- [ ] Shared top-level files: README, Dockerfile, CLAUDE.md, LICENSE (GPL), .gitignore
- [ ] Both projects build successfully with no source code (empty scaffold)
- [ ] .gitignore covers build artifacts, IDE files, and dependency directories for both Java/Maven and Node/Vue
**Dependencies:** None
---
### T-2: Deployment setup (Dockerfile + configuration)
**Description:** Create the Docker-based deployment infrastructure so the app can be built and run as a single container connecting to an external PostgreSQL database.
**Acceptance Criteria:**
- [ ] Single multi-stage Dockerfile at repo root that builds backend and frontend and produces one container
- [ ] App connects to external PostgreSQL via environment variable (e.g. `DATABASE_URL`)
- [ ] All runtime configuration via environment variables: database connection, optional Unsplash API key, optional max active events
- [ ] Health-check endpoint so Docker/orchestrators can verify the app is alive
- [ ] README documents setup with a docker-compose example (app + postgres)
- [ ] Container starts and responds to health checks with an empty database (migrations run on startup or are documented)
**Dependencies:** T-1
---
### T-3: CI/CD pipeline
**Description:** Set up a Gitea Actions CI/CD pipeline that runs on every push, ensuring code quality before deployment.
**Acceptance Criteria:**
- [ ] Gitea Actions workflow file in `.gitea/workflows/` runs on push: test, build, publish Docker image
- [ ] Backend tests run via Maven
- [ ] Frontend tests run via Vitest
- [ ] Docker image is published to the Gitea container registry on the same instance
- [ ] Pipeline fails visibly if any test fails or the build breaks
- [ ] Docker image is only published if all tests pass and the build succeeds
**Dependencies:** T-1, T-2
**Notes:** Per Q-5 resolution: the project uses Gitea as its hosting and CI/CD platform. The pipeline uses Gitea Actions (`.gitea/workflows/`) and publishes Docker images to the Gitea container registry. T-3 depends on T-1 (repository structure with both projects to test and build) and T-2 (Dockerfile used by the pipeline to build and publish the container image).
---
### T-4: Development infrastructure setup
**Description:** Set up the development foundation needed before the first user story can be implemented with TDD (as required by CLAUDE.md). This bridges the gap between empty project scaffolds (T-1) and actual feature development.
**Acceptance Criteria:**
- [ ] Database migration framework (Flyway or Liquibase) is configured in the backend with a first empty migration that runs successfully against a PostgreSQL instance
- [ ] SPA router is configured in the Vue frontend (Vue Router) so pages can be navigated by URL path
- [ ] API client layer exists in the frontend (a fetch wrapper or similar) for making requests to the backend REST API
- [ ] Backend test infrastructure is set up: JUnit 5 with Spring Boot Test, plus integration test support using Testcontainers (PostgreSQL) so tests can run against a real database without external setup
- [ ] Frontend test infrastructure is set up: Vitest with @vue/test-utils configured and a sample test runs successfully
- [ ] Both test suites (backend and frontend) can be executed via their respective build tools (`mvn test` and `npm test` / `npx vitest`)
**Dependencies:** T-1, T-2
**Notes:** T-4 is the prerequisite for all user story implementation. Without migration tooling, router, API client, and test infrastructure, TDD (the mandated methodology per CLAUDE.md) cannot begin. All user stories that previously depended on T-1 and/or T-2 now depend on T-4 instead, since T-4 transitively includes both.