├── .gitignore ├── bbeam ├── .gitignore ├── emails │ ├── assets │ │ ├── logo.png │ │ ├── sun.png │ │ ├── linkedin.png │ │ ├── thumbsup.png │ │ ├── twitter.png │ │ ├── logo-yellow.png │ │ ├── thumbsdown.png │ │ ├── invoice-strip.png │ │ ├── question-mark.png │ │ ├── review-nudge.png │ │ ├── review-strip.png │ │ ├── bbeam-logo-white.png │ │ ├── reactivation-bg.png │ │ └── placeholder-image.png │ ├── previews │ │ ├── Newsletter.tsx │ │ ├── Review.tsx │ │ ├── Reactivation.tsx │ │ └── Invoice.tsx │ ├── components │ │ ├── Text.tsx │ │ ├── Spacer.tsx │ │ ├── Header.tsx │ │ ├── Heading.tsx │ │ ├── Button.tsx │ │ ├── List.tsx │ │ ├── Layout.tsx │ │ ├── Link.tsx │ │ └── Footer.tsx │ ├── util │ │ ├── assetUrl.ts │ │ └── cssHelpers.ts │ ├── index.ts │ ├── theme.ts │ ├── Reactivation.tsx │ ├── Review.tsx │ ├── Newsletter.tsx │ └── Invoice.tsx ├── mailing.config.json ├── README.md ├── tsconfig.json └── package.json ├── fynn ├── .gitignore ├── emails │ ├── assets │ │ ├── logo.png │ │ ├── pause.png │ │ ├── twitter.png │ │ ├── balloons.png │ │ ├── instagram.png │ │ ├── logo-full.png │ │ ├── one-dollar.png │ │ ├── reminder.png │ │ ├── squiggle.png │ │ ├── jumping-man.png │ │ ├── two-dollars.png │ │ ├── action-required.png │ │ ├── payment-pause.png │ │ ├── payment-reduction.png │ │ └── exit-interview-group.png │ ├── components │ │ ├── P.tsx │ │ ├── Li.tsx │ │ ├── Divider.tsx │ │ ├── Link.tsx │ │ ├── Spacer.tsx │ │ ├── HeadlineImage.tsx │ │ ├── Button.tsx │ │ ├── Headline.tsx │ │ ├── theme.ts │ │ ├── BaseLayout.tsx │ │ ├── Head.tsx │ │ └── Footer.tsx │ ├── index.ts │ ├── util │ │ └── assetUrl.ts │ ├── FinalizingReminder4.tsx │ ├── TuitionRequestReminder1.tsx │ ├── TuitionRequestReminder2.tsx │ ├── FinalizingReminder3.tsx │ ├── TuitionRequestReminder3.tsx │ ├── TuitionRequestReminder5.tsx │ ├── FinalizingReminder6.tsx │ ├── FinalizingReminder5.tsx │ ├── FinalizingReminder7.tsx │ ├── previews │ │ ├── IncompleteReminder.tsx │ │ ├── TuitionRequestReminder.tsx │ │ ├── FinalizingReminder.tsx │ │ └── Misc.tsx │ ├── FinalizingInvite.tsx │ ├── TuitionRequestReminder4.tsx │ ├── IncompleteReminder4.tsx │ ├── IncompleteReminder1.tsx │ ├── IncompleteReminder2.tsx │ ├── FinalizingReminder1.tsx │ ├── FinalizingReminder2.tsx │ ├── TuitionRequestReminder6.tsx │ ├── IncompleteReminder5.tsx │ ├── TuitionRequestReminder7.tsx │ ├── ApplicationApproved.tsx │ ├── StudentDispersed.tsx │ ├── IncompleteReminder6.tsx │ ├── IncompleteReminder3.tsx │ ├── ApplicationComplete.tsx │ └── MicrodepositFailure.tsx ├── mailing.config.json ├── tsconfig.json ├── README.md └── package.json ├── lancey ├── .gitignore ├── emails │ ├── assets │ │ ├── clock.png │ │ ├── logo.png │ │ ├── smirk.png │ │ ├── ab-test.png │ │ ├── linkedin.png │ │ ├── sparkle.png │ │ ├── logo-full.png │ │ ├── exclamation.png │ │ └── green-check.png │ ├── previews │ │ ├── Welcome.jsx │ │ ├── NewFeature.jsx │ │ ├── TrialEnded.jsx │ │ ├── NewView.jsx │ │ ├── UsageExceeded.jsx │ │ ├── PasswordReset.jsx │ │ └── SuccessfulIntegration.jsx │ ├── components │ │ ├── Li.jsx │ │ ├── DesktopSpacer.jsx │ │ ├── P.jsx │ │ ├── IconImage.jsx │ │ ├── Link.jsx │ │ ├── Divider.jsx │ │ ├── Headline.jsx │ │ ├── Button.jsx │ │ ├── theme.js │ │ ├── BaseLayout.jsx │ │ ├── Footer.jsx │ │ └── Head.jsx │ ├── util │ │ └── assetUrl.js │ ├── index.js │ ├── TrialEnded.jsx │ ├── UsageExceeded.jsx │ ├── NewView.jsx │ ├── SuccessfulIntegration.jsx │ ├── PasswordReset.jsx │ ├── Welcome.jsx │ └── NewFeature.jsx ├── mailing.config.json ├── README.md └── package.json ├── book-book ├── .gitignore ├── mailing.config.json ├── emails │ ├── previews │ │ ├── AccountCreated.tsx │ │ ├── ResetPassword.tsx │ │ ├── NewSignIn.tsx │ │ └── Reservation.tsx │ ├── components │ │ ├── Divider.tsx │ │ ├── Heading.tsx │ │ ├── Text.tsx │ │ ├── Header.tsx │ │ ├── Button.tsx │ │ ├── List.tsx │ │ └── Footer.tsx │ ├── index.ts │ ├── theme.ts │ ├── ResetPassword.tsx │ ├── Reservation.tsx │ ├── NewSignIn.tsx │ ├── AccountCreated.tsx │ └── layouts │ │ └── Base.tsx ├── README.md └── package.json ├── thoughtful-post ├── .gitignore ├── emails │ ├── assets │ │ ├── cart.png │ │ ├── cards.png │ │ ├── calendar.png │ │ ├── checkbox.png │ │ ├── facebook.png │ │ ├── instagram.png │ │ ├── logo-full.png │ │ ├── helping-hand.png │ │ └── checkbox-checked.png │ ├── previews │ │ ├── Survey.tsx │ │ ├── NewMatch.tsx │ │ └── Upcoming.tsx │ ├── tsconfig.json │ ├── util │ │ ├── assetUrl.ts │ │ ├── accessibleColor.ts │ │ └── cssHelpers.ts │ ├── index.ts │ ├── components │ │ ├── Spacer.tsx │ │ ├── Button.tsx │ │ ├── Heading.tsx │ │ ├── Checklist.tsx │ │ ├── Link.tsx │ │ ├── Text.tsx │ │ ├── Layout.tsx │ │ ├── Footer.tsx │ │ └── Cards.tsx │ ├── theme.ts │ ├── Survey.tsx │ ├── NewMatch.tsx │ └── Upcoming.tsx ├── mailing.config.json ├── README.md └── package.json ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | -------------------------------------------------------------------------------- /bbeam/.gitignore: -------------------------------------------------------------------------------- 1 | .mailing 2 | node_modules 3 | -------------------------------------------------------------------------------- /fynn/.gitignore: -------------------------------------------------------------------------------- 1 | .mailing 2 | node_modules 3 | -------------------------------------------------------------------------------- /lancey/.gitignore: -------------------------------------------------------------------------------- 1 | .mailing 2 | node_modules 3 | -------------------------------------------------------------------------------- /book-book/.gitignore: -------------------------------------------------------------------------------- 1 | .mailing 2 | node_modules 3 | .env 4 | 5 | -------------------------------------------------------------------------------- /thoughtful-post/.gitignore: -------------------------------------------------------------------------------- 1 | .mailing 2 | node_modules 3 | .env 4 | 5 | -------------------------------------------------------------------------------- /bbeam/emails/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/bbeam/emails/assets/logo.png -------------------------------------------------------------------------------- /bbeam/emails/assets/sun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/bbeam/emails/assets/sun.png -------------------------------------------------------------------------------- /fynn/emails/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/fynn/emails/assets/logo.png -------------------------------------------------------------------------------- /fynn/emails/assets/pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/fynn/emails/assets/pause.png -------------------------------------------------------------------------------- /fynn/emails/assets/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/fynn/emails/assets/twitter.png -------------------------------------------------------------------------------- /lancey/emails/assets/clock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/lancey/emails/assets/clock.png -------------------------------------------------------------------------------- /lancey/emails/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/lancey/emails/assets/logo.png -------------------------------------------------------------------------------- /lancey/emails/assets/smirk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/lancey/emails/assets/smirk.png -------------------------------------------------------------------------------- /bbeam/emails/assets/linkedin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/bbeam/emails/assets/linkedin.png -------------------------------------------------------------------------------- /bbeam/emails/assets/thumbsup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/bbeam/emails/assets/thumbsup.png -------------------------------------------------------------------------------- /bbeam/emails/assets/twitter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/bbeam/emails/assets/twitter.png -------------------------------------------------------------------------------- /fynn/emails/assets/balloons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/fynn/emails/assets/balloons.png -------------------------------------------------------------------------------- /fynn/emails/assets/instagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/fynn/emails/assets/instagram.png -------------------------------------------------------------------------------- /fynn/emails/assets/logo-full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/fynn/emails/assets/logo-full.png -------------------------------------------------------------------------------- /fynn/emails/assets/one-dollar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/fynn/emails/assets/one-dollar.png -------------------------------------------------------------------------------- /fynn/emails/assets/reminder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/fynn/emails/assets/reminder.png -------------------------------------------------------------------------------- /fynn/emails/assets/squiggle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/fynn/emails/assets/squiggle.png -------------------------------------------------------------------------------- /lancey/emails/assets/ab-test.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/lancey/emails/assets/ab-test.png -------------------------------------------------------------------------------- /lancey/emails/assets/linkedin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/lancey/emails/assets/linkedin.png -------------------------------------------------------------------------------- /lancey/emails/assets/sparkle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/lancey/emails/assets/sparkle.png -------------------------------------------------------------------------------- /bbeam/emails/assets/logo-yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/bbeam/emails/assets/logo-yellow.png -------------------------------------------------------------------------------- /bbeam/emails/assets/thumbsdown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/bbeam/emails/assets/thumbsdown.png -------------------------------------------------------------------------------- /fynn/emails/assets/jumping-man.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/fynn/emails/assets/jumping-man.png -------------------------------------------------------------------------------- /fynn/emails/assets/two-dollars.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/fynn/emails/assets/two-dollars.png -------------------------------------------------------------------------------- /lancey/emails/assets/logo-full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/lancey/emails/assets/logo-full.png -------------------------------------------------------------------------------- /bbeam/emails/assets/invoice-strip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/bbeam/emails/assets/invoice-strip.png -------------------------------------------------------------------------------- /bbeam/emails/assets/question-mark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/bbeam/emails/assets/question-mark.png -------------------------------------------------------------------------------- /bbeam/emails/assets/review-nudge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/bbeam/emails/assets/review-nudge.png -------------------------------------------------------------------------------- /bbeam/emails/assets/review-strip.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/bbeam/emails/assets/review-strip.png -------------------------------------------------------------------------------- /fynn/emails/assets/action-required.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/fynn/emails/assets/action-required.png -------------------------------------------------------------------------------- /fynn/emails/assets/payment-pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/fynn/emails/assets/payment-pause.png -------------------------------------------------------------------------------- /lancey/emails/assets/exclamation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/lancey/emails/assets/exclamation.png -------------------------------------------------------------------------------- /lancey/emails/assets/green-check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/lancey/emails/assets/green-check.png -------------------------------------------------------------------------------- /thoughtful-post/emails/assets/cart.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/thoughtful-post/emails/assets/cart.png -------------------------------------------------------------------------------- /bbeam/emails/assets/bbeam-logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/bbeam/emails/assets/bbeam-logo-white.png -------------------------------------------------------------------------------- /bbeam/emails/assets/reactivation-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/bbeam/emails/assets/reactivation-bg.png -------------------------------------------------------------------------------- /fynn/emails/assets/payment-reduction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/fynn/emails/assets/payment-reduction.png -------------------------------------------------------------------------------- /lancey/emails/previews/Welcome.jsx: -------------------------------------------------------------------------------- 1 | import Welcome from "../Welcome"; 2 | 3 | export function preview() { 4 | return ; 5 | } 6 | -------------------------------------------------------------------------------- /thoughtful-post/emails/assets/cards.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/thoughtful-post/emails/assets/cards.png -------------------------------------------------------------------------------- /bbeam/emails/assets/placeholder-image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/bbeam/emails/assets/placeholder-image.png -------------------------------------------------------------------------------- /fynn/emails/assets/exit-interview-group.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/fynn/emails/assets/exit-interview-group.png -------------------------------------------------------------------------------- /thoughtful-post/emails/assets/calendar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/thoughtful-post/emails/assets/calendar.png -------------------------------------------------------------------------------- /thoughtful-post/emails/assets/checkbox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/thoughtful-post/emails/assets/checkbox.png -------------------------------------------------------------------------------- /thoughtful-post/emails/assets/facebook.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/thoughtful-post/emails/assets/facebook.png -------------------------------------------------------------------------------- /thoughtful-post/emails/assets/instagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/thoughtful-post/emails/assets/instagram.png -------------------------------------------------------------------------------- /thoughtful-post/emails/assets/logo-full.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/thoughtful-post/emails/assets/logo-full.png -------------------------------------------------------------------------------- /lancey/emails/previews/NewFeature.jsx: -------------------------------------------------------------------------------- 1 | import NewFeature from "../NewFeature"; 2 | 3 | export function preview() { 4 | return ; 5 | } 6 | -------------------------------------------------------------------------------- /lancey/emails/previews/TrialEnded.jsx: -------------------------------------------------------------------------------- 1 | import TrialEnded from "../TrialEnded"; 2 | 3 | export function preview() { 4 | return ; 5 | } 6 | -------------------------------------------------------------------------------- /lancey/emails/previews/NewView.jsx: -------------------------------------------------------------------------------- 1 | import NewView from "../NewView"; 2 | 3 | export function preview() { 4 | return ; 5 | } 6 | -------------------------------------------------------------------------------- /thoughtful-post/emails/assets/helping-hand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/thoughtful-post/emails/assets/helping-hand.png -------------------------------------------------------------------------------- /thoughtful-post/emails/assets/checkbox-checked.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sofn-xyz/mailing-templates/HEAD/thoughtful-post/emails/assets/checkbox-checked.png -------------------------------------------------------------------------------- /lancey/emails/previews/UsageExceeded.jsx: -------------------------------------------------------------------------------- 1 | import UsageExceeded from "../UsageExceeded"; 2 | 3 | export function preview() { 4 | return ; 5 | } 6 | -------------------------------------------------------------------------------- /bbeam/emails/previews/Newsletter.tsx: -------------------------------------------------------------------------------- 1 | import Newsletter from "../Newsletter"; 2 | 3 | export function preview() { 4 | return ; 5 | } 6 | -------------------------------------------------------------------------------- /bbeam/emails/previews/Review.tsx: -------------------------------------------------------------------------------- 1 | import Review from "../Review"; 2 | 3 | export function preview() { 4 | return ; 5 | } 6 | -------------------------------------------------------------------------------- /lancey/emails/previews/PasswordReset.jsx: -------------------------------------------------------------------------------- 1 | import PasswordReset from "../PasswordReset"; 2 | 3 | export function preview() { 4 | return ; 5 | } 6 | -------------------------------------------------------------------------------- /thoughtful-post/emails/previews/Survey.tsx: -------------------------------------------------------------------------------- 1 | import Survey from "../Survey"; 2 | 3 | export function preview() { 4 | return ; 5 | } 6 | -------------------------------------------------------------------------------- /fynn/mailing.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript": true, 3 | "emailsDir": "./emails", 4 | "outDir": "./previews_html", 5 | "anonymousId": "8c4043ad-3b31-4c81-9d0e-92650b8a62fe" 6 | } 7 | -------------------------------------------------------------------------------- /bbeam/emails/previews/Reactivation.tsx: -------------------------------------------------------------------------------- 1 | import Reactivation from "../Reactivation"; 2 | 3 | export function preview() { 4 | return ; 5 | } 6 | -------------------------------------------------------------------------------- /bbeam/mailing.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript": true, 3 | "emailsDir": "./emails", 4 | "outDir": "./previews_html", 5 | "anonymousId": "0454a584-176f-48b6-9e14-527ac48ef895" 6 | } 7 | -------------------------------------------------------------------------------- /lancey/mailing.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript": false, 3 | "emailsDir": "./emails", 4 | "outDir": "./previews_html", 5 | "anonymousId": "e63fe787-5df8-4627-9b1d-0d92d1386837" 6 | } 7 | -------------------------------------------------------------------------------- /book-book/mailing.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript": false, 3 | "emailsDir": "./emails", 4 | "outDir": "./previews_html", 5 | "anonymousId": "b274a8ed-c378-4b15-b967-afdb733717f1" 6 | } 7 | -------------------------------------------------------------------------------- /thoughtful-post/mailing.config.json: -------------------------------------------------------------------------------- 1 | { 2 | "typescript": false, 3 | "emailsDir": "./emails", 4 | "outDir": "./previews_html", 5 | "anonymousId": "b274a8ed-c378-4b15-b967-afdb733717f1" 6 | } 7 | -------------------------------------------------------------------------------- /lancey/emails/components/Li.jsx: -------------------------------------------------------------------------------- 1 | import { MjmlText } from "mjml-react"; 2 | 3 | export default function Li({ children }) { 4 | return • {children}; 5 | } 6 | -------------------------------------------------------------------------------- /lancey/emails/previews/SuccessfulIntegration.jsx: -------------------------------------------------------------------------------- 1 | import SuccessfulIntegration from "../SuccessfulIntegration"; 2 | 3 | export function preview() { 4 | return ; 5 | } 6 | -------------------------------------------------------------------------------- /bbeam/README.md: -------------------------------------------------------------------------------- 1 | # BBeam + Mailing 2 | 3 | Templates for BBeam 4 | 5 | Built with [Mailing](https://www.mailing.run) 6 | 7 | 8 | ## Local development 9 | 10 | ``` 11 | yarn install 12 | yarn mailing 13 | ``` 14 | -------------------------------------------------------------------------------- /book-book/emails/previews/AccountCreated.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import AccountCreated from "../AccountCreated"; 3 | 4 | export function accountCreated() { 5 | return ; 6 | } 7 | -------------------------------------------------------------------------------- /book-book/README.md: -------------------------------------------------------------------------------- 1 | # BookBook + Mailing 2 | 3 | Built with [Mailing](https://www.mailing.run) 4 | 5 | Live at https://book-book-mailing.vercel.app/ 6 | 7 | ## Local development 8 | 9 | ``` 10 | yarn install 11 | yarn dev 12 | ``` 13 | -------------------------------------------------------------------------------- /fynn/emails/components/P.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlText } from "mjml-react"; 2 | 3 | type PProps = { 4 | children: React.ReactNode; 5 | }; 6 | 7 | export default function P({ children }: PProps) { 8 | return {children}; 9 | } 10 | -------------------------------------------------------------------------------- /fynn/emails/components/Li.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlText } from "mjml-react"; 2 | 3 | type LiProps = { 4 | children: React.ReactNode; 5 | }; 6 | 7 | export default function Li({ children }: LiProps) { 8 | return • {children}; 9 | } 10 | -------------------------------------------------------------------------------- /lancey/emails/components/DesktopSpacer.jsx: -------------------------------------------------------------------------------- 1 | import { MjmlSpacer } from "mjml-react"; 2 | 3 | // Allows for adding spacing on desktop only, has height 0 on mobile. 4 | export default function DesktopSpacer({ ...props } = {}) { 5 | return ; 6 | } 7 | -------------------------------------------------------------------------------- /lancey/emails/components/P.jsx: -------------------------------------------------------------------------------- 1 | import { MjmlText } from "mjml-react"; 2 | 3 | export default function P({ children, maxWidth, ...props } = {}) { 4 | return ( 5 | 6 |
{children}
7 |
8 | ); 9 | } 10 | -------------------------------------------------------------------------------- /lancey/emails/components/IconImage.jsx: -------------------------------------------------------------------------------- 1 | import { MjmlImage } from "mjml-react"; 2 | 3 | export default function IconImage(props) { 4 | return ( 5 | 12 | ); 13 | } 14 | -------------------------------------------------------------------------------- /bbeam/emails/previews/Invoice.tsx: -------------------------------------------------------------------------------- 1 | import Invoice, { InvoiceData } from "../Invoice"; 2 | 3 | const invoice: InvoiceData = { 4 | billingPeriod: "Nov 1-30", 5 | total: 13.6, 6 | }; 7 | 8 | export function preview() { 9 | return ( 10 | 11 | ); 12 | } 13 | -------------------------------------------------------------------------------- /fynn/emails/components/Divider.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlDivider } from "mjml-react"; 2 | import { colors } from "./theme"; 3 | 4 | export default function Divider() { 5 | return ( 6 | 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /lancey/emails/components/Link.jsx: -------------------------------------------------------------------------------- 1 | import { colors } from "./theme"; 2 | 3 | export default function Link(props) { 4 | return ( 5 | 15 | ); 16 | } 17 | -------------------------------------------------------------------------------- /fynn/emails/components/Link.tsx: -------------------------------------------------------------------------------- 1 | import { colors } from "./theme"; 2 | 3 | export default function Link(props: any) { 4 | return ( 5 | 15 | ); 16 | } 17 | -------------------------------------------------------------------------------- /lancey/emails/components/Divider.jsx: -------------------------------------------------------------------------------- 1 | import { MjmlDivider } from "mjml-react"; 2 | import { colors } from "./theme"; 3 | 4 | export default function Divider({ ...props }) { 5 | return ( 6 | 13 | ); 14 | } 15 | -------------------------------------------------------------------------------- /bbeam/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2016", 4 | "isolatedModules": true, 5 | "jsx": "react-jsx", 6 | "module": "commonjs", 7 | "rootDir": ".", 8 | "moduleResolution": "node", 9 | "declaration": true, 10 | "outDir": "./lib", 11 | "esModuleInterop": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "strict": true, 14 | "skipLibCheck": true, 15 | "resolveJsonModule": true 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /fynn/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2016", 4 | "isolatedModules": true, 5 | "jsx": "react-jsx", 6 | "module": "commonjs", 7 | "rootDir": ".", 8 | "moduleResolution": "node", 9 | "declaration": true, 10 | "outDir": "./lib", 11 | "esModuleInterop": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "strict": true, 14 | "skipLibCheck": true, 15 | "resolveJsonModule": true 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /book-book/emails/components/Divider.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { MjmlDivider } from "mjml-react"; 3 | import { colors } from "../theme"; 4 | 5 | type DividerProps = React.ComponentProps; 6 | 7 | const defaultProps = { 8 | borderColor: colors.neutral600, 9 | borderStyle: "dotted", 10 | borderWidth: "1px", 11 | }; 12 | 13 | export default function Divider(props: DividerProps) { 14 | return ; 15 | } 16 | -------------------------------------------------------------------------------- /bbeam/emails/components/Text.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlText } from "mjml-react"; 2 | 3 | type TextProps = { 4 | maxWidth?: number; 5 | } & React.ComponentProps; 6 | 7 | export default function Text({ children, maxWidth, ...props }: TextProps) { 8 | if (maxWidth) { 9 | return ( 10 | 11 |
{children}
12 |
13 | ); 14 | } else return {children}; 15 | } 16 | -------------------------------------------------------------------------------- /lancey/emails/util/assetUrl.js: -------------------------------------------------------------------------------- 1 | /* 2 | * If you want to use local assets while developing new templates, 3 | * run `yarn dev:local-assets` instead of `yarn dev` 4 | * 5 | * NOTE: This will cause the email linter to throw errors 6 | */ 7 | 8 | const ASSET_URL = "https://lancey-mailing.vercel.app"; 9 | 10 | export default function assetUrl(url) { 11 | if (url.startsWith("/") && !process.env.LOCAL_ASSETS) { 12 | return `${ASSET_URL}${url}`; 13 | } 14 | 15 | return url; 16 | } 17 | -------------------------------------------------------------------------------- /thoughtful-post/emails/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es2016", 4 | "isolatedModules": true, 5 | "jsx": "react-jsx", 6 | "module": "commonjs", 7 | "rootDir": ".", 8 | "moduleResolution": "node", 9 | "declaration": true, 10 | "outDir": "./lib", 11 | "esModuleInterop": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "strict": true, 14 | "skipLibCheck": true, 15 | "resolveJsonModule": true 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /bbeam/emails/util/assetUrl.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * If you want to use local assets while developing new templates, 3 | * run `yarn dev:local-assets` instead of `yarn dev` 4 | * 5 | * NOTE: This will cause the email linter to throw errors 6 | */ 7 | 8 | const ASSET_URL = "https://bbeam-mailing.vercel.app"; 9 | 10 | export default function assetUrl(url: string) { 11 | if (url.startsWith("/") && !process.env.LOCAL_ASSETS) { 12 | return `${ASSET_URL}${url}`; 13 | } 14 | 15 | return url; 16 | } 17 | -------------------------------------------------------------------------------- /fynn/emails/index.ts: -------------------------------------------------------------------------------- 1 | import nodemailer from "nodemailer"; 2 | import { buildSendMail } from "mailing-core"; 3 | 4 | const transport = nodemailer.createTransport({ 5 | host: "smtp.sendgrid.net", 6 | port: 587, 7 | auth: { 8 | user: "apikey", 9 | pass: process.env.SENDGRID_API_KEY, 10 | }, 11 | }); 12 | 13 | const sendMail = buildSendMail({ 14 | transport, 15 | defaultFrom: "peter+sendgrid@campsh.com", 16 | configPath: "./mailing.config.json", 17 | }); 18 | 19 | export default sendMail; 20 | -------------------------------------------------------------------------------- /bbeam/emails/index.ts: -------------------------------------------------------------------------------- 1 | import nodemailer from "nodemailer"; 2 | import { buildSendMail } from "mailing-core"; 3 | 4 | const transport = nodemailer.createTransport({ 5 | host: "smtp.sendgrid.net", 6 | port: 587, 7 | auth: { 8 | user: "apikey", 9 | pass: process.env.SENDGRID_API_KEY, 10 | }, 11 | }); 12 | 13 | const sendMail = buildSendMail({ 14 | transport, 15 | defaultFrom: "peter+sendgrid@campsh.com", 16 | configPath: "./mailing.config.json", 17 | }); 18 | 19 | export default sendMail; 20 | -------------------------------------------------------------------------------- /lancey/emails/index.js: -------------------------------------------------------------------------------- 1 | import nodemailer from "nodemailer"; 2 | import { buildSendMail } from "mailing-core"; 3 | 4 | const transport = nodemailer.createTransport({ 5 | host: "smtp.sendgrid.net", 6 | port: 587, 7 | auth: { 8 | user: "apikey", 9 | pass: process.env.SENDGRID_API_KEY, 10 | }, 11 | }); 12 | 13 | const sendMail = buildSendMail({ 14 | transport, 15 | defaultFrom: "peter+sendgrid@campsh.com", 16 | configPath: "./mailing.config.json", 17 | }); 18 | 19 | export default sendMail; 20 | -------------------------------------------------------------------------------- /bbeam/emails/components/Spacer.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlSpacer } from "mjml-react"; 2 | 3 | type SpacerProps = { 4 | sm?: React.ComponentProps; 5 | lg?: React.ComponentProps; 6 | } & React.ComponentProps; 7 | 8 | export default function Spacer({ sm, lg, ...props }: SpacerProps) { 9 | return ( 10 | <> 11 | 12 | 13 | 14 | ); 15 | } 16 | -------------------------------------------------------------------------------- /fynn/emails/components/Spacer.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlSpacer } from "mjml-react"; 2 | 3 | type SpacerProps = { 4 | sm?: React.ComponentProps; 5 | lg?: React.ComponentProps; 6 | } & React.ComponentProps; 7 | 8 | export default function Spacer({ sm, lg, ...props }: SpacerProps) { 9 | return ( 10 | <> 11 | 12 | 13 | 14 | ); 15 | } 16 | -------------------------------------------------------------------------------- /thoughtful-post/emails/util/assetUrl.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * If you want to use local assets while developing new templates, 3 | * run `yarn dev:local-assets` instead of `yarn dev` 4 | * 5 | * NOTE: This will cause the email linter to throw errors 6 | */ 7 | 8 | const ASSET_URL = "https://thoughtful-post-mailing.vercel.app"; 9 | 10 | export default function assetUrl(url: string) { 11 | if (url.startsWith("/") && !process.env.LOCAL_ASSETS) { 12 | return `${ASSET_URL}${url}`; 13 | } 14 | 15 | return url; 16 | } 17 | -------------------------------------------------------------------------------- /thoughtful-post/emails/index.ts: -------------------------------------------------------------------------------- 1 | import nodemailer from "nodemailer"; 2 | import { buildSendMail } from "mailing-core"; 3 | 4 | const transport = nodemailer.createTransport({ 5 | host: "smtp.sendgrid.net", 6 | port: 587, 7 | auth: { 8 | user: "apikey", 9 | pass: process.env.SENDGRID_API_KEY, 10 | }, 11 | }); 12 | 13 | const sendMail = buildSendMail({ 14 | transport, 15 | defaultFrom: "peter+sendgrid@campsh.com", 16 | configPath: "./mailing.config.json", 17 | }); 18 | 19 | export default sendMail; 20 | -------------------------------------------------------------------------------- /thoughtful-post/emails/components/Spacer.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlSpacer } from "mjml-react"; 2 | 3 | type SpacerProps = { 4 | sm?: React.ComponentProps; 5 | lg?: React.ComponentProps; 6 | } & React.ComponentProps; 7 | 8 | export default function Spacer({ sm, lg, ...props }: SpacerProps) { 9 | return ( 10 | <> 11 | 12 | 13 | 14 | ); 15 | } 16 | -------------------------------------------------------------------------------- /lancey/emails/components/Headline.jsx: -------------------------------------------------------------------------------- 1 | import { MjmlText } from "mjml-react"; 2 | import { fontSize, fontFamily, lineHeight } from "./theme"; 3 | 4 | export default function Headline({ children, maxWidth, ...props }) { 5 | return ( 6 | 14 |
{children}
15 |
16 | ); 17 | } 18 | -------------------------------------------------------------------------------- /book-book/emails/index.ts: -------------------------------------------------------------------------------- 1 | import nodemailer from "nodemailer"; 2 | import { buildSendMail } from "mailing-core"; 3 | 4 | const transport = nodemailer.createTransport({ 5 | pool: true, 6 | host: "smtp.example.com", 7 | port: 465, 8 | secure: true, // use TLS 9 | auth: { 10 | user: "username", 11 | pass: "password", 12 | }, 13 | }); 14 | 15 | const sendMail = buildSendMail({ 16 | transport, 17 | defaultFrom: "replace@me.with.your.com", 18 | configPath: "./mailing.config.json", 19 | }); 20 | 21 | export default sendMail; 22 | -------------------------------------------------------------------------------- /fynn/emails/util/assetUrl.ts: -------------------------------------------------------------------------------- 1 | /* 2 | * If you want to use local assets while developing new templates, 3 | * run `yarn dev:local-assets` instead of `yarn dev` 4 | * 5 | * NOTE: This will cause the email linter to throw errors 6 | */ 7 | 8 | const ASSET_URL = 9 | "https://raw.githubusercontent.com/sofn-xyz/mailing-templates/main/fynn/emails"; 10 | 11 | export default function assetUrl(url: string) { 12 | if (url.startsWith("/") && !process.env.LOCAL_ASSETS) { 13 | return `${ASSET_URL}${url}`; 14 | } 15 | 16 | return url; 17 | } 18 | -------------------------------------------------------------------------------- /book-book/emails/components/Heading.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Text from "./Text"; 3 | import { fontFamily, lineHeight, fontWeight, fontSize } from "../theme"; 4 | 5 | type HeadingProps = React.ComponentProps; 6 | 7 | const defaultProps = { 8 | fontFamily: fontFamily.sans, 9 | fontWeight: fontWeight.normal, 10 | lineHeight: lineHeight.tight, 11 | fontSize: fontSize.lg, 12 | }; 13 | 14 | export default function Heading(props: HeadingProps) { 15 | return ( 16 | 17 | {props.children} 18 | 19 | ); 20 | } 21 | -------------------------------------------------------------------------------- /book-book/emails/components/Text.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { MjmlText } from "mjml-react"; 3 | 4 | type TextProps = { 5 | maxWidth?: number; 6 | } & React.ComponentProps; 7 | 8 | export default function Text({ children, maxWidth, ...props }: TextProps) { 9 | if (maxWidth) { 10 | return ( 11 | 12 |
{children}
13 |
14 | ); 15 | } else 16 | return ( 17 | 18 | {children} 19 | 20 | ); 21 | } 22 | -------------------------------------------------------------------------------- /lancey/emails/components/Button.jsx: -------------------------------------------------------------------------------- 1 | import { MjmlButton } from "mjml-react"; 2 | import { colors, fontSize, lineHeight, borderRadius } from "./theme"; 3 | 4 | export default function Button({ text, ...props }) { 5 | return ( 6 | 17 | {text} 18 | 19 | ); 20 | } 21 | -------------------------------------------------------------------------------- /fynn/emails/components/HeadlineImage.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlImage } from "mjml-react"; 2 | import assetUrl from "../util/assetUrl"; 3 | 4 | type HeadlineImageProps = { 5 | src?: string; 6 | alt?: string; 7 | height?: string; 8 | width?: string; 9 | }; 10 | 11 | export default function HeadlineImage(props: HeadlineImageProps) { 12 | return ( 13 | 23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /book-book/emails/previews/ResetPassword.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ResetPassword from "../ResetPassword"; 3 | 4 | export function resetPassword() { 5 | return ( 6 | 10 | We’ve received your request to change your password. Use the link 11 | below to set up a new password for your account. This link is only 12 | usable once! If you need to, you can reinitiate the password process 13 | again
here. 14 | 15 | } 16 | ctaText="Reset Password" 17 | /> 18 | ); 19 | } 20 | -------------------------------------------------------------------------------- /fynn/emails/components/Button.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlButton } from "mjml-react"; 2 | import { colors, fontSize, lineHeight, borderRadius } from "./theme"; 3 | 4 | type ButtonProps = { 5 | href: string; 6 | text: string; 7 | }; 8 | 9 | export default function Button({ href, text }: ButtonProps) { 10 | return ( 11 | 22 | {text} 23 | 24 | ); 25 | } 26 | -------------------------------------------------------------------------------- /bbeam/emails/components/Header.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlColumn, MjmlImage, MjmlSection, MjmlWrapper } from "mjml-react"; 2 | import { colors } from "../theme"; 3 | import assetUrl from "../util/assetUrl"; 4 | 5 | export default function Header() { 6 | return ( 7 | 12 | 13 | 14 | 20 | 21 | 22 | 23 | ); 24 | } 25 | -------------------------------------------------------------------------------- /lancey/emails/components/theme.js: -------------------------------------------------------------------------------- 1 | // Colors 2 | export const colors = { 3 | blue: "#145AFF", 4 | orange: "#EE8054", 5 | dreamsicle: "#FBDFD4", 6 | black: "#0D0E10", 7 | navy: "#131F3B", 8 | white: "#FFF", 9 | }; 10 | 11 | export const fontSize = { 12 | xs: 12, 13 | sm: 14, 14 | base: 16, 15 | md: 18, 16 | lg: 40, 17 | xl: 64, 18 | }; 19 | 20 | export const lineHeight = { 21 | tight: "108%", 22 | base: "155%", 23 | }; 24 | 25 | export const borderRadius = { 26 | base: 12, 27 | full: 9999, 28 | }; 29 | 30 | export const fontFamily = { 31 | sans: "Montserrat, system-ui, -apple-system, sans-serif", 32 | }; 33 | 34 | export const spacing = { 35 | desktopGutter: 40, 36 | mobileGutter: 20, 37 | }; 38 | -------------------------------------------------------------------------------- /book-book/emails/components/Header.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { MjmlSection, MjmlColumn, MjmlImage } from "mjml-react"; 3 | 4 | type HeaderProps = { 5 | loose?: boolean; 6 | }; 7 | 8 | const Header: React.FC = ({ loose }) => { 9 | return ( 10 | 11 | 12 | 20 | 21 | 22 | ); 23 | }; 24 | 25 | export default Header; 26 | -------------------------------------------------------------------------------- /book-book/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "book-book-mailing", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "scripts": { 7 | "build": "yarn mailing server build", 8 | "dev": "yarn mailing" 9 | }, 10 | "dependencies": { 11 | "mailing-core": "*", 12 | "mjml": "^4.13.0", 13 | "mjml-react": "^2.0.8", 14 | "next": "^13.0.5", 15 | "nodemailer": "^6.8.0", 16 | "react": "^18.2.0", 17 | "react-dom": "^18.2.0" 18 | }, 19 | "devDependencies": { 20 | "@types/mjml": "^4.7.0", 21 | "@types/mjml-react": "2.0.6", 22 | "@types/nodemailer": "6.4.6", 23 | "@types/react": "^18.0.22", 24 | "@types/react-dom": "^18.0.7", 25 | "mailing": "*", 26 | "typescript": "^4.6.3" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /fynn/emails/components/Headline.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlText } from "mjml-react"; 2 | import { fontSize, fontFamily, lineHeight } from "./theme"; 3 | 4 | type HeadlineProps = { 5 | cssClass?: string; 6 | paddingBottom?: string; 7 | align?: "left" | "center" | "right"; 8 | children: React.ReactNode; 9 | }; 10 | 11 | export default function Headline({ 12 | cssClass, 13 | paddingBottom, 14 | align, 15 | children, 16 | }: HeadlineProps) { 17 | return ( 18 | 26 | {children} 27 | 28 | ); 29 | } 30 | -------------------------------------------------------------------------------- /fynn/README.md: -------------------------------------------------------------------------------- 1 | # Fynn + Mailing 2 | 3 | Templates for [Fynn](https://fynncredit.com) 4 | 5 | Built with [Mailing](https://www.mailing.run) 6 | 7 | Live at https://fynn-mailing.vercel.app/ 8 | 9 | ## Local development 10 | 11 | ``` 12 | yarn install 13 | yarn dev 14 | ``` 15 | 16 | ### With local assets 17 | 18 | If you want to use local assets while developing new templates, place them in the `emails/assets` folder and run: 19 | 20 | ``` 21 | yarn install 22 | yarn dev:local-assets 23 | ``` 24 | 25 | They will be served from `http://localhost:3883` and you can use them in your templates like this: 26 | 27 | ```javascript 28 | import assetUrl from "./util/assetUrl"; 29 | import { MjmlImage } from "mjml-react"; 30 | 31 | ; 32 | ``` 33 | -------------------------------------------------------------------------------- /lancey/README.md: -------------------------------------------------------------------------------- 1 | # Lancey + Mailing 2 | 3 | Templates for [Lancey](https://www.lancey.io) 4 | 5 | Built with [Mailing](https://www.mailing.run) 6 | 7 | Live at https://lancey-mailing.vercel.app/ 8 | 9 | ## Local development 10 | 11 | ``` 12 | yarn install 13 | yarn dev 14 | ``` 15 | 16 | ### With local assets 17 | 18 | If you want to use local assets while developing new templates, place them in the `emails/assets` folder and run: 19 | 20 | ``` 21 | yarn install 22 | yarn dev:local-assets 23 | ``` 24 | 25 | They will be served from `http://localhost:3883` and you can use them in your templates like this: 26 | 27 | ```javascript 28 | import assetUrl from "./util/assetUrl"; 29 | import { MjmlImage } from "mjml-react"; 30 | 31 | ; 32 | ``` 33 | -------------------------------------------------------------------------------- /thoughtful-post/emails/components/Button.tsx: -------------------------------------------------------------------------------- 1 | import { MjmlButton } from "mjml-react"; 2 | 3 | import { 4 | colors, 5 | fontSize, 6 | lineHeight, 7 | borderRadius, 8 | fontWeight, 9 | } from "../theme"; 10 | import accessibleColor from "../util/accessibleColor"; 11 | 12 | type ButtonProps = React.ComponentProps; 13 | 14 | export default function Button(props: ButtonProps) { 15 | return ( 16 | 26 | ); 27 | } 28 | -------------------------------------------------------------------------------- /thoughtful-post/README.md: -------------------------------------------------------------------------------- 1 | # ThoughtfulPost + Mailing 2 | 3 | Templates for [ThoughtfulPost](https://thoughtfulpost.com) 4 | 5 | Built with [Mailing](https://www.mailing.run) 6 | 7 | Live at https://thoughtful-post-mailing.vercel.app/ 8 | 9 | ## Local development 10 | 11 | ``` 12 | yarn install 13 | yarn dev 14 | ``` 15 | 16 | ### With local assets 17 | 18 | If you want to use local assets while developing new templates, place them in the `emails/assets` folder and run: 19 | 20 | ``` 21 | yarn install 22 | yarn dev:local-assets 23 | ``` 24 | 25 | They will be served from `http://localhost:3883` and you can use them in your templates like this: 26 | 27 | ```javascript 28 | import assetUrl from "./util/assetUrl"; 29 | import { MjmlImage } from "mjml-react"; 30 | 31 | ; 32 | ``` 33 | -------------------------------------------------------------------------------- /bbeam/emails/components/Heading.tsx: -------------------------------------------------------------------------------- 1 | import Text from "./Text"; 2 | import { fontFamily, lineHeight, fontWeight } from "../theme"; 3 | 4 | type HeadingProps = { 5 | lg?: Partial>; 6 | sm?: Partial>; 7 | } & React.ComponentProps; 8 | 9 | export default function Heading({ lg, sm, ...props }: HeadingProps) { 10 | const defaultProps = { 11 | fontFamily: fontFamily.sans, 12 | fontWeight: fontWeight.bold, 13 | lineHeight: lineHeight.tight, 14 | }; 15 | 16 | return ( 17 | <> 18 | 19 | {props.children} 20 | 21 | 22 | {props.children} 23 | 24 | 25 | ); 26 | } 27 | -------------------------------------------------------------------------------- /thoughtful-post/emails/components/Heading.tsx: -------------------------------------------------------------------------------- 1 | import Text from "./Text"; 2 | import { fontFamily, lineHeight, fontWeight } from "../theme"; 3 | 4 | type HeadingProps = { 5 | lg?: Partial>; 6 | sm?: Partial>; 7 | } & React.ComponentProps; 8 | 9 | export default function Heading({ lg, sm, ...props }: HeadingProps) { 10 | const defaultProps = { 11 | fontFamily: fontFamily.sans, 12 | fontWeight: fontWeight.extrabold, 13 | lineHeight: lineHeight.tight, 14 | }; 15 | 16 | return ( 17 | <> 18 | 19 | {props.children} 20 | 21 | 22 | {props.children} 23 | 24 | 25 | ); 26 | } 27 | -------------------------------------------------------------------------------- /lancey/emails/TrialEnded.jsx: -------------------------------------------------------------------------------- 1 | import BaseLayout from "./components/BaseLayout"; 2 | import Button from "./components/Button"; 3 | import P from "./components/P"; 4 | import Headline from "./components/Headline"; 5 | import IconImage from "./components/IconImage"; 6 | import assetUrl from "./util/assetUrl"; 7 | 8 | export default function TrialEnded() { 9 | return ( 10 | 11 | 12 | 13 | Your Lancey trial has ended 14 | 15 |

16 | Upgrade your plan so that your customers can access your demo without 17 | limits. It only takes a minute. 18 |

19 | 37 | 38 | ♥, 39 |
40 | The BookBook Team 41 |
42 | 43 | 44 | 45 |