@tracked/emails 0.1.0
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.
- package/LICENSE +21 -0
- package/README.md +211 -0
- package/dist/emails/bodyweight-goal-reached.d.ts +14 -0
- package/dist/emails/bodyweight-goal-reached.d.ts.map +1 -0
- package/dist/emails/bodyweight-goal-reached.js +177 -0
- package/dist/emails/bodyweight-goal-reached.js.map +1 -0
- package/dist/emails/client-accepted-invitation.d.ts +10 -0
- package/dist/emails/client-accepted-invitation.d.ts.map +1 -0
- package/dist/emails/client-accepted-invitation.js +99 -0
- package/dist/emails/client-accepted-invitation.js.map +1 -0
- package/dist/emails/coach-invite.d.ts +10 -0
- package/dist/emails/coach-invite.d.ts.map +1 -0
- package/dist/emails/coach-invite.js +126 -0
- package/dist/emails/coach-invite.js.map +1 -0
- package/dist/emails/coach-removed-client.d.ts +8 -0
- package/dist/emails/coach-removed-client.d.ts.map +1 -0
- package/dist/emails/coach-removed-client.js +80 -0
- package/dist/emails/coach-removed-client.js.map +1 -0
- package/dist/emails/direct-message.d.ts +11 -0
- package/dist/emails/direct-message.d.ts.map +1 -0
- package/dist/emails/direct-message.js +103 -0
- package/dist/emails/direct-message.js.map +1 -0
- package/dist/emails/feature-discovery.d.ts +11 -0
- package/dist/emails/feature-discovery.d.ts.map +1 -0
- package/dist/emails/feature-discovery.js +121 -0
- package/dist/emails/feature-discovery.js.map +1 -0
- package/dist/emails/first-workout-assigned.d.ts +10 -0
- package/dist/emails/first-workout-assigned.d.ts.map +1 -0
- package/dist/emails/first-workout-assigned.js +98 -0
- package/dist/emails/first-workout-assigned.js.map +1 -0
- package/dist/emails/first-workout-completed.d.ts +11 -0
- package/dist/emails/first-workout-completed.d.ts.map +1 -0
- package/dist/emails/first-workout-completed.js +129 -0
- package/dist/emails/first-workout-completed.js.map +1 -0
- package/dist/emails/index.d.ts +7 -0
- package/dist/emails/index.d.ts.map +1 -0
- package/dist/emails/index.js +7 -0
- package/dist/emails/index.js.map +1 -0
- package/dist/emails/new-follower.d.ts +11 -0
- package/dist/emails/new-follower.d.ts.map +1 -0
- package/dist/emails/new-follower.js +98 -0
- package/dist/emails/new-follower.js.map +1 -0
- package/dist/emails/subscription-canceled.d.ts +10 -0
- package/dist/emails/subscription-canceled.d.ts.map +1 -0
- package/dist/emails/subscription-canceled.js +131 -0
- package/dist/emails/subscription-canceled.js.map +1 -0
- package/dist/emails/support-email.d.ts +8 -0
- package/dist/emails/support-email.d.ts.map +1 -0
- package/dist/emails/support-email.js +40 -0
- package/dist/emails/support-email.js.map +1 -0
- package/dist/emails/team-invite.d.ts +11 -0
- package/dist/emails/team-invite.d.ts.map +1 -0
- package/dist/emails/team-invite.js +100 -0
- package/dist/emails/team-invite.js.map +1 -0
- package/dist/emails/team-member-removed-email.d.ts +8 -0
- package/dist/emails/team-member-removed-email.d.ts.map +1 -0
- package/dist/emails/team-member-removed-email.js +97 -0
- package/dist/emails/team-member-removed-email.js.map +1 -0
- package/dist/emails/tracked-magic-link-activate.d.ts +7 -0
- package/dist/emails/tracked-magic-link-activate.d.ts.map +1 -0
- package/dist/emails/tracked-magic-link-activate.js +93 -0
- package/dist/emails/tracked-magic-link-activate.js.map +1 -0
- package/dist/emails/tracked-magic-link.d.ts +7 -0
- package/dist/emails/tracked-magic-link.d.ts.map +1 -0
- package/dist/emails/tracked-magic-link.js +101 -0
- package/dist/emails/tracked-magic-link.js.map +1 -0
- package/dist/emails/week-one-checkin.d.ts +10 -0
- package/dist/emails/week-one-checkin.d.ts.map +1 -0
- package/dist/emails/week-one-checkin.js +141 -0
- package/dist/emails/week-one-checkin.js.map +1 -0
- package/dist/emails/welcome.d.ts +8 -0
- package/dist/emails/welcome.d.ts.map +1 -0
- package/dist/emails/welcome.js +146 -0
- package/dist/emails/welcome.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/email-validation.d.ts +48 -0
- package/dist/utils/email-validation.d.ts.map +1 -0
- package/dist/utils/email-validation.js +72 -0
- package/dist/utils/email-validation.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/username-validation.d.ts +54 -0
- package/dist/utils/username-validation.d.ts.map +1 -0
- package/dist/utils/username-validation.js +76 -0
- package/dist/utils/username-validation.js.map +1 -0
- package/package.json +78 -0
- package/src/emails/bodyweight-goal-reached.tsx +396 -0
- package/src/emails/client-accepted-invitation.tsx +258 -0
- package/src/emails/coach-invite.tsx +270 -0
- package/src/emails/coach-removed-client.tsx +212 -0
- package/src/emails/direct-message.tsx +249 -0
- package/src/emails/feature-discovery.tsx +289 -0
- package/src/emails/first-workout-assigned.tsx +255 -0
- package/src/emails/first-workout-completed.tsx +312 -0
- package/src/emails/index.tsx +6 -0
- package/src/emails/new-follower.tsx +260 -0
- package/src/emails/subscription-canceled.tsx +311 -0
- package/src/emails/support-email.tsx +80 -0
- package/src/emails/team-invite.tsx +262 -0
- package/src/emails/team-member-removed-email.tsx +240 -0
- package/src/emails/tracked-magic-link-activate.tsx +252 -0
- package/src/emails/tracked-magic-link.tsx +264 -0
- package/src/emails/week-one-checkin.tsx +353 -0
- package/src/emails/welcome.tsx +341 -0
- package/src/index.ts +57 -0
- package/src/utils/email-validation.test.ts +78 -0
- package/src/utils/email-validation.ts +80 -0
- package/src/utils/index.ts +13 -0
- package/src/utils/username-validation.test.ts +118 -0
- package/src/utils/username-validation.ts +89 -0
- package/static/tracked-logo.png +0 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 Tracked Training Platform Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# @tracked/emails
|
|
2
|
+
|
|
3
|
+
Email templates and utilities for Tracked Training Platform.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- 📧 Pre-built React Email templates for common use cases
|
|
8
|
+
- ✅ Email and username validation utilities
|
|
9
|
+
- 🎨 Consistent branding and styling
|
|
10
|
+
- 📦 TypeScript support with full type definitions
|
|
11
|
+
- 🧪 Comprehensive test coverage
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install @tracked/emails
|
|
17
|
+
# or
|
|
18
|
+
yarn add @tracked/emails
|
|
19
|
+
# or
|
|
20
|
+
pnpm add @tracked/emails
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
### Email Templates
|
|
26
|
+
|
|
27
|
+
Import and use any of the pre-built email templates:
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
import { TrackedMagicLink, WelcomeEmail } from '@tracked/emails';
|
|
31
|
+
import { render } from '@react-email/components';
|
|
32
|
+
|
|
33
|
+
// Magic link email
|
|
34
|
+
const magicLinkHtml = render(
|
|
35
|
+
<TrackedMagicLink url="https://app.tracked.com/verify?token=..." />
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
// Welcome email
|
|
39
|
+
const welcomeHtml = render(
|
|
40
|
+
<WelcomeEmail username="john_doe" />
|
|
41
|
+
);
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Available Templates
|
|
45
|
+
|
|
46
|
+
- `TrackedMagicLink` - Magic link authentication emails
|
|
47
|
+
- `TrackedMagicLinkActivate` - Account activation emails
|
|
48
|
+
- `WelcomeEmail` - Welcome new users
|
|
49
|
+
- `CoachInviteEmail` - Coach invitation emails
|
|
50
|
+
- `TeamInviteEmail` - Team invitation emails
|
|
51
|
+
- `FirstWorkoutAssignedEmail` - First workout assignment notification
|
|
52
|
+
- `FirstWorkoutCompletedEmail` - First workout completion celebration
|
|
53
|
+
- `NewFollowerEmail` - New follower notifications
|
|
54
|
+
- `DirectMessageEmail` - Direct message notifications
|
|
55
|
+
- `SupportEmail` - Support request confirmations
|
|
56
|
+
- `FeatureDiscoveryEmail` - Feature announcement emails
|
|
57
|
+
- `WeekOneCheckinEmail` - First week check-in
|
|
58
|
+
- `ClientAcceptedInvitationEmail` - Client acceptance notification
|
|
59
|
+
- `CoachRemovedClientEmail` - Client removal notification
|
|
60
|
+
- `TeamMemberRemovedEmail` - Team member removal notification
|
|
61
|
+
- `SubscriptionCanceledEmail` - Subscription cancellation confirmation
|
|
62
|
+
- `BodyweightGoalReachedEmail` - Goal achievement celebration
|
|
63
|
+
|
|
64
|
+
### Validation Utilities
|
|
65
|
+
|
|
66
|
+
#### Email Validation
|
|
67
|
+
|
|
68
|
+
```typescript
|
|
69
|
+
import {
|
|
70
|
+
isValidEmailFormat,
|
|
71
|
+
isPrivateRelayEmail,
|
|
72
|
+
shouldSendEmailTo
|
|
73
|
+
} from '@tracked/emails';
|
|
74
|
+
|
|
75
|
+
// Check email format
|
|
76
|
+
isValidEmailFormat('user@example.com'); // true
|
|
77
|
+
isValidEmailFormat('invalid-email'); // false
|
|
78
|
+
|
|
79
|
+
// Detect Apple private relay emails
|
|
80
|
+
isPrivateRelayEmail('abc123@privaterelay.appleid.com'); // true
|
|
81
|
+
isPrivateRelayEmail('user@gmail.com'); // false
|
|
82
|
+
|
|
83
|
+
// Main validation function (recommended)
|
|
84
|
+
shouldSendEmailTo('user@example.com'); // true
|
|
85
|
+
shouldSendEmailTo('abc@privaterelay.appleid.com'); // false
|
|
86
|
+
shouldSendEmailTo(null); // false
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### Username Validation
|
|
90
|
+
|
|
91
|
+
```typescript
|
|
92
|
+
import {
|
|
93
|
+
isAnonymousUsername,
|
|
94
|
+
getSafeDisplayName
|
|
95
|
+
} from '@tracked/emails';
|
|
96
|
+
|
|
97
|
+
// Detect auto-generated UUIDs
|
|
98
|
+
isAnonymousUsername('01944f9e-8e64-7a78-9e1e-3daba7b13e9f'); // true
|
|
99
|
+
isAnonymousUsername('john_doe'); // false
|
|
100
|
+
|
|
101
|
+
// Get safe display name with intelligent fallback
|
|
102
|
+
getSafeDisplayName('john_doe', 'John', 'John Smith'); // 'john_doe'
|
|
103
|
+
getSafeDisplayName('01944f9e-...', 'John', 'John Smith'); // 'John'
|
|
104
|
+
getSafeDisplayName('01944f9e-...', null, 'John Smith'); // 'John Smith'
|
|
105
|
+
getSafeDisplayName('01944f9e-...', null, null); // 'there'
|
|
106
|
+
getSafeDisplayName('01944f9e-...', null, null, 'friend'); // 'friend'
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Development
|
|
110
|
+
|
|
111
|
+
### Setup
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
# Install dependencies
|
|
115
|
+
yarn install
|
|
116
|
+
|
|
117
|
+
# Run tests
|
|
118
|
+
yarn test
|
|
119
|
+
|
|
120
|
+
# Run tests in watch mode
|
|
121
|
+
yarn test:watch
|
|
122
|
+
|
|
123
|
+
# Build the package
|
|
124
|
+
yarn build
|
|
125
|
+
|
|
126
|
+
# Type check
|
|
127
|
+
yarn typecheck
|
|
128
|
+
|
|
129
|
+
# Lint
|
|
130
|
+
yarn lint
|
|
131
|
+
|
|
132
|
+
# Format code
|
|
133
|
+
yarn format:fix
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
### Preview Emails
|
|
137
|
+
|
|
138
|
+
This package uses [React Email](https://react.email/) for email development.
|
|
139
|
+
|
|
140
|
+
```bash
|
|
141
|
+
# Start the email preview server
|
|
142
|
+
yarn dev:email
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
Then open http://localhost:3000 to preview all email templates.
|
|
146
|
+
|
|
147
|
+
## Testing
|
|
148
|
+
|
|
149
|
+
The package includes comprehensive tests for all validation utilities:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
# Run all tests
|
|
153
|
+
yarn test
|
|
154
|
+
|
|
155
|
+
# Run with coverage
|
|
156
|
+
yarn test:coverage
|
|
157
|
+
|
|
158
|
+
# Watch mode for development
|
|
159
|
+
yarn test:watch
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
## Building
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
yarn build
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
This will:
|
|
169
|
+
1. Clean the `dist/` directory
|
|
170
|
+
2. Compile TypeScript to ESM format
|
|
171
|
+
3. Generate type definitions and source maps
|
|
172
|
+
|
|
173
|
+
## Publishing
|
|
174
|
+
|
|
175
|
+
```bash
|
|
176
|
+
# Version bump (patch/minor/major)
|
|
177
|
+
npm version patch
|
|
178
|
+
|
|
179
|
+
# Publish to npm
|
|
180
|
+
npm publish --access public
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## Package Structure
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
@tracked/emails/
|
|
187
|
+
├── src/
|
|
188
|
+
│ ├── emails/ # Email template components
|
|
189
|
+
│ ├── utils/ # Validation utilities
|
|
190
|
+
│ └── index.ts # Main entry point
|
|
191
|
+
├── static/ # Static assets (logos, images)
|
|
192
|
+
├── dist/ # Build output
|
|
193
|
+
└── package.json
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## TypeScript
|
|
197
|
+
|
|
198
|
+
This package is written in TypeScript and includes full type definitions. All exports are fully typed for the best developer experience.
|
|
199
|
+
|
|
200
|
+
## License
|
|
201
|
+
|
|
202
|
+
MIT © Tracked Training Platform Inc.
|
|
203
|
+
|
|
204
|
+
## Contributing
|
|
205
|
+
|
|
206
|
+
This package is part of the Tracked Training Platform ecosystem. For issues or feature requests, please contact the development team.
|
|
207
|
+
|
|
208
|
+
## Links
|
|
209
|
+
|
|
210
|
+
- [React Email Documentation](https://react.email/)
|
|
211
|
+
- [Tracked Training Platform](https://tracked.gg/)
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
interface BodyweightGoalReachedEmailProps {
|
|
2
|
+
userName: string;
|
|
3
|
+
goalType: "gain" | "loss" | "maintain";
|
|
4
|
+
startWeight: number;
|
|
5
|
+
currentWeight: number;
|
|
6
|
+
goalWeight: number;
|
|
7
|
+
weightUnit: "kg" | "lbs";
|
|
8
|
+
timeToGoal?: string;
|
|
9
|
+
progressUrl: string;
|
|
10
|
+
websiteUrl: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const BodyweightGoalReachedEmail: ({ userName, goalType, startWeight, currentWeight, goalWeight, weightUnit, timeToGoal, progressUrl, websiteUrl, }: BodyweightGoalReachedEmailProps) => import("react/jsx-runtime").JSX.Element;
|
|
13
|
+
export default BodyweightGoalReachedEmail;
|
|
14
|
+
//# sourceMappingURL=bodyweight-goal-reached.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bodyweight-goal-reached.d.ts","sourceRoot":"","sources":["../../src/emails/bodyweight-goal-reached.tsx"],"names":[],"mappings":"AAgBA,UAAU,+BAA+B;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,IAAI,GAAG,KAAK,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,eAAO,MAAM,0BAA0B,GAAI,kHAUxC,+BAA+B,4CAoNjC,CAAC;AA+IF,eAAe,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Body, Column, Container, Head, Hr, Html, Img, Link, Preview, Row, Section, Text, } from "@react-email/components";
|
|
3
|
+
const baseUrl = "https://tracked.gg/android-chrome-192x192.png";
|
|
4
|
+
export const BodyweightGoalReachedEmail = ({ userName, goalType, startWeight, currentWeight, goalWeight, weightUnit, timeToGoal, progressUrl, websiteUrl = "https://tracked.gg", }) => {
|
|
5
|
+
const weightChange = Math.abs(currentWeight - startWeight);
|
|
6
|
+
const changeDirection = currentWeight > startWeight ? "gained" : "lost";
|
|
7
|
+
const getGoalMessage = () => {
|
|
8
|
+
switch (goalType) {
|
|
9
|
+
case "gain":
|
|
10
|
+
return "You've reached your weight gain goal!";
|
|
11
|
+
case "loss":
|
|
12
|
+
return "You've reached your weight loss goal!";
|
|
13
|
+
case "maintain":
|
|
14
|
+
return "You've successfully maintained your goal weight!";
|
|
15
|
+
default:
|
|
16
|
+
return "You've reached your goal!";
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
return (_jsxs(Html, { children: [_jsxs(Head, { children: [_jsx("meta", { name: "color-scheme", content: "light only" }), _jsx("meta", { name: "supported-color-schemes", content: "light only" })] }), _jsx(Preview, { children: "Congratulations! You've reached your bodyweight goal on Tracked" }), _jsx(Body, { style: main, children: _jsx(Container, { style: container, children: _jsxs(Section, { style: box, children: [_jsxs(Row, { style: { marginBottom: "8px" }, children: [_jsx(Column, { style: { width: "auto", verticalAlign: "middle" }, children: _jsx(Img, { src: `${baseUrl}`, width: "28", height: "28", alt: "Tracked" }) }), _jsx(Column, { style: {
|
|
20
|
+
width: "auto",
|
|
21
|
+
verticalAlign: "middle",
|
|
22
|
+
paddingLeft: "4px",
|
|
23
|
+
}, children: _jsx(Text, { style: {
|
|
24
|
+
fontSize: "28px",
|
|
25
|
+
fontWeight: "900",
|
|
26
|
+
fontFamily: "Raleway, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
27
|
+
color: "#020617",
|
|
28
|
+
margin: "0",
|
|
29
|
+
lineHeight: "32px",
|
|
30
|
+
letterSpacing: "0.5px",
|
|
31
|
+
}, children: "TRACKED" }) })] }), _jsx(Hr, { style: hr }), _jsx(Section, { style: { textAlign: "center", margin: "24px 0" }, children: _jsx(Text, { style: { fontSize: "64px", margin: "0" }, children: "\uD83C\uDF89" }) }), _jsx(Text, { style: heading, children: "Goal Achieved!" }), _jsx(Text, { style: celebrationText, children: getGoalMessage() }), _jsxs(Section, { style: statsBox, children: [_jsx(Text, { style: statsHeading, children: "Your Achievement:" }), _jsxs(Row, { children: [_jsxs(Column, { children: [_jsx(Text, { style: statsLabel, children: "Starting Weight" }), _jsxs(Text, { style: statsValue, children: [startWeight, " ", weightUnit] })] }), _jsxs(Column, { children: [_jsx(Text, { style: statsLabel, children: "Current Weight" }), _jsxs(Text, { style: statsValue, children: [currentWeight, " ", weightUnit] })] }), _jsxs(Column, { children: [_jsx(Text, { style: statsLabel, children: "Goal Weight" }), _jsxs(Text, { style: statsValue, children: [goalWeight, " ", weightUnit] })] })] }), _jsx(Section, { style: changeBox, children: _jsxs(Text, { style: changeText, children: ["You've ", changeDirection, " ", weightChange.toFixed(1), " ", weightUnit, timeToGoal && ` in ${timeToGoal}`, "!"] }) })] }), _jsxs(Text, { style: paragraph, children: ["Congratulations, ", userName, "! This is a huge accomplishment that took dedication, consistency, and hard work. You set a goal and achieved it - that's something to be proud of!"] }), _jsx("div", { style: {
|
|
32
|
+
marginTop: "24px",
|
|
33
|
+
marginBottom: "24px",
|
|
34
|
+
textAlign: "left",
|
|
35
|
+
}, children: _jsx("a", { href: progressUrl, style: {
|
|
36
|
+
backgroundColor: "#0f172a",
|
|
37
|
+
borderRadius: "8px",
|
|
38
|
+
fontSize: "16px",
|
|
39
|
+
fontWeight: "bold",
|
|
40
|
+
textDecoration: "none",
|
|
41
|
+
padding: "12px 32px",
|
|
42
|
+
display: "inline-block",
|
|
43
|
+
}, children: _jsx("span", { style: { color: "#ffffff", textDecoration: "none" }, children: "View Your Progress" }) }) }), _jsxs(Section, { style: nextStepsBox, children: [_jsx(Text, { style: nextStepsHeading, children: "What's Next?" }), _jsxs("ul", { style: nextStepsList, children: [_jsx("li", { style: nextStepItem, children: "Maintain your progress with consistent training" }), _jsx("li", { style: nextStepItem, children: "Set a new goal to continue your journey" }), _jsx("li", { style: nextStepItem, children: "Share your success with the Tracked community" }), _jsx("li", { style: nextStepItem, children: "Reflect on what worked and keep building on it" })] })] }), _jsxs(Section, { style: motivationBox, children: [_jsx(Text, { style: motivationText, children: "\"Success is the sum of small efforts repeated day in and day out.\"" }), _jsx(Text, { style: { ...motivationText, marginTop: "8px", fontStyle: "normal" }, children: "You proved it - congratulations! \uD83D\uDCAA" })] }), _jsx("div", { style: {
|
|
44
|
+
textAlign: "left",
|
|
45
|
+
margin: "24px 0",
|
|
46
|
+
}, children: _jsx("a", { href: "https://www.discord.gg/trackedgg", style: {
|
|
47
|
+
backgroundColor: "#5865F2",
|
|
48
|
+
borderRadius: "8px",
|
|
49
|
+
fontSize: "16px",
|
|
50
|
+
fontWeight: "bold",
|
|
51
|
+
textDecoration: "none",
|
|
52
|
+
padding: "12px 32px",
|
|
53
|
+
display: "inline-block",
|
|
54
|
+
}, children: _jsx("span", { style: { color: "#ffffff", textDecoration: "none" }, children: "Join our Discord Community" }) }) }), _jsx(Hr, { style: hr }), _jsxs(Text, { style: footer, children: ["Copyright \u00A9 Tracked Training Platform Inc. ", _jsx("br", {}), " 9101 Horne Street, Vancouver, BC"] }), _jsxs(Container, { children: [_jsx(Link, { href: `${websiteUrl}/terms`, style: { ...footer, paddingRight: 10 }, children: "Terms" }), _jsx(Link, { style: { ...footer, paddingRight: 10 }, children: " | " }), _jsx(Link, { href: `${websiteUrl}/privacy`, style: { ...footer, paddingRight: 10 }, children: "Privacy" }), _jsx(Link, { style: { ...footer, paddingRight: 10 }, children: " | " }), _jsx(Link, { href: `${websiteUrl}/support`, style: { ...footer, paddingRight: 10 }, children: "Support" })] }), _jsx(Text, { style: footer, children: "This is a service notification by the Tracked Training Platform." })] }) }) })] }));
|
|
55
|
+
};
|
|
56
|
+
const main = {
|
|
57
|
+
backgroundColor: "#020617", // slate-950
|
|
58
|
+
fontFamily: '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Ubuntu,sans-serif',
|
|
59
|
+
};
|
|
60
|
+
const container = {
|
|
61
|
+
backgroundColor: "#020617", // slate-950
|
|
62
|
+
margin: "0 auto",
|
|
63
|
+
padding: "20px 0 48px",
|
|
64
|
+
marginBottom: "64px",
|
|
65
|
+
borderRadius: "8px",
|
|
66
|
+
};
|
|
67
|
+
const box = {
|
|
68
|
+
padding: "0 24px",
|
|
69
|
+
};
|
|
70
|
+
const hr = {
|
|
71
|
+
borderColor: "#4ade80", // green-400
|
|
72
|
+
margin: "24px 0",
|
|
73
|
+
borderWidth: "1px",
|
|
74
|
+
};
|
|
75
|
+
const paragraph = {
|
|
76
|
+
color: "#ffffff", // white
|
|
77
|
+
fontSize: "16px",
|
|
78
|
+
lineHeight: "24px",
|
|
79
|
+
textAlign: "left",
|
|
80
|
+
};
|
|
81
|
+
const heading = {
|
|
82
|
+
color: "#ffffff", // white
|
|
83
|
+
fontSize: "32px",
|
|
84
|
+
lineHeight: "40px",
|
|
85
|
+
fontWeight: "bold",
|
|
86
|
+
marginBottom: "8px",
|
|
87
|
+
textAlign: "center",
|
|
88
|
+
};
|
|
89
|
+
const celebrationText = {
|
|
90
|
+
color: "#4ade80",
|
|
91
|
+
fontSize: "18px",
|
|
92
|
+
lineHeight: "26px",
|
|
93
|
+
textAlign: "center",
|
|
94
|
+
marginBottom: "24px",
|
|
95
|
+
};
|
|
96
|
+
const statsBox = {
|
|
97
|
+
backgroundColor: "#1e293b",
|
|
98
|
+
padding: "20px 24px",
|
|
99
|
+
borderRadius: "8px",
|
|
100
|
+
margin: "24px 0",
|
|
101
|
+
borderLeft: "4px solid #4ade80",
|
|
102
|
+
};
|
|
103
|
+
const statsHeading = {
|
|
104
|
+
color: "#4ade80",
|
|
105
|
+
fontSize: "16px",
|
|
106
|
+
fontWeight: "bold",
|
|
107
|
+
marginBottom: "16px",
|
|
108
|
+
textAlign: "center",
|
|
109
|
+
};
|
|
110
|
+
const statsLabel = {
|
|
111
|
+
color: "#94a3b8",
|
|
112
|
+
fontSize: "12px",
|
|
113
|
+
textAlign: "center",
|
|
114
|
+
marginBottom: "4px",
|
|
115
|
+
textTransform: "uppercase",
|
|
116
|
+
};
|
|
117
|
+
const statsValue = {
|
|
118
|
+
color: "#ffffff",
|
|
119
|
+
fontSize: "20px",
|
|
120
|
+
fontWeight: "bold",
|
|
121
|
+
textAlign: "center",
|
|
122
|
+
};
|
|
123
|
+
const changeBox = {
|
|
124
|
+
backgroundColor: "#0f172a",
|
|
125
|
+
padding: "12px 16px",
|
|
126
|
+
borderRadius: "6px",
|
|
127
|
+
marginTop: "16px",
|
|
128
|
+
};
|
|
129
|
+
const changeText = {
|
|
130
|
+
color: "#4ade80",
|
|
131
|
+
fontSize: "16px",
|
|
132
|
+
fontWeight: "bold",
|
|
133
|
+
textAlign: "center",
|
|
134
|
+
margin: "0",
|
|
135
|
+
};
|
|
136
|
+
const nextStepsBox = {
|
|
137
|
+
backgroundColor: "#1e293b",
|
|
138
|
+
padding: "16px 24px",
|
|
139
|
+
borderRadius: "8px",
|
|
140
|
+
margin: "24px 0",
|
|
141
|
+
};
|
|
142
|
+
const nextStepsHeading = {
|
|
143
|
+
color: "#ffffff",
|
|
144
|
+
fontSize: "16px",
|
|
145
|
+
fontWeight: "bold",
|
|
146
|
+
marginBottom: "12px",
|
|
147
|
+
};
|
|
148
|
+
const nextStepsList = {
|
|
149
|
+
margin: "0",
|
|
150
|
+
paddingLeft: "20px",
|
|
151
|
+
};
|
|
152
|
+
const nextStepItem = {
|
|
153
|
+
color: "#e2e8f0",
|
|
154
|
+
fontSize: "14px",
|
|
155
|
+
lineHeight: "24px",
|
|
156
|
+
marginBottom: "8px",
|
|
157
|
+
};
|
|
158
|
+
const motivationBox = {
|
|
159
|
+
backgroundColor: "transparent",
|
|
160
|
+
padding: "16px 0",
|
|
161
|
+
margin: "24px 0",
|
|
162
|
+
borderLeft: "4px solid #4ade80",
|
|
163
|
+
paddingLeft: "20px",
|
|
164
|
+
};
|
|
165
|
+
const motivationText = {
|
|
166
|
+
color: "#94a3b8",
|
|
167
|
+
fontSize: "15px",
|
|
168
|
+
lineHeight: "22px",
|
|
169
|
+
fontStyle: "italic",
|
|
170
|
+
};
|
|
171
|
+
const footer = {
|
|
172
|
+
color: "#94a3b8", // slate-400 for subtle footer text
|
|
173
|
+
fontSize: "12px",
|
|
174
|
+
lineHeight: "16px",
|
|
175
|
+
};
|
|
176
|
+
export default BodyweightGoalReachedEmail;
|
|
177
|
+
//# sourceMappingURL=bodyweight-goal-reached.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bodyweight-goal-reached.js","sourceRoot":"","sources":["../../src/emails/bodyweight-goal-reached.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface ClientAcceptedInvitationEmailProps {
|
|
2
|
+
coachName: string;
|
|
3
|
+
clientName: string;
|
|
4
|
+
clientEmail: string;
|
|
5
|
+
clientProfileUrl: string;
|
|
6
|
+
websiteUrl: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const ClientAcceptedInvitationEmail: ({ coachName, clientName, clientEmail, clientProfileUrl, websiteUrl, }: ClientAcceptedInvitationEmailProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export default ClientAcceptedInvitationEmail;
|
|
10
|
+
//# sourceMappingURL=client-accepted-invitation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-accepted-invitation.d.ts","sourceRoot":"","sources":["../../src/emails/client-accepted-invitation.tsx"],"names":[],"mappings":"AAiBA,UAAU,kCAAkC;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,eAAO,MAAM,6BAA6B,GAAI,uEAM3C,kCAAkC,4CA4JpC,CAAC;AAoEF,eAAe,6BAA6B,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { Body, Column, Container, Head, Hr, Html, Img, Link, Preview, Row, Section, Text, } from "@react-email/components";
|
|
3
|
+
const baseUrl = "https://tracked.gg/android-chrome-192x192.png";
|
|
4
|
+
export const ClientAcceptedInvitationEmail = ({ coachName, clientName, clientEmail, clientProfileUrl, websiteUrl = "https://tracked.gg", }) => {
|
|
5
|
+
const displayName = clientName || clientEmail;
|
|
6
|
+
return (_jsxs(Html, { children: [_jsxs(Head, { children: [_jsx("meta", { name: "color-scheme", content: "light only" }), _jsx("meta", { name: "supported-color-schemes", content: "light only" })] }), _jsxs(Preview, { children: [displayName, " accepted your coaching invitation on Tracked"] }), _jsx(Body, { style: main, children: _jsx(Container, { style: container, children: _jsxs(Section, { style: box, children: [_jsxs(Row, { style: { marginBottom: "8px" }, children: [_jsx(Column, { style: { width: "auto", verticalAlign: "middle" }, children: _jsx(Img, { src: `${baseUrl}`, width: "28", height: "28", alt: "Tracked" }) }), _jsx(Column, { style: {
|
|
7
|
+
width: "auto",
|
|
8
|
+
verticalAlign: "middle",
|
|
9
|
+
paddingLeft: "4px",
|
|
10
|
+
}, children: _jsx(Text, { style: {
|
|
11
|
+
fontSize: "28px",
|
|
12
|
+
fontWeight: "900",
|
|
13
|
+
fontFamily: "Raleway, -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif",
|
|
14
|
+
color: "#020617",
|
|
15
|
+
margin: "0",
|
|
16
|
+
lineHeight: "32px",
|
|
17
|
+
letterSpacing: "0.5px",
|
|
18
|
+
}, children: "TRACKED" }) })] }), _jsx(Hr, { style: hr }), _jsx(Text, { style: heading, children: "Great News!" }), _jsxs(Text, { style: paragraph, children: ["Hi ", coachName, ", ", displayName, " has accepted your coaching invitation and is now part of your coaching roster."] }), _jsxs(Section, { style: infoBox, children: [_jsx(Text, { style: infoHeading, children: "Client Details:" }), _jsxs(Text, { style: infoText, children: [_jsx("strong", { children: "Name:" }), " ", displayName] }), _jsxs(Text, { style: infoText, children: [_jsx("strong", { children: "Email:" }), " ", clientEmail] })] }), _jsx(Text, { style: paragraph, children: "You can now start creating their personalized training program and tracking their progress." }), _jsx("div", { style: {
|
|
19
|
+
marginTop: "24px",
|
|
20
|
+
marginBottom: "24px",
|
|
21
|
+
textAlign: "left",
|
|
22
|
+
}, children: _jsx("a", { href: clientProfileUrl, style: {
|
|
23
|
+
backgroundColor: "#0f172a",
|
|
24
|
+
borderRadius: "8px",
|
|
25
|
+
fontSize: "16px",
|
|
26
|
+
fontWeight: "bold",
|
|
27
|
+
textDecoration: "none",
|
|
28
|
+
padding: "12px 32px",
|
|
29
|
+
display: "inline-block",
|
|
30
|
+
}, children: _jsx("span", { style: { color: "#ffffff", textDecoration: "none" }, children: "View Client Profile" }) }) }), _jsx(Text, { style: { ...paragraph }, children: "Get started by creating their first workout program or checking in with them through the app." }), _jsx("div", { style: {
|
|
31
|
+
textAlign: "left",
|
|
32
|
+
margin: "24px 0",
|
|
33
|
+
}, children: _jsx("a", { href: "https://www.discord.gg/trackedgg", style: {
|
|
34
|
+
backgroundColor: "#5865F2",
|
|
35
|
+
borderRadius: "8px",
|
|
36
|
+
fontSize: "16px",
|
|
37
|
+
fontWeight: "bold",
|
|
38
|
+
textDecoration: "none",
|
|
39
|
+
padding: "12px 32px",
|
|
40
|
+
display: "inline-block",
|
|
41
|
+
}, children: _jsx("span", { style: { color: "#ffffff", textDecoration: "none" }, children: "Join our Discord Community" }) }) }), _jsx(Hr, { style: hr }), _jsxs(Text, { style: footer, children: ["Copyright \u00A9 Tracked Training Platform Inc. ", _jsx("br", {}), " 9101 Horne Street, Vancouver, BC"] }), _jsxs(Container, { children: [_jsx(Link, { href: `${websiteUrl}/terms`, style: { ...footer, paddingRight: 10 }, children: "Terms" }), _jsx(Link, { style: { ...footer, paddingRight: 10 }, children: " | " }), _jsx(Link, { href: `${websiteUrl}/privacy`, style: { ...footer, paddingRight: 10 }, children: "Privacy" }), _jsx(Link, { style: { ...footer, paddingRight: 10 }, children: " | " }), _jsx(Link, { href: `${websiteUrl}/support`, style: { ...footer, paddingRight: 10 }, children: "Support" })] }), _jsx(Text, { style: footer, children: "This is a service notification by the Tracked Training Platform." })] }) }) })] }));
|
|
42
|
+
};
|
|
43
|
+
const main = {
|
|
44
|
+
backgroundColor: "#020617", // slate-950
|
|
45
|
+
fontFamily: '-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Ubuntu,sans-serif',
|
|
46
|
+
};
|
|
47
|
+
const container = {
|
|
48
|
+
backgroundColor: "#020617", // slate-950
|
|
49
|
+
margin: "0 auto",
|
|
50
|
+
padding: "20px 0 48px",
|
|
51
|
+
marginBottom: "64px",
|
|
52
|
+
borderRadius: "8px",
|
|
53
|
+
};
|
|
54
|
+
const box = {
|
|
55
|
+
padding: "0 24px",
|
|
56
|
+
};
|
|
57
|
+
const hr = {
|
|
58
|
+
borderColor: "#4ade80", // green-400
|
|
59
|
+
margin: "24px 0",
|
|
60
|
+
borderWidth: "1px",
|
|
61
|
+
};
|
|
62
|
+
const paragraph = {
|
|
63
|
+
color: "#ffffff", // white
|
|
64
|
+
fontSize: "16px",
|
|
65
|
+
lineHeight: "24px",
|
|
66
|
+
textAlign: "left",
|
|
67
|
+
};
|
|
68
|
+
const heading = {
|
|
69
|
+
color: "#ffffff", // white
|
|
70
|
+
fontSize: "24px",
|
|
71
|
+
lineHeight: "32px",
|
|
72
|
+
fontWeight: "bold",
|
|
73
|
+
marginBottom: "16px",
|
|
74
|
+
};
|
|
75
|
+
const infoBox = {
|
|
76
|
+
backgroundColor: "#1e293b",
|
|
77
|
+
padding: "16px 24px",
|
|
78
|
+
borderRadius: "8px",
|
|
79
|
+
margin: "24px 0",
|
|
80
|
+
};
|
|
81
|
+
const infoHeading = {
|
|
82
|
+
color: "#ffffff",
|
|
83
|
+
fontSize: "16px",
|
|
84
|
+
fontWeight: "bold",
|
|
85
|
+
marginBottom: "12px",
|
|
86
|
+
};
|
|
87
|
+
const infoText = {
|
|
88
|
+
color: "#e2e8f0",
|
|
89
|
+
fontSize: "14px",
|
|
90
|
+
lineHeight: "24px",
|
|
91
|
+
marginBottom: "4px",
|
|
92
|
+
};
|
|
93
|
+
const footer = {
|
|
94
|
+
color: "#94a3b8", // slate-400 for subtle footer text
|
|
95
|
+
fontSize: "12px",
|
|
96
|
+
lineHeight: "16px",
|
|
97
|
+
};
|
|
98
|
+
export default ClientAcceptedInvitationEmail;
|
|
99
|
+
//# sourceMappingURL=client-accepted-invitation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-accepted-invitation.js","sourceRoot":"","sources":["../../src/emails/client-accepted-invitation.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
interface CoachInviteEmailProps {
|
|
2
|
+
coachName: string;
|
|
3
|
+
coachEmail: string;
|
|
4
|
+
websiteUrl: string;
|
|
5
|
+
invitationLink: string;
|
|
6
|
+
coachAvatarUrl?: string;
|
|
7
|
+
}
|
|
8
|
+
export declare const CoachInviteEmail: ({ coachName, coachEmail, websiteUrl, invitationLink, coachAvatarUrl, }: CoachInviteEmailProps) => import("react/jsx-runtime").JSX.Element;
|
|
9
|
+
export default CoachInviteEmail;
|
|
10
|
+
//# sourceMappingURL=coach-invite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coach-invite.d.ts","sourceRoot":"","sources":["../../src/emails/coach-invite.tsx"],"names":[],"mappings":"AAeA,UAAU,qBAAqB;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAID,eAAO,MAAM,gBAAgB,GAAI,wEAM9B,qBAAqB,4CA8GvB,CAAC;AAgIF,eAAe,gBAAgB,CAAC"}
|