Files
bcs-website/k8s/configmap.yaml
T
bmr_bluecap 0f769d7bdd feat(contact): wire the form to a real endpoint at build time
The contact form could not be made to work by configuration. Two reasons,
both fixed here.

The endpoint never reached the browser. k8s/configmap.yaml carried
PUBLIC_CONTACT_FORM_ENDPOINT, but the Deployment has no env/envFrom pointing
at that ConfigMap, so it was dead config. Wiring it up would not have helped
either: this is a static Astro build, so import.meta.env.PUBLIC_* is inlined
when the image is built and the pod only serves pre-built HTML. Anything the
browser needs has to arrive as a build arg. Add ARG/ENV to the Dockerfile and
pass --build-arg from CI, sourced from a CONTACT_FORM_ENDPOINT Actions
secret. Rewrite the ConfigMap as documentation of what the build expects,
with an explicit warning not to add envFrom.

Submission behaviour was also wrong for visitors. A native POST would have
navigated them to the form provider's page; post in the background with
fetch() and send them to our own /thank-you/ instead. On failure the form now
stays put, re-enables the button and offers the phone and email fallback,
rather than silently losing the inquiry. Add a honeypot (_gotcha, which
Formspree treats as spam) positioned off-screen rather than display:none, so
bots that skip hidden fields still fill it.

Read data-endpoint at submit time rather than caching it at init, keeping the
attribute the single source of truth.

Tests: replace the old contact assertion, which faked a native GET
navigation, with one that mocks the endpoint and exercises the real fetch
path including the posted payload. Add a case for endpoint failure.

typecheck 0/0/0, build 0/0, seo:lint clean on 20 pages, e2e 44 passed.
The 4 remaining failures are the pre-existing stale nav assertions in
docs/launch-checklist.md section 2.1, untouched here.
2026-10-09 07:04:59 -04:00

19 lines
907 B
YAML

# NOTE: this ConfigMap is NOT consumed by the Deployment, and wiring it up would not help.
# The site is a STATIC Astro build served by nginx — every PUBLIC_* value is inlined into the HTML
# when the image is built, so a runtime env var cannot change it. Configure these as build args in
# .gitea/workflows/ci.yml instead (PUBLIC_CONTACT_FORM_ENDPOINT comes from the CONTACT_FORM_ENDPOINT
# Actions secret).
#
# Kept as documentation of the values the build expects. Do not add envFrom pointing at it — that
# would imply a runtime knob that does not exist.
apiVersion: v1
kind: ConfigMap
metadata:
name: bluecap-website-config
namespace: bluecap-strategies
data:
# Mirrors the build arg default in the Dockerfile.
PUBLIC_SITE_URL: "https://www.bluecapstrategies.com"
# Real value lives in the CONTACT_FORM_ENDPOINT Actions secret, injected at image build.
PUBLIC_CONTACT_FORM_ENDPOINT: ""