feat: Multi-email ticketing system with platform email addresses

- Add PlatformEmailAddress model for managing platform-level email addresses
- Add TicketEmailAddress model for tenant-level email addresses
- Create MailServerService for IMAP integration with mail.talova.net
- Implement PlatformEmailReceiver for processing incoming platform emails
- Add email autoconfiguration for Mozilla, Microsoft, and Apple clients
- Add configurable email polling interval in platform settings
- Add "Check Emails" button on support page for manual refresh
- Add ticket counts to status tabs on support page
- Add platform email addresses management page
- Add Privacy Policy and Terms of Service pages
- Add robots.txt for SEO
- Restrict email addresses to smoothschedule.com domain only

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
poduck
2025-12-01 17:49:09 -05:00
parent 65da1c73d0
commit ae74b4c2ed
47 changed files with 6523 additions and 1407 deletions

View File

@@ -224,6 +224,11 @@ const Tickets: React.FC = () => {
key={ticket.id}
onClick={() => openTicketModal(ticket)}
className="bg-white dark:bg-gray-700/50 border border-gray-200 dark:border-gray-600 rounded-lg p-4 hover:border-brand-300 dark:hover:border-brand-600 hover:shadow-md transition-all cursor-pointer group"
style={{
borderLeft: ticket.source_email_address
? `4px solid ${ticket.source_email_address.color}`
: undefined
}}
>
<div className="flex items-start justify-between gap-4">
<div className="flex-1 min-w-0">
@@ -247,6 +252,15 @@ const Tickets: React.FC = () => {
</span>
)}
{ticket.source_email_address && (
<span
className="inline-flex items-center gap-1 px-2 py-0.5 rounded-full text-white text-xs font-medium"
style={{ backgroundColor: ticket.source_email_address.color }}
>
{ticket.source_email_address.display_name}
</span>
)}
<span className="flex items-center gap-1 text-gray-500 dark:text-gray-400">
<User size={12} />
{ticket.creatorFullName || ticket.creatorEmail}