From 708dc81b88bbae67982ec86bf704fade3cca4017 Mon Sep 17 00:00:00 2001 From: Dries Augustyns Date: Sat, 20 Dec 2025 21:03:17 +0100 Subject: [PATCH] chore: Make guide pages responsive on small screens --- apps/landing/src/components/CodeBlock.tsx | 8 +- .../src/components/guides/GuideLayout.tsx | 49 ++++-- .../src/pages/guides/email-api-guide.tsx | 142 +++++++++------- .../src/pages/guides/email-bounce-rate.tsx | 16 +- .../src/pages/guides/email-open-rate.tsx | 16 +- .../pages/guides/email-sender-reputation.tsx | 30 ++-- .../transactional-vs-marketing-email.tsx | 160 ++++++++++-------- .../landing/src/pages/guides/what-is-dkim.tsx | 60 ++++--- apps/landing/src/pages/guides/what-is-spf.tsx | 7 +- 9 files changed, 276 insertions(+), 212 deletions(-) diff --git a/apps/landing/src/components/CodeBlock.tsx b/apps/landing/src/components/CodeBlock.tsx index 03f84be..7b7426a 100644 --- a/apps/landing/src/components/CodeBlock.tsx +++ b/apps/landing/src/components/CodeBlock.tsx @@ -27,7 +27,7 @@ export function CodeBlock({code, language = 'javascript', title, showCopy = true whileInView={{opacity: 1, y: 0}} viewport={{once: true}} transition={{duration: 0.7, ease: [0.22, 1, 0.36, 1]}} - className={'group relative overflow-hidden rounded-xl border border-neutral-200 bg-neutral-900'} + className={'group relative overflow-hidden rounded-xl border border-neutral-200 bg-neutral-900 w-full max-w-full'} > {(title || showCopy) && (
@@ -56,8 +56,10 @@ export function CodeBlock({code, language = 'javascript', title, showCopy = true )}
)} -
-        {code}
+      
+        
+          {code}
+        
       
); diff --git a/apps/landing/src/components/guides/GuideLayout.tsx b/apps/landing/src/components/guides/GuideLayout.tsx index 7bf53db..189335d 100644 --- a/apps/landing/src/components/guides/GuideLayout.tsx +++ b/apps/landing/src/components/guides/GuideLayout.tsx @@ -114,26 +114,30 @@ export function GuideLayout({ -
-
+
+
{/* Main Content */} -
+
{/* Breadcrumbs */} -
{/* Table of Contents - Desktop Only */} diff --git a/apps/landing/src/pages/guides/email-api-guide.tsx b/apps/landing/src/pages/guides/email-api-guide.tsx index b0644d1..f4e49ce 100644 --- a/apps/landing/src/pages/guides/email-api-guide.tsx +++ b/apps/landing/src/pages/guides/email-api-guide.tsx @@ -36,27 +36,31 @@ export default function EmailAPIGuide() {
-

SMTP (Traditional)

-
    -
  • • Direct protocol for sending email
  • -
  • • Requires managing connections
  • -
  • • Manual error handling
  • -
  • • Limited delivery tracking
  • -
  • • More complex implementation
  • -
  • • Port 25, 587, or 465
  • -
+
+

SMTP (Traditional)

+
    +
  • • Direct protocol for sending email
  • +
  • • Requires managing connections
  • +
  • • Manual error handling
  • +
  • • Limited delivery tracking
  • +
  • • More complex implementation
  • +
  • • Port 25, 587, or 465
  • +
+
-

Email API (Modern)

-
    -
  • • HTTP-based RESTful interface
  • -
  • • No connection management needed
  • -
  • • Structured error responses
  • -
  • • Built-in tracking & analytics
  • -
  • • Simpler to implement
  • -
  • • Standard HTTP/HTTPS
  • -
+
+

Email API (Modern)

+
    +
  • • HTTP-based RESTful interface
  • +
  • • No connection management needed
  • +
  • • Structured error responses
  • +
  • • Built-in tracking & analytics
  • +
  • • Simpler to implement
  • +
  • • Standard HTTP/HTTPS
  • +
+
@@ -324,53 +328,61 @@ func main() {
-

Sending Features

-
    -
  • • Send individual or batch emails
  • -
  • • HTML and plain text support
  • -
  • • Attachments
  • -
  • • CC, BCC recipients
  • -
  • • Custom headers
  • -
  • • Template rendering
  • -
  • • Scheduled sending
  • -
+
+

Sending Features

+
    +
  • • Send individual or batch emails
  • +
  • • HTML and plain text support
  • +
  • • Attachments
  • +
  • • CC, BCC recipients
  • +
  • • Custom headers
  • +
  • • Template rendering
  • +
  • • Scheduled sending
  • +
+
-

Tracking & Analytics

-
    -
  • • Delivery status tracking
  • -
  • • Open tracking
  • -
  • • Click tracking
  • -
  • • Bounce detection
  • -
  • • Spam complaint monitoring
  • -
  • • Unsubscribe management
  • -
  • • Real-time analytics
  • -
+
+

Tracking & Analytics

+
    +
  • • Delivery status tracking
  • +
  • • Open tracking
  • +
  • • Click tracking
  • +
  • • Bounce detection
  • +
  • • Spam complaint monitoring
  • +
  • • Unsubscribe management
  • +
  • • Real-time analytics
  • +
+
-

Webhooks & Events

-
    -
  • • Delivery notifications
  • -
  • • Bounce notifications
  • -
  • • Spam complaint alerts
  • -
  • • Unsubscribe events
  • -
  • • Open and click events
  • -
  • • Custom event triggers
  • -
+
+

Webhooks & Events

+
    +
  • • Delivery notifications
  • +
  • • Bounce notifications
  • +
  • • Spam complaint alerts
  • +
  • • Unsubscribe events
  • +
  • • Open and click events
  • +
  • • Custom event triggers
  • +
+
-

Management Features

-
    -
  • • Suppression list management
  • -
  • • Contact management
  • -
  • • Domain verification
  • -
  • • Template management
  • -
  • • API key management
  • -
  • • Rate limiting
  • -
+
+

Management Features

+
    +
  • • Suppression list management
  • +
  • • Contact management
  • +
  • • Domain verification
  • +
  • • Template management
  • +
  • • API key management
  • +
  • • Rate limiting
  • +
+
@@ -581,22 +593,28 @@ func main() { href="/guides/transactional-vs-marketing-email" className="block rounded-xl border border-neutral-200 bg-white p-6 transition hover:border-neutral-300 hover:shadow-lg" > -

Transactional vs Marketing Email

-

Understand email types for APIs.

+
+

Transactional vs Marketing Email

+

Understand email types for APIs.

+
-

Email Deliverability

-

Ensure API-sent emails reach the inbox.

+
+

Email Deliverability

+

Ensure API-sent emails reach the inbox.

+
-

Email Sender Reputation

-

Maintain good sender reputation.

+
+

Email Sender Reputation

+

Maintain good sender reputation.

+
diff --git a/apps/landing/src/pages/guides/email-bounce-rate.tsx b/apps/landing/src/pages/guides/email-bounce-rate.tsx index 7ac5f17..25457c0 100644 --- a/apps/landing/src/pages/guides/email-bounce-rate.tsx +++ b/apps/landing/src/pages/guides/email-bounce-rate.tsx @@ -213,7 +213,7 @@ Bounce Rate = (150 ÷ 10,000) × 100 = 1.5%`}
1
-
+

Use Double Opt-In

Require new subscribers to confirm their email address by clicking a verification link. This ensures the @@ -227,7 +227,7 @@ Bounce Rate = (150 ÷ 10,000) × 100 = 1.5%`}

2
-
+

Validate Email Addresses

Use real-time email validation on signup forms to catch typos and invalid formats. Validate: @@ -245,7 +245,7 @@ Bounce Rate = (150 ÷ 10,000) × 100 = 1.5%`}

3
-
+

Remove Hard Bounces Immediately

Automate removal of hard bounce addresses from your list. Never send to them again. Continued sending to @@ -258,7 +258,7 @@ Bounce Rate = (150 ÷ 10,000) × 100 = 1.5%`}

4
-
+

Clean Your List Regularly

Remove or re-engage inactive subscribers every 6-12 months. Email addresses become invalid over time @@ -271,7 +271,7 @@ Bounce Rate = (150 ÷ 10,000) × 100 = 1.5%`}

5
-
+

Never Buy Email Lists

Purchased lists have 20-40% invalid addresses and zero engagement. They'll destroy your bounce rate and @@ -284,7 +284,7 @@ Bounce Rate = (150 ÷ 10,000) × 100 = 1.5%`}

6
-
+

Monitor Soft Bounces

Track addresses that repeatedly soft bounce. After 3-5 consecutive soft bounces over multiple campaigns, @@ -297,7 +297,7 @@ Bounce Rate = (150 ÷ 10,000) × 100 = 1.5%`}

7
-
+

Optimize Email Size

Keep email size under 100KB to avoid soft bounces from size limits. Compress images, minimize code, and @@ -310,7 +310,7 @@ Bounce Rate = (150 ÷ 10,000) × 100 = 1.5%`}

8
-
+

Maintain Consistent Sending

Send regularly to maintain list freshness. Long gaps between sends (3+ months) increase bounce rates as diff --git a/apps/landing/src/pages/guides/email-open-rate.tsx b/apps/landing/src/pages/guides/email-open-rate.tsx index 10c4adf..07cf31d 100644 --- a/apps/landing/src/pages/guides/email-open-rate.tsx +++ b/apps/landing/src/pages/guides/email-open-rate.tsx @@ -220,7 +220,7 @@ Open Rate = (285 ÷ 950) × 100 = 30%`}

1
-
+

Write Compelling Subject Lines

Test different approaches: questions, personalization, numbers, urgency (without being spammy). Keep @@ -233,7 +233,7 @@ Open Rate = (285 ÷ 950) × 100 = 30%`}

2
-
+

Personalize Beyond First Names

Use behavioral data, past purchases, browsing history, or location. "Products you recently viewed" or @@ -246,7 +246,7 @@ Open Rate = (285 ÷ 950) × 100 = 30%`}

3
-
+

Segment Your Audience

Send targeted emails to specific groups based on engagement level, purchase history, demographics, or @@ -259,7 +259,7 @@ Open Rate = (285 ÷ 950) × 100 = 30%`}

4
-
+

Optimize Preview Text

Preview text appears next to the subject line. Use it to complement your subject, add context, or create @@ -272,7 +272,7 @@ Open Rate = (285 ÷ 950) × 100 = 30%`}

5
-
+

Clean Your Email List Regularly

Remove subscribers who haven't engaged in 6-12 months. While this reduces list size, it dramatically @@ -285,7 +285,7 @@ Open Rate = (285 ÷ 950) × 100 = 30%`}

6
-
+

Test Send Times

Run A/B tests sending the same email at different times. Track when your specific audience is most @@ -298,7 +298,7 @@ Open Rate = (285 ÷ 950) × 100 = 30%`}

7
-
+

Re-engage Inactive Subscribers

Before removing inactive users, send a re-engagement campaign: "We miss you" or "Still interested?" @@ -311,7 +311,7 @@ Open Rate = (285 ÷ 950) × 100 = 30%`}

8
-
+

Use a Recognizable Sender Name

Build consistency with your sender name. People are more likely to open emails from names they diff --git a/apps/landing/src/pages/guides/email-sender-reputation.tsx b/apps/landing/src/pages/guides/email-sender-reputation.tsx index 23c9c2a..aa4e065 100644 --- a/apps/landing/src/pages/guides/email-sender-reputation.tsx +++ b/apps/landing/src/pages/guides/email-sender-reputation.tsx @@ -183,7 +183,7 @@ export default function EmailSenderReputation() {

1
-
+

Warm Up New IPs and Domains

Gradually increase sending volume over 4-8 weeks. Start with your most engaged subscribers. @@ -210,7 +210,7 @@ Adjust based on engagement and bounce rates.`}

2
-
+

Start with Highly Engaged Subscribers

During warm-up, send only to subscribers who recently opened or clicked. High engagement in early sends @@ -223,7 +223,7 @@ Adjust based on engagement and bounce rates.`}

3
-
+

Implement Full Authentication

Set up SPF, DKIM, and DMARC before sending. Proper authentication is table stakes for building @@ -236,7 +236,7 @@ Adjust based on engagement and bounce rates.`}

4
-
+

Maintain Consistent Sending

Send regularly (daily or weekly) rather than sporadic blasts. Consistency builds trust with email @@ -249,7 +249,7 @@ Adjust based on engagement and bounce rates.`}

5
-
+

Use Double Opt-In

Require email confirmation before adding subscribers. This ensures list quality and prevents spam trap @@ -262,7 +262,7 @@ Adjust based on engagement and bounce rates.`}

6
-
+

Monitor Metrics Closely

Track bounce rate, spam complaints, and engagement during warm-up. If metrics degrade, slow down volume @@ -275,7 +275,7 @@ Adjust based on engagement and bounce rates.`}

7
-
+

Provide Immediate Value

Your first emails set the tone. Deliver on promises made during signup. High engagement on early emails @@ -289,9 +289,7 @@ Adjust based on engagement and bounce rates.`} {/* Maintaining Reputation */}

Maintaining Good Sender Reputation

-

- Once built, reputation requires ongoing attention: -

+

Once built, reputation requires ongoing attention:

@@ -367,7 +365,7 @@ Adjust based on engagement and bounce rates.`}
1
-
+

Identify the Root Cause

Review recent campaigns for spam complaints, high bounces, poor engagement. Check if you're blacklisted. @@ -380,7 +378,7 @@ Adjust based on engagement and bounce rates.`}

2
-
+

Clean Your List Aggressively

Remove all unengaged subscribers, bounced addresses, and anyone who hasn't opened in 6+ months. Yes, @@ -393,7 +391,7 @@ Adjust based on engagement and bounce rates.`}

3
-
+

Reduce Volume Temporarily

Cut sending volume by 50-70% while you fix issues. Send only to highly engaged subscribers. Rebuild @@ -406,7 +404,7 @@ Adjust based on engagement and bounce rates.`}

4
-
+

Request Blacklist Removal

If blacklisted, identify which lists, fix the underlying issues, then request delisting. Most blacklists @@ -419,7 +417,7 @@ Adjust based on engagement and bounce rates.`}

5
-
+

Send Valuable, Engaging Content

Recovery requires proving you send emails people want. Focus on value, not promotions. High engagement @@ -432,7 +430,7 @@ Adjust based on engagement and bounce rates.`}

6
-
+

Be Patient

Reputation recovery typically takes 4-12 weeks of consistently good behavior. Monitor metrics closely diff --git a/apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx b/apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx index f4c9325..1e7fbc1 100644 --- a/apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx +++ b/apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx @@ -84,51 +84,59 @@ export default function TransactionalVsMarketingEmail() {

Common Types of Transactional Emails

-

Account & Authentication

-
    -
  • • Welcome emails after signup
  • -
  • • Email verification/confirmation
  • -
  • • Password reset requests
  • -
  • • Login notifications
  • -
  • • Two-factor authentication codes
  • -
  • • Account deletion confirmations
  • -
+
+

Account & Authentication

+
    +
  • • Welcome emails after signup
  • +
  • • Email verification/confirmation
  • +
  • • Password reset requests
  • +
  • • Login notifications
  • +
  • • Two-factor authentication codes
  • +
  • • Account deletion confirmations
  • +
+
-

Commerce & Transactions

-
    -
  • • Order confirmations
  • -
  • • Shipping notifications
  • -
  • • Delivery updates
  • -
  • • Payment receipts
  • -
  • • Refund confirmations
  • -
  • • Invoice emails
  • -
+
+

Commerce & Transactions

+
    +
  • • Order confirmations
  • +
  • • Shipping notifications
  • +
  • • Delivery updates
  • +
  • • Payment receipts
  • +
  • • Refund confirmations
  • +
  • • Invoice emails
  • +
+
-

Notifications & Alerts

-
    -
  • • Activity notifications
  • -
  • • Comment or mention alerts
  • -
  • • Security alerts
  • -
  • • System status updates
  • -
  • • Subscription renewals
  • -
  • • Trial expiration notices
  • -
+
+

Notifications & Alerts

+
    +
  • • Activity notifications
  • +
  • • Comment or mention alerts
  • +
  • • Security alerts
  • +
  • • System status updates
  • +
  • • Subscription renewals
  • +
  • • Trial expiration notices
  • +
+
-

Account Management

-
    -
  • • Billing statements
  • -
  • • Usage reports
  • -
  • • Account updates
  • -
  • • Plan changes
  • -
  • • Subscription confirmations
  • -
  • • Account deactivation notices
  • -
+
+

Account Management

+
    +
  • • Billing statements
  • +
  • • Usage reports
  • +
  • • Account updates
  • +
  • • Plan changes
  • +
  • • Subscription confirmations
  • +
  • • Account deactivation notices
  • +
+
@@ -215,51 +223,59 @@ export default function TransactionalVsMarketingEmail() {

Common Types of Marketing Emails

-

Promotional Campaigns

-
    -
  • • Product announcements
  • -
  • • Sale and discount promotions
  • -
  • • New feature launches
  • -
  • • Seasonal campaigns
  • -
  • • Limited-time offers
  • -
  • • Flash sales
  • -
+
+

Promotional Campaigns

+
    +
  • • Product announcements
  • +
  • • Sale and discount promotions
  • +
  • • New feature launches
  • +
  • • Seasonal campaigns
  • +
  • • Limited-time offers
  • +
  • • Flash sales
  • +
+
-

Content Marketing

-
    -
  • • Newsletters
  • -
  • • Blog post roundups
  • -
  • • Educational content
  • -
  • • Industry news and trends
  • -
  • • Case studies
  • -
  • • Webinar invitations
  • -
+
+

Content Marketing

+
    +
  • • Newsletters
  • +
  • • Blog post roundups
  • +
  • • Educational content
  • +
  • • Industry news and trends
  • +
  • • Case studies
  • +
  • • Webinar invitations
  • +
+
-

Nurture & Engagement

-
    -
  • • Welcome series (beyond initial welcome)
  • -
  • • Onboarding sequences
  • -
  • • Re-engagement campaigns
  • -
  • • Win-back emails
  • -
  • • Customer surveys
  • -
  • • Loyalty program updates
  • -
+
+

Nurture & Engagement

+
    +
  • • Welcome series (beyond initial welcome)
  • +
  • • Onboarding sequences
  • +
  • • Re-engagement campaigns
  • +
  • • Win-back emails
  • +
  • • Customer surveys
  • +
  • • Loyalty program updates
  • +
+
-

Lifecycle Marketing

-
    -
  • • Abandoned cart reminders
  • -
  • • Product recommendations
  • -
  • • Upsell/cross-sell campaigns
  • -
  • • Birthday or anniversary emails
  • -
  • • Renewal reminders (if promotional)
  • -
  • • Review requests
  • -
+
+

Lifecycle Marketing

+
    +
  • • Abandoned cart reminders
  • +
  • • Product recommendations
  • +
  • • Upsell/cross-sell campaigns
  • +
  • • Birthday or anniversary emails
  • +
  • • Renewal reminders (if promotional)
  • +
  • • Review requests
  • +
+
diff --git a/apps/landing/src/pages/guides/what-is-dkim.tsx b/apps/landing/src/pages/guides/what-is-dkim.tsx index 8f3950f..7968228 100644 --- a/apps/landing/src/pages/guides/what-is-dkim.tsx +++ b/apps/landing/src/pages/guides/what-is-dkim.tsx @@ -81,16 +81,18 @@ export default function WhatIsDKIM() { A DKIM record is a TXT record in your DNS that contains your public key. Here's an example:

- + DKIM version # k=rsa -> Key type (RSA encryption) # p=MIGfMA0... -> Public key (base64 encoded)`} - /> + /> +

@@ -106,35 +108,43 @@ export default function WhatIsDKIM() {

-

Prevents Email Spoofing

-

- DKIM makes it nearly impossible for spammers to forge emails from your domain. The cryptographic signature - can't be replicated without your private key. -

+
+

Prevents Email Spoofing

+

+ DKIM makes it nearly impossible for spammers to forge emails from your domain. The cryptographic + signature can't be replicated without your private key. +

+
-

Improves Deliverability

-

- Major email providers (Gmail, Outlook, Yahoo) use DKIM as a trust signal. Emails with valid DKIM - signatures are more likely to reach the inbox. -

+
+

Improves Deliverability

+

+ Major email providers (Gmail, Outlook, Yahoo) use DKIM as a trust signal. Emails with valid DKIM + signatures are more likely to reach the inbox. +

+
-

Protects Brand Reputation

-

- By preventing domain spoofing, DKIM protects your brand from being used in phishing attacks that could - damage your reputation. -

+
+

Protects Brand Reputation

+

+ By preventing domain spoofing, DKIM protects your brand from being used in phishing attacks that could + damage your reputation. +

+
-

Enables DMARC

-

- DKIM is a prerequisite for implementing DMARC, which provides even stronger email authentication and - reporting capabilities. -

+
+

Enables DMARC

+

+ DKIM is a prerequisite for implementing DMARC, which provides even stronger email authentication and + reporting capabilities. +

+
diff --git a/apps/landing/src/pages/guides/what-is-spf.tsx b/apps/landing/src/pages/guides/what-is-spf.tsx index 0129ddb..8c50108 100644 --- a/apps/landing/src/pages/guides/what-is-spf.tsx +++ b/apps/landing/src/pages/guides/what-is-spf.tsx @@ -207,15 +207,12 @@ export default function WhatIsSPF() {
2
-
+

Gather SPF Include Values

Each email service provides SPF values to include. For example: