Skip to content

feat(website): add Concepta contact page - #56

Merged
gabrielrangel95 merged 1 commit into
mainfrom
feat/contact-page
Oct 2, 2026
Merged

gabrielrangel95 merged 1 commit into
mainfrom
feat/contact-page

Conversation

@gabrielrangel95

Copy link
Copy Markdown
Contributor

Summary

  • New /contact page (Concepta shell) with a form for name, email, subject, message, plus the address (111 N Orange Ave, Suite 800, Orlando, FL 32801) and phone (+1 (407) 720-4711). The address and phone come from components/constants.ts.
  • Contact link added to the Concepta header next to Reports (desktop pill and mobile drawer). /contact is treated as a Concepta route in both FloatingNavbar and the data-product boot script in layout.jsx.
  • New POST /api/contact route using the existing Resend client (src/lib/resend.ts):
    • validates input with zod
    • emails guilherme.rosa.c@conceptatech.com and thomas@conceptatech.com, with replyTo set to the sender so a reply goes straight to them
    • escapes all user input in the HTML email
    • uses a hidden honeypot field to drop simple bot submissions
    • if RESEND_AUDIENCE_ID_CONTACT is set, saves the sender as a Resend contact (optional; a failure here doesn't fail the request)
    • behaves like the waitlist route when RESEND_API_KEY is missing: dev no-op, 503 in production
  • Adds site-tests/contact-integration.test.mjs.

Env

  • Already used: RESEND_API_KEY, RESEND_FROM_EMAIL (defaults to Concepta <hello@conceptatech.com>)
  • Optional new variable: RESEND_AUDIENCE_ID_CONTACT

Test plan

  • pnpm test:site: the new contact tests pass (fluttermix-routing also fails on main)
  • Ran locally: /contact returns 200, the header shows Contact as active, and the layout is correct at 1440px and 390px
  • POST /api/contact returns 400 for an invalid email and the dev no-op response when no API key is set
  • On the preview: send a real message and confirm both recipients get it with reply-to set to the sender

🤖 Generated with Claude Code

Adds /contact with a name/email/subject/message form, the Orlando
address and phone number, and a Contact link in the Concepta header
(desktop pill and mobile drawer). Submissions go through a new
/api/contact route that sends via the existing Resend integration to
guilherme.rosa.c@conceptatech.com and thomas@conceptatech.com with
reply-to set to the sender, and optionally saves the sender to
RESEND_AUDIENCE_ID_CONTACT.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Oct 2, 2026 •

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
mix-docs Ready Ready Preview Oct 2, 2026 8:45pm UTC

@gabrielrangel95
gabrielrangel95 merged commit ee7d13a into main Oct 2, 2026
6 of 7 checks passed

This branch was successfully deployed

1 active deployment
Preview – mix-docs — dadd628c Deployed Oct 2, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant