Review: Landing page: Android badge, hamburger nav, web demo pitch
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.