Believer's Elite
Notes
Doc 1
-
Validation: Fix image-updater write-back to argocd, reconcile state
validation-81-2026-05-23Verdict: PASS
Ticket
ldraney/pal-e-services#81 — Fix image-updater: switch write-back to argocd, reconcile state for all services. Merged via PR #82.
Environment
Production k3s cluster (archbox), argocd namespace, believers-elite namespace. Validated via kubectl and tofu plan against live state.
Checks
# Criterion How Verified Result Evidence 1 services.tf uses argocdwrite-back method (notgit:secret:argocd/git-creds)Read services.tf line 135; checked live ArgoCD Application annotation via kubectl PASS "argocd-image-updater.argoproj.io/write-back-method": "argocd"in both terraform source and live annotation2 Terraform state matches live ArgoCD Applications for all services ( tofu state rm+tofu import)tofu plan -var-file=k3s.tfvars -lock=falsePASS Plan shows 0 to add, 2 to change (cosmetic label drift on harbor-creds secrets for gcal-scheduler and westsidekingsandqueens — ArgoCD added argocd.argoproj.io/instancelabels, unrelated to this fix), 0 to destroy. All 7 ArgoCD applications refreshed clean.3 tofu planis clean after applySame plan output as AC #2 PASS No ArgoCD application or image-updater drift. The 2 label changes are pre-existing cosmetic drift on harbor-creds secrets, not introduced by this change. 4 Image Updater logs show applications=4and believers-elite appears in processingkubectl logs -n argocd -l app.kubernetes.io/name=argocd-image-updaterPASS Logs show applications=7(platform has grown from 4 to 7 services since AC was written). believers-elite confirmed in processing:"Processing application argocd/believers-elite","Considering this image for update".errors=0.5 Push a test commit and confirm image auto-updates without manual intervention Verified commit c876865(favicon commit) triggered Woodpecker pipeline #2 (success), image pushed to Harbor, Image Updater detected and set live deployment to tagc876865678d1.... Commit4bb8e1ftriggered pipeline #3 (currently running).PASS Live deployment: harbor.tail5b443a.ts.net/believers-elite/app:c876865678d1becb00168d15f0600a2429c18f96. Image Updater log:"Image already on latest allowed version"confirming it tracked and matched. End-to-end flow: commit → Woodpecker CI → Harbor push → Image Updater detection → ArgoCD deployment. Fully automated, no manual intervention.Regression Check
All ArgoCD applications verified:
- believers-elite: Synced, Healthy
- gcal-scheduler: Synced, Healthy
- notion-mcp-remote: Synced, Healthy
- pal-e-docs: Synced, Healthy
- westsidekingsandqueens: Synced, Healthy
- basketball-api: OutOfSync, Degraded (ImagePullBackOff — pre-existing, unrelated)
- pal-enterprises: Synced, Degraded (CreateContainerConfigError — pre-existing, unrelated)
- westside-email: Unknown sync, Healthy (no image-updater annotation — expected)
The two degraded apps (basketball-api, pal-enterprises) are pre-existing issues unrelated to this fix. The image-updater write-back change did not introduce any regressions.
Discovered Issues
- Cosmetic label drift: ArgoCD adds
argocd.argoproj.io/instancelabels to harbor-creds secrets in gcal-scheduler and westsidekingsandqueens namespaces.tofu planwants to remove them. Low priority — does not affect functionality. Could be addressed withlifecycle { ignore_changes }on the label block. - basketball-api ImagePullBackOff: Pre-existing, not caused by this change. Already visible before merge.
- pal-enterprises CreateContainerConfigError: Pre-existing (11 days old), not caused by this change.
Project Page 1
-
Believer's Elite
project-believers-eliteVision
Registration and check-in app for Believer's Elite Basketball Camp — a 3-day camp (June 4-6, 2026) run by Coach Marcus Draney and Brandon Averette in South Salt Lake City. Parents register and pay $165 online via Stripe, admins verify payment and check players in on camp day. Simple, fast, done before June 4.
User Stories
Key Role Story Success Metric register Parent Register my player and pay online Stripe payment completes, confirmation page shows multi-register Parent Register multiple players "Register Another Player" link works after first registration show-up-ready Player Know what to bring and where to go Confirmation page lists dates, time, location, what to bring admin-view Admin View all registrations with search Table with player, school, parent, phone, paid/checked-in status admin-checkin Admin Verify payment and check in players Toggle paid/checked-in on detail page, badges update production-deploy Admin Live site with real payments Public URL, live Stripe, CI/CD pipeline Architecture
Rails 8 monolith with Hotwire (Turbo + Stimulus). Stripe Elements for payment (PaymentIntent flow, card never touches server). Plain CSS with design tokens — dark navy/royal blue theme.
- Domain: Single model —
Registration(parent info + player info + payment status + check-in status) - Data Flow: Page load → PaymentIntent created server-side → Card input via Stripe.js → Confirm client-side → Server verifies → Save with paid=true
- Deployment: k8s pod (Thruster on port 80) → Tailscale Funnel ingress →
believers-elite.tail5b443a.ts.net. SQLite with PersistentVolume. Harbor container registry. Woodpecker CI.
Key decisions:
- Stripe Elements over Checkout — embedded card input, no redirect, matches single-page design
- SQLite with PersistentVolume for production — single model, low traffic, 2-week shelf life. No CNPG overhead.
- Debian (ruby:3.4.9-slim) over Arch Linux for Docker base — exact Ruby version pinning, half the image size, reproducible builds
- No auth on admin yet (TODO — Keycloak OIDC)
Board
board-believers-eliteStatus
App: complete. Registration form, Stripe test payments, admin dashboard, check-in flow — all working. 15/15 Playwright E2E tests pass.
Deployment: in progress. Woodpecker CI merged (PR #2). Terraform applied — Harbor project, robot accounts, namespace, imagePullSecret, funnel all provisioned. Kustomize overlay + SOPS secrets merged (pal-e-deployments PR #169). Remaining: re-run
tofu applyto create ArgoCD application (failed on first run because overlay didn't exist yet), then first image build + ArgoCD sync.Milestones
- 2026-05-22 — App built end-to-end in single session: registration form, Stripe integration, admin dashboard, coach photos, camp branding
- 2026-05-22 — Woodpecker CI pipeline merged, infrastructure docs written, deployment scoped across 3 repos
- 2026-06-04 — Camp starts (hard deadline for production)
Repos
Repo Platform Role Status ldraney/believers-elite Forgejo Rails app + CI pipeline Active - Domain: Single model —
Board 1
-
Believer's Elite
board-believers-eliteNo content