Files
is-it-christmas/specs/001-christmas-checker/tasks.md
Julien Lengrand-Lambert 16ae2a1430 Creating the project
2025-11-11 10:06:56 +01:00

11 KiB

Tasks: Christmas Checker Website

Input: Design documents from /specs/001-christmas-checker/ Prerequisites: plan.md (required), spec.md (required for user stories), research.md, data-model.md, contracts/

Tests: No tests requested in the feature specification, so tests are NOT included.

Organization: Tasks are grouped by user story to enable independent implementation and testing of each story.

Format: [ID] [P?] [Story] Description

  • [P]: Can run in parallel (different files, no dependencies)
  • [Story]: Which user story this task belongs to (e.g., US1, US2)
  • Include exact file paths in descriptions

Path Conventions

  • Web app: backend/ and frontend/ directories at repository root
  • Backend: Java source in backend/src/main/java/christmas/
  • Frontend: HTML/CSS/JS in frontend/
  • Docker: Configuration in docker/

Phase 1: Setup (Shared Infrastructure)

Purpose: Project initialization and basic structure

  • T001 Create backend directory structure at backend/src/main/java/christmas/
  • T002 Create frontend directory structure at frontend/
  • T003 [P] Create docker directory structure at docker/
  • T004 [P] Create backend Dockerfile at docker/Dockerfile.backend for Java 21 application
  • T005 [P] Create frontend Dockerfile at docker/Dockerfile.frontend for nginx static file serving
  • T006 Create docker-compose.yml at docker/docker-compose.yml orchestrating backend and frontend services

Phase 2: Foundational (Blocking Prerequisites)

Purpose: Core infrastructure that MUST be complete before ANY user story can be implemented

⚠️ CRITICAL: No user story work can begin until this phase is complete

  • T007 Create ChristmasChecker class in backend/src/main/java/christmas/ChristmasChecker.java with date checking logic
  • T008 [P] Create ChristmasServer class in backend/src/main/java/christmas/ChristmasServer.java with HttpServer setup
  • T009 [P] Create Main class in backend/src/main/java/christmas/Main.java as application entry point
  • T010 Implement GET /api/christmas endpoint handler in backend/src/main/java/christmas/ChristmasServer.java
  • T011 [P] Add CORS headers support in backend/src/main/java/christmas/ChristmasServer.java
  • T012 [P] Create base HTML structure in frontend/index.html with viewport and meta tags
  • T013 [P] Create base CSS file at frontend/styles.css with reset and common styles
  • T014 [P] Create base JavaScript file at frontend/script.js with date checking function

Checkpoint: Foundation ready - user story implementation can now begin in parallel


Phase 3: User Story 1 - Check Christmas Status on Non-Christmas Day (Priority: P1) 🎯 MVP

Goal: Display "No" message with sad smiley face when it's not Christmas (364 days/year)

Independent Test: Visit website on any non-Christmas day and verify "No" message and sad smiley face appear

Implementation for User Story 1

  • T015 [P] [US1] Implement isChristmas() method in backend/src/main/java/christmas/ChristmasChecker.java using LocalDate
  • T016 [P] [US1] Implement JSON response formatting in backend/src/main/java/christmas/ChristmasServer.java
  • T017 [P] [US1] Add client-side date check logic in frontend/script.js using JavaScript Date()
  • T018 [P] [US1] Create HTML structure for "No" message display in frontend/index.html
  • T019 [P] [US1] Create HTML structure for sad smiley face in frontend/index.html
  • T020 [US1] Add CSS styles for "No" message in frontend/styles.css
  • T021 [US1] Add CSS styles for sad smiley face in frontend/styles.css
  • T022 [US1] Implement renderNonChristmas() function in frontend/script.js to display "No" + smiley
  • T023 [US1] Wire up date check to call renderNonChristmas() when not December 25th in frontend/script.js
  • T024 [US1] Add responsive design for mobile screens (320px-768px) in frontend/styles.css
  • T025 [US1] Ensure text and smiley are clearly visible on all screen sizes in frontend/styles.css

Checkpoint: At this point, User Story 1 should be fully functional and testable independently


Phase 4: User Story 2 - Check Christmas Status on Christmas Day (Priority: P2)

Goal: Display "Yes" message with falling snow animation when it's Christmas (1 day/year)

Independent Test: Set system date to December 25th and verify "Yes" message and snow animation appear

Implementation for User Story 2

  • T026 [P] [US2] Create HTML structure for "Yes" message display in frontend/index.html
  • T027 [P] [US2] Create canvas element for snow animation in frontend/index.html
  • T028 [P] [US2] Add CSS styles for "Yes" message in frontend/styles.css
  • T029 [P] [US2] Add CSS styles for canvas overlay in frontend/styles.css
  • T030 [US2] Implement renderChristmas() function in frontend/script.js to display "Yes"
  • T031 [US2] Implement snow particle system initialization in frontend/script.js
  • T032 [US2] Implement snow particle update logic (falling + wobble) in frontend/script.js
  • T033 [US2] Implement snow rendering loop using requestAnimationFrame in frontend/script.js
  • T034 [US2] Wire up date check to call renderChristmas() when December 25th in frontend/script.js
  • T035 [US2] Optimize particle count based on screen size (50-100 mobile, 150-200 desktop) in frontend/script.js
  • T036 [US2] Add Page Visibility API integration to pause animation when tab not visible in frontend/script.js
  • T037 [US2] Add prefers-reduced-motion support to disable animation for accessibility in frontend/script.js

Checkpoint: All user stories should now be independently functional


Phase 5: Polish & Cross-Cutting Concerns

Purpose: Improvements that affect multiple user stories

  • T038 [P] Add error handling for date check failures in frontend/script.js
  • T039 [P] Add midnight transition logic (FR-006) to auto-update display in frontend/script.js
  • T040 [P] Ensure cross-browser compatibility (Chrome, Firefox, Safari, Edge) by testing all features
  • T041 [P] Add alt text for smiley face for screen reader accessibility in frontend/index.html
  • T042 [P] Optimize CSS for performance (minimize repaints, use transforms) in frontend/styles.css
  • T043 [P] Add meta description and title tags in frontend/index.html
  • T044 [P] Configure nginx cache headers and gzip compression in docker/Dockerfile.frontend
  • T045 Validate Docker Compose setup by running docker compose up --build
  • T046 Test MVP (User Story 1) manually on non-Christmas day
  • T047 Test User Story 2 manually by changing system date to December 25th
  • T048 Validate performance goals (page load <2s, animation >30fps, date check <1s)
  • T049 Run quickstart.md validation steps

Dependencies & Execution Order

Phase Dependencies

  • Setup (Phase 1): No dependencies - can start immediately
  • Foundational (Phase 2): Depends on Setup completion - BLOCKS all user stories
  • User Stories (Phase 3+): All depend on Foundational phase completion
    • User stories can then proceed in parallel (if staffed)
    • Or sequentially in priority order (P1 → P2)
  • Polish (Final Phase): Depends on all desired user stories being complete

User Story Dependencies

  • User Story 1 (P1): Can start after Foundational (Phase 2) - No dependencies on other stories
  • User Story 2 (P2): Can start after Foundational (Phase 2) - Independent from US1, but builds on same HTML structure

Key Independence: User Story 1 can be deployed without User Story 2. US1 provides full MVP functionality.

Within Each User Story

  • User Story 1 (P1): Date logic → HTML structure → CSS styles → JavaScript rendering → Integration
  • User Story 2 (P2): HTML structure for "Yes" → Canvas setup → CSS styles → Snow physics → Animation loop → Integration

Parallel Opportunities

  • All Setup tasks marked [P] can run in parallel (T001-T006, except T006 depends on T004-T005)
  • All Foundational tasks marked [P] can run in parallel (within Phase 2: T008-T009, T011-T014)
  • Once Foundational phase completes, US1 and US2 can be worked on in parallel by different team members
  • Within US1: T015-T019 and T020-T021 can run in parallel
  • Within US2: T026-T029 can run in parallel
  • All Polish tasks marked [P] can run in parallel (T038-T044)

Parallel Example: User Story 1

# Launch models and HTML structure together:
Task: "Implement isChristmas() method in backend/src/main/java/christmas/ChristmasChecker.java"
Task: "Implement JSON response formatting in backend/src/main/java/christmas/ChristmasServer.java"
Task: "Add client-side date check logic in frontend/script.js"
Task: "Create HTML structure for 'No' message in frontend/index.html"
Task: "Create HTML structure for sad smiley face in frontend/index.html"

# Then launch CSS styling tasks together:
Task: "Add CSS styles for 'No' message in frontend/styles.css"
Task: "Add CSS styles for sad smiley face in frontend/styles.css"

Implementation Strategy

MVP First (User Story 1 Only)

  1. Complete Phase 1: Setup
  2. Complete Phase 2: Foundational (CRITICAL - blocks all stories)
  3. Complete Phase 3: User Story 1
  4. STOP and VALIDATE: Test User Story 1 independently
  5. Deploy/demo if ready

At this point, you have a working Christmas Checker that handles 364 days of the year correctly!

Incremental Delivery

  1. Complete Setup + Foundational → Foundation ready
  2. Add User Story 1 → Test independently → Deploy/Demo (MVP! )
  3. Add User Story 2 → Test independently → Deploy/Demo (Full feature )
  4. Each story adds value without breaking previous stories

Parallel Team Strategy

With multiple developers:

  1. Team completes Setup + Foundational together
  2. Once Foundational is done:
    • Developer A: User Story 1 (backend + frontend for "No" case)
    • Developer B: User Story 2 (snow animation)
  3. Stories complete and integrate independently

Notes

  • [P] tasks = different files, no dependencies, can run in parallel
  • [Story] label maps task to specific user story for traceability
  • Each user story should be independently completable and testable
  • No tests included: Feature specification did not request tests
  • Commit after each task or logical group
  • Stop at any checkpoint to validate story independently
  • File paths are exact: All tasks include precise file locations
  • Backend is optional: Frontend can work standalone with client-side date checking (FR-001)
  • Docker deployment: Final validation requires docker compose up

Task Count Summary

  • Setup: 6 tasks
  • Foundational: 8 tasks
  • User Story 1 (P1 - MVP): 11 tasks
  • User Story 2 (P2): 12 tasks
  • Polish: 12 tasks

Total: 49 tasks

Parallel Opportunities: 30 tasks marked [P] can run concurrently with appropriate staffing

MVP Scope: Setup (6) + Foundational (8) + User Story 1 (11) = 25 tasks for complete MVP