Believer's Elite

believers-elite forgejo

Notes

Doc 1
  • Verdict: 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 argocd write-back method (not git: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 annotation
    2 Terraform state matches live ArgoCD Applications for all services (tofu state rm + tofu import) tofu plan -var-file=k3s.tfvars -lock=false PASS 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/instance labels, unrelated to this fix), 0 to destroy. All 7 ArgoCD applications refreshed clean.
    3 tofu plan is clean after apply Same 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=4 and believers-elite appears in processing kubectl logs -n argocd -l app.kubernetes.io/name=argocd-image-updater PASS 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 tag c876865678d1.... Commit 4bb8e1f triggered 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/instance labels to harbor-creds secrets in gcal-scheduler and westsidekingsandqueens namespaces. tofu plan wants to remove them. Low priority — does not affect functionality. Could be addressed with lifecycle { 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-elite

    Vision

    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-elite

    Status

    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 apply to 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
Board 1