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.
This commit is contained in:
1 parent
8a4c4bccec
commit
0f769d7bdd
6 files changed
+143
-20
No files matched your search
@@ -94,7 +94,14 @@ jobs:
|
||||
- name: Build & push image to Gitea Packages
|
||||
run: |
|
||||
echo "${{ secrets.CI_TOKEN }}" | docker login 10.66.15.22:3000 -u "${{ github.repository_owner }}" --password-stdin
|
||||
docker build -t "$PUSH_IMAGE:${{ steps.tag.outputs.sha }}" -t "$PUSH_IMAGE:latest" .
|
||||
# PUBLIC_* values are inlined at build time (static Astro) — they cannot be supplied at
|
||||
# deploy time. CONTACT_FORM_ENDPOINT is the Formspree URL; set it as a repo Actions
|
||||
# secret. If it is empty the build still succeeds and the contact form degrades to a
|
||||
# mailto draft, so a missing secret is survivable but should be caught in review.
|
||||
docker build \
|
||||
--build-arg PUBLIC_CONTACT_FORM_ENDPOINT="${{ secrets.CONTACT_FORM_ENDPOINT }}" \
|
||||
--build-arg PUBLIC_SITE_URL="https://www.bluecapstrategies.com" \
|
||||
-t "$PUSH_IMAGE:${{ steps.tag.outputs.sha }}" -t "$PUSH_IMAGE:latest" .
|
||||
# Registry pushes can time out on a slow blob; docker push is resumable, so retry.
|
||||
push_retry() {
|
||||
for i in 1 2 3 4 5; do
|
||||
|
||||
Reference in new issue
Block a user