Review: Landing page: Android badge, hamburger nav, web demo pitch

review-1987-2026-08-02 Review

review ready

Verdict: READY

Re-review after prior NEEDS_REFINEMENT findings were addressed. Previous review checked stale local checkout; this review verified all file targets against origin/main (which includes merged PR #351). Story label corrected to story:app-store-submission, arch note arch-rails-frontend created.

Template Completeness

  • [x] Type — Feature
  • [x] Lineage — Follow-up to #349 / PR #351
  • [x] Repo — ldraney/landscaping-assistant
  • [x] User Story — proper As/I want/So that format
  • [x] Context — accurate description of current state on main after PR #351 merge
  • [x] File Targets — 3 modify targets, 3 don't-touch targets, all correct
  • [x] Feature Flag — none (appropriate for CSS/HTML/copy changes)
  • [x] Acceptance Criteria — 6 items, all testable
  • [x] Test Expectations — 4 items with specific checks
  • [x] Constraints — 3 items (inline SVG, no gems, match existing naming)
  • [x] Checklist — standard 3 items
  • [x] Related — project-landscaping-assistant

Traceability

  • [x] story:app-store-submission label — "Submit and maintain iOS App Store listing" found in project-landscaping-assistant user-stories table
  • [x] story note verified — app-store-submission entry exists in project-landscaping-assistant user-stories section
  • [x] arch:rails-frontend label — "Convention: Rails Frontend Architecture"
  • [x] arch note verified — arch-rails-frontend note exists in pal-e-docs (convention note, active, created 2026-08-02)
  • [x] Forgejo issue — ldraney/landscaping-assistant#355, state: open

File Targets

All verified against origin/main (includes merged PR #351):
  • [x] app/views/landing/index.html.erb — verified: exists on origin/main. Contains hero with app_store_badge partial render, feature cards, bottom CTA with second badge render. No header/hamburger nav (matches issue Context). Previous review checked stale local branch that had different content.
  • [x] app/views/landing/_app_store_badge.html.erb — verified: exists on origin/main. Contains inline SVG App Store badge linking to apps.apple.com/app/id6780226794. Previous review incorrectly reported missing because local checkout was behind origin/main.
  • [x] app/assets/stylesheets/application.css — verified: exists (74k), contains 28 landing-related CSS rules following .landing-* naming convention.
Don't-touch targets verified:
  • [x] app/views/sessions/new.html.erb — exists, correctly excluded
  • [x] app/views/layouts/application.html.erb — exists, correctly excluded (hamburger belongs in landing template only)
  • [x] app/controllers/landing_controller.rb — exists, correctly excluded

Repo Placement

OK. Issue filed on ldraney/landscaping-assistant, Repo section says ldraney/landscaping-assistant. Single repo, no cross-repo concerns.

Dependencies

  • Board item #1988 "Mobile app: skip landing page, go straight to login/register" shares story:app-store-submission label and is in backlog. Related but not blocking — it handles Turbo Native mobile routing, separate from web landing page changes.
  • Items #1983 and #1984 in QA column share story:app-store-submission but are on different arch components (keycloak, rails-app). Not blocking.
  • No hard dependencies. No blockers identified.

Acceptance Criteria

All 6 criteria are concrete and agent-verifiable:
  • AC1: Google Play badge next to App Store badge — verifiable. Issue explicitly states "Play Store URL TBD — use placeholder href until Android listing is live." Agent has clear guidance.
  • AC2: Header with hamburger menu, links to Sign In (/login) and Register (/login with note that login page has Create Account link) — verifiable via HTML structure and href checks.
  • AC3: Landing page copy pitches web access as free demo — verifiable via template content.
  • AC4: Mobile downloads remain primary CTA — verifiable via prominence/ordering.
  • AC5: Web demo CTA secondary but prominent, pointing to /login — verifiable.
  • AC6: Responsive layout across mobile and desktop — verifiable via CSS inspection; full visual check in QA.

Blast Radius

Low. Changes isolated to the landing page (web-only, public-facing). The .landing-* CSS naming convention (enforced by arch-rails-frontend) prevents style collisions with authenticated views. The _app_store_badge partial is only rendered on the landing page. No downstream consumers affected.

Decomposition Assessment

3 file targets in 1 repo (under threshold). 6 acceptance criteria (borderline on the >5 rule). All changes are cohesive — single page, single concern, single repo. Estimated agent time well under 5 minutes. No decomposition needed.

Recommendation

No action needed.