Scaffold Rails app with landing page, contact form, and Keycloak SSO dashboard #1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Type
Feature
Lineage
Standalone — greenfield project replacing pal-e-hub as the platform front door.
Repo
forgejo_admin/pal-enterprisesUser Story
As a visitor, I want a landing page that explains Lucas Draney's services and lets me submit a contact form, so that I can inquire about DevOps consulting, IT support, or request an account.
As an authenticated user, I want to log in once via Keycloak and land on a dashboard showing all pal-e platform tools, so that I don't need to re-authenticate when navigating between services.
Context
The platform currently uses
pal-e-hub(a SvelteKit app atpal-e.tail5b443a.ts.net) as the SSO entry point. It authenticates against thepal-eKeycloak realm and shows a hardcoded list of tool surfaces. This works but is a dead-end — it's a thin wrapper with no room to grow.pal-enterprisesreplaces it with a Rails app that owns the full visitor-to-user flow:The Keycloak integration uses the existing
pal-erealm. The currentpal-e-hubclient credentials are: realm=pal-e, client=pal-e-hub. A new clientpal-enterprisesshould be registered (SOP:sop-keycloak-client-creation).File Targets
Files to create:
Gemfile— Rails 8.1, pg, tailwindcss-rails, omniauth-openid-connect, turbo-rails, stimulus-railsconfig/database.yml— connect to CNPG cluster asldraneyconfig/environments/development.rb— allow*.ts.nethostsconfig/initializers/omniauth.rb— Keycloak OIDC provider configconfig/routes.rb— root, contact, auth callback, dashboardapp/controllers/pages_controller.rb— landing pageapp/controllers/contacts_controller.rb— contact form submissionapp/controllers/sessions_controller.rb— Keycloak login/logout/callbackapp/controllers/dashboard_controller.rb— authenticated tool dashboardapp/views/pages/home.html.erb— landing page with services + login CTAapp/views/contacts/new.html.erb— contact formapp/views/dashboard/index.html.erb— tool cards grid (mirrors pal-e-hub surfaces)k8s/dev.yaml— dev deployment with hostPath mount, gem cache PVC, Tailscale ingressapp/mailers/contact_mailer.rb— delivers contact form submissions via emailFiles NOT relevant:
db/migrate/— no migrations needed. No local user table (Keycloak is auth source). Contact form is stateless (email delivery only).Acceptance Criteria
/with services overview and "Sign In" button/contactcollects name, email, message type, and bodypal-erealm login/dashboard/)k8s/dev.yamlwith hostPath mount/upreturns 200Test Expectations
bin/rails testConstraints
pal-e(existing, atkeycloak.tail5b443a.ts.net)pal-enterprises(followsop-keycloak-client-creation)https://pal-enterprises.tail5b443a.ts.net/auth/keycloak/callbackldraneyon CNPG cluster (pal-e-postgres-rw.postgres.svc.cluster.local)Action Mailerwith SMTPwestside-ror(ruby:3.4-slim, gem cache PVC, startupProbe on/up)pal-enterprisesto postgres namespace NetworkPolicy allow listChecklist
pal-enterprisesregistered inpal-erealmhttps://pal-enterprises.tail5b443a.ts.netRelated
pal-e-platform— platform project this belongs topal-e-hub— the SvelteKit app this replacessop-keycloak-client-creation— SOP for registering the OIDC clientScope Review: NEEDS_REFINEMENT
Review note:
review-1176-2026-05-08Well-structured feature issue with all template sections present. Traceability partially complete -- story labels verified on project page, but backing notes are missing.
Issues found:
arch-rails-apparchitecture note does not exist in pal-e-docs (labelarch:rails-appis present but has no backing doc)sop-keycloak-client-creationis referenced in Context/Constraints but does not exist in pal-e-docsNext steps:
arch-rails-apparchitecture notesop-keycloak-client-creationSOPskill-decompose-ticketfor sub-ticket creationClosing — this was an umbrella issue. Work is tracked through individual phase issues #2-5 and infra issues #7, pal-e-platform#357, pal-e-deployments#156.