@tracked/emails 0.2.4 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/dist/components/content.js +1 -1
  2. package/dist/components/content.js.map +1 -1
  3. package/dist/components/index.d.ts +5 -5
  4. package/dist/components/index.d.ts.map +1 -1
  5. package/dist/components/index.js +5 -5
  6. package/dist/components/index.js.map +1 -1
  7. package/dist/components/interactive.js +1 -1
  8. package/dist/components/interactive.js.map +1 -1
  9. package/dist/components/layout.js +2 -2
  10. package/dist/components/layout.js.map +1 -1
  11. package/dist/components/typography.js +1 -1
  12. package/dist/components/typography.js.map +1 -1
  13. package/dist/emails/anniversary.js +1 -1
  14. package/dist/emails/anniversary.js.map +1 -1
  15. package/dist/emails/app-review-request.js +1 -1
  16. package/dist/emails/app-review-request.js.map +1 -1
  17. package/dist/emails/bodyweight-goal-reached.js +1 -1
  18. package/dist/emails/bodyweight-goal-reached.js.map +1 -1
  19. package/dist/emails/client-inactive-alert.js +1 -1
  20. package/dist/emails/client-inactive-alert.js.map +1 -1
  21. package/dist/emails/client-onboarded.js +1 -1
  22. package/dist/emails/client-onboarded.js.map +1 -1
  23. package/dist/emails/coach-invite.js +1 -1
  24. package/dist/emails/coach-invite.js.map +1 -1
  25. package/dist/emails/coach-removed-client.js +1 -1
  26. package/dist/emails/coach-removed-client.js.map +1 -1
  27. package/dist/emails/direct-message.js +1 -1
  28. package/dist/emails/direct-message.js.map +1 -1
  29. package/dist/emails/feature-discovery.js +1 -1
  30. package/dist/emails/feature-discovery.js.map +1 -1
  31. package/dist/emails/first-workout-assigned.js +1 -1
  32. package/dist/emails/first-workout-assigned.js.map +1 -1
  33. package/dist/emails/first-workout-completed.js +1 -1
  34. package/dist/emails/first-workout-completed.js.map +1 -1
  35. package/dist/emails/inactive-reengagement.js +1 -1
  36. package/dist/emails/inactive-reengagement.js.map +1 -1
  37. package/dist/emails/index.d.ts +24 -24
  38. package/dist/emails/index.d.ts.map +1 -1
  39. package/dist/emails/index.js +24 -24
  40. package/dist/emails/index.js.map +1 -1
  41. package/dist/emails/monthly-report.js +1 -1
  42. package/dist/emails/monthly-report.js.map +1 -1
  43. package/dist/emails/new-follower.js +1 -1
  44. package/dist/emails/new-follower.js.map +1 -1
  45. package/dist/emails/nps-survey.js +1 -1
  46. package/dist/emails/nps-survey.js.map +1 -1
  47. package/dist/emails/subscription-canceled.js +1 -1
  48. package/dist/emails/subscription-canceled.js.map +1 -1
  49. package/dist/emails/support-email.js +1 -1
  50. package/dist/emails/support-email.js.map +1 -1
  51. package/dist/emails/team-invite.js +1 -1
  52. package/dist/emails/team-invite.js.map +1 -1
  53. package/dist/emails/team-member-removed-email.js +1 -1
  54. package/dist/emails/team-member-removed-email.js.map +1 -1
  55. package/dist/emails/tracked-magic-link-activate.js +1 -1
  56. package/dist/emails/tracked-magic-link-activate.js.map +1 -1
  57. package/dist/emails/tracked-magic-link.js +1 -1
  58. package/dist/emails/tracked-magic-link.js.map +1 -1
  59. package/dist/emails/trial-converted.d.ts +8 -0
  60. package/dist/emails/trial-converted.d.ts.map +1 -0
  61. package/dist/emails/trial-converted.js +7 -0
  62. package/dist/emails/trial-converted.js.map +1 -0
  63. package/dist/emails/trial-ending-soon.d.ts +10 -0
  64. package/dist/emails/trial-ending-soon.d.ts.map +1 -0
  65. package/dist/emails/trial-ending-soon.js +36 -0
  66. package/dist/emails/trial-ending-soon.js.map +1 -0
  67. package/dist/emails/trial-expired.d.ts +8 -0
  68. package/dist/emails/trial-expired.d.ts.map +1 -0
  69. package/dist/emails/trial-expired.js +24 -0
  70. package/dist/emails/trial-expired.js.map +1 -0
  71. package/dist/emails/trial-midpoint.d.ts +11 -0
  72. package/dist/emails/trial-midpoint.d.ts.map +1 -0
  73. package/dist/emails/trial-midpoint.js +37 -0
  74. package/dist/emails/trial-midpoint.js.map +1 -0
  75. package/dist/emails/trial-started.d.ts +10 -0
  76. package/dist/emails/trial-started.d.ts.map +1 -0
  77. package/dist/emails/trial-started.js +7 -0
  78. package/dist/emails/trial-started.js.map +1 -0
  79. package/dist/emails/week-one-checkin.js +1 -1
  80. package/dist/emails/week-one-checkin.js.map +1 -1
  81. package/dist/emails/weekly-progress-digest.js +1 -1
  82. package/dist/emails/weekly-progress-digest.js.map +1 -1
  83. package/dist/emails/welcome.d.ts.map +1 -1
  84. package/dist/emails/welcome.js +1 -1
  85. package/dist/emails/welcome.js.map +1 -1
  86. package/dist/index.d.ts +6 -1
  87. package/dist/index.d.ts.map +1 -1
  88. package/dist/index.js +6 -1
  89. package/dist/index.js.map +1 -1
  90. package/dist/utils/index.d.ts +2 -2
  91. package/dist/utils/index.d.ts.map +1 -1
  92. package/dist/utils/index.js +2 -2
  93. package/dist/utils/index.js.map +1 -1
  94. package/package.json +1 -1
  95. package/src/components/content.tsx +1 -1
  96. package/src/components/index.ts +5 -5
  97. package/src/components/interactive.tsx +1 -1
  98. package/src/components/layout.tsx +2 -2
  99. package/src/components/typography.tsx +1 -1
  100. package/src/emails/anniversary.tsx +1 -1
  101. package/src/emails/app-review-request.tsx +1 -1
  102. package/src/emails/bodyweight-goal-reached.tsx +1 -1
  103. package/src/emails/client-inactive-alert.tsx +1 -1
  104. package/src/emails/client-onboarded.tsx +1 -1
  105. package/src/emails/coach-invite.tsx +1 -1
  106. package/src/emails/coach-removed-client.tsx +1 -1
  107. package/src/emails/direct-message.tsx +1 -1
  108. package/src/emails/feature-discovery.tsx +1 -1
  109. package/src/emails/first-workout-assigned.tsx +1 -1
  110. package/src/emails/first-workout-completed.tsx +1 -1
  111. package/src/emails/inactive-reengagement.tsx +1 -1
  112. package/src/emails/index.tsx +24 -24
  113. package/src/emails/monthly-report.tsx +1 -1
  114. package/src/emails/new-follower.tsx +1 -1
  115. package/src/emails/nps-survey.tsx +1 -1
  116. package/src/emails/subscription-canceled.tsx +1 -1
  117. package/src/emails/support-email.tsx +1 -1
  118. package/src/emails/team-invite.tsx +1 -1
  119. package/src/emails/team-member-removed-email.tsx +1 -1
  120. package/src/emails/tracked-magic-link-activate.tsx +1 -1
  121. package/src/emails/tracked-magic-link.tsx +1 -1
  122. package/src/emails/trial-converted.tsx +68 -0
  123. package/src/emails/trial-ending-soon.tsx +126 -0
  124. package/src/emails/trial-expired.tsx +96 -0
  125. package/src/emails/trial-midpoint.tsx +150 -0
  126. package/src/emails/trial-started.tsx +75 -0
  127. package/src/emails/week-one-checkin.tsx +1 -1
  128. package/src/emails/weekly-progress-digest.tsx +1 -1
  129. package/src/emails/welcome.tsx +1 -2
  130. package/src/index.ts +10 -0
  131. package/src/utils/index.ts +2 -2
@@ -0,0 +1,96 @@
1
+ import * as React from "react";
2
+ import { Section, Text } from "@react-email/components";
3
+ import {
4
+ EmailLayout,
5
+ EmailHeader,
6
+ EmailFooter,
7
+ Heading,
8
+ Paragraph,
9
+ FeatureBox,
10
+ SmallText,
11
+ PrimaryButton,
12
+ DiscordButton,
13
+ colors,
14
+ } from "../components/index.js";
15
+
16
+ interface TrialExpiredEmailProps {
17
+ userName: string;
18
+ reactivateUrl: string;
19
+ websiteUrl?: string;
20
+ }
21
+
22
+ export const TrialExpiredEmail = ({
23
+ userName = "Coach",
24
+ reactivateUrl = "https://dashboard.tracked.gg/billing",
25
+ websiteUrl = "https://tracked.gg",
26
+ }: TrialExpiredEmailProps) => {
27
+ return (
28
+ <EmailLayout preview="Your Tracked trial has ended">
29
+ <EmailHeader />
30
+
31
+ <Heading>Your Trial Has Ended</Heading>
32
+ <Paragraph>
33
+ Hi {userName}, your free trial of Tracked has expired. Your access to
34
+ the coaching dashboard has been paused, but don't worry — your data is
35
+ safe.
36
+ </Paragraph>
37
+
38
+ <FeatureBox title="Your data is preserved:">
39
+ <SmallText style={{ marginBottom: "4px" }}>
40
+ • All client profiles and workout history are saved
41
+ </SmallText>
42
+ <SmallText style={{ marginBottom: "4px" }}>
43
+ • Your workout templates and programs are intact
44
+ </SmallText>
45
+ <SmallText style={{ marginBottom: "4px" }}>
46
+ • Client progress data remains accessible when you return
47
+ </SmallText>
48
+ <SmallText>• Subscribe anytime to regain full access</SmallText>
49
+ </FeatureBox>
50
+
51
+ <Section
52
+ style={{
53
+ backgroundColor: colors.surface,
54
+ padding: "20px 24px",
55
+ borderRadius: "8px",
56
+ margin: "24px 0",
57
+ borderLeft: `4px solid ${colors.accent}`,
58
+ }}
59
+ >
60
+ <Text
61
+ style={{
62
+ color: colors.accent,
63
+ fontSize: "18px",
64
+ fontWeight: "bold" as const,
65
+ marginBottom: "8px",
66
+ }}
67
+ >
68
+ Ready to continue?
69
+ </Text>
70
+ <Text
71
+ style={{
72
+ color: colors.textSecondary,
73
+ fontSize: "14px",
74
+ lineHeight: "20px",
75
+ margin: "0 0 16px 0",
76
+ }}
77
+ >
78
+ Reactivate your account to pick up right where you left off. Your
79
+ clients are waiting.
80
+ </Text>
81
+ <PrimaryButton href={reactivateUrl}>Reactivate Now</PrimaryButton>
82
+ </Section>
83
+
84
+ <Paragraph>
85
+ If you decided Tracked isn't for you right now, we'd love to hear why.
86
+ Your feedback helps us build a better product for coaches like you.
87
+ </Paragraph>
88
+
89
+ <DiscordButton />
90
+
91
+ <EmailFooter websiteUrl={websiteUrl} />
92
+ </EmailLayout>
93
+ );
94
+ };
95
+
96
+ export default TrialExpiredEmail;
@@ -0,0 +1,150 @@
1
+ import * as React from "react";
2
+ import { Section, Text } from "@react-email/components";
3
+ import {
4
+ EmailLayout,
5
+ EmailHeader,
6
+ EmailFooter,
7
+ Heading,
8
+ Paragraph,
9
+ FeatureBox,
10
+ SmallText,
11
+ PrimaryButton,
12
+ DiscordButton,
13
+ colors,
14
+ } from "../components/index.js";
15
+
16
+ interface TrialMidpointEmailProps {
17
+ userName: string;
18
+ daysRemaining: number;
19
+ trialEndDate: string;
20
+ clientsAdded: number;
21
+ upgradeUrl: string;
22
+ websiteUrl?: string;
23
+ }
24
+
25
+ export const TrialMidpointEmail = ({
26
+ userName = "Coach",
27
+ daysRemaining = 7,
28
+ trialEndDate = "January 29, 2025",
29
+ clientsAdded = 0,
30
+ upgradeUrl = "https://dashboard.tracked.gg/billing",
31
+ websiteUrl = "https://tracked.gg",
32
+ }: TrialMidpointEmailProps) => {
33
+ const hasClients = clientsAdded > 0;
34
+
35
+ return (
36
+ <EmailLayout preview={`${daysRemaining} days left in your Tracked trial`}>
37
+ <EmailHeader />
38
+
39
+ <Heading>You're Halfway Through Your Trial</Heading>
40
+
41
+ {hasClients ? (
42
+ <Paragraph>
43
+ Hi {userName}, you've added {clientsAdded}{" "}
44
+ {clientsAdded === 1 ? "client" : "clients"} to Tracked so far. You
45
+ have {daysRemaining} days left to explore everything the platform has
46
+ to offer before your trial ends on {trialEndDate}.
47
+ </Paragraph>
48
+ ) : (
49
+ <Paragraph>
50
+ Hi {userName}, you have {daysRemaining} days left in your free trial.
51
+ We noticed you haven't added any clients yet. Let us help you get
52
+ started.
53
+ </Paragraph>
54
+ )}
55
+
56
+ {!hasClients && (
57
+ <Section
58
+ style={{
59
+ backgroundColor: colors.surface,
60
+ padding: "16px 24px",
61
+ borderRadius: "8px",
62
+ margin: "24px 0",
63
+ borderLeft: `4px solid ${colors.accent}`,
64
+ }}
65
+ >
66
+ <Text
67
+ style={{
68
+ color: colors.accent,
69
+ fontSize: "14px",
70
+ fontWeight: "bold" as const,
71
+ marginBottom: "4px",
72
+ marginTop: "0",
73
+ }}
74
+ >
75
+ Quick Start Guide
76
+ </Text>
77
+ <SmallText style={{ marginBottom: "4px" }}>
78
+ 1. Add your first client from the dashboard
79
+ </SmallText>
80
+ <SmallText style={{ marginBottom: "4px" }}>
81
+ 2. Create a workout program or use a template
82
+ </SmallText>
83
+ <SmallText>3. Assign workouts and start tracking progress</SmallText>
84
+ </Section>
85
+ )}
86
+
87
+ <FeatureBox title="Features you might have missed:">
88
+ <SmallText style={{ marginBottom: "4px" }}>
89
+ • <strong>Workout Templates</strong> — Save time with reusable
90
+ programs
91
+ </SmallText>
92
+ <SmallText style={{ marginBottom: "4px" }}>
93
+ • <strong>Progress Photos</strong> — Track visual client
94
+ transformations
95
+ </SmallText>
96
+ <SmallText style={{ marginBottom: "4px" }}>
97
+ • <strong>Check-ins</strong> — Weekly accountability with your clients
98
+ </SmallText>
99
+ <SmallText>
100
+ • <strong>Analytics</strong> — See training trends and client
101
+ performance
102
+ </SmallText>
103
+ </FeatureBox>
104
+
105
+ <Section
106
+ style={{
107
+ backgroundColor: colors.surface,
108
+ padding: "20px 24px",
109
+ borderRadius: "8px",
110
+ margin: "24px 0",
111
+ borderLeft: `4px solid ${colors.accent}`,
112
+ }}
113
+ >
114
+ <Text
115
+ style={{
116
+ color: colors.accent,
117
+ fontSize: "16px",
118
+ fontWeight: "bold" as const,
119
+ marginBottom: "8px",
120
+ }}
121
+ >
122
+ Ready to upgrade?
123
+ </Text>
124
+ <Text
125
+ style={{
126
+ color: colors.textSecondary,
127
+ fontSize: "14px",
128
+ lineHeight: "20px",
129
+ margin: "0",
130
+ }}
131
+ >
132
+ Lock in your subscription now and never lose access to your client
133
+ data. Pricing is based on the number of active clients you manage.
134
+ </Text>
135
+ <PrimaryButton href={upgradeUrl}>View Pricing</PrimaryButton>
136
+ </Section>
137
+
138
+ <Paragraph>
139
+ Questions? Join our Discord community to connect with other coaches and
140
+ get tips on growing your coaching business.
141
+ </Paragraph>
142
+
143
+ <DiscordButton />
144
+
145
+ <EmailFooter websiteUrl={websiteUrl} />
146
+ </EmailLayout>
147
+ );
148
+ };
149
+
150
+ export default TrialMidpointEmail;
@@ -0,0 +1,75 @@
1
+ import * as React from "react";
2
+ import {
3
+ EmailLayout,
4
+ EmailHeader,
5
+ EmailFooter,
6
+ Heading,
7
+ Paragraph,
8
+ FeatureBox,
9
+ SmallText,
10
+ PrimaryButton,
11
+ DiscordButton,
12
+ } from "../components/index.js";
13
+
14
+ interface TrialStartedEmailProps {
15
+ userName: string;
16
+ trialEndDate: string;
17
+ daysRemaining: number;
18
+ upgradeUrl: string;
19
+ websiteUrl?: string;
20
+ }
21
+
22
+ export const TrialStartedEmail = ({
23
+ userName = "Coach",
24
+ trialEndDate = "January 29, 2025",
25
+ daysRemaining = 14,
26
+ upgradeUrl = "https://dashboard.tracked.gg/billing",
27
+ websiteUrl = "https://tracked.gg",
28
+ }: TrialStartedEmailProps) => {
29
+ return (
30
+ <EmailLayout preview="Welcome to your Tracked coaching trial">
31
+ <EmailHeader />
32
+
33
+ <Heading>Welcome to Your Free Trial</Heading>
34
+ <Paragraph>
35
+ Hi {userName}, your {daysRemaining}-day free trial of Tracked has
36
+ started. You have until {trialEndDate} to explore everything the
37
+ platform has to offer.
38
+ </Paragraph>
39
+
40
+ <FeatureBox title="What's included in your trial:">
41
+ <SmallText style={{ marginBottom: "4px" }}>
42
+ • Unlimited client management (up to 500 clients)
43
+ </SmallText>
44
+ <SmallText style={{ marginBottom: "4px" }}>
45
+ • Custom workout programming and templates
46
+ </SmallText>
47
+ <SmallText style={{ marginBottom: "4px" }}>
48
+ • Client progress tracking and analytics
49
+ </SmallText>
50
+ <SmallText style={{ marginBottom: "4px" }}>
51
+ • In-app messaging with clients
52
+ </SmallText>
53
+ <SmallText>• Full access to the coaching dashboard</SmallText>
54
+ </FeatureBox>
55
+
56
+ <Paragraph>
57
+ Ready to get started? Head to your dashboard to add your first clients
58
+ and start building your coaching business.
59
+ </Paragraph>
60
+
61
+ <PrimaryButton href={upgradeUrl}>Go to Dashboard</PrimaryButton>
62
+
63
+ <Paragraph style={{ marginTop: "24px" }}>
64
+ If you have any questions or need help getting set up, our team is here
65
+ for you. Join our Discord community to connect with other coaches.
66
+ </Paragraph>
67
+
68
+ <DiscordButton />
69
+
70
+ <EmailFooter websiteUrl={websiteUrl} />
71
+ </EmailLayout>
72
+ );
73
+ };
74
+
75
+ export default TrialStartedEmail;
@@ -14,7 +14,7 @@ import {
14
14
  DiscordButton,
15
15
  TextLink,
16
16
  colors,
17
- } from "../components";
17
+ } from "../components/index.js";
18
18
 
19
19
  interface WeekOneCheckinEmailProps {
20
20
  userName: string;
@@ -11,7 +11,7 @@ import {
11
11
  colors,
12
12
  spacing,
13
13
  borderRadius,
14
- } from "../components";
14
+ } from "../components/index.js";
15
15
 
16
16
  interface WeeklyProgressDigestEmailProps {
17
17
  userName: string;
@@ -7,10 +7,9 @@ import {
7
7
  Paragraph,
8
8
  FeatureBox,
9
9
  FeatureList,
10
- TipBox,
11
10
  PrimaryButton,
12
11
  DiscordButton,
13
- } from "../components";
12
+ } from "../components/index.js";
14
13
  import { Img } from "@react-email/components";
15
14
 
16
15
  interface WelcomeEmailProps {
package/src/index.ts CHANGED
@@ -16,6 +16,11 @@ import { NewFollowerEmail } from "./emails/new-follower.js";
16
16
  import { NpsSurveyEmail } from "./emails/nps-survey.js";
17
17
  import { SubscriptionCanceledEmail } from "./emails/subscription-canceled.js";
18
18
  import { SupportEmail } from "./emails/support-email.js";
19
+ import { TrialConvertedEmail } from "./emails/trial-converted.js";
20
+ import { TrialEndingSoonEmail } from "./emails/trial-ending-soon.js";
21
+ import { TrialExpiredEmail } from "./emails/trial-expired.js";
22
+ import { TrialMidpointEmail } from "./emails/trial-midpoint.js";
23
+ import { TrialStartedEmail } from "./emails/trial-started.js";
19
24
  import { TeamInviteEmail } from "./emails/team-invite.js";
20
25
  import { TeamMemberRemovedEmail } from "./emails/team-member-removed-email.js";
21
26
  import { TrackedMagicLink } from "./emails/tracked-magic-link.js";
@@ -58,6 +63,11 @@ export {
58
63
  TeamMemberRemovedEmail,
59
64
  TrackedMagicLink,
60
65
  TrackedMagicLinkActivate,
66
+ TrialConvertedEmail,
67
+ TrialEndingSoonEmail,
68
+ TrialExpiredEmail,
69
+ TrialMidpointEmail,
70
+ TrialStartedEmail,
61
71
  WeeklyProgressDigestEmail,
62
72
  WeekOneCheckinEmail,
63
73
  WelcomeEmail,
@@ -8,6 +8,6 @@ export {
8
8
  isPrivateRelayEmail,
9
9
  isValidEmailFormat,
10
10
  shouldSendEmailTo,
11
- } from "./email-validation";
11
+ } from "./email-validation.js";
12
12
 
13
- export { isAnonymousUsername, getSafeDisplayName } from "./username-validation";
13
+ export { isAnonymousUsername, getSafeDisplayName } from "./username-validation.js";