Administration

Email notifications

Lunax sends a small, fixed set of transactional emails through Resend. There are no preferences, digests, or unsubscribe links — so it's worth knowing exactly what goes out.

What sends email

EventGoes toSubject line
A ticket is createdThe requester[App] Ticket #12: Subject
A ticket is createdEvery agent and admin[App] Ticket #12: Subject
An agent replies publiclyThe requesterRe: [App] #12: Subject
A customer repliesThe assignee — or every agent and admin if unassignedRe: [App] #12: Subject
A ticket's status changesThe requester[App] Ticket #12 is now resolved

Reply emails quote the first 500 characters of the message, so most replies are readable without opening the app. Every email links straight to the ticket.

What sends nothing

This list surprises people, so it's worth reading properly. None of these notify anyone:

  • Internal notes.Deliberate — they exist to be invisible to the customer. But teammates aren't told either, so an internal note is not a way to reach a colleague.
  • Priority changes. Marking a ticket Urgent notifies nobody. Assign it and say something in the thread instead.
  • Assignment. Assigning a ticket to a teammate does not email them. They find out by looking at the inbox.
  • Anything on a feedback board. No email for new posts, status changes, comments, or replies to your idea — for users or staff.
Assignment is silent — plan around it
The two gaps that bite real teams are silent assignment and silent priority. Until they send mail, agents need a habit of checking Unassigned on the admin dashboard, and urgent handoffs need a nudge in whatever chat tool you already use.

The staff fan-out

Two events email every agent and admin in the workspace: a new ticket, and a customer reply on an unassigned ticket. There is no per-app routing and no way to opt out.

This scales badly, and assigning is the fix
With ten agents and twenty apps, every agent gets every new ticket for every product. Assign tickets promptly — once a ticket has an assignee, customer replies go to that one person instead of the whole team. Filtering by the subject prefix [App name] in your mail client also helps.

Setup

  • Set RESEND_API_KEY to enable sending. Without it, emails are skipped with a console warning and everything else works normally — which is usually what you want locally.
  • Set RESEND_FROM_EMAILto an address on a domain you've verified in Resend. The default is a Resend test sender and is not suitable for production.
  • Set NEXT_PUBLIC_APP_URL to your real origin, or every link in every email points at localhost.

Known limits

  • No user-facing notification preferences of any kind.
  • No digest or batching — ten replies produce ten emails.
  • No unsubscribe link on transactional mail.
  • No sender exclusion: an assignee who replies to their own ticket can receive an email about their own activity.
  • Inbound email isn't supported — replying to a notification does not post to the ticket.
  • Status-change emails currently print the raw status value, so users may see on_holdrather than “On hold”.
  • The new-ticket email to staff links to the customer-facing view rather than the agent inbox.