Contact us messages
Public /contact inbox (ContactMessage). View marks read. No in-app reply. Categories are fixed enums.
Contact us messages
Inbox for the public contact form (/contact).
Where to find it
Admin → Tickets → Contact us (/admin/tickets/contact-messages)
How it works
Search and sort messages (default 30/page). Categories are hardcoded: technical, sales, billing (not ticket categories). Subject 3–200; body 20–4000.
Unread = readAt null (sidebar badge). View loads the message and marks it read (no unread-again UI). Delete is permanent. There is no reply-from-admin composer - email the From address.
Public rate limit about 8/IP/hour. Captcha uses contact_captcha_enabled (default off).
Common problems
Badge still shows after scrolling the list
Opening View clears unread; listing alone does not.
Looking for ticket categories here
Contact categories are hardcoded enums, separate from Ticket categories.