Review: Remove Tailwind, implement plain CSS design system

review-1188-2026-05-09 Review

review needs-refinement

Verdict: NEEDS_REFINEMENT

Template Completeness

  • [x] Type
  • [x] Lineage
  • [x] Repo
  • [x] User Story
  • [x] Context
  • [x] File Targets
  • [x] Acceptance Criteria
  • [x] Test Expectations
  • [x] Constraints
  • [x] Checklist
  • [x] Related
All required sections present per template-issue-feature.

Traceability

  • [x] story:sso-gateway label -- "Single login grants access to all platform tools"
  • [x] story note verified -- sso-gateway entry found in project-pal-enterprises user-stories table (Story Note column reads "TBD" but table entry exists)
  • [x] arch:rails-app label -- Rails application component
  • [ ] arch note MISSING -- [SCOPE] Create architecture note arch-rails-app for the Rails application component. Searched pal-e-docs for "arch-rails-app", no matching note found.
  • [x] Forgejo issue -- ldraney/pal-enterprises#10, state: open

File Targets

Files to modify (all verified to exist):
  • [x] Gemfile -- verified: contains gem "tailwindcss-rails" at line 18
  • [x] app/assets/stylesheets/application.css -- verified: exists, will be rewritten with design system
  • [x] app/views/layouts/application.html.erb -- verified: contains ~15 Tailwind utility classes (bg-gray-50, text-indigo-600, shadow, etc.)
  • [x] app/views/pages/home.html.erb -- verified: contains ~20 Tailwind utility classes across hero, cards, and headings
  • [x] app/views/contacts/new.html.erb -- verified: contains Tailwind classes (max-w-lg, text-3xl, etc.)
  • [x] app/views/contacts/_form.html.erb -- verified: heavily Tailwind-styled form with ~25 utility classes
  • [x] app/views/sessions/new.html.erb -- verified: Tailwind classes on Keycloak sign-in button and layout
  • [x] app/views/dashboard/index.html.erb -- verified: grid layout, cards, borders all use Tailwind utilities
  • [x] Procfile.dev -- verified: contains css: bin/rails tailwindcss:watch at line 2
  • [x] README.md -- verified: exists
Files to delete (all verified to exist):
  • [x] app/assets/tailwind/application.css -- verified: contains @import "tailwindcss"
  • [x] app/assets/builds/tailwind.css -- verified: contains compiled Tailwind v4.2.4 output
Files to NOT touch (verified no changes needed):
  • [x] Dockerfile -- no tailwind references found
  • [x] config/ -- no tailwind references found

Repo Placement

OK. Issue filed on ldraney/pal-enterprises, all file targets are within the same repo. Single-repo change, no cross-repo concerns.

Dependencies

No blocking dependencies found on the board. This ticket is in backlog alongside other backlog items. The ticket references the ror-css-guide repo as a CSS conventions reference -- the agent will need to read that repo during implementation. No board items are blocked by this ticket, and this ticket is not blocked by any in-progress items.

Acceptance Criteria

9 acceptance criteria, all verifiable:
  • [x] "Zero Tailwind dependencies" -- grep-verifiable
  • [x] "All colors use var(--token)" -- grep-verifiable (no hardcoded hex outside :root)
  • [x] "CSS comments mark component boundaries" -- grep-verifiable
  • [x] "Mobile-first layout at 390px, desktop breakpoint at 600px" -- visually verifiable
  • [x] "Production Docker build serves styled pages" -- build-verifiable
  • [x] "Flash messages styled for notice and alert" -- visually verifiable
  • [x] "Landing page has hero, feature cards, and contact form" -- visually verifiable
  • [x] "Login page renders the Keycloak sign-in button" -- visually verifiable
  • [x] "Dashboard page renders styled" -- visually verifiable
All criteria are testable. The Docker build command is provided in Test Expectations.

Blast Radius

Low. This is a single Rails app with no downstream CSS consumers. No sibling services share these stylesheets. The layout and view changes are self-contained. The only external reference is the ror-css-guide conventions repo, which is read-only input.

Decomposition Assessment

10 file targets in 1 repo, 9 acceptance criteria. This technically exceeds the 5-minute rule thresholds (>5 AC). However, the changes are tightly coupled -- removing Tailwind and replacing with semantic CSS is a single atomic operation. Decomposing would create artificial boundaries (e.g., "remove Tailwind" vs "add CSS" would conflict on every file). The work is mechanical: strip utility classes, write semantic classes, build one CSS file. Estimated agent time: 5-10 minutes. No decomposition recommended despite the size, given the tight coupling.

Recommendations

  • [SCOPE] Create architecture note arch-rails-app for the Rails application component. The arch:rails-app label is used on 9 board items but has no backing architecture note in pal-e-docs.