Validation: Landing page sales pitch with App Store download CTA
Verdict: FAIL
Re-validated 2026-07-17. Previous validation also FAIL. Root cause unchanged: CI pipeline broken, production deployment stale.
Ticket
ldraney/intelligentstaffingsystems#58 (PR #74) — Landing page rewrite: replace "Book an Appointment" CTA with App Store download badge, add target audience section, update journey steps to lead with "Download the App."
Board item #1830 on board-iss.
Environment
Production:
Validation tiers executed: Tier 1 (codebase review) + Tier 3 (production browser verification via Playwright)
Repo type: frontend
https://intelligentstaffingsystems.aiValidation tiers executed: Tier 1 (codebase review) + Tier 3 (production browser verification via Playwright)
Repo type: frontend
Checks
| # | Criterion | How Verified | Result | Evidence |
|---|---|---|---|---|
| 1 | Landing page is public (no auth required) | Playwright: opened https://intelligentstaffingsystems.ai/ | PASS | Page loads at root URL without authentication. Title: "Intelligence Staffing Systems — Enterprise infrastructure for small businesses" |
| 2 | ISS pitch clearly communicated: three pillars, what ISS builds, who it's for | Playwright screenshot + accessibility snapshot | PARTIAL | Three pillars (Web Presence, Operations, Internal Tooling) visible with icons and descriptions. However, audience section ("Built for businesses like yours" — Farmers Market Vendors, Sports Programs, Local Shops) is MISSING from production. Exists in codebase at commit 035d838 but not deployed. |
| 3 | Prominent App Store download button/badge as primary CTA | Playwright screenshot + snapshot | FAIL | Production hero shows "Book an Appointment" button (link to #book). App Store SVG badges exist in codebase (_app_store_badge.html.erb partial) but not deployed. Two App Store CTAs in template (hero + bottom) replaced by two "Book an Appointment" buttons in production. |
| 4 | App Store link opens App Store (or TestFlight during beta) | Playwright: inspected CTA link hrefs | FAIL | Hero CTA href: <code>https://intelligentstaffingsystems.ai/#book</code>. Should be: <code>https://testflight.apple.com/join/intelligentstaffingsystems</code> (ApplicationHelper::APP_STORE_URL). |
| 5 | No login/register form on the website — auth happens in-app only | Playwright: navigated to /login, took screenshot | FAIL | /login renders "Intelligence Staffing Systems" heading, "Sign in to continue" text, and "Sign in with Keycloak" button. Should redirect (302) to App Store URL per merged SessionsController#new. |
| 6 | Website login route redirects to App Store download (not Keycloak) | Playwright: /login page stayed at /login URL | FAIL | No redirect occurred. URL remained at /login. Merged code has <code>redirect_to ApplicationHelper::APP_STORE_URL, allow_other_host: true, status: :found</code> but this is not deployed. |
| 7 | Responsive, mobile-first | CSS review of pages.css in codebase | PASS (code only) | Mobile-first grid layout: 1fr default columns, <code>@media (min-width: 600px)</code> breakpoint expands to <code>repeat(3, 1fr)</code>. Cannot verify in production since deployed code differs from codebase. |
| 8 | Target audience messaging: farmers market vendors, sports programs, local businesses | Playwright accessibility snapshot | FAIL | Audience section with "Farmers Market Vendors", "Sports Programs", "Local Shops & Services" cards not present in production DOM. Section exists in codebase landing.html.erb lines 34-68. |
| 9 | Endpoint test: landing page loads (200, public) | Playwright: root URL loaded successfully | PASS | Root URL returns 200, renders without auth redirect. |
| 10 | Endpoint test: login route redirects to App Store URL (302) | Playwright: /login URL | FAIL | /login renders a page (200) instead of redirecting (302) to App Store URL. |
| 11 | Endpoint test: no Keycloak redirect from website login | Playwright: /login page snapshot | FAIL | /login page contains button "Sign in with Keycloak" — direct Keycloak integration still present. |
| 12 | Woodpecker pipeline green for merge commit | Woodpecker API: list_pipelines | FAIL | Pipeline #90 (latest on main) status: failure. Error: <code>cannot load such file -- minitest/mock (LoadError)</code>. All 5 most recent main-branch pipelines (#85-#90) show failure status. |
Summary: 3 PASS, 1 PARTIAL, 8 FAIL
Codebase Verification (Tier 1)
The merged codebase is correct. All acceptance criteria are properly implemented in code:
app/views/pages/landing.html.erb— App Store badges, audience section, updated journey steps all presentapp/views/shared/_app_store_badge.html.erb— SVG badge partial with dark/light variantsapp/controllers/sessions_controller.rb—#newredirects toAPP_STORE_URLwithstatus: :foundapp/helpers/application_helper.rb—APP_STORE_URL = "https://testflight.apple.com/join/intelligentstaffingsystems"test/controllers/pages_controller_test.rb— 8 tests covering all ACs (public access, three pillars, App Store CTA, no login form, audience cards)test/controllers/sessions_controller_test.rb— Tests for App Store redirect from /login and no Keycloak redirect
Regression Check
The production site's existing functionality (pre-PR#74 landing page) is still operational — root URL loads with three pillars, "How it works", and offer section intact. No regressions to the currently deployed version. The stale deployment has not introduced new breakage.
Root Cause
The merged code (commit
035d838) has not been deployed to production. The CI/CD pipeline is broken:- CI pipeline failure: Woodpecker pipeline #90 (and all recent pipelines) fail with
cannot load such file -- minitest/mock (LoadError)in the test step. This is a Ruby 3.4 gem dependency issue —minitest/mockwas moved to a bundled gem and requires explicit inclusion in the Gemfile. - No image built: Because CI fails at the test step, the
build-and-pushstep is skipped. No new container image is pushed to Harbor. - ArgoCD Image Updater has nothing to pull: Without a new image tag, the Image Updater cannot trigger a deployment.
- Push event gap: Per project memory, Forgejo squash merges may not reliably trigger Woodpecker push events, compounding the issue.
Discovered Issues
- CI pipeline broken — blocks ALL deployments: The
minitest/mockLoadError prevents all test runs in CI. This is not specific to this ticket; it blocks deployment of every merged PR. The fix: addgem "minitest"(with mock support) to the Gemfile, or addrequire "minitest/mock"with proper gem resolution in test_helper.rb. - Production deployment drift — 8+ undeployed commits: At least commits from 035d838 through ca24329 are merged but undeployed: landing page (#74), tab bar restructure (#73), Messages fix (#76), Makefile/seed (#81), Communications tab (#82), Projects tab (#83), Catalog tab (#84), and CI blocker fix (ca24329).