Features Overview

Send emails and notifications to your users.

Note: This is mock/placeholder content for demonstration purposes.

The application includes email functionality for transactional messages and user notifications.

Email Configuration

Supabase Email (Default)

By default, emails are sent through Supabase:

  • Authentication emails (sign-up, password reset, magic links)
  • Email verification
  • Email change confirmation

Custom SMTP

For transactional emails, configure your own SMTP provider:

# .env
SMTP_HOST=smtp.example.com
SMTP_PORT=587
SMTP_USER=your-username
SMTP_PASSWORD=your-password
SMTP_FROM_EMAIL=noreply@yourdomain.com
SMTP_FROM_NAME=Your App Name

Sending Emails

Using the Email Service

import { sendEmail } from '~/lib/email/send-email';

await sendEmail({
  to: 'user@example.com',
  subject: 'Welcome to Our App',
  html: '<h1>Welcome!</h1><p>Thanks for signing up.</p>',
});

Using Email Templates

Create reusable email templates:

// lib/email/templates/welcome-email.tsx
import { EmailTemplate } from '~/lib/email/email-template';

interface WelcomeEmailProps {
  name: string;
  loginUrl: string;
}

export function WelcomeEmail({ name, loginUrl }: WelcomeEmailProps) {
  return (
    <EmailTemplate>
      <h1>Welcome, {name}!</h1>
      <p>We're excited to have you on board.</p>
      <a href={loginUrl}>Get Started</a>
    </EmailTemplate>
  );
}

// Send the email
import { render } from '@react-email/render';
import { WelcomeEmail } from '~/lib/email/templates/welcome-email';

const html = render(
  <WelcomeEmail name="John" loginUrl="https://app.com/login" />
);

await sendEmail({
  to: 'john@example.com',
  subject: 'Welcome to Our App',
  html,
});

Email Types

Transactional Emails

Emails triggered by user actions:

  • Welcome emails
  • Order confirmations
  • Password resets
  • Account notifications
  • Billing updates

Marketing Emails

Promotional and engagement emails:

  • Product updates
  • Feature announcements
  • Newsletters
  • Onboarding sequences

Email Providers

Resend - Developer-friendly email API

npm install resend
import { Resend } from 'resend';

const resend = new Resend(process.env.RESEND_API_KEY);

await resend.emails.send({
  from: 'noreply@yourdomain.com',
  to: 'user@example.com',
  subject: 'Welcome',
  html: emailHtml,
});

SendGrid - Comprehensive email platform

npm install @sendgrid/mail
import sgMail from '@sendgrid/mail';

sgMail.setApiKey(process.env.SENDGRID_API_KEY);

await sgMail.send({
  to: 'user@example.com',
  from: 'noreply@yourdomain.com',
  subject: 'Welcome',
  html: emailHtml,
});

Postmark - Fast transactional email

npm install postmark

In-App Notifications

Notification System

Send in-app notifications to users:

import { createNotification } from '~/lib/notifications';

await createNotification({
  userId: user.id,
  title: 'New Message',
  message: 'You have a new message from John',
  type: 'info',
  link: '/messages/123',
});

Notification Types

type NotificationType = 'info' | 'success' | 'warning' | 'error';

await createNotification({
  userId: user.id,
  title: 'Payment Successful',
  message: 'Your subscription has been renewed',
  type: 'success',
});

Fetching Notifications

import { getUserNotifications } from '~/lib/notifications';

const notifications = await getUserNotifications(userId, {
  limit: 10,
  unreadOnly: true,
});

Marking as Read

import { markNotificationAsRead } from '~/lib/notifications';

await markNotificationAsRead(notificationId);

Real-time Notifications

Use Supabase Realtime for instant notifications:

'use client';

import { useEffect } from 'react';
import { useSupabase } from '@kit/supabase/hooks/use-supabase';

export function NotificationListener() {
  const supabase = useSupabase();

  useEffect(() => {
    const channel = supabase
      .channel('notifications')
      .on(
        'postgres_changes',
        {
          event: 'INSERT',
          schema: 'public',
          table: 'notifications',
          filter: `user_id=eq.${userId}`,
        },
        (payload) => {
          // Show toast notification
          toast.info(payload.new.title);
        }
      )
      .subscribe();

    return () => {
      supabase.removeChannel(channel);
    };
  }, [supabase]);

  return null;
}

Email Templates Best Practices

  1. Keep it simple - Plain text and minimal HTML
  2. Mobile responsive - Most emails are read on mobile
  3. Clear CTAs - Make action buttons prominent
  4. Personalize - Use user's name and relevant data
  5. Test rendering - Check across email clients
  6. Include plain text - Always provide text alternative
  7. Unsubscribe link - Required for marketing emails

Testing Emails

Local Development

In development, emails are caught by InBucket:

http://localhost:54324

Preview Emails

Use React Email to preview templates:

npm run email:dev

Visit http://localhost:3001 to see email previews.

Deliverability Tips

  1. Authenticate your domain - Set up SPF, DKIM, DMARC
  2. Warm up your domain - Start with low volumes
  3. Monitor bounce rates - Keep below 5%
  4. Avoid spam triggers - Don't use all caps, excessive punctuation
  5. Provide value - Only send relevant, useful emails
  6. Easy unsubscribe - Make it one-click simple

Event Hire Across Melbourne

One Click Events provides professional event hire services across all Melbourne suburbs including photo booths, DJ services, LED dance floors, games, and decorations. Free delivery within 50km of Melbourne CBD. Serving Inner City, Eastern, South Eastern, Northern, and Western suburbs.