Review: Landing page: sales pitch with App Store download CTA
Verdict: NEEDS_REFINEMENT
Template Completeness
- [x] Type
- [x] Lineage
- [x] Repo
- [x] User Story
- [x] Context
- [x] File Targets
- [x] Feature Flag
- [x] Acceptance Criteria
- [x] Test Expectations
- [x] Constraints
- [x] Checklist
- [x] Related
Traceability
- [x] story:landing-page label -- Epic 1 (US-1.1), Visitor role
- [x] story note verified -- found in project-iss user-stories section (key: landing-page, success metric: "Landing page renders publicly, mobile-first")
- [x] arch:frontend label -- frontend component
- [ ] arch note MISSING -- [SCOPE] Create architecture note arch-frontend for component frontend
- [x] Forgejo issue -- ldraney/intelligentstaffingsystems#58, open
File Targets
- [ ]
app/views/pages/home.html.erb-- ISSUE: File does not exist. The actual landing page view isapp/views/pages/landing.html.erb. Route confirms:root "pages#landing". - [x]
app/assets/stylesheets/pages.css-- verified: exists (7.0k), contains CTA section styling (.cta-section, .btn-primary, .btn-gold) - [x]
app/controllers/sessions_controller.rb-- verified: exists, currently renders Keycloak sign-in button via sessions#new action - [x]
config/routes.rb-- verified: exists, login route at line 30 maps GET /login to sessions#new
Repo Placement
OK -- issue filed on ldraney/intelligentstaffingsystems, all file targets are in the same repo. Single-repo change.
Dependencies
- #7 (Landing page, sprint:2) -- in done. This ticket updates scope of #7 (CTA changes from login to App Store download). No blocker.
- #59 (board item 1831, sprint:A, arch:auth, story:registration) -- related. In-app registration flow that follows the App Store download. Not a blocker for this ticket, but the two tickets form a pair: this one sends visitors to the App Store, #59 handles what happens after they open the app.
- #49 (board item 1829, sprint:A, arch:frontend, story:navigation) -- same sprint, both touch frontend. Minimal file overlap (tab bar vs landing page). No blocker.
- No items in in_progress or next_up block this ticket.
Acceptance Criteria
8 criteria listed. Assessment of testability:
- AC1 (public landing page) -- testable via endpoint test. Already satisfied: PagesController skips auth, root route is public.
- AC2 (ISS pitch, three pillars) -- testable via content assertions. Already satisfied: landing.html.erb has hero section, three pillar cards, journey steps, offer section.
- AC3 (App Store download button) -- testable via presence check in rendered HTML. New work.
- AC4 (App Store link opens store) -- testable via link href check. New work.
- AC5 (no login form on website) -- testable: verify sessions/new.html.erb is removed or redirects. New work.
- AC6 (login route redirects to App Store) -- testable via endpoint test (302). New work.
- AC7 (responsive, mobile-first) -- partially testable via CSS assertions. Already mostly satisfied: pages.css has responsive breakpoints.
- AC8 (target audience messaging) -- testable via content check. Already partially satisfied.
Net-new work covers 4 criteria (AC3-6); 4 criteria verify existing behavior. All are testable by an agent.
Blast Radius
- Auth redirect chain:
application_controller.rb:59redirects unauthenticated users tologin_path. Under this ticket,login_pathwould redirect to the App Store URL (302). This means ANY unauthenticated request to an authenticated route (dashboard, messages, catalog, profile) will ultimately redirect to the App Store. This is the intended behavior per the issue scope ("auth happens in-app only"), but the implementing agent should be aware of this global behavior change. - sessions/new.html.erb: Currently renders a "Sign in with Keycloak" button. Must be removed or replaced. The tab bar (shared/_tab_bar.html.erb) is only rendered for authenticated users, so no impact there.
- OmniAuth callback: The OmniAuth callback route (
/auth/keycloak/callback) must remain functional -- the iOS app's Turbo Native shell uses it for in-app Keycloak login. Only the website's direct login entry point changes; the callback endpoint stays.
Decomposition Assessment
4 file targets across 1 repo (under threshold). 8 acceptance criteria (over the >5 threshold). However, 4 ACs verify existing behavior and require no code changes -- net-new work is 4 cohesive criteria: add App Store CTA (AC3-4) and redirect login (AC5-6). Estimated agent work: ~4 minutes. No decomposition needed.
Recommendations
[BODY]Fix file path:app/views/pages/home.html.erbdoes not exist. Correct path isapp/views/pages/landing.html.erb.[SCOPE]Create architecture notearch-frontendfor the frontend component in pal-e-docs.