Skip to content

Conversation

@YosefHayim
Copy link

@YosefHayim YosefHayim commented Jan 15, 2026

Summary

This PR adds 6 new branded email templates for AI Calendar Assistant - an AI-powered calendar management application.

New Templates

Template Category Description
ai-calendar-welcome.tsx welcome/ Welcome email for new users
ai-calendar-magic-link.tsx magic-links/ Login verification code email
ai-calendar-notification.tsx notifications/ Event reminders, updates & cancellations
ai-calendar-reset-password.tsx reset-password/ Password reset email
ai-calendar-newsletter.tsx newsletters/ Monthly product updates
ai-calendar-receipt.tsx receipts/ Payment/subscription receipts

Brand Colors

All templates use the AI Calendar Assistant brand identity:

  • Primary: #f97316 (vibrant orange)
  • Primary Hover: #e1430d
  • Text: #0a0a0b (dark charcoal)
  • Muted Text: #737373
  • Background: #f6f9fc
  • Border: #e5e5e5
  • Font: Space Grotesk

Changes

  • Added 6 new email template files across all major categories
  • Added ai-calendar font family to tailwind.config.ts

Screenshots

Templates follow the existing code style and patterns in the demo folder (Tailwind-based styling, named exports + default export, PreviewProps for preview data).


Submitted by Yosef Hayim Sabag


Summary by cubic

Add six AI Calendar Assistant–branded email templates to the demo for onboarding, auth, notifications, newsletters, and billing. Also adds the brand font and logo, and updates base URLs and defaults for reliable rendering.

  • New Features
    • Six templates: welcome, magic link, notification (reminder/update/cancel), reset password, newsletter, receipt.
    • Branding: uses the AI Calendar Assistant color palette and Space Grotesk; adds the 'ai-calendar' font in tailwind.config.ts and a logo asset.

Written for commit 69fa1d7. Summary will update on new commits.

Add 6 new branded email templates for AI Calendar Assistant:

- welcome/ai-calendar-welcome.tsx - Welcome email for new users
- magic-links/ai-calendar-magic-link.tsx - Login verification code
- notifications/ai-calendar-notification.tsx - Event reminders/updates
- reset-password/ai-calendar-reset-password.tsx - Password reset
- newsletters/ai-calendar-newsletter.tsx - Monthly product updates
- receipts/ai-calendar-receipt.tsx - Payment receipts

Brand colors used:
- Primary: #f97316 (vibrant orange)
- Text: #0a0a0b (dark charcoal)
- Muted: #737373 (gray)
- Background: #f6f9fc (light gray)
- Font: Space Grotesk

Also adds 'ai-calendar' font family to tailwind.config.ts

Co-authored-by: Yosef Hayim Sabag <[email protected]>
@changeset-bot
Copy link

changeset-bot bot commented Jan 15, 2026

⚠️ No Changeset found

Latest commit: 69fa1d7

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@vercel
Copy link

vercel bot commented Jan 15, 2026

@YosefHayim is attempting to deploy a commit to the resend Team on Vercel.

A member of the Team first needs to authorize it.

Copy link
Contributor

@cubic-dev-ai cubic-dev-ai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

13 issues found across 7 files

Prompt for AI agents (all issues)

Check if these issues are valid — if so, understand the root cause of each and fix them.


<file name="apps/demo/emails/reset-password/ai-calendar-reset-password.tsx">

<violation number="1" location="apps/demo/emails/reset-password/ai-calendar-reset-password.tsx:16">
P2: Rule violated: **Initialisms and Acronyms Naming Conventions**

Rename the `AICalendarResetPasswordEmail*` identifiers to use standard PascalCase (`AiCalendar...`) so that acronyms follow the project’s initialism casing rule.</violation>

<violation number="2" location="apps/demo/emails/reset-password/ai-calendar-reset-password.tsx:17">
P2: Reset password email marks critical props optional but uses them directly, so omitted values produce a blank greeting and a reset button without a valid link.</violation>
</file>

<file name="apps/demo/emails/notifications/ai-calendar-notification.tsx">

<violation number="1" location="apps/demo/emails/notifications/ai-calendar-notification.tsx:17">
P2: Rule violated: **Initialisms and Acronyms Naming Conventions**

Rename the interface and component so the “AI” acronym follows the project’s camelCase/PascalCase convention (e.g., `AiCalendarNotificationEmailProps` / `AiCalendarNotificationEmail`). This keeps identifier casing consistent with the Initialisms and Acronyms Naming Conventions rule.</violation>

<violation number="2" location="apps/demo/emails/notifications/ai-calendar-notification.tsx:18">
P2: Email template marks required content props optional and uses them without defaults, risking blank/`undefined` strings in the rendered email when callers omit them.</violation>
</file>

<file name="apps/demo/emails/welcome/ai-calendar-welcome.tsx">

<violation number="1" location="apps/demo/emails/welcome/ai-calendar-welcome.tsx:21">
P2: Logo falls back to root-relative URL when VERCEL_URL is unset, causing broken image in emails without an absolute base URL.</violation>

<violation number="2" location="apps/demo/emails/welcome/ai-calendar-welcome.tsx:45">
P2: Greeting renders malformed text when optional userFirstName is undefined ("Welcome to AI Calendar Assistant, !")</violation>
</file>

<file name="apps/demo/emails/magic-links/ai-calendar-magic-link.tsx">

<violation number="1" location="apps/demo/emails/magic-links/ai-calendar-magic-link.tsx:15">
P1: Rule violated: **Initialisms and Acronyms Naming Conventions**

Rename `AICalendarMagicLinkEmailProps` so the “AI” acronym follows PascalCase (e.g., `AiCalendarMagicLinkEmailProps`) to keep identifier casing consistent with the Initialisms and Acronyms Naming Convention.</violation>

<violation number="2" location="apps/demo/emails/magic-links/ai-calendar-magic-link.tsx:23">
P1: Rule violated: **Initialisms and Acronyms Naming Conventions**

Rename `AICalendarMagicLinkEmail` so the “AI” acronym is cased like a normal word (e.g., `AiCalendarMagicLinkEmail`) to comply with the Initialisms and Acronyms Naming Convention.</violation>

<violation number="3" location="apps/demo/emails/magic-links/ai-calendar-magic-link.tsx:33">
P2: Image references `${baseUrl}/static/ai-calendar-logo.png` but the asset does not exist; email logos will 404</violation>

<violation number="4" location="apps/demo/emails/magic-links/ai-calendar-magic-link.tsx:52">
P2: Unsupported Tailwind utilities (`w-9/10`, `mb-9.5`) will be purged, breaking email layout.</violation>
</file>

<file name="apps/demo/emails/newsletters/ai-calendar-newsletter.tsx">

<violation number="1" location="apps/demo/emails/newsletters/ai-calendar-newsletter.tsx:19">
P2: Rule violated: **Initialisms and Acronyms Naming Conventions**

Rename the type so that the embedded acronym follows camel/Pascal casing (e.g., `AiCalendarNewsletterEmailProps`) to comply with the Initialisms and Acronyms Naming Conventions rule.</violation>

<violation number="2" location="apps/demo/emails/newsletters/ai-calendar-newsletter.tsx:50">
P2: Rule violated: **Initialisms and Acronyms Naming Conventions**

Normalize the component name’s acronym to PascalCase (e.g., `AiCalendarNewsletterEmail`) so it adheres to the Initialisms and Acronyms Naming Conventions rule.</violation>
</file>

<file name="apps/demo/emails/receipts/ai-calendar-receipt.tsx">

<violation number="1" location="apps/demo/emails/receipts/ai-calendar-receipt.tsx:18">
P2: Rule violated: **Initialisms and Acronyms Naming Conventions**

Rename the receipt email interface/component so the “AI” acronym follows the project’s camel/pascal casing convention (e.g., AiCalendarReceiptEmailProps / AiCalendarReceiptEmail) instead of remaining all caps to maintain consistent identifier style per the Initialisms and Acronyms Naming Conventions rule.</violation>
</file>

Since this is your first cubic review, here's how it works:

  • cubic automatically reviews your code and comments on bugs and improvements
  • Teach cubic by replying to its comments. cubic learns from your replies and gets better over time
  • Ask questions if you need clarification on any suggestion

Reply with feedback, questions, or to request a fix. Tag @cubic-dev-ai to re-run a review.

…faults

- Rename all AICalendar* identifiers to AiCalendar* to follow the project's
  Initialisms and Acronyms Naming Conventions rule
- Add default values for all optional props to prevent undefined values
  rendering in the email output (e.g., 'Welcome, !' becomes 'Welcome, there!')

Addresses review feedback from cubic-dev-ai on PR resend#2843
- Changed the base URL in both AiCalendarMagicLinkEmail and AiCalendarWelcomeEmail components to ensure proper email rendering.
- Introduced a new logo image for the AI Calendar email templates to enhance branding and visual identity.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant