@heliyos/heliyos-api-core 1.0.62 → 1.0.64

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.
@@ -41,11 +41,52 @@ exports.emailTemplates = {
41
41
  notificationDailySummary: "notification-daily-summary.html",
42
42
  organizationDailySummary: "organization-daily-summary.html",
43
43
  };
44
+ /**
45
+ * Simple markdown to HTML converter for email templates
46
+ */
47
+ const markdownToHtml = (text) => {
48
+ if (!text || typeof text !== "string")
49
+ return text;
50
+ return text
51
+ // Bold: **text** or __text__
52
+ .replace(/\*\*(.*?)\*\*/g, "<strong>$1</strong>")
53
+ .replace(/__(.*?)__/g, "<strong>$1</strong>")
54
+ // Italics: *text* or _text_
55
+ .replace(/\*(.*?)\*/g, "<em>$1</em>")
56
+ .replace(/_(.*?)_/g, "<em>$1</em>")
57
+ // Newlines to <br>
58
+ .replace(/\n/g, "<br>");
59
+ };
60
+ /**
61
+ * Recursively process object values to convert markdown to HTML
62
+ */
63
+ const processMarkdownData = (data) => {
64
+ if (!data)
65
+ return data;
66
+ if (typeof data === "string") {
67
+ return markdownToHtml(data);
68
+ }
69
+ if (Array.isArray(data)) {
70
+ return data.map((item) => processMarkdownData(item));
71
+ }
72
+ if (typeof data === "object") {
73
+ const processed = {};
74
+ for (const key in data) {
75
+ if (Object.prototype.hasOwnProperty.call(data, key)) {
76
+ processed[key] = processMarkdownData(data[key]);
77
+ }
78
+ }
79
+ return processed;
80
+ }
81
+ return data;
82
+ };
44
83
  const getEmailTemplate = (template, data) => {
45
84
  const filePath = path.join(__dirname, template);
46
85
  const htmlContent = fs.readFileSync(filePath, "utf8");
86
+ // Process data to convert markdown to HTML in strings
87
+ const processedData = processMarkdownData(data);
47
88
  const handlebarsTemplate = handlebars_1.default.compile(htmlContent);
48
- const result = handlebarsTemplate(Object.assign(Object.assign({}, data), { year: new Date().getFullYear(), company_name: "Heliyos AI" }));
89
+ const result = handlebarsTemplate(Object.assign(Object.assign({}, processedData), { year: new Date().getFullYear(), company_name: "Heliyos AI" }));
49
90
  return result;
50
91
  };
51
92
  exports.getEmailTemplate = getEmailTemplate;
@@ -69,9 +69,6 @@
69
69
  }
70
70
 
71
71
  .section-header {
72
- display: flex;
73
- justify-content: space-between;
74
- align-items: center;
75
72
  margin-bottom: 12px;
76
73
  padding-bottom: 8px;
77
74
  border-bottom: 1px solid #e5e7eb;
@@ -82,6 +79,7 @@
82
79
  font-weight: bold;
83
80
  color: #111827;
84
81
  margin: 0;
82
+ line-height: 1;
85
83
  }
86
84
 
87
85
  .section-count {
@@ -151,10 +149,6 @@
151
149
  color: #374151;
152
150
  }
153
151
 
154
- .item-link {
155
- margin-top: 10px;
156
- }
157
-
158
152
  .org-summary-box {
159
153
  background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%);
160
154
  color: #ffffff;
@@ -168,39 +162,6 @@
168
162
  font-size: 18px;
169
163
  }
170
164
 
171
- .org-summary-box p {
172
- margin: 8px 0;
173
- line-height: 1.6;
174
- }
175
-
176
- .button {
177
- display: inline-block;
178
- padding: 10px 20px;
179
- background-color: #7c3aed;
180
- color: #ffffff !important;
181
- text-decoration: none;
182
- border-radius: 6px;
183
- font-weight: bold;
184
- font-size: 13px;
185
- margin-top: 8px;
186
- }
187
-
188
- .button:hover {
189
- background-color: #6d28d9;
190
- }
191
-
192
- .view-all-link {
193
- text-align: right;
194
- margin-top: 12px;
195
- }
196
-
197
- .view-all-link a {
198
- color: #7c3aed;
199
- text-decoration: none;
200
- font-weight: bold;
201
- font-size: 14px;
202
- }
203
-
204
165
  .footer {
205
166
  background-color: #7c3aed;
206
167
  padding: 20px;
@@ -237,16 +198,26 @@
237
198
 
238
199
  {{#if has_org_summary}}
239
200
  <div class="org-summary-box">
240
- <h3>📊 Organization Summary</h3>
241
- <p>{{org_summary}}</p>
201
+ <table border="0" cellpadding="0" cellspacing="0">
202
+ <tr>
203
+ <td style="vertical-align: middle; padding-right: 8px; font-size: 20px;">📊</td>
204
+ <td style="vertical-align: middle;"><h3 style="margin: 0;">Organization Summary</h3></td>
205
+ </tr>
206
+ </table>
207
+ <p style="margin-top: 12px; line-height: 1.6;">{{{org_summary}}}</p>
242
208
  </div>
243
209
  {{/if}}
244
210
 
245
211
  {{#if has_tasks}}
246
212
  <div class="section">
247
213
  <div class="section-header">
248
- <h2 class="section-title">✓ Tasks</h2>
249
- <span class="section-count">{{tasks_count}}</span>
214
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
215
+ <tr>
216
+ <td style="vertical-align: middle; padding-right: 8px; width: 24px; font-size: 20px;">✓</td>
217
+ <td style="vertical-align: middle;"><h2 class="section-title">Tasks</h2></td>
218
+ <td style="vertical-align: middle; text-align: right;"><span class="section-count">{{tasks_count}}</span></td>
219
+ </tr>
220
+ </table>
250
221
  </div>
251
222
  <div class="section-content">
252
223
  {{#each tasks}}
@@ -292,8 +263,13 @@
292
263
  {{#if has_deals}}
293
264
  <div class="section">
294
265
  <div class="section-header">
295
- <h2 class="section-title">💰 Deals</h2>
296
- <span class="section-count">{{deals_count}}</span>
266
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
267
+ <tr>
268
+ <td style="vertical-align: middle; padding-right: 8px; width: 24px; font-size: 20px;">💰</td>
269
+ <td style="vertical-align: middle;"><h2 class="section-title">Deals</h2></td>
270
+ <td style="vertical-align: middle; text-align: right;"><span class="section-count">{{deals_count}}</span></td>
271
+ </tr>
272
+ </table>
297
273
  </div>
298
274
  <div class="section-content">
299
275
  {{#each deals}}
@@ -339,8 +315,13 @@
339
315
  {{#if has_approvals}}
340
316
  <div class="section">
341
317
  <div class="section-header">
342
- <h2 class="section-title">✔️ Reviews</h2>
343
- <span class="section-count">{{approvals_count}}</span>
318
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
319
+ <tr>
320
+ <td style="vertical-align: middle; padding-right: 8px; width: 24px; font-size: 20px;">✔️</td>
321
+ <td style="vertical-align: middle;"><h2 class="section-title">Reviews</h2></td>
322
+ <td style="vertical-align: middle; text-align: right;"><span class="section-count">{{approvals_count}}</span></td>
323
+ </tr>
324
+ </table>
344
325
  </div>
345
326
  <div class="section-content">
346
327
  {{#each approvals}}
@@ -386,8 +367,13 @@
386
367
  {{#if has_leadsets}}
387
368
  <div class="section">
388
369
  <div class="section-header">
389
- <h2 class="section-title">✨ Leadsets</h2>
390
- <span class="section-count">{{leadsets_count}}</span>
370
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
371
+ <tr>
372
+ <td style="vertical-align: middle; padding-right: 8px; width: 24px; font-size: 20px;">✨</td>
373
+ <td style="vertical-align: middle;"><h2 class="section-title">Leadsets</h2></td>
374
+ <td style="vertical-align: middle; text-align: right;"><span class="section-count">{{leadsets_count}}</span></td>
375
+ </tr>
376
+ </table>
391
377
  </div>
392
378
  <div class="section-content">
393
379
  {{#each leadsets}}
@@ -156,7 +156,7 @@
156
156
 
157
157
  <div class="event-card">
158
158
  <div class="event-badge">{{event_type_label}}</div>
159
- <div class="event-title">{{object_name}}</div>
159
+ <div class="event-title">{{{object_name}}}</div>
160
160
  {{#if details}}
161
161
  <div class="event-details">
162
162
  <table class="detail-table">
@@ -164,7 +164,7 @@
164
164
  {{#each details}}
165
165
  <td class="detail-cell">
166
166
  <div class="detail-label">{{this.label}}</div>
167
- <div class="detail-value">{{this.value}}</div>
167
+ <div class="detail-value">{{{this.value}}}</div>
168
168
  </td>
169
169
  {{/each}}
170
170
  </tr>
@@ -51,13 +51,17 @@
51
51
 
52
52
  .badge {
53
53
  display: inline-block;
54
- padding: 6px 14px;
55
54
  background-color: rgba(255, 255, 255, 0.2);
56
55
  border-radius: 20px;
56
+ margin-top: 10px;
57
+ padding: 0 14px;
58
+ }
59
+
60
+ .badge-text {
57
61
  font-size: 13px;
58
62
  color: #ffffff;
59
63
  font-weight: 600;
60
- margin-top: 10px;
64
+ line-height: 28px;
61
65
  }
62
66
 
63
67
  .content {
@@ -80,9 +84,6 @@
80
84
  }
81
85
 
82
86
  .section-header {
83
- display: flex;
84
- justify-content: space-between;
85
- align-items: center;
86
87
  margin-bottom: 12px;
87
88
  padding-bottom: 8px;
88
89
  border-bottom: 1px solid #e5e7eb;
@@ -93,6 +94,7 @@
93
94
  font-weight: bold;
94
95
  color: #111827;
95
96
  margin: 0;
97
+ line-height: 1;
96
98
  }
97
99
 
98
100
  .summary-text {
@@ -104,7 +106,6 @@
104
106
  border-radius: 8px;
105
107
  border-left: 4px solid #7c3aed;
106
108
  margin-bottom: 20px;
107
- white-space: pre-wrap;
108
109
  word-wrap: break-word;
109
110
  }
110
111
 
@@ -151,7 +152,14 @@
151
152
  <img src="https://assets.heliyos.ai/heliyos-logo-white.png" alt="Heliyos AI">
152
153
  <div class="header-title">{{organization_name}} Daily Briefing</div>
153
154
  <div class="header-date">{{date}}</div>
154
- <div class="badge">📊 Organization summary</div>
155
+ <div class="badge">
156
+ <table border="0" cellpadding="0" cellspacing="0" style="margin: 0 auto;">
157
+ <tr>
158
+ <td style="vertical-align: middle; padding-right: 5px; font-size: 14px; line-height: 28px;">📊</td>
159
+ <td style="vertical-align: middle;" class="badge-text">Organization summary</td>
160
+ </tr>
161
+ </table>
162
+ </div>
155
163
  </div>
156
164
 
157
165
  <div class="content">
@@ -163,20 +171,30 @@
163
171
  <!-- Summary Section -->
164
172
  <div class="section">
165
173
  <div class="section-header">
166
- <h2 class="section-title">📊 Daily Overview</h2>
174
+ <table border="0" cellpadding="0" cellspacing="0">
175
+ <tr>
176
+ <td style="vertical-align: middle; padding-right: 8px; font-size: 20px; line-height: 24px;">📋</td>
177
+ <td style="vertical-align: middle; line-height: 24px;"><h2 class="section-title">Daily Overview</h2></td>
178
+ </tr>
179
+ </table>
167
180
  </div>
168
- <div class="summary-text">{{summary}}</div>
181
+ <div class="summary-text">{{{summary}}}</div>
169
182
  </div>
170
183
 
171
184
  <!-- Key Highlights -->
172
185
  {{#if key_highlights}}
173
186
  <div class="section">
174
187
  <div class="section-header">
175
- <h2 class="section-title">✨ Key Highlights</h2>
188
+ <table border="0" cellpadding="0" cellspacing="0">
189
+ <tr>
190
+ <td style="vertical-align: middle; padding-right: 8px; font-size: 20px; line-height: 24px;">✨</td>
191
+ <td style="vertical-align: middle; line-height: 24px;"><h2 class="section-title">Key Highlights</h2></td>
192
+ </tr>
193
+ </table>
176
194
  </div>
177
195
  <div class="list-container">
178
196
  {{#each key_highlights}}
179
- <div class="list-item">{{this}}</div>
197
+ <div class="list-item">{{{this}}}</div>
180
198
  {{/each}}
181
199
  </div>
182
200
  </div>
@@ -186,11 +204,16 @@
186
204
  {{#if action_items}}
187
205
  <div class="section">
188
206
  <div class="section-header">
189
- <h2 class="section-title">✓ Action Items</h2>
207
+ <table border="0" cellpadding="0" cellspacing="0">
208
+ <tr>
209
+ <td style="vertical-align: middle; padding-right: 8px; font-size: 20px; line-height: 24px;">✓</td>
210
+ <td style="vertical-align: middle; line-height: 24px;"><h2 class="section-title">Action Items</h2></td>
211
+ </tr>
212
+ </table>
190
213
  </div>
191
214
  <div class="list-container">
192
215
  {{#each action_items}}
193
- <div class="list-item">{{this}}</div>
216
+ <div class="list-item">{{{this}}}</div>
194
217
  {{/each}}
195
218
  </div>
196
219
  </div>
@@ -200,11 +223,16 @@
200
223
  {{#if upcoming_priorities}}
201
224
  <div class="section">
202
225
  <div class="section-header">
203
- <h2 class="section-title">🎯 Upcoming Priorities</h2>
226
+ <table border="0" cellpadding="0" cellspacing="0">
227
+ <tr>
228
+ <td style="vertical-align: middle; padding-right: 8px; font-size: 20px; line-height: 24px;">🎯</td>
229
+ <td style="vertical-align: middle; line-height: 24px;"><h2 class="section-title">Upcoming Priorities</h2></td>
230
+ </tr>
231
+ </table>
204
232
  </div>
205
233
  <div class="list-container">
206
234
  {{#each upcoming_priorities}}
207
- <div class="list-item">{{this}}</div>
235
+ <div class="list-item">{{{this}}}</div>
208
236
  {{/each}}
209
237
  </div>
210
238
  </div>
@@ -226,4 +254,5 @@
226
254
  </div>
227
255
  </div>
228
256
  </body>
257
+
229
258
  </html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@heliyos/heliyos-api-core",
3
- "version": "1.0.62",
3
+ "version": "1.0.64",
4
4
  "description": "Heliyos's core api functions and middlewares. Its a private package hosted on npm.",
5
5
  "main": "./dist/index.js",
6
6
  "scripts": {
@@ -14,13 +14,60 @@ export const emailTemplates = {
14
14
  organizationDailySummary: "organization-daily-summary.html",
15
15
  };
16
16
 
17
+ /**
18
+ * Simple markdown to HTML converter for email templates
19
+ */
20
+ const markdownToHtml = (text: string): string => {
21
+ if (!text || typeof text !== "string") return text;
22
+
23
+ return text
24
+ // Bold: **text** or __text__
25
+ .replace(/\*\*(.*?)\*\*/g, "<strong>$1</strong>")
26
+ .replace(/__(.*?)__/g, "<strong>$1</strong>")
27
+ // Italics: *text* or _text_
28
+ .replace(/\*(.*?)\*/g, "<em>$1</em>")
29
+ .replace(/_(.*?)_/g, "<em>$1</em>")
30
+ // Newlines to <br>
31
+ .replace(/\n/g, "<br>");
32
+ };
33
+
34
+ /**
35
+ * Recursively process object values to convert markdown to HTML
36
+ */
37
+ const processMarkdownData = (data: any): any => {
38
+ if (!data) return data;
39
+
40
+ if (typeof data === "string") {
41
+ return markdownToHtml(data);
42
+ }
43
+
44
+ if (Array.isArray(data)) {
45
+ return data.map((item) => processMarkdownData(item));
46
+ }
47
+
48
+ if (typeof data === "object") {
49
+ const processed: any = {};
50
+ for (const key in data) {
51
+ if (Object.prototype.hasOwnProperty.call(data, key)) {
52
+ processed[key] = processMarkdownData(data[key]);
53
+ }
54
+ }
55
+ return processed;
56
+ }
57
+
58
+ return data;
59
+ };
60
+
17
61
  export const getEmailTemplate = (template: string, data: object) => {
18
62
  const filePath = path.join(__dirname, template);
19
63
  const htmlContent = fs.readFileSync(filePath, "utf8");
20
64
 
65
+ // Process data to convert markdown to HTML in strings
66
+ const processedData = processMarkdownData(data);
67
+
21
68
  const handlebarsTemplate = Handlebars.compile(htmlContent);
22
69
  const result = handlebarsTemplate({
23
- ...data,
70
+ ...processedData,
24
71
  year: new Date().getFullYear(),
25
72
  company_name: "Heliyos AI",
26
73
  });
@@ -69,9 +69,6 @@
69
69
  }
70
70
 
71
71
  .section-header {
72
- display: flex;
73
- justify-content: space-between;
74
- align-items: center;
75
72
  margin-bottom: 12px;
76
73
  padding-bottom: 8px;
77
74
  border-bottom: 1px solid #e5e7eb;
@@ -82,6 +79,7 @@
82
79
  font-weight: bold;
83
80
  color: #111827;
84
81
  margin: 0;
82
+ line-height: 1;
85
83
  }
86
84
 
87
85
  .section-count {
@@ -151,10 +149,6 @@
151
149
  color: #374151;
152
150
  }
153
151
 
154
- .item-link {
155
- margin-top: 10px;
156
- }
157
-
158
152
  .org-summary-box {
159
153
  background: linear-gradient(135deg, #7c3aed 0%, #6d28d9 100%);
160
154
  color: #ffffff;
@@ -168,39 +162,6 @@
168
162
  font-size: 18px;
169
163
  }
170
164
 
171
- .org-summary-box p {
172
- margin: 8px 0;
173
- line-height: 1.6;
174
- }
175
-
176
- .button {
177
- display: inline-block;
178
- padding: 10px 20px;
179
- background-color: #7c3aed;
180
- color: #ffffff !important;
181
- text-decoration: none;
182
- border-radius: 6px;
183
- font-weight: bold;
184
- font-size: 13px;
185
- margin-top: 8px;
186
- }
187
-
188
- .button:hover {
189
- background-color: #6d28d9;
190
- }
191
-
192
- .view-all-link {
193
- text-align: right;
194
- margin-top: 12px;
195
- }
196
-
197
- .view-all-link a {
198
- color: #7c3aed;
199
- text-decoration: none;
200
- font-weight: bold;
201
- font-size: 14px;
202
- }
203
-
204
165
  .footer {
205
166
  background-color: #7c3aed;
206
167
  padding: 20px;
@@ -237,16 +198,26 @@
237
198
 
238
199
  {{#if has_org_summary}}
239
200
  <div class="org-summary-box">
240
- <h3>📊 Organization Summary</h3>
241
- <p>{{org_summary}}</p>
201
+ <table border="0" cellpadding="0" cellspacing="0">
202
+ <tr>
203
+ <td style="vertical-align: middle; padding-right: 8px; font-size: 20px;">📊</td>
204
+ <td style="vertical-align: middle;"><h3 style="margin: 0;">Organization Summary</h3></td>
205
+ </tr>
206
+ </table>
207
+ <p style="margin-top: 12px; line-height: 1.6;">{{{org_summary}}}</p>
242
208
  </div>
243
209
  {{/if}}
244
210
 
245
211
  {{#if has_tasks}}
246
212
  <div class="section">
247
213
  <div class="section-header">
248
- <h2 class="section-title">✓ Tasks</h2>
249
- <span class="section-count">{{tasks_count}}</span>
214
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
215
+ <tr>
216
+ <td style="vertical-align: middle; padding-right: 8px; width: 24px; font-size: 20px;">✓</td>
217
+ <td style="vertical-align: middle;"><h2 class="section-title">Tasks</h2></td>
218
+ <td style="vertical-align: middle; text-align: right;"><span class="section-count">{{tasks_count}}</span></td>
219
+ </tr>
220
+ </table>
250
221
  </div>
251
222
  <div class="section-content">
252
223
  {{#each tasks}}
@@ -292,8 +263,13 @@
292
263
  {{#if has_deals}}
293
264
  <div class="section">
294
265
  <div class="section-header">
295
- <h2 class="section-title">💰 Deals</h2>
296
- <span class="section-count">{{deals_count}}</span>
266
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
267
+ <tr>
268
+ <td style="vertical-align: middle; padding-right: 8px; width: 24px; font-size: 20px;">💰</td>
269
+ <td style="vertical-align: middle;"><h2 class="section-title">Deals</h2></td>
270
+ <td style="vertical-align: middle; text-align: right;"><span class="section-count">{{deals_count}}</span></td>
271
+ </tr>
272
+ </table>
297
273
  </div>
298
274
  <div class="section-content">
299
275
  {{#each deals}}
@@ -339,8 +315,13 @@
339
315
  {{#if has_approvals}}
340
316
  <div class="section">
341
317
  <div class="section-header">
342
- <h2 class="section-title">✔️ Reviews</h2>
343
- <span class="section-count">{{approvals_count}}</span>
318
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
319
+ <tr>
320
+ <td style="vertical-align: middle; padding-right: 8px; width: 24px; font-size: 20px;">✔️</td>
321
+ <td style="vertical-align: middle;"><h2 class="section-title">Reviews</h2></td>
322
+ <td style="vertical-align: middle; text-align: right;"><span class="section-count">{{approvals_count}}</span></td>
323
+ </tr>
324
+ </table>
344
325
  </div>
345
326
  <div class="section-content">
346
327
  {{#each approvals}}
@@ -386,8 +367,13 @@
386
367
  {{#if has_leadsets}}
387
368
  <div class="section">
388
369
  <div class="section-header">
389
- <h2 class="section-title">✨ Leadsets</h2>
390
- <span class="section-count">{{leadsets_count}}</span>
370
+ <table border="0" cellpadding="0" cellspacing="0" width="100%">
371
+ <tr>
372
+ <td style="vertical-align: middle; padding-right: 8px; width: 24px; font-size: 20px;">✨</td>
373
+ <td style="vertical-align: middle;"><h2 class="section-title">Leadsets</h2></td>
374
+ <td style="vertical-align: middle; text-align: right;"><span class="section-count">{{leadsets_count}}</span></td>
375
+ </tr>
376
+ </table>
391
377
  </div>
392
378
  <div class="section-content">
393
379
  {{#each leadsets}}
@@ -156,7 +156,7 @@
156
156
 
157
157
  <div class="event-card">
158
158
  <div class="event-badge">{{event_type_label}}</div>
159
- <div class="event-title">{{object_name}}</div>
159
+ <div class="event-title">{{{object_name}}}</div>
160
160
  {{#if details}}
161
161
  <div class="event-details">
162
162
  <table class="detail-table">
@@ -164,7 +164,7 @@
164
164
  {{#each details}}
165
165
  <td class="detail-cell">
166
166
  <div class="detail-label">{{this.label}}</div>
167
- <div class="detail-value">{{this.value}}</div>
167
+ <div class="detail-value">{{{this.value}}}</div>
168
168
  </td>
169
169
  {{/each}}
170
170
  </tr>
@@ -51,13 +51,17 @@
51
51
 
52
52
  .badge {
53
53
  display: inline-block;
54
- padding: 6px 14px;
55
54
  background-color: rgba(255, 255, 255, 0.2);
56
55
  border-radius: 20px;
56
+ margin-top: 10px;
57
+ padding: 0 14px;
58
+ }
59
+
60
+ .badge-text {
57
61
  font-size: 13px;
58
62
  color: #ffffff;
59
63
  font-weight: 600;
60
- margin-top: 10px;
64
+ line-height: 28px;
61
65
  }
62
66
 
63
67
  .content {
@@ -80,9 +84,6 @@
80
84
  }
81
85
 
82
86
  .section-header {
83
- display: flex;
84
- justify-content: space-between;
85
- align-items: center;
86
87
  margin-bottom: 12px;
87
88
  padding-bottom: 8px;
88
89
  border-bottom: 1px solid #e5e7eb;
@@ -93,6 +94,7 @@
93
94
  font-weight: bold;
94
95
  color: #111827;
95
96
  margin: 0;
97
+ line-height: 1;
96
98
  }
97
99
 
98
100
  .summary-text {
@@ -104,7 +106,6 @@
104
106
  border-radius: 8px;
105
107
  border-left: 4px solid #7c3aed;
106
108
  margin-bottom: 20px;
107
- white-space: pre-wrap;
108
109
  word-wrap: break-word;
109
110
  }
110
111
 
@@ -151,7 +152,14 @@
151
152
  <img src="https://assets.heliyos.ai/heliyos-logo-white.png" alt="Heliyos AI">
152
153
  <div class="header-title">{{organization_name}} Daily Briefing</div>
153
154
  <div class="header-date">{{date}}</div>
154
- <div class="badge">📊 Organization summary</div>
155
+ <div class="badge">
156
+ <table border="0" cellpadding="0" cellspacing="0" style="margin: 0 auto;">
157
+ <tr>
158
+ <td style="vertical-align: middle; padding-right: 5px; font-size: 14px; line-height: 28px;">📊</td>
159
+ <td style="vertical-align: middle;" class="badge-text">Organization summary</td>
160
+ </tr>
161
+ </table>
162
+ </div>
155
163
  </div>
156
164
 
157
165
  <div class="content">
@@ -163,20 +171,30 @@
163
171
  <!-- Summary Section -->
164
172
  <div class="section">
165
173
  <div class="section-header">
166
- <h2 class="section-title">📊 Daily Overview</h2>
174
+ <table border="0" cellpadding="0" cellspacing="0">
175
+ <tr>
176
+ <td style="vertical-align: middle; padding-right: 8px; font-size: 20px; line-height: 24px;">📋</td>
177
+ <td style="vertical-align: middle; line-height: 24px;"><h2 class="section-title">Daily Overview</h2></td>
178
+ </tr>
179
+ </table>
167
180
  </div>
168
- <div class="summary-text">{{summary}}</div>
181
+ <div class="summary-text">{{{summary}}}</div>
169
182
  </div>
170
183
 
171
184
  <!-- Key Highlights -->
172
185
  {{#if key_highlights}}
173
186
  <div class="section">
174
187
  <div class="section-header">
175
- <h2 class="section-title">✨ Key Highlights</h2>
188
+ <table border="0" cellpadding="0" cellspacing="0">
189
+ <tr>
190
+ <td style="vertical-align: middle; padding-right: 8px; font-size: 20px; line-height: 24px;">✨</td>
191
+ <td style="vertical-align: middle; line-height: 24px;"><h2 class="section-title">Key Highlights</h2></td>
192
+ </tr>
193
+ </table>
176
194
  </div>
177
195
  <div class="list-container">
178
196
  {{#each key_highlights}}
179
- <div class="list-item">{{this}}</div>
197
+ <div class="list-item">{{{this}}}</div>
180
198
  {{/each}}
181
199
  </div>
182
200
  </div>
@@ -186,11 +204,16 @@
186
204
  {{#if action_items}}
187
205
  <div class="section">
188
206
  <div class="section-header">
189
- <h2 class="section-title">✓ Action Items</h2>
207
+ <table border="0" cellpadding="0" cellspacing="0">
208
+ <tr>
209
+ <td style="vertical-align: middle; padding-right: 8px; font-size: 20px; line-height: 24px;">✓</td>
210
+ <td style="vertical-align: middle; line-height: 24px;"><h2 class="section-title">Action Items</h2></td>
211
+ </tr>
212
+ </table>
190
213
  </div>
191
214
  <div class="list-container">
192
215
  {{#each action_items}}
193
- <div class="list-item">{{this}}</div>
216
+ <div class="list-item">{{{this}}}</div>
194
217
  {{/each}}
195
218
  </div>
196
219
  </div>
@@ -200,11 +223,16 @@
200
223
  {{#if upcoming_priorities}}
201
224
  <div class="section">
202
225
  <div class="section-header">
203
- <h2 class="section-title">🎯 Upcoming Priorities</h2>
226
+ <table border="0" cellpadding="0" cellspacing="0">
227
+ <tr>
228
+ <td style="vertical-align: middle; padding-right: 8px; font-size: 20px; line-height: 24px;">🎯</td>
229
+ <td style="vertical-align: middle; line-height: 24px;"><h2 class="section-title">Upcoming Priorities</h2></td>
230
+ </tr>
231
+ </table>
204
232
  </div>
205
233
  <div class="list-container">
206
234
  {{#each upcoming_priorities}}
207
- <div class="list-item">{{this}}</div>
235
+ <div class="list-item">{{{this}}}</div>
208
236
  {{/each}}
209
237
  </div>
210
238
  </div>
@@ -226,4 +254,5 @@
226
254
  </div>
227
255
  </div>
228
256
  </body>
257
+
229
258
  </html>