Contact & Support
Public contact form and authenticated support tickets with admin management.
Public contact form
No authentication required.
bash
curl -s -X POST http://localhost:4000/contact/messages \
-H "Content-Type: application/json" \
-d '{
"name": "Alex Buyer",
"email": "buyer@example.com",
"subject": "LaunchKit Pro question",
"message": "How do I deploy to my VPS?"
}' | jqReturns generic success — internal IDs are not exposed. MOCK email sent to SUPPORT_EMAIL.
Frontend: /contact
Support tickets (users)
| Method | Path |
|---|---|
GET | /support/tickets |
POST | /support/tickets |
GET | /support/tickets/:ticketId |
PATCH | /support/tickets/:ticketId |
POST | /support/tickets/:ticketId/replies |
Create:
bash
curl -s -X POST http://localhost:4000/support/tickets \
-H "Authorization: Bearer <accessToken>" \
-H "Content-Type: application/json" \
-d '{
"subject": "Need help with billing",
"description": "Mock checkout completed but plan did not update.",
"priority": "NORMAL"
}' | jqFrontend: /dashboard/support, /dashboard/support/new
Admin contact messages
| Method | Path |
|---|---|
GET | /admin/contact-messages |
GET | /admin/contact-messages/:messageId |
PATCH | /admin/contact-messages/:messageId |
Frontend: /admin/contact-messages
Admin support tickets
| Method | Path |
|---|---|
GET | /admin/support/tickets |
GET | /admin/support/tickets/:ticketId |
PATCH | /admin/support/tickets/:ticketId |
Frontend: /admin/support/tickets
Mock email and notifications
- New contact messages trigger MOCK email to
SUPPORT_EMAIL - Ticket updates may create in-app notifications
- No real SMTP required in development
Future improvements
- CAPTCHA and rate limiting on public contact endpoint
- File attachments on tickets
- SLA automation