update email templates

This commit is contained in:
Emily
2025-04-11 18:16:14 +02:00
parent 475512711b
commit 1187cafd07
10 changed files with 290 additions and 121 deletions

View File

@@ -15,7 +15,7 @@ export async function checkLimitsForEmail(projectCounts: TUserLimit) {
await LimitNotifyModel.create({ user_id, limit1: false, limit2: false, limit3: false }) await LimitNotifyModel.create({ user_id, limit1: false, limit2: false, limit3: false })
} }
const owner = await UserModel.findById(project.owner); const owner = await UserModel.findById(user_id);
if (!owner) return; if (!owner) return;
const userName = owner.given_name || owner.name || 'no_name'; const userName = owner.given_name || owner.name || 'no_name';
@@ -25,7 +25,7 @@ export async function checkLimitsForEmail(projectCounts: TUserLimit) {
if (hasNotifyEntry.limit3 === true) return; if (hasNotifyEntry.limit3 === true) return;
setImmediate(() => { setImmediate(() => {
const emailData = EmailService.getEmailServerInfo('limit_max', { target: owner.email, userName }); const emailData = EmailService.getEmailServerInfo('limit_max', { target: owner.email });
EmailServiceHelper.sendEmail(emailData); EmailServiceHelper.sendEmail(emailData);
}); });
@@ -36,7 +36,7 @@ export async function checkLimitsForEmail(projectCounts: TUserLimit) {
if (hasNotifyEntry.limit2 === true) return; if (hasNotifyEntry.limit2 === true) return;
setImmediate(() => { setImmediate(() => {
const emailData = EmailService.getEmailServerInfo('limit_90', { target: owner.email, userName }); const emailData = EmailService.getEmailServerInfo('limit_90', { target: owner.email });
EmailServiceHelper.sendEmail(emailData); EmailServiceHelper.sendEmail(emailData);
}); });
@@ -47,7 +47,7 @@ export async function checkLimitsForEmail(projectCounts: TUserLimit) {
if (hasNotifyEntry.limit1 === true) return; if (hasNotifyEntry.limit1 === true) return;
setImmediate(() => { setImmediate(() => {
const emailData = EmailService.getEmailServerInfo('limit_50', { target: owner.email, userName }); const emailData = EmailService.getEmailServerInfo('limit_50', { target: owner.email });
EmailServiceHelper.sendEmail(emailData); EmailServiceHelper.sendEmail(emailData);
}); });

View File

@@ -62,7 +62,7 @@ export class EmailService {
} }
} }
static async sendLimitEmail50(target: string, projectName: string) { static async sendLimitEmail50(target: string) {
try { try {
const sendSmtpEmail = new SendSmtpEmail(); const sendSmtpEmail = new SendSmtpEmail();
sendSmtpEmail.subject = "⚡ You've reached 50% limit on Litlyx"; sendSmtpEmail.subject = "⚡ You've reached 50% limit on Litlyx";
@@ -70,7 +70,6 @@ export class EmailService {
sendSmtpEmail.to = [{ "email": target }]; sendSmtpEmail.to = [{ "email": target }];
sendSmtpEmail.htmlContent = TEMPLATE.LIMIT_50_EMAIL sendSmtpEmail.htmlContent = TEMPLATE.LIMIT_50_EMAIL
.replace(/\[Project Name\]/, projectName)
.toString(); .toString();
await this.apiInstance.sendTransacEmail(sendSmtpEmail); await this.apiInstance.sendTransacEmail(sendSmtpEmail);
@@ -81,14 +80,13 @@ export class EmailService {
} }
} }
static async sendLimitEmail90(target: string, projectName: string) { static async sendLimitEmail90(target: string) {
try { try {
const sendSmtpEmail = new SendSmtpEmail(); const sendSmtpEmail = new SendSmtpEmail();
sendSmtpEmail.subject = "⚡ You've reached 90% limit on Litlyx"; sendSmtpEmail.subject = "⚡ You've reached 90% limit on Litlyx";
sendSmtpEmail.sender = { "name": "Litlyx", "email": "help@litlyx.com" }; sendSmtpEmail.sender = { "name": "Litlyx", "email": "help@litlyx.com" };
sendSmtpEmail.to = [{ "email": target }]; sendSmtpEmail.to = [{ "email": target }];
sendSmtpEmail.htmlContent = TEMPLATE.LIMIT_90_EMAIL sendSmtpEmail.htmlContent = TEMPLATE.LIMIT_90_EMAIL
.replace(/\[Project Name\]/, projectName)
.toString(); .toString();
await this.apiInstance.sendTransacEmail(sendSmtpEmail); await this.apiInstance.sendTransacEmail(sendSmtpEmail);
return true; return true;
@@ -98,14 +96,13 @@ export class EmailService {
} }
} }
static async sendLimitEmailMax(target: string, projectName: string) { static async sendLimitEmailMax(target: string) {
try { try {
const sendSmtpEmail = new SendSmtpEmail(); const sendSmtpEmail = new SendSmtpEmail();
sendSmtpEmail.subject = "🚨 You've reached your limit on Litlyx!"; sendSmtpEmail.subject = "🚨 You've reached your limit on Litlyx!";
sendSmtpEmail.sender = { "name": "Litlyx", "email": "help@litlyx.com" }; sendSmtpEmail.sender = { "name": "Litlyx", "email": "help@litlyx.com" };
sendSmtpEmail.to = [{ "email": target }]; sendSmtpEmail.to = [{ "email": target }];
sendSmtpEmail.htmlContent = TEMPLATE.LIMIT_MAX_EMAIL sendSmtpEmail.htmlContent = TEMPLATE.LIMIT_MAX_EMAIL
.replace(/\[Project Name\]/, projectName)
.toString(); .toString();
await this.apiInstance.sendTransacEmail(sendSmtpEmail); await this.apiInstance.sendTransacEmail(sendSmtpEmail);
return true; return true;
@@ -130,14 +127,13 @@ export class EmailService {
} }
} }
static async sendPurchaseEmail(target: string, projectName: string) { static async sendPurchaseEmail(target: string) {
try { try {
const sendSmtpEmail = new SendSmtpEmail(); const sendSmtpEmail = new SendSmtpEmail();
sendSmtpEmail.subject = "Thank You for Upgrading Your Litlyx Plan!"; sendSmtpEmail.subject = "Thank You for Upgrading Your Litlyx Plan!";
sendSmtpEmail.sender = { "name": "Litlyx", "email": "help@litlyx.com" }; sendSmtpEmail.sender = { "name": "Litlyx", "email": "help@litlyx.com" };
sendSmtpEmail.to = [{ "email": target }]; sendSmtpEmail.to = [{ "email": target }];
sendSmtpEmail.htmlContent = TEMPLATE.PURCHASE_EMAIL sendSmtpEmail.htmlContent = TEMPLATE.PURCHASE_EMAIL
.replace(/\[Project Name\]/, projectName)
.toString(); .toString();
await this.apiInstance.sendTransacEmail(sendSmtpEmail); await this.apiInstance.sendTransacEmail(sendSmtpEmail);
return true; return true;

View File

@@ -90,10 +90,8 @@ app.post('/send/welcome', express.json(), async (req, res) => {
app.post('/send/purchase', express.json(), async (req, res) => { app.post('/send/purchase', express.json(), async (req, res) => {
try { try {
console.log('PURCHASE EMAIL DISABLED') const { target } = req.body;
return; const ok = await EmailService.sendPurchaseEmail(target);
const { target, projectName } = req.body;
const ok = await EmailService.sendPurchaseEmail(target, projectName);
res.json({ ok }); res.json({ ok });
} catch (ex) { } catch (ex) {
res.status(500).json({ error: ex.message }); res.status(500).json({ error: ex.message });
@@ -132,8 +130,8 @@ app.post('/send/anomaly/visits_events', express.json(), async (req, res) => {
app.post('/send/limit/50', express.json(), async (req, res) => { app.post('/send/limit/50', express.json(), async (req, res) => {
try { try {
const { target, projectName } = req.body; const { target } = req.body;
const ok = await EmailService.sendLimitEmail50(target, projectName); const ok = await EmailService.sendLimitEmail50(target);
res.json({ ok }); res.json({ ok });
} catch (ex) { } catch (ex) {
res.status(500).json({ error: ex.message }); res.status(500).json({ error: ex.message });
@@ -142,8 +140,8 @@ app.post('/send/limit/50', express.json(), async (req, res) => {
app.post('/send/limit/90', express.json(), async (req, res) => { app.post('/send/limit/90', express.json(), async (req, res) => {
try { try {
const { target, projectName } = req.body; const { target } = req.body;
const ok = await EmailService.sendLimitEmail90(target, projectName); const ok = await EmailService.sendLimitEmail90(target);
res.json({ ok }); res.json({ ok });
} catch (ex) { } catch (ex) {
res.status(500).json({ error: ex.message }); res.status(500).json({ error: ex.message });
@@ -152,8 +150,8 @@ app.post('/send/limit/90', express.json(), async (req, res) => {
app.post('/send/limit/max', express.json(), async (req, res) => { app.post('/send/limit/max', express.json(), async (req, res) => {
try { try {
const { target, projectName } = req.body; const { target } = req.body;
const ok = await EmailService.sendLimitEmailMax(target, projectName); const ok = await EmailService.sendLimitEmailMax(target);
res.json({ ok }); res.json({ ok });
} catch (ex) { } catch (ex) {
res.status(500).json({ error: ex.message }); res.status(500).json({ error: ex.message });

View File

@@ -1,5 +1,6 @@
export const CONFIRM_EMAIL = `<!DOCTYPE html> export const CONFIRM_EMAIL = `
<!DOCTYPE html>
<html> <html>
<head> <head>
@@ -35,7 +36,7 @@ export const CONFIRM_EMAIL = `<!DOCTYPE html>
.button { .button {
display: inline-block; display: inline-block;
padding: 10px 20px; padding: 10px 20px;
background-color: #007bff; background-color: #0a0a0a;
color: #ffffff; color: #ffffff;
text-decoration: none; text-decoration: none;
border-radius: 5px; border-radius: 5px;
@@ -61,7 +62,7 @@ export const CONFIRM_EMAIL = `<!DOCTYPE html>
<p>We hope to hear from you soon!</p> <p>We hope to hear from you soon!</p>
<div class="footer"> <div class="footer">
<p>&copy; 2024 Litlyx. All rights reserved.</p> <p>2025 &copy; Litlyx. All rights reserved.</p>
</div> </div>
</div> </div>
</body> </body>

View File

@@ -1,14 +1,10 @@
export const LIMIT_50_EMAIL = `<!DOCTYPE html export const LIMIT_50_EMAIL = `
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!DOCTYPE html>
<html dir="ltr" lang="en"> <html>
<head> <head>
<link rel="preload" as="image" href="https://react-email-demo-lpdmf0ryo-resend.vercel.app/static/airbnb-logo.png" />
<link rel="preload" as="image"
href="https://react-email-demo-lpdmf0ryo-resend.vercel.app/static/airbnb-review-user.jpg" />
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<meta name="x-apple-disable-message-reformatting" /> <meta name="x-apple-disable-message-reformatting" />
<!--$-->
</head> </head>
<body <body
@@ -42,13 +38,13 @@ export const LIMIT_50_EMAIL = `<!DOCTYPE html
<tr style="width:100%"> <tr style="width:100%">
<p <p
style="font-size:32px;line-height:1.3;margin:16px 0;font-weight:700;color:#484848"> style="font-size:32px;line-height:1.3;margin:16px 0;font-weight:700;color:#484848">
Youve Reached 50% of Your Litlyx Project Limit on [Project Name] Youve Reached 50% of Your Litlyx's Tracking Limits
</p> </p>
<p <p
style="font-size:18px;line-height:1.4;margin:16px 0;color:#484848;padding:24px;background-color:#f2f3f3;border-radius:4px"> style="font-size:18px;line-height:1.4;margin:16px 0;color:#484848;padding:24px;background-color:#f2f3f3;border-radius:4px">
To avoid losing precious data, please remember to monitor your usage To avoid losing precious data, please remember to monitor your usage
on the <strong>Litlyx Dashboard</strong>. You can find your current on the <strong>Litlyx Dashboard</strong>. You can find your current
usage details under <strong>Settings > Billing Tab</strong> usage details in your account section.
</p> </p>
<p>If you need more data collection storage, you may consider upgrading <p>If you need more data collection storage, you may consider upgrading
@@ -65,7 +61,7 @@ export const LIMIT_50_EMAIL = `<!DOCTYPE html
<p>Have a nice day!</p> <p>Have a nice day!</p>
<p>Antonio,</p> <p>Antonio,</p>
<p>CEO | Litlyx</p> <p>CEO at Litlyx</p>
<a href="https://dashboard.litlyx.com/" <a href="https://dashboard.litlyx.com/"
style="line-height:100%;text-decoration:none;display:block;max-width:100%;mso-padding-alt:0px;background-color:#5680f8;border-radius:3px;color:#fff;font-size:18px;padding-top:19px;padding-bottom:19px;text-align:center;width:100%;padding:19px 0px 19px 0px" style="line-height:100%;text-decoration:none;display:block;max-width:100%;mso-padding-alt:0px;background-color:#5680f8;border-radius:3px;color:#fff;font-size:18px;padding-top:19px;padding-bottom:19px;text-align:center;width:100%;padding:19px 0px 19px 0px"
@@ -92,7 +88,7 @@ export const LIMIT_50_EMAIL = `<!DOCTYPE html
<tr style="width:100%"> <tr style="width:100%">
<p <p
style="font-size:14px;line-height:24px;margin:16px 0;color:#9ca299;margin-bottom:10px"> style="font-size:14px;line-height:24px;margin:16px 0;color:#9ca299;margin-bottom:10px">
2024 © Litlyx. All rights reserved. 2025 © Litlyx. All rights reserved.
<br> <br>
Litlyx S.R.L. - Viale Tirreno, 187 - 00141 Rome - P.IVA: Litlyx S.R.L. - Viale Tirreno, 187 - 00141 Rome - P.IVA:
17814721001- REA: RM-1743194 17814721001- REA: RM-1743194

View File

@@ -1,14 +1,10 @@
export const LIMIT_90_EMAIL = `<!DOCTYPE html export const LIMIT_90_EMAIL = `
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <!DOCTYPE html>
<html dir="ltr" lang="en"> <html>
<head> <head>
<link rel="preload" as="image" href="https://react-email-demo-lpdmf0ryo-resend.vercel.app/static/airbnb-logo.png" />
<link rel="preload" as="image"
href="https://react-email-demo-lpdmf0ryo-resend.vercel.app/static/airbnb-review-user.jpg" />
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<meta name="x-apple-disable-message-reformatting" /> <meta name="x-apple-disable-message-reformatting" />
<!--$-->
</head> </head>
<body <body
@@ -42,13 +38,13 @@ export const LIMIT_90_EMAIL = `<!DOCTYPE html
<tr style="width:100%"> <tr style="width:100%">
<p <p
style="font-size:32px;line-height:1.3;margin:16px 0;font-weight:700;color:#484848"> style="font-size:32px;line-height:1.3;margin:16px 0;font-weight:700;color:#484848">
Youve Reached 90% of Your Litlyx Project Limit on [Project Name] Youve Reached 90% of Your Litlyx's Tracking Limits
</p> </p>
<p <p
style="font-size:18px;line-height:1.4;margin:16px 0;color:#484848;padding:24px;background-color:#f2f3f3;border-radius:4px"> style="font-size:18px;line-height:1.4;margin:16px 0;color:#484848;padding:24px;background-color:#f2f3f3;border-radius:4px">
To avoid losing precious data, please remember to monitor your usage To avoid losing precious data, please remember to monitor your usage
on the <strong>Litlyx Dashboard</strong>. You can find your current on the <strong>Litlyx Dashboard</strong>. You can find your current
usage details under <strong>Settings > Billing Tab</strong> usage details in your account section.
</p> </p>
<p>If you need more data collection storage, you may consider upgrading <p>If you need more data collection storage, you may consider upgrading
@@ -65,7 +61,7 @@ export const LIMIT_90_EMAIL = `<!DOCTYPE html
<p>Have a nice day!</p> <p>Have a nice day!</p>
<p>Antonio,</p> <p>Antonio,</p>
<p>CEO | Litlyx</p> <p>CEO at Litlyx</p>
<a href="https://dashboard.litlyx.com/" <a href="https://dashboard.litlyx.com/"
style="line-height:100%;text-decoration:none;display:block;max-width:100%;mso-padding-alt:0px;background-color:#5680f8;border-radius:3px;color:#fff;font-size:18px;padding-top:19px;padding-bottom:19px;text-align:center;width:100%;padding:19px 0px 19px 0px" style="line-height:100%;text-decoration:none;display:block;max-width:100%;mso-padding-alt:0px;background-color:#5680f8;border-radius:3px;color:#fff;font-size:18px;padding-top:19px;padding-bottom:19px;text-align:center;width:100%;padding:19px 0px 19px 0px"
@@ -92,7 +88,7 @@ export const LIMIT_90_EMAIL = `<!DOCTYPE html
<tr style="width:100%"> <tr style="width:100%">
<p <p
style="font-size:14px;line-height:24px;margin:16px 0;color:#9ca299;margin-bottom:10px"> style="font-size:14px;line-height:24px;margin:16px 0;color:#9ca299;margin-bottom:10px">
2024 © Litlyx. All rights reserved. 2025 © Litlyx. All rights reserved.
<br> <br>
Litlyx S.R.L. - Viale Tirreno, 187 - 00141 Rome - P.IVA: Litlyx S.R.L. - Viale Tirreno, 187 - 00141 Rome - P.IVA:
17814721001- REA: RM-1743194 17814721001- REA: RM-1743194
@@ -113,5 +109,4 @@ export const LIMIT_90_EMAIL = `<!DOCTYPE html
</body> </body>
</html> </html>
` `

View File

@@ -1,14 +1,9 @@
export const LIMIT_MAX_EMAIL = `<!DOCTYPE html export const LIMIT_MAX_EMAIL = `<!DOCTYPE html>
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html>
<html dir="ltr" lang="en">
<head> <head>
<link rel="preload" as="image" href="https://react-email-demo-lpdmf0ryo-resend.vercel.app/static/airbnb-logo.png" />
<link rel="preload" as="image"
href="https://react-email-demo-lpdmf0ryo-resend.vercel.app/static/airbnb-review-user.jpg" />
<meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<meta name="x-apple-disable-message-reformatting" /> <meta name="x-apple-disable-message-reformatting" />
<!--$-->
</head> </head>
<body <body
@@ -42,11 +37,11 @@ export const LIMIT_MAX_EMAIL = `<!DOCTYPE html
<tr style="width:100%"> <tr style="width:100%">
<p <p
style="font-size:32px;line-height:1.3;margin:16px 0;font-weight:700;color:#484848"> style="font-size:32px;line-height:1.3;margin:16px 0;font-weight:700;color:#484848">
Youve Reached Your Litlyx Project Limit on [Project Name] Youve Reached Your Litlyx's Tracking Limits
</p> </p>
<p <p
style="font-size:18px;line-height:1.4;margin:16px 0;color:#484848;padding:24px;background-color:#ffbb03;border-radius:4px"> style="font-size:18px;line-height:1.4;margin:16px 0;color:#484848;padding:24px;background-color:#ffbb03;border-radius:4px">
We noticed that Litlyx has stopped collecting data for your project. <strong>Litlyx has stopped collecting data for your project.</strong>
</p> </p>
<p> <p>
@@ -62,14 +57,9 @@ export const LIMIT_MAX_EMAIL = `<!DOCTYPE html
<p> <p>
If you need additional storage for data collection, consider If you need additional storage for data collection, consider
upgrading your plan to unlock more benefits and ensure uninterrupted upgrading your plan to unlock more benefits and ensure uninterrupted
service. service. You can find out more here: <a href="https://litlyx.com/pricing">Our pricing</a>
</p> </p>
<p style="font-weight: 700;">
As a token of appreciation, we're offering you 25% off for life at
checkout with the code LIT25.
</p>
Thank you for choosing Litlyx as your trusted analytics tool.
<p></p>
<p> <p>
If you have any questions or need assistance, feel free to reply to If you have any questions or need assistance, feel free to reply to
@@ -82,8 +72,8 @@ export const LIMIT_MAX_EMAIL = `<!DOCTYPE html
</p> </p>
<p> <p>
Antonio Antonio,
CEO | Litlyx CEO at Litlyx
</p> </p>
@@ -113,7 +103,7 @@ export const LIMIT_MAX_EMAIL = `<!DOCTYPE html
<tr style="width:100%"> <tr style="width:100%">
<p <p
style="font-size:14px;line-height:24px;margin:16px 0;color:#9ca299;margin-bottom:10px"> style="font-size:14px;line-height:24px;margin:16px 0;color:#9ca299;margin-bottom:10px">
2024 © Litlyx. All rights reserved. 2025 © Litlyx. All rights reserved.
<br> <br>
Litlyx S.R.L. - Viale Tirreno, 187 - 00141 Rome - P.IVA: Litlyx S.R.L. - Viale Tirreno, 187 - 00141 Rome - P.IVA:
17814721001- REA: RM-1743194 17814721001- REA: RM-1743194
@@ -134,5 +124,4 @@ export const LIMIT_MAX_EMAIL = `<!DOCTYPE html
</body> </body>
</html> </html>
` `

View File

@@ -1,29 +1,104 @@
export const PURCHASE_EMAIL = `<!DOCTYPE html> export const PURCHASE_EMAIL = `
<html lang="en"> <!DOCTYPE html>
<html>
<head> <head>
<meta charset="UTF-8"> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="x-apple-disable-message-reformatting" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Thank You for Upgrading Your Litlyx Plan!</title>
</head> </head>
<body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;">
<!-- Email Content --> <body style='background-color:#ffffff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif'>
<table align="center" width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation"
style="max-width:100%;margin:0 auto;padding:20px 0 48px;width:580px">
<tbody>
<tr style="width:100%">
<td>
<p>Dear User,</p> <table align="center" width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation">
<tbody>
<tr>
<td>
<img alt="Founder" height="96"
src="https://litlyx.com/images/founder.jpg"
style="display:block;outline:none;border:none;text-decoration:none;margin:0 auto;margin-bottom:16px;border-radius:50%"
width="96" />
</td>
</tr>
</tbody>
</table>
<p>We are thrilled to inform you that <strong>[Project Name]</strong> on <strong>Litlyx</strong> has successfully been upgraded to a higher plan! Thank you for choosing to elevate your experience with us and for believing in our project.</p> <table align="center" width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation"
style="padding-bottom:20px">
<tbody>
<tr>
<td>
<table align="center" width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation">
<tbody style="width:100%">
<tr style="width:100%">
<td>
<p style="font-size:32px;line-height:1.3;margin:16px 0;font-weight:700;color:#484848">
Your upgrade is live!
</p>
<p>We appreciate your trust in Litlyx and are committed to providing you with the best analytics experience. Your support helps us to continually improve our platform and bring new features to make your analytics journey even better.</p> <p>Thank you for choosing Litlyx as your go-to website analytics tool. Our mission is simple: to make everyday tracking effortless and effective.</p>
<p>You can find your current plan details and download your invoices under <strong>Settings > Billing Tab</strong>.</p> <p>Were super happy to have you with us, and we cant wait to keep improving Litlyx every single day. Youre part of this journey now, and were building it with you in mind.</p>
<p>If you have any questions about your new plan or need assistance, feel free to reach out to our support team at <a href="mailto:help@litlyx.com" style="color: #28a745; text-decoration: none;"><strong>help@litlyx.com</strong></a>. Were here to help you make the most out of your upgraded plan!</p> <p>If you have any questions, need help, or want to share feedback, just reply to this email or reach out at <a
href="mailto:help@litlyx.com"
style="color: #FF5733; text-decoration: none;">help@litlyx.com</a>. Id love to hear from you.</p>
<p>Best regards,</p> <p>Thanks again for being with us. We won't let you down.</p>
<p>Antonio,</p> <p>Have a great day!</p>
<p>CEO @ Litlyx</p>
<p>Antonio,<br />CEO at Litlyx</p>
<a href="https://dashboard.litlyx.com/"
style="line-height:100%;text-decoration:none;display:block;max-width:100%;mso-padding-alt:0px;background-color:#5680f8;border-radius:3px;color:#fff;font-size:18px;padding-top:19px;padding-bottom:19px;text-align:center;width:100%;padding:19px 0px 19px 0px"
target="_blank">
<span style="max-width:100%;display:inline-block;line-height:120%;mso-padding-alt:0px;mso-text-raise:14.25px">
Go to Dashboard
</span>
</a>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<hr style="width:100%;border:none;border-top:1px solid #eaeaea;border-color:#cccccc;margin:20px 0" />
<table align="center" width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation">
<tbody>
<tr>
<td>
<table align="center" width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation">
<tbody style="width:100%">
<tr style="width:100%">
<td>
<p style="font-size:14px;line-height:24px;margin:16px 0;color:#9ca299;margin-bottom:10px">
2025 © Litlyx. All rights reserved.
<br />
Litlyx S.R.L. - Viale Tirreno, 187 - 00141 Rome - P.IVA: 17814721001 - REA: RM-1743194
</p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</body> </body>
</html>`
</html>
`

View File

@@ -1,39 +1,158 @@
export const WELCOME_EMAIL = ` export const WELCOME_EMAIL = `
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html>
<head> <head>
<meta charset="UTF-8"> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="x-apple-disable-message-reformatting" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Welcome to Litlyx!</title>
</head> </head>
<body style="font-family: Arial, sans-serif; line-height: 1.6; color: #333;">
<p>Were happy to have you onboard,</p> <body
style='background-color:#ffffff;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif'>
<table align="center" width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation"
style="max-width:100%;margin:0 auto;padding:20px 0 48px;width:580px">
<tbody>
<tr style="width:100%">
<td>
<p>At Litlyx, were committed to creating the best analytics collection experience for everybody, starting from developers.</p> <table align="center" width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation">
<tbody>
<tr>
<td>
<img alt="Founder" height="96" src="https://litlyx.com/images/founder.jpg"
style="display:block;outline:none;border:none;text-decoration:none;margin:0 auto;margin-bottom:16px;border-radius:50%"
width="96" />
</td>
</tr>
</tbody>
</table>
<p>Here are a few things you can do to get started tracking analytics today:</p> <table align="center" width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation"
style="padding-bottom:20px">
<tbody>
<tr>
<td>
<table align="center" width="100%" border="0" cellpadding="0" cellspacing="0"
role="presentation">
<tbody style="width:100%">
<tr style="width:100%">
<td>
<p
style="font-size:32px;line-height:1.3;margin:16px 0;font-weight:700;color:#484848">
Welcome to Litlyx!
</p>
<ol> <p
<li><strong><a href="https://dashboard.litlyx.com" style="color: #007BFF; text-decoration: none;">Create a new project</a></strong> by just naming it</li> style="font-size:18px;line-height:1.4;margin:16px 0;color:#484848;">
<li><strong><a style="color: #0a0a0a; text-decoration: none;">Copy the universal Script</a></strong> we provide you the snippets to copy in your index.html file and start instantly to track metrics on your website or web app.</li> Hey, Im Antonio, CEO at Litlyx. Just wanted to say a quick
<li><strong><a style="color: #0a0a0a; text-decoration: none;">Deploy</a></strong> Litlyx is production ready.</li> thank you for signing up.
</p>
<p style="font-size:16px;line-height:1.6;color:#484848;">
We built Litlyx to make website analytics easy, fast, and
privacy-conscious. Your personal AI assistant can learn to serve your needs over time advicing you on growing your audience and improve your product.
</p>
<p style="font-size:16px;line-height:1.6;color:#484848;">
Heres how to get started in under <b>1 minute</b>:
</p>
<ol
style="font-size:16px;line-height:1.6;color:#484848;padding-left: 20px;">
<li><strong><a href="https://dashboard.litlyx.com"
style="color: #007BFF; text-decoration: none;">Create
a new project</a></strong> name it and youre good
to go</li>
<li><strong>Copy the tracking script</strong> paste it in your
<code>index.html</code> and start collecting data instantly
</li>
<li><strong>Deploy</strong> Litlyx is ready for production and
incredibly lightweight</li>
</ol> </ol>
<p>If you have any questions or need support, visit <a href="http://docs.litlyx.com" style="color: #007BFF;">docs.litlyx.com</a>.</p> <p style="font-size:16px;line-height:1.6;color:#484848;">
Using WordPress, Google Tag Manager, or a modern framework? Head
over to <a href="http://docs.litlyx.com"
style="color: #007BFF;">our docs</a> for full setup
instructions.
</p>
<p>Feel free to reply to this email or reach out to our team at <a href="mailto:help@litlyx.com" style="color: #007BFF;">help@litlyx.com</a>. Were here to help!</p> <p style="font-size:16px;line-height:1.6;color:#484848;">
Got questions or feedback? Just reply to this email or reach out
to <a href="mailto:help@litlyx.com"
style="color: #007BFF;">help@litlyx.com</a>. Were always
here to help.
</p>
<p>Link to Discord for developer support: <a href="https://discord.com/invite/9cQykjsmWX" style="color: #007BFF;">https://discord.com/invite/9cQykjsmWX</a></p> <p style="font-size:16px;line-height:1.6;color:#484848;">
You can also join our <a
href="https://discord.com/invite/9cQykjsmWX"
style="color: #007BFF;">Discord community</a> for live
support and product updates.
</p>
<p>Thank you for joining us, and we look forward to seeing you around.</p> <p style="font-size:16px;line-height:1.6;color:#484848;">
Thanks again for joining us. Were excited to have you on board.
</p>
<p>We want to make analytics the freshest thing on the web.</p> <p style="font-size:16px;line-height:1.6;color:#484848;">
Lets make analytics the simplest part of your stack.
</p>
<p>Antonio,</p> <p style="font-size:16px;line-height:1.6;color:#484848;">Antonio,</p>
<p>CEO | Litlyx</p> <p style="font-size:16px;line-height:1.6;color:#484848;">CEO at
Litlyx</p>
<a href="https://dashboard.litlyx.com/"
style="line-height:100%;text-decoration:none;display:block;max-width:100%;mso-padding-alt:0px;background-color:#5680f8;border-radius:3px;color:#fff;font-size:18px;padding-top:19px;padding-bottom:19px;text-align:center;width:100%;padding:19px 0px 19px 0px"
target="_blank">
<span
style="max-width:100%;display:inline-block;line-height:120%;mso-padding-alt:0px;mso-text-raise:14.25px">
Go to Dashboard
</span>
</a>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
<hr
style="width:100%;border:none;border-top:1px solid #eaeaea;border-color:#cccccc;margin:20px 0" />
<table align="center" width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation">
<tbody>
<tr>
<td>
<table align="center" width="100%" border="0" cellpadding="0" cellspacing="0"
role="presentation">
<tbody style="width:100%">
<tr style="width:100%">
<td>
<p
style="font-size:14px;line-height:24px;margin:16px 0;color:#9ca299;margin-bottom:10px">
2025 © Litlyx. All rights reserved.
<br />
Litlyx S.R.L. Viale Tirreno, 187 00141 Rome P.IVA:
17814721001 REA: RM-1743194
</p>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</td>
</tr>
</tbody>
</table>
</body> </body>
</html> </html>
` `

View File

@@ -19,13 +19,13 @@ export type EmailServerInfo = { url: string, body: Record<string, any>, headers:
type EmailData = type EmailData =
| { template: 'confirm', data: { target: string, link: string } } | { template: 'confirm', data: { target: string, link: string } }
| { template: 'welcome', data: { target: string } } | { template: 'welcome', data: { target: string } }
| { template: 'purchase', data: { target: string, projectName: string } } | { template: 'purchase', data: { target: string } }
| { template: 'reset_password', data: { target: string, newPassword: string } } | { template: 'reset_password', data: { target: string, newPassword: string } }
| { template: 'anomaly_domain', data: { target: string, projectName: string, domains: string[] } } | { template: 'anomaly_domain', data: { target: string, projectName: string, domains: string[] } }
| { template: 'anomaly_visits_events', data: { target: string, projectName: string, data: any[] } } | { template: 'anomaly_visits_events', data: { target: string, projectName: string, data: any[] } }
| { template: 'limit_50', data: { target: string, projectName: string } } | { template: 'limit_50', data: { target: string } }
| { template: 'limit_90', data: { target: string, projectName: string } } | { template: 'limit_90', data: { target: string } }
| { template: 'limit_max', data: { target: string, projectName: string } } | { template: 'limit_max', data: { target: string } }
| { template: 'invite_project', data: { target: string, projectName: string, link: string } } | { template: 'invite_project', data: { target: string, projectName: string, link: string } }
| { template: 'invite_project_noaccount', data: { target: string, projectName: string, link: string } } | { template: 'invite_project_noaccount', data: { target: string, projectName: string, link: string } }
| { template: 'brevolist_add', data: { email: string } } | { template: 'brevolist_add', data: { email: string } }