@thanh01.pmt/presentation-kit 0.2.2 → 0.2.4

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.
@@ -104,9 +104,9 @@ ${joinedSlides}`;
104
104
  var SLIDE_LAYOUT_PRESETS = [
105
105
  {
106
106
  id: "title-hero",
107
- name: "B\xECa & Gi\u1EDBi thi\u1EC7u (Title Cover)",
107
+ name: "Title & Speaker Cover",
108
108
  category: "cover",
109
- description: "Slide b\xECa m\u1EDF \u0111\u1EA7u \u1EA5n t\u01B0\u1EE3ng v\u1EDBi ti\xEAu \u0111\u1EC1 l\u1EDBn, ph\u1EE5 \u0111\u1EC1 v\xE0 th\xF4ng tin gi\u1EA3ng vi\xEAn.",
109
+ description: "High-impact opening slide with large title, subtitle, and speaker credentials.",
110
110
  layout: {
111
111
  boxes: [
112
112
  {
@@ -151,22 +151,22 @@ var SLIDE_LAYOUT_PRESETS = [
151
151
  textAlign: center
152
152
  -->
153
153
 
154
- # \u{1F680} Ti\xEAu \u0110\u1EC1 B\xE0i Gi\u1EA3ng Ch\xEDnh
155
- ### Ph\u1EE5 \u0111\u1EC1 ng\u1EAFn g\u1ECDn, truy\u1EC1n c\u1EA3m h\u1EE9ng v\xE0 \u0111\u1ECBnh v\u1ECB m\u1EE5c ti\xEAu
154
+ # \u{1F680} Engineering Scalable Cloud Systems
155
+ ### Principles, Bottlenecks, and Real-World Architecture Patterns
156
156
 
157
- **Gi\u1EA3ng vi\xEAn:** Th\u1EA7y Nguy\u1EC5n V\u0103n A | **Th\u1EDDi l\u01B0\u1EE3ng:** 45 ph\xFAt | **C\u1EA5p \u0111\u1ED9:** Trung c\u1EA5p
157
+ **Presenter:** Senior Systems Architect | **Duration:** 45 mins | **Level:** Intermediate
158
158
 
159
159
  <!--
160
160
  Presenter Notes:
161
- - Ch\xE0o m\u1EEBng h\u1ECDc vi\xEAn, gi\u1EDBi thi\u1EC7u m\u1EE5c ti\xEAu b\xE0i h\u1ECDc h\xF4m nay.
162
- - Kh\u01A1i g\u1EE3i s\u1EF1 t\xF2 m\xF2 b\u1EB1ng c\xE2u h\u1ECFi m\u1EDF \u0111\u1EA7u v\u1EC1 b\xE0i to\xE1n th\u1EF1c t\u1EBF.
161
+ - Welcome the audience and outline today's primary engineering goals.
162
+ - Spark curiosity with an opening hook about scaling under high concurrency.
163
163
  -->`
164
164
  },
165
165
  {
166
166
  id: "two-column-split",
167
- name: "So S\xE1nh 2 C\u1ED9t (2-Column Comparison)",
167
+ name: "Two-Column Comparison",
168
168
  category: "split",
169
- description: "B\u1ED1 c\u1EE5c chia \u0111\xF4i m\xE0n h\xECnh \u0111\u1EC3 so s\xE1nh ph\u01B0\u01A1ng ph\xE1p c\u0169 vs m\u1EDBi, l\xFD thuy\u1EBFt vs th\u1EF1c t\u1EBF.",
169
+ description: "Balanced side-by-side comparison for legacy vs modern patterns or pros vs cons.",
170
170
  layout: {
171
171
  boxes: [
172
172
  {
@@ -201,38 +201,38 @@ Presenter Notes:
201
201
  pos: [670, 150, 530, 510]
202
202
  -->
203
203
 
204
- ## \u2696\uFE0F So S\xE1nh Kh\xE1i Ni\u1EC7m & Gi\u1EA3i Ph\xE1p
204
+ ## \u2696\uFE0F Monolithic Polling vs Event-Driven Architecture
205
205
 
206
206
  <div class="columns-2">
207
207
  <div>
208
208
 
209
- ### \u{1F534} C\xE1ch Ti\u1EBFp C\u1EADn C\u0169
210
- - X\u1EED l\xFD th\u1EE7 c\xF4ng, t\u1ED1n nhi\u1EC1u nh\xE2n l\u1EF1c
211
- - D\u1EC5 ph\xE1t sinh sai s\u1ED1 do thao t\xE1c l\u1EB7p l\u1EA1i
212
- - Kh\xF3 m\u1EDF r\u1ED9ng khi t\u1EA3i t\u0103ng \u0111\u1ED9t bi\u1EBFn
209
+ ### \u{1F534} Legacy Polling
210
+ - Heavy database CPU overhead on idle cycles
211
+ - High network latency between updates
212
+ - Prone to cascading timeouts during spikes
213
213
 
214
214
  </div>
215
215
  <div>
216
216
 
217
- ### \u{1F7E2} Gi\u1EA3i Ph\xE1p T\u1ED1i \u01AFu M\u1EDBi
218
- - T\u1EF1 \u0111\u1ED9ng h\xF3a ho\xE0n to\xE0n lu\u1ED3ng x\u1EED l\xFD
219
- - Gi\xE1m s\xE1t tr\u1EA1ng th\xE1i th\u1EDDi gian th\u1EF1c
220
- - Kh\u1EA3 n\u0103ng co gi\xE3n linh ho\u1EA1t theo nhu c\u1EA7u
217
+ ### \u{1F7E2} Event-Driven Streams
218
+ - Real-time event propagation via webhooks
219
+ - Zero idle compute waste with serverless consumers
220
+ - Automatic backpressure and queue isolation
221
221
 
222
222
  </div>
223
223
  </div>
224
224
 
225
225
  <!--
226
226
  Presenter Notes:
227
- - Nh\u1EA5n m\u1EA1nh \u0111i\u1EC3m ngh\u1EBDn l\u1EDBn nh\u1EA5t \u1EDF c\u1ED9t b\xEAn tr\xE1i.
228
- - D\u1EABn ch\u1EE9ng s\u1ED1 li\u1EC7u th\u1EF1c t\u1EBF ch\u1EE9ng minh t\xEDnh hi\u1EC7u qu\u1EA3 c\u1EE7a c\u1ED9t ph\u1EA3i.
227
+ - Emphasize the core failure mode of periodic polling under sudden load spikes.
228
+ - Ask the room if anyone has experienced database lockups caused by polling loops.
229
229
  -->`
230
230
  },
231
231
  {
232
232
  id: "code-explainer",
233
- name: "Gi\u1EA3i Th\xEDch Code (Code Walkthrough)",
233
+ name: "Code Walkthrough & Analysis",
234
234
  category: "code",
235
- description: "C\u1ED9t tr\xE1i hi\u1EC3n th\u1ECB code snippet c\xF3 \u0111\xE1nh s\u1ED1, c\u1ED9t ph\u1EA3i gi\u1EA3i th\xEDch t\u1EEBng b\u01B0\u1EDBc ho\u1EA1t \u0111\u1ED9ng.",
235
+ description: "Syntax-highlighted code block on the left with step-by-step key annotations on the right.",
236
236
  layout: {
237
237
  boxes: [
238
238
  {
@@ -267,16 +267,16 @@ Presenter Notes:
267
267
  pos: [740, 135, 460, 535]
268
268
  -->
269
269
 
270
- ## \u{1F4BB} Ph\xE2n T\xEDch C\u1EA5u Tr\xFAc M\xE3 Ngu\u1ED3n
270
+ ## \u{1F4BB} Robust Async Transaction Pipeline
271
271
 
272
272
  <div class="columns-2">
273
273
  <div>
274
274
 
275
275
  \`\`\`ts
276
- // Kh\u1EDFi t\u1EA1o quy tr\xECnh ki\u1EC3m tra d\u1EEF li\u1EC7u
276
+ // Process payment with idempotency guarantee
277
277
  export async function processPayment(order: Order) {
278
278
  const isValid = await validateOrder(order);
279
- if (!isValid) throw new Error("Invalid");
279
+ if (!isValid) throw new Error("ValidationFailed");
280
280
 
281
281
  const receipt = await chargeCard(order);
282
282
  return sendConfirmation(receipt);
@@ -286,25 +286,26 @@ export async function processPayment(order: Order) {
286
286
  </div>
287
287
  <div>
288
288
 
289
- ### \u{1F50D} 3 \u0110i\u1EC3m C\u1EA7n Ch\xFA \xDD:
290
- 1. **Ki\u1EC3m tra s\u1EDBm (Guard Clause):** Ki\u1EC3m tra t\xEDnh h\u1EE3p l\u1EC7 ngay d\xF2ng 3 \u0111\u1EC3 tr\xE1nh g\u1ECDi h\xE0m t\u1ED1n chi ph\xED.
291
- 2. **B\u1EA5t \u0111\u1ED3ng b\u1ED9 (Async/Await):** \u0110\u1EA3m b\u1EA3o th\u1EE9 t\u1EF1 g\u1ECDi API t\xE0i ch\xEDnh chu\u1EA9n x\xE1c.
292
- 3. **Ph\u1EA3n h\u1ED3i ng\u01B0\u1EDDi d\xF9ng:** Tr\u1EA3 v\u1EC1 bi\xEAn lai ho\xE0n ch\u1EC9nh sau khi giao d\u1ECBch th\xE0nh c\xF4ng.
289
+ ### \u{1F50D} Key Engineering Invariants:
290
+ 1. **Early Guard Clause:** Validates payload immediately at line 3 before triggering external calls.
291
+ 2. **Deterministic Sequence:** Enforces strict order of operations using native \`await\`.
292
+ 3. **Audit Trail:** Returns immutable payment receipt upon successful execution.
293
293
 
294
294
  </div>
295
295
  </div>
296
296
 
297
297
  <!--
298
298
  Presenter Notes:
299
- - Y\xEAu c\u1EA7u h\u1ECDc vi\xEAn x\xE1c \u0111\u1ECBnh d\xF2ng code n\xE0o l\xE0 r\u1EE7i ro nh\u1EA5t n\u1EBFu k\u1EBFt n\u1ED1i m\u1EA1ng b\u1ECB r\u1EDBt.
300
- - Nh\u1EAFc l\u1EA1i nguy\xEAn t\u1EAFc Fail-Fast trong l\u1EADp tr\xECnh ph\xF2ng th\u1EE7.
299
+ - Walk through lines 1 to 7 sequentially.
300
+ - Cold-call check: "What happens if line 6 throws a network timeout?"
301
+ - Cognitive scaffolding: Highlight the importance of idempotency keys in payment APIs.
301
302
  -->`
302
303
  },
303
304
  {
304
305
  id: "metrics-3-card",
305
- name: "L\u01B0\u1EDBi 3 Ch\u1EC9 S\u1ED1 (3-Metric Dashboard)",
306
+ name: "3-Metric Key Results Grid",
306
307
  category: "metrics",
307
- description: "Hi\u1EC3n th\u1ECB 3 ch\u1EC9 s\u1ED1 quan tr\u1ECDng (KPIs, Benchmarks, Impact) d\u1EA1ng card n\u1ED5i b\u1EADt.",
308
+ description: "Three high-visibility KPI stat cards for benchmarks, impact, and success criteria.",
308
309
  layout: {
309
310
  boxes: [
310
311
  {
@@ -349,43 +350,43 @@ Presenter Notes:
349
350
  pos: [860, 165, 340, 485]
350
351
  -->
351
352
 
352
- ## \u{1F4CA} 3 Ch\u1EC9 S\u1ED1 Th\xE0nh C\xF4ng C\u1EE7a D\u1EF1 \xC1n
353
+ ## \u{1F4CA} Performance & Reliability Benchmarks
353
354
 
354
355
  <div class="columns-3">
355
356
  <div>
356
357
 
357
- # \u26A1 99.9%
358
- ### \u0110\u1ED9 S\u1EB5n S\xE0ng (Uptime)
359
- H\u1EC7 th\u1ED1ng v\u1EADn h\xE0nh li\xEAn t\u1EE5c 24/7 v\u1EDBi kh\u1EA3 n\u0103ng t\u1EF1 ph\u1EE5c h\u1ED3i l\u1ED7i t\u1EE9c th\xEC.
358
+ # \u26A1 99.99%
359
+ ### SLA Availability
360
+ High-availability multi-region cluster with automated failover routing.
360
361
 
361
362
  </div>
362
363
  <div>
363
364
 
364
- # \u{1F680} 10x
365
- ### T\u1ED1c \u0110\u1ED9 X\u1EED L\xFD
366
- R\xFAt ng\u1EAFn th\u1EDDi gian bi\xEAn d\u1ECBch v\xE0 ph\u1EA3n h\u1ED3i ng\u01B0\u1EDDi d\xF9ng t\u1EEB gi\xE2y xu\u1ED1ng mili-gi\xE2y.
365
+ # \u{1F680} 15ms
366
+ ### P99 Latency
367
+ Sub-20ms roundtrip response time via distributed edge caching.
367
368
 
368
369
  </div>
369
370
  <div>
370
371
 
371
- # \u{1F6E1}\uFE0F 0
372
- ### L\u1ED7 H\u1ED5ng B\u1EA3o M\u1EADt
373
- \u0110\u1EA1t chu\u1EA9n \u0111\xE1nh gi\xE1 an to\xE0n OWASP v\xE0 m\xE3 h\xF3a d\u1EEF li\u1EC7u \u0111\u1EA7u cu\u1ED1i.
372
+ # \u{1F6E1}\uFE0F Zero
373
+ ### Unhandled Breaches
374
+ Full SOC2 Type II compliance and end-to-end payload encryption.
374
375
 
375
376
  </div>
376
377
  </div>
377
378
 
378
379
  <!--
379
380
  Presenter Notes:
380
- - Tr\xECnh b\xE0y l\u1EA7n l\u01B0\u1EE3t 3 m\u1EE5c ti\xEAu \u0111o l\u01B0\u1EDDng \u0111\u01B0\u1EE3c c\u1EE7a h\u1EC7 th\u1ED1ng.
381
- - Nh\u1EA5n m\u1EA1nh ch\u1EC9 s\u1ED1 th\u1EE9 2 l\xE0 tr\u1ECDng t\xE2m k\u1EF9 thu\u1EADt c\u1EE7a b\xE0i h\u1ECDc h\xF4m nay.
381
+ - Highlight the 15ms P99 latency target as the primary technical milestone.
382
+ - Connect these metrics directly to the architecture decisions discussed next.
382
383
  -->`
383
384
  },
384
385
  {
385
386
  id: "process-flow",
386
- name: "S\u01A1 \u0110\u1ED3 Quy Tr\xECnh (Process / Flowchart)",
387
+ name: "Architecture & Process Flow",
387
388
  category: "diagram",
388
- description: "Quy tr\xECnh nhi\u1EC1u b\u01B0\u1EDBc v\u1EDBi s\u01A1 \u0111\u1ED3 Mermaid tr\u1EF1c quan k\xE8m ghi ch\xFA t\xF3m t\u1EAFt.",
389
+ description: "Multi-stage workflow with responsive Mermaid diagram and phase summaries.",
389
390
  layout: {
390
391
  boxes: [
391
392
  {
@@ -420,33 +421,33 @@ Presenter Notes:
420
421
  pos: [80, 465, 1120, 205]
421
422
  -->
422
423
 
423
- ## \u{1F504} Ki\u1EBFn Tr\xFAc Lu\u1ED3ng D\u1EEF Li\u1EC7u 4 B\u01B0\u1EDBc
424
+ ## \u{1F504} End-to-End Data Ingestion Pipeline
424
425
 
425
426
  \`\`\`mermaid
426
427
  graph LR
427
- A[1. Client Request] --> B[2. API Gateway]
428
- B --> C[3. Auth Service]
429
- C --> D[4. Database Cluster]
428
+ A[1. Client Ingress] --> B[2. API Gateway]
429
+ B --> C[3. Auth Verifier]
430
+ C --> D[4. Distributed DB]
430
431
  style A fill:#0284c7,stroke:#38bdf8,stroke-width:2px,color:#fff
431
432
  style B fill:#1e293b,stroke:#64748b,stroke-width:2px,color:#fff
432
433
  style C fill:#059669,stroke:#34d399,stroke-width:2px,color:#fff
433
434
  style D fill:#7c3aed,stroke:#a78bfa,stroke-width:2px,color:#fff
434
435
  \`\`\`
435
436
 
436
- - **Giai \u0111o\u1EA1n 1 & 2:** Ti\u1EBFp nh\u1EADn y\xEAu c\u1EA7u t\u1EEB client, \u0111i\u1EC1u h\u01B0\u1EDBng t\u1EA3i v\xE0 gi\u1EDBi h\u1EA1n t\u1EA7n su\u1EA5t (Rate Limiting).
437
- - **Giai \u0111o\u1EA1n 3 & 4:** X\xE1c th\u1EF1c token JWT ph\xE2n quy\u1EC1n tr\u01B0\u1EDBc khi truy v\u1EA5n d\u1EEF li\u1EC7u t\u1EEB DB Cluster.
437
+ - **Ingress & Gateway:** Rate-limits traffic and applies reverse-proxy load balancing.
438
+ - **Verification & Storage:** Decodes cryptographic JWT tokens before transactional write commit.
438
439
 
439
440
  <!--
440
441
  Presenter Notes:
441
- - Tr\u1ECF tr\u1EF1c ti\u1EBFp v\xE0o t\u1EEBng node c\u1EE7a s\u01A1 \u0111\u1ED3 Mermaid khi thuy\u1EBFt tr\xECnh.
442
- - \u0110\u1EB7t c\xE2u h\u1ECFi: "N\u1EBFu b\u01B0\u1EDBc 3 th\u1EA5t b\u1EA1i th\xEC b\u01B0\u1EDBc 4 c\xF3 \u0111\u01B0\u1EE3c g\u1ECDi kh\xF4ng?"
442
+ - Trace each hop across the diagram from left to right.
443
+ - Ask: "Where should rate limiting be applied to prevent DDoS attacks?"
443
444
  -->`
444
445
  },
445
446
  {
446
447
  id: "quote-highlight",
447
- name: "Th\xF4ng \u0110i\u1EC7p Then Ch\u1ED1t (Quote / Highlight)",
448
+ name: "Core Principle & Quote Highlight",
448
449
  category: "quote",
449
- description: "Tr\xEDch d\u1EABn danh ng\xF4n ho\u1EB7c nguy\xEAn t\u1EAFc v\xE0ng c\u1EA7n ghi nh\u1EDB s\xE2u s\u1EAFc.",
450
+ description: "Prominent quote callout for fundamental engineering rules or memorable mantras.",
450
451
  layout: {
451
452
  boxes: [
452
453
  {
@@ -477,23 +478,23 @@ Presenter Notes:
477
478
  fontSize: 1.4rem
478
479
  -->
479
480
 
480
- ## \u{1F4A1} Nguy\xEAn T\u1EAFc Thi\u1EBFt K\u1EBF C\u1ED1t L\xF5i
481
+ ## \u{1F4A1} Foundational Architecture Principle
481
482
 
482
- > "S\u1EF1 \u0111\u01A1n gi\u1EA3n l\xE0 \u0111i\u1EC1u ki\u1EC7n ti\xEAn quy\u1EBFt cho \u0111\u1ED9 tin c\u1EADy. M\u1ED9t ki\u1EBFn tr\xFAc t\u1ED1t l\xE0 khi b\u1EA5t k\u1EF3 l\u1EADp tr\xECnh vi\xEAn m\u1EDBi n\xE0o c\u0169ng c\xF3 th\u1EC3 \u0111\u1ECDc hi\u1EC3u lu\u1ED3ng ho\u1EA1t \u0111\u1ED9ng ch\u1EC9 sau 15 ph\xFAt."
483
+ > "Simplicity is prerequisite for reliability. A well-engineered distributed system is one where a new engineer can understand the request flow within their first hour."
483
484
  >
484
485
  > \u2014 **Edsger W. Dijkstra**
485
486
 
486
487
  <!--
487
488
  Presenter Notes:
488
- - D\u1EEBng l\u1EA1i 5 gi\xE2y im l\u1EB7ng \u0111\u1EC3 c\u1EA3 l\u1EDBp c\xF9ng suy ng\u1EABm v\u1EC1 th\xF4ng \u0111i\u1EC7p.
489
- - Y\xEAu c\u1EA7u m\u1ED9t h\u1ECDc vi\xEAn chia s\u1EBB suy ngh\u0129 v\u1EC1 c\xE1ch \xE1p d\u1EE5ng nguy\xEAn t\u1EAFc n\xE0y v\xE0o b\xE0i t\u1EADp l\u1EDBn.
489
+ - Pause for 5 seconds of silence to let the quote sink in.
490
+ - Ask: "How do our current architectural choices reflect this principle?"
490
491
  -->`
491
492
  },
492
493
  {
493
494
  id: "quiz-checkpoint",
494
- name: "Tr\u1EAFc Nghi\u1EC7m T\u01B0\u01A1ng T\xE1c (Quiz Checkpoint)",
495
+ name: "Interactive Formative Checkpoint",
495
496
  category: "assessment",
496
- description: "C\xE2u h\u1ECFi t\u01B0\u01A1ng t\xE1c Formative Checkpoint k\xE8m c\xE1c l\u1EF1a ch\u1ECDn A/B/C/D \u0111\u1EC3 l\u1EDBp b\xECnh ch\u1ECDn.",
497
+ description: "Interactive multiple-choice diagnostic checkpoint with A/B/C/D voting options.",
497
498
  layout: {
498
499
  boxes: [
499
500
  {
@@ -532,27 +533,27 @@ Presenter Notes:
532
533
  fontSize: 1.15rem
533
534
  -->
534
535
 
535
- ## \u{1F3AF} Ki\u1EC3m Tra Nhanh: B\u1EA1n \u0110\xE3 Hi\u1EC3u \u0110\xFAng?
536
+ ## \u{1F3AF} Formative Checkpoint: Verify Your Understanding
536
537
 
537
- > **C\xE2u h\u1ECFi:** Trong ki\u1EBFn tr\xFAc Microservices, c\u01A1 ch\u1EBF n\xE0o gi\xFAp \u0111\u1EA3m b\u1EA3o tin nh\u1EAFn kh\xF4ng b\u1ECB th\u1EA5t l\u1EA1c khi d\u1ECBch v\u1EE5 nh\u1EADn g\u1EB7p s\u1EF1 c\u1ED1 t\u1EA1m th\u1EDDi?
538
+ > **Question:** In an event-driven architecture, which pattern guarantees that messages are never permanently lost if a downstream consumer crashes?
538
539
 
539
- - **A.** G\u1ECDi API HTTP tr\u1EF1c ti\u1EBFp v\u1EDBi timeout ng\u1EAFn
540
- - **B.** S\u1EED d\u1EE5ng Message Queue (H\xE0ng \u0111\u1EE3i tin nh\u1EAFn) c\xF3 c\u01A1 ch\u1EBF Retry & DLQ
541
- - **C.** L\u01B0u t\u1EA1m v\xE0o b\u1ED9 nh\u1EDB RAM c\u1EE7a m\xE1y kh\xE1ch (Client In-Memory Storage)
542
- - **D.** B\u1ECF qua tin nh\u1EAFn b\u1ECB l\u1ED7i v\xE0 th\xF4ng b\xE1o ng\u01B0\u1EDDi d\xF9ng g\u1EEDi l\u1EA1i t\u1EEB \u0111\u1EA7u
540
+ - **A.** Direct HTTP POST call with a short 2-second timeout
541
+ - **B.** Persistent Message Broker with Dead-Letter Queue (DLQ) & retry policy
542
+ - **C.** In-memory client RAM cache without disk persistence
543
+ - **D.** Discarding failed packets and prompting the user to re-submit
543
544
 
544
545
  <!--
545
546
  Presenter Notes:
546
- - D\xE0nh 30 gi\xE2y cho h\u1ECDc vi\xEAn gi\u01A1 tay ho\u1EB7c b\xECnh ch\u1ECDn \u0111\xE1p \xE1n.
547
- - \u0110\xE1p \xE1n ch\xEDnh x\xE1c: B.
548
- - Gi\u1EA3i th\xEDch v\xEC sao \u0111\xE1p \xE1n A v\xE0 C ti\u1EC1m \u1EA9n nguy c\u01A1 m\u1EA5t m\xE1t d\u1EEF li\u1EC7u nghi\xEAm tr\u1ECDng.
547
+ - Give students 30 seconds to vote on option A, B, C, or D.
548
+ - Correct answer: B.
549
+ - Explain why options A and C introduce catastrophic data loss in production.
549
550
  -->`
550
551
  },
551
552
  {
552
553
  id: "tiered-practice-3cards",
553
- name: "Th\u1EF1c H\xE0nh Ph\xE2n H\xF3a (Tiered Practice)",
554
+ name: "Tiered Differentiation (Bronze / Silver / Gold)",
554
555
  category: "content",
555
- description: "3 c\u1EA5p b\u1EADc nhi\u1EC7m v\u1EE5 \u0110\u1ED3ng - B\u1EA1c - V\xE0ng \u0111\u1EC3 h\u1ECDc sinh t\u1EF1 ch\u1ECDn m\u1EE9c th\u1EED th\xE1ch ph\xF9 h\u1EE3p.",
556
+ description: "Three progressive competency tiers allowing self-paced learning acceleration.",
556
557
  layout: {
557
558
  boxes: [
558
559
  {
@@ -595,46 +596,46 @@ Presenter Notes:
595
596
  pos: [850, 140, 350, 520]
596
597
  -->
597
598
 
598
- ## \u{1F6E0}\uFE0F Th\u1EED Th\xE1ch Ph\xE2n H\xF3a 3 C\u1EA5p \u0110\u1ED9 (Tiered Lab)
599
+ ## \u{1F6E0}\uFE0F Hands-On Challenge: 3-Tier Differentiation
599
600
 
600
601
  <div class="columns-3">
601
602
  <div>
602
603
 
603
- ### \u{1F949} H\u1EA1ng \u0110\u1ED3ng (Bronze)
604
- - Vi\u1EBFt h\xE0m x\u1EED l\xFD c\u01A1 b\u1EA3n
605
- - V\u01B0\u1EE3t qua 3 test case m\u1EABu
606
- - *M\u1EE5c ti\xEAu: \u0110\u1EA1t chu\u1EA9n ki\u1EBFn th\u1EE9c c\u01A1 b\u1EA3n*
604
+ ### \u{1F949} Bronze Tier
605
+ - Implement basic handler logic
606
+ - Pass 3 baseline unit tests
607
+ - *Goal: Foundational mastery*
607
608
 
608
609
  </div>
609
610
  <div>
610
611
 
611
- ### \u{1F948} H\u1EA1ng B\u1EA1c (Silver)
612
- - Th\xEAm ki\u1EC3m tra \u0111i\u1EC1u ki\u1EC7n bi\xEAn
613
- - T\u1ED1i \u01B0u \u0111\u1ED9 ph\u1EE9c t\u1EA1p thu\u1EADt to\xE1n O(N)
614
- - *M\u1EE5c ti\xEAu: V\u1EEFng v\xE0ng k\u1EF9 n\u0103ng th\u1EF1c chi\u1EBFn*
612
+ ### \u{1F948} Silver Tier
613
+ - Add boundary error handling
614
+ - Enforce O(N) memory complexity
615
+ - *Goal: Production-ready code*
615
616
 
616
617
  </div>
617
618
  <div>
618
619
 
619
- ### \u{1F947} H\u1EA1ng V\xE0ng (Gold)
620
- - Thi\u1EBFt k\u1EBF t\xEDnh n\u0103ng m\u1EDF r\u1ED9ng
621
- - Vi\u1EBFt Unit Test t\u1EF1 \u0111\u1ED9ng bao ph\u1EE7 90%
622
- - *M\u1EE5c ti\xEAu: S\xE1ng t\u1EA1o & b\u1EE9t ph\xE1*
620
+ ### \u{1F947} Gold Tier
621
+ - Design distributed retry queue
622
+ - Add 95% automated test coverage
623
+ - *Goal: Architectural leadership*
623
624
 
624
625
  </div>
625
626
  </div>
626
627
 
627
628
  <!--
628
629
  Presenter Notes:
629
- - To\xE0n b\u1ED9 l\u1EDBp \u0111\u1EC1u b\u1EAFt \u0111\u1EA7u t\u1EEB H\u1EA1ng \u0110\u1ED3ng \u0111\u1EC3 \u0111\u1EA3m b\u1EA3o hi\u1EC3u b\xE0i.
630
- - Khuy\u1EBFn kh\xEDch h\u1ECDc vi\xEAn \u0111\xE3 xong Bronze ch\u1EE7 \u0111\u1ED9ng th\u1EED s\u1EE9c v\u1EDBi Silver v\xE0 Gold.
630
+ - All learners begin at Bronze to establish baseline competency.
631
+ - Accelerate self-directed learners to Silver and Gold as they complete each tier.
631
632
  -->`
632
633
  },
633
634
  {
634
635
  id: "agenda-timeline",
635
- name: "L\u1ED9 Tr\xECnh Bu\u1ED5i H\u1ECDc (Agenda Table)",
636
+ name: "Session Agenda & Milestones",
636
637
  category: "content",
637
- description: "B\u1EA3ng l\u1ED9 tr\xECnh th\u1EDDi gian chi ti\u1EBFt theo t\u1EEBng giai \u0111o\u1EA1n v\xE0 s\u1EA3n ph\u1EA9m \u0111\u1EA7u ra.",
638
+ description: "Structured time-budgeted agenda mapping stages to measurable deliverables.",
638
639
  layout: {
639
640
  boxes: [
640
641
  {
@@ -661,25 +662,25 @@ Presenter Notes:
661
662
  pos: [80, 140, 1120, 520]
662
663
  -->
663
664
 
664
- ## \u{1F5FA}\uFE0F L\u1ED9 Tr\xECnh Ho\u1EA1t \u0110\u1ED9ng & M\u1EE5c Ti\xEAu
665
+ ## \u{1F5FA}\uFE0F Milestone Roadmap & Time Budget
665
666
 
666
- | Th\u1EDDi l\u01B0\u1EE3ng | Giai \u0111o\u1EA1n | Tr\u1ECDng t\xE2m ho\u1EA1t \u0111\u1ED9ng | K\u1EBFt qu\u1EA3 \u0111\u1EA1t \u0111\u01B0\u1EE3c |
667
+ | Allocated Time | Session Stage | Core Learning Focus | Deliverable Milestone |
667
668
  |:---:|---|---|---|
668
- | **05'** | Kh\u1EDFi \u0111\u1ED9ng | T\xECnh hu\u1ED1ng th\u1EF1c t\u1EBF & Th\u1EED th\xE1ch | Nh\u1EADn di\u1EC7n b\xE0i to\xE1n c\u1EA7n gi\u1EA3i |
669
- | **15'** | Kh\xE1m ph\xE1 | Ph\xE2n t\xEDch 2 kh\xE1i ni\u1EC7m c\u1ED1t l\xF5i | Hi\u1EC3u b\u1EA3n ch\u1EA5t thu\u1EADt to\xE1n |
670
- | **20'** | Th\u1EF1c h\xE0nh | Code Lab t\u1EA1i m\xE1y theo 3 b\u1EADc | Ho\xE0n th\xE0nh t\u1ED1i thi\u1EC3u H\u1EA1ng \u0110\u1ED3ng |
671
- | **05'** | T\u1ED5ng k\u1EBFt | Tr\u1EAFc nghi\u1EC7m ph\u1EA3n x\u1EA1 & \u0110\xE1nh gi\xE1 | H\u1EC7 th\u1ED1ng h\xF3a to\xE0n b\u1ED9 ki\u1EBFn th\u1EE9c |
669
+ | **05 mins** | Warm-Up | Real-World Scenario & Context | Identify system bottleneck |
670
+ | **15 mins** | Concept Discovery | Core Architectural Patterns | Deconstruct message queue models |
671
+ | **20 mins** | Hands-On Lab | Tiered Code Implementation | Complete Bronze + Silver tasks |
672
+ | **05 mins** | Wrap-Up | Formative Checkpoint & Debrief | Consolidate key principles |
672
673
 
673
674
  <!--
674
675
  Presenter Notes:
675
- - Gi\u1EDBi thi\u1EC7u t\u1ED5ng quan \u0111\u1EC3 h\u1ECDc vi\xEAn bi\u1EBFt r\xF5 c\u1EA5u tr\xFAc bu\u1ED5i h\u1ECDc v\xE0 ch\u1EE7 \u0111\u1ED9ng ph\xE2n b\u1ED5 th\u1EDDi gian.
676
+ - Walk through the time budget so students understand expectations and pacing.
676
677
  -->`
677
678
  },
678
679
  {
679
680
  id: "takeaways-summary",
680
- name: "T\u1ED5ng K\u1EBFt C\u1ED1t L\xF5i (Key Takeaways)",
681
+ name: "Key Takeaways & Wrap-up",
681
682
  category: "content",
682
- description: "Slide k\u1EBFt lu\u1EADn v\u1EDBi 3 b\xE0i h\u1ECDc \u0111\u1EAFt gi\xE1 nh\u1EA5t v\xE0 h\xE0nh \u0111\u1ED9ng ti\u1EBFp theo.",
683
+ description: "Three memorable synthesis takeaways with actionable next steps.",
683
684
  layout: {
684
685
  boxes: [
685
686
  {
@@ -718,18 +719,18 @@ Presenter Notes:
718
719
  fontSize: 1.1rem
719
720
  -->
720
721
 
721
- ## \u{1F3C1} 3 \u0110i\u1EC1u C\u1EA7n Nh\u1EDB Sau Bu\u1ED5i H\u1ECDc
722
+ ## \u{1F3C1} Key Takeaways & Action Items
722
723
 
723
- 1. **Hi\u1EC3u b\u1EA3n ch\u1EA5t tr\u01B0\u1EDBc khi vi\u1EBFt m\xE3:** Thu\u1EADt to\xE1n \u0111\xFAng lu\xF4n quan tr\u1ECDng h\u01A1n c\xFA ph\xE1p b\xF3ng b\u1EA9y.
724
- 2. **Ki\u1EC3m so\xE1t \u0111i\u1EC1u ki\u1EC7n bi\xEAn:** 80% l\u1ED7i h\u1EC7 th\u1ED1ng ph\xE1t sinh t\u1EEB c\xE1c d\u1EEF li\u1EC7u \u0111\u1EA7u v\xE0o kh\xF4ng l\u01B0\u1EDDng tr\u01B0\u1EDBc.
725
- 3. **Thi\u1EBFt k\u1EBF h\u01B0\u1EDBng m\xF4-\u0111un:** Chia nh\u1ECF v\u1EA5n \u0111\u1EC1 l\u1EDBn th\xE0nh c\xE1c h\xE0m \u0111\u1ED9c l\u1EADp d\u1EC5 ki\u1EC3m th\u1EED.
724
+ 1. **Decouple Before Scaling:** Separate producer rate from consumer processing capacity.
725
+ 2. **Design for Failure:** Always configure retries, backoff intervals, and dead-letter queues.
726
+ 3. **Measure End-to-End:** Track P99 latency and error rates across all distributed boundaries.
726
727
 
727
- > \u{1F4DD} **Nhi\u1EC7m v\u1EE5 v\u1EC1 nh\xE0:** Ho\xE0n thi\u1EC7n b\xE0i th\u1EF1c h\xE0nh H\u1EA1ng B\u1EA1c v\xE0 chu\u1EA9n b\u1ECB c\xE2u h\u1ECFi cho bu\u1ED5i Review tu\u1EA7n t\u1EDBi.
728
+ > \u{1F4DD} **Next Action Item:** Complete the Silver Tier refactoring challenge before our next peer-review session.
728
729
 
729
730
  <!--
730
731
  Presenter Notes:
731
- - T\xF3m t\u1EAFt s\xFAc t\xEDch trong 2 ph\xFAt cu\u1ED1i bu\u1ED5i.
732
- - Tuy\xEAn d\u01B0\u01A1ng c\xE1c b\u1EA1n c\xF3 gi\u1EA3i ph\xE1p xu\u1EA5t s\u1EAFc trong ph\u1EA7n th\u1EF1c h\xE0nh.
732
+ - Deliver a crisp 2-minute wrap-up reinforcing the 3 core takeaways.
733
+ - Acknowledge strong peer collaboration during the hands-on lab.
733
734
  -->`
734
735
  }
735
736
  ];
@@ -741,5 +742,5 @@ function getSlideLayoutPresetsByCategory(category) {
741
742
  }
742
743
 
743
744
  export { SLIDE_LAYOUT_PRESETS, getSlideLayoutPresetById, getSlideLayoutPresetsByCategory, serializeLayoutToComment, splitMarkdownSlides, updateSlideLayoutInMarkdown };
744
- //# sourceMappingURL=chunk-HBMXEPZJ.js.map
745
- //# sourceMappingURL=chunk-HBMXEPZJ.js.map
745
+ //# sourceMappingURL=chunk-3IKL6SBP.js.map
746
+ //# sourceMappingURL=chunk-3IKL6SBP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/core/layout/serializer.ts","../src/core/layout/presets.ts"],"names":[],"mappings":"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","file":"chunk-3IKL6SBP.js","sourcesContent":["import yaml from 'js-yaml';\nimport type { SlideLayoutData } from '../../types.js';\n\n/**\n * Serialize a SlideLayoutData object into a Markdown HTML comment\n */\nexport function serializeLayoutToComment(layout: SlideLayoutData): string {\n if (!layout.boxes || layout.boxes.length === 0) return '';\n\n const cleanData = {\n boxes: layout.boxes.map(box => {\n const b: Record<string, unknown> = {\n id: box.id,\n target: box.target || `h1`,\n pos: [\n Math.round(box.pos[0]),\n Math.round(box.pos[1]),\n Math.round(box.pos[2]),\n Math.round(box.pos[3]),\n ],\n };\n if (box.fontSize) b.fontSize = box.fontSize;\n if (box.color) b.color = box.color;\n if (box.textAlign) b.textAlign = box.textAlign;\n if (box.style) b.style = box.style;\n return b;\n }),\n };\n\n const yamlStr = yaml.dump(cleanData, {\n indent: 2,\n lineWidth: -1,\n noRefs: true,\n }).trim();\n\n return `<!-- layout:\\n ${yamlStr.split('\\n').join('\\n ')}\\n-->`;\n}\n\n/**\n * Split a Markdown presentation into individual slide strings,\n * properly handling frontmatter and code blocks.\n */\nexport function splitMarkdownSlides(markdown: string): {\n frontmatter: string | null;\n slides: string[];\n} {\n const lines = markdown.split('\\n');\n let frontmatter: string | null = null;\n const slideBuffers: string[][] = [];\n let currentBuffer: string[] = [];\n\n let inCodeFence = false;\n let inFrontmatter = false;\n let lineIdx = 0;\n\n // Check for leading frontmatter\n if (lines.length > 0 && lines[0].trim() === '---') {\n inFrontmatter = true;\n const fmBuffer: string[] = [lines[0]];\n lineIdx = 1;\n\n while (lineIdx < lines.length) {\n const line = lines[lineIdx];\n fmBuffer.push(line);\n if (line.trim() === '---') {\n frontmatter = fmBuffer.join('\\n');\n lineIdx++;\n break;\n }\n lineIdx++;\n }\n }\n\n // Iterate remaining lines to collect slides\n for (let i = lineIdx; i < lines.length; i++) {\n const line = lines[i];\n\n if (/^```/.test(line.trim())) {\n inCodeFence = !inCodeFence;\n currentBuffer.push(line);\n continue;\n }\n\n if (!inCodeFence && line.trim() === '---') {\n slideBuffers.push(currentBuffer);\n currentBuffer = [];\n continue;\n }\n\n currentBuffer.push(line);\n }\n\n slideBuffers.push(currentBuffer);\n\n const slides = slideBuffers.map(b => b.join('\\n'));\n return { frontmatter, slides };\n}\n\n/**\n * Update or insert a layout comment inside a specific slide's markdown\n */\nexport function updateSlideLayoutInMarkdown(\n markdown: string,\n slideIndex: number,\n layout: SlideLayoutData | null\n): string {\n const { frontmatter, slides } = splitMarkdownSlides(markdown);\n\n if (slideIndex < 0 || slideIndex >= slides.length) {\n return markdown;\n }\n\n let slideContent = slides[slideIndex];\n\n // Regex to detect existing layout comment\n const layoutCommentRegex = /<!--\\s*layout:\\s*[\\s\\S]*?-->/i;\n\n const newComment = layout && layout.boxes && layout.boxes.length > 0\n ? serializeLayoutToComment(layout)\n : '';\n\n if (layoutCommentRegex.test(slideContent)) {\n if (newComment) {\n slideContent = slideContent.replace(layoutCommentRegex, newComment);\n } else {\n slideContent = slideContent.replace(layoutCommentRegex, '').trim();\n }\n } else if (newComment) {\n // Prepend layout comment to the slide\n const trimmed = slideContent.trimStart();\n slideContent = `${newComment}\\n\\n${trimmed}`;\n }\n\n slides[slideIndex] = slideContent;\n\n // Reassemble deck\n const joinedSlides = slides.join('\\n---\\n');\n if (frontmatter) {\n return `${frontmatter}\\n\\n${joinedSlides}`;\n }\n return joinedSlides;\n}\n","// ═══════════════════════════════════════════════════════════════════════════════\n// @learnwell/presentation-kit — Slide Layout Presets\n// Catalog of battle-tested single-slide layout templates with 1280x720 canvas coordinates\n// ═══════════════════════════════════════════════════════════════════════════════\n\nimport type { SlideLayoutData } from '../../types.js';\n\nexport type SlideLayoutCategory =\n | 'cover'\n | 'content'\n | 'split'\n | 'code'\n | 'metrics'\n | 'diagram'\n | 'quote'\n | 'assessment';\n\nexport interface SlideLayoutPreset {\n id: string;\n name: string;\n category: SlideLayoutCategory;\n description: string;\n layout: SlideLayoutData;\n markdownSnippet: string;\n}\n\nexport const SLIDE_LAYOUT_PRESETS: SlideLayoutPreset[] = [\n {\n id: 'title-hero',\n name: 'Title & Speaker Cover',\n category: 'cover',\n description: 'High-impact opening slide with large title, subtitle, and speaker credentials.',\n layout: {\n boxes: [\n {\n id: 'title',\n target: 'h1',\n pos: [100, 180, 1080, 140],\n fontSize: '3rem',\n textAlign: 'center',\n },\n {\n id: 'subtitle',\n target: 'h3',\n pos: [100, 350, 1080, 70],\n fontSize: '1.5rem',\n textAlign: 'center',\n },\n {\n id: 'speaker-meta',\n target: 'p',\n pos: [100, 460, 1080, 80],\n fontSize: '1.1rem',\n textAlign: 'center',\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: title\n target: h1\n pos: [100, 180, 1080, 140]\n fontSize: 3rem\n textAlign: center\n - id: subtitle\n target: h3\n pos: [100, 350, 1080, 70]\n fontSize: 1.5rem\n textAlign: center\n - id: speaker-meta\n target: p\n pos: [100, 460, 1080, 80]\n fontSize: 1.1rem\n textAlign: center\n-->\n\n# 🚀 Engineering Scalable Cloud Systems\n### Principles, Bottlenecks, and Real-World Architecture Patterns\n\n**Presenter:** Senior Systems Architect | **Duration:** 45 mins | **Level:** Intermediate\n\n<!--\nPresenter Notes:\n- Welcome the audience and outline today's primary engineering goals.\n- Spark curiosity with an opening hook about scaling under high concurrency.\n-->`,\n },\n\n {\n id: 'two-column-split',\n name: 'Two-Column Comparison',\n category: 'split',\n description: 'Balanced side-by-side comparison for legacy vs modern patterns or pros vs cons.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 50, 1120, 70],\n fontSize: '2rem',\n },\n {\n id: 'col-left',\n target: '.columns-2 > div:first-child',\n pos: [80, 150, 530, 510],\n },\n {\n id: 'col-right',\n target: '.columns-2 > div:last-child',\n pos: [670, 150, 530, 510],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 50, 1120, 70]\n fontSize: 2rem\n - id: col-left\n target: '.columns-2 > div:first-child'\n pos: [80, 150, 530, 510]\n - id: col-right\n target: '.columns-2 > div:last-child'\n pos: [670, 150, 530, 510]\n-->\n\n## ⚖️ Monolithic Polling vs Event-Driven Architecture\n\n<div class=\"columns-2\">\n<div>\n\n### 🔴 Legacy Polling\n- Heavy database CPU overhead on idle cycles\n- High network latency between updates\n- Prone to cascading timeouts during spikes\n\n</div>\n<div>\n\n### 🟢 Event-Driven Streams\n- Real-time event propagation via webhooks\n- Zero idle compute waste with serverless consumers\n- Automatic backpressure and queue isolation\n\n</div>\n</div>\n\n<!--\nPresenter Notes:\n- Emphasize the core failure mode of periodic polling under sudden load spikes.\n- Ask the room if anyone has experienced database lockups caused by polling loops.\n-->`,\n },\n\n {\n id: 'code-explainer',\n name: 'Code Walkthrough & Analysis',\n category: 'code',\n description: 'Syntax-highlighted code block on the left with step-by-step key annotations on the right.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 45, 1120, 65],\n fontSize: '1.9rem',\n },\n {\n id: 'code-box',\n target: '.columns-2 > div:first-child',\n pos: [80, 135, 630, 535],\n },\n {\n id: 'notes-box',\n target: '.columns-2 > div:last-child',\n pos: [740, 135, 460, 535],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 45, 1120, 65]\n fontSize: 1.9rem\n - id: code-box\n target: '.columns-2 > div:first-child'\n pos: [80, 135, 630, 535]\n - id: notes-box\n target: '.columns-2 > div:last-child'\n pos: [740, 135, 460, 535]\n-->\n\n## 💻 Robust Async Transaction Pipeline\n\n<div class=\"columns-2\">\n<div>\n\n\\`\\`\\`ts\n// Process payment with idempotency guarantee\nexport async function processPayment(order: Order) {\n const isValid = await validateOrder(order);\n if (!isValid) throw new Error(\"ValidationFailed\");\n\n const receipt = await chargeCard(order);\n return sendConfirmation(receipt);\n}\n\\`\\`\\`\n\n</div>\n<div>\n\n### 🔍 Key Engineering Invariants:\n1. **Early Guard Clause:** Validates payload immediately at line 3 before triggering external calls.\n2. **Deterministic Sequence:** Enforces strict order of operations using native \\`await\\`.\n3. **Audit Trail:** Returns immutable payment receipt upon successful execution.\n\n</div>\n</div>\n\n<!--\nPresenter Notes:\n- Walk through lines 1 to 7 sequentially.\n- Cold-call check: \"What happens if line 6 throws a network timeout?\"\n- Cognitive scaffolding: Highlight the importance of idempotency keys in payment APIs.\n-->`,\n },\n\n {\n id: 'metrics-3-card',\n name: '3-Metric Key Results Grid',\n category: 'metrics',\n description: 'Three high-visibility KPI stat cards for benchmarks, impact, and success criteria.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 50, 1120, 70],\n fontSize: '2rem',\n textAlign: 'center',\n },\n {\n id: 'metric-1',\n target: '.columns-3 > div:nth-child(1)',\n pos: [80, 165, 340, 485],\n },\n {\n id: 'metric-2',\n target: '.columns-3 > div:nth-child(2)',\n pos: [470, 165, 340, 485],\n },\n {\n id: 'metric-3',\n target: '.columns-3 > div:nth-child(3)',\n pos: [860, 165, 340, 485],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 50, 1120, 70]\n fontSize: 2rem\n textAlign: center\n - id: metric-1\n target: '.columns-3 > div:nth-child(1)'\n pos: [80, 165, 340, 485]\n - id: metric-2\n target: '.columns-3 > div:nth-child(2)'\n pos: [470, 165, 340, 485]\n - id: metric-3\n target: '.columns-3 > div:nth-child(3)'\n pos: [860, 165, 340, 485]\n-->\n\n## 📊 Performance & Reliability Benchmarks\n\n<div class=\"columns-3\">\n<div>\n\n# ⚡ 99.99%\n### SLA Availability\nHigh-availability multi-region cluster with automated failover routing.\n\n</div>\n<div>\n\n# 🚀 15ms\n### P99 Latency\nSub-20ms roundtrip response time via distributed edge caching.\n\n</div>\n<div>\n\n# 🛡️ Zero\n### Unhandled Breaches\nFull SOC2 Type II compliance and end-to-end payload encryption.\n\n</div>\n</div>\n\n<!--\nPresenter Notes:\n- Highlight the 15ms P99 latency target as the primary technical milestone.\n- Connect these metrics directly to the architecture decisions discussed next.\n-->`,\n },\n\n {\n id: 'process-flow',\n name: 'Architecture & Process Flow',\n category: 'diagram',\n description: 'Multi-stage workflow with responsive Mermaid diagram and phase summaries.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 45, 1120, 65],\n fontSize: '1.9rem',\n },\n {\n id: 'diagram-box',\n target: 'pre.mermaid, .mermaid',\n pos: [80, 130, 1120, 310],\n },\n {\n id: 'summary-box',\n target: 'ul, p',\n pos: [80, 465, 1120, 205],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 45, 1120, 65]\n fontSize: 1.9rem\n - id: diagram-box\n target: 'pre.mermaid, .mermaid'\n pos: [80, 130, 1120, 310]\n - id: summary-box\n target: 'ul, p'\n pos: [80, 465, 1120, 205]\n-->\n\n## 🔄 End-to-End Data Ingestion Pipeline\n\n\\`\\`\\`mermaid\ngraph LR\n A[1. Client Ingress] --> B[2. API Gateway]\n B --> C[3. Auth Verifier]\n C --> D[4. Distributed DB]\n style A fill:#0284c7,stroke:#38bdf8,stroke-width:2px,color:#fff\n style B fill:#1e293b,stroke:#64748b,stroke-width:2px,color:#fff\n style C fill:#059669,stroke:#34d399,stroke-width:2px,color:#fff\n style D fill:#7c3aed,stroke:#a78bfa,stroke-width:2px,color:#fff\n\\`\\`\\`\n\n- **Ingress & Gateway:** Rate-limits traffic and applies reverse-proxy load balancing.\n- **Verification & Storage:** Decodes cryptographic JWT tokens before transactional write commit.\n\n<!--\nPresenter Notes:\n- Trace each hop across the diagram from left to right.\n- Ask: \"Where should rate limiting be applied to prevent DDoS attacks?\"\n-->`,\n },\n\n {\n id: 'quote-highlight',\n name: 'Core Principle & Quote Highlight',\n category: 'quote',\n description: 'Prominent quote callout for fundamental engineering rules or memorable mantras.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [100, 100, 1080, 80],\n fontSize: '2.2rem',\n textAlign: 'center',\n },\n {\n id: 'quote-box',\n target: 'blockquote',\n pos: [140, 230, 1000, 360],\n fontSize: '1.4rem',\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [100, 100, 1080, 80]\n fontSize: 2.2rem\n textAlign: center\n - id: quote-box\n target: blockquote\n pos: [140, 230, 1000, 360]\n fontSize: 1.4rem\n-->\n\n## 💡 Foundational Architecture Principle\n\n> \"Simplicity is prerequisite for reliability. A well-engineered distributed system is one where a new engineer can understand the request flow within their first hour.\"\n> \n> — **Edsger W. Dijkstra**\n\n<!--\nPresenter Notes:\n- Pause for 5 seconds of silence to let the quote sink in.\n- Ask: \"How do our current architectural choices reflect this principle?\"\n-->`,\n },\n\n {\n id: 'quiz-checkpoint',\n name: 'Interactive Formative Checkpoint',\n category: 'assessment',\n description: 'Interactive multiple-choice diagnostic checkpoint with A/B/C/D voting options.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 45, 1120, 65],\n fontSize: '1.9rem',\n },\n {\n id: 'question-callout',\n target: 'blockquote',\n pos: [80, 130, 1120, 110],\n fontSize: '1.2rem',\n },\n {\n id: 'options-list',\n target: 'ul',\n pos: [80, 260, 1120, 390],\n fontSize: '1.15rem',\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 45, 1120, 65]\n fontSize: 1.9rem\n - id: question-callout\n target: blockquote\n pos: [80, 130, 1120, 110]\n fontSize: 1.2rem\n - id: options-list\n target: ul\n pos: [80, 260, 1120, 390]\n fontSize: 1.15rem\n-->\n\n## 🎯 Formative Checkpoint: Verify Your Understanding\n\n> **Question:** In an event-driven architecture, which pattern guarantees that messages are never permanently lost if a downstream consumer crashes?\n\n- **A.** Direct HTTP POST call with a short 2-second timeout\n- **B.** Persistent Message Broker with Dead-Letter Queue (DLQ) & retry policy\n- **C.** In-memory client RAM cache without disk persistence\n- **D.** Discarding failed packets and prompting the user to re-submit\n\n<!--\nPresenter Notes:\n- Give students 30 seconds to vote on option A, B, C, or D.\n- Correct answer: B.\n- Explain why options A and C introduce catastrophic data loss in production.\n-->`,\n },\n\n {\n id: 'tiered-practice-3cards',\n name: 'Tiered Differentiation (Bronze / Silver / Gold)',\n category: 'content',\n description: 'Three progressive competency tiers allowing self-paced learning acceleration.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 45, 1120, 65],\n fontSize: '1.9rem',\n },\n {\n id: 'tier-bronze',\n target: '.columns-3 > div:nth-child(1)',\n pos: [80, 140, 350, 520],\n },\n {\n id: 'tier-silver',\n target: '.columns-3 > div:nth-child(2)',\n pos: [465, 140, 350, 520],\n },\n {\n id: 'tier-gold',\n target: '.columns-3 > div:nth-child(3)',\n pos: [850, 140, 350, 520],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 45, 1120, 65]\n fontSize: 1.9rem\n - id: tier-bronze\n target: '.columns-3 > div:nth-child(1)'\n pos: [80, 140, 350, 520]\n - id: tier-silver\n target: '.columns-3 > div:nth-child(2)'\n pos: [465, 140, 350, 520]\n - id: tier-gold\n target: '.columns-3 > div:nth-child(3)'\n pos: [850, 140, 350, 520]\n-->\n\n## 🛠️ Hands-On Challenge: 3-Tier Differentiation\n\n<div class=\"columns-3\">\n<div>\n\n### 🥉 Bronze Tier\n- Implement basic handler logic\n- Pass 3 baseline unit tests\n- *Goal: Foundational mastery*\n\n</div>\n<div>\n\n### 🥈 Silver Tier\n- Add boundary error handling\n- Enforce O(N) memory complexity\n- *Goal: Production-ready code*\n\n</div>\n<div>\n\n### 🥇 Gold Tier\n- Design distributed retry queue\n- Add 95% automated test coverage\n- *Goal: Architectural leadership*\n\n</div>\n</div>\n\n<!--\nPresenter Notes:\n- All learners begin at Bronze to establish baseline competency.\n- Accelerate self-directed learners to Silver and Gold as they complete each tier.\n-->`,\n },\n\n {\n id: 'agenda-timeline',\n name: 'Session Agenda & Milestones',\n category: 'content',\n description: 'Structured time-budgeted agenda mapping stages to measurable deliverables.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 45, 1120, 65],\n fontSize: '1.9rem',\n },\n {\n id: 'table-box',\n target: 'table',\n pos: [80, 140, 1120, 520],\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 45, 1120, 65]\n fontSize: 1.9rem\n - id: table-box\n target: table\n pos: [80, 140, 1120, 520]\n-->\n\n## 🗺️ Milestone Roadmap & Time Budget\n\n| Allocated Time | Session Stage | Core Learning Focus | Deliverable Milestone |\n|:---:|---|---|---|\n| **05 mins** | Warm-Up | Real-World Scenario & Context | Identify system bottleneck |\n| **15 mins** | Concept Discovery | Core Architectural Patterns | Deconstruct message queue models |\n| **20 mins** | Hands-On Lab | Tiered Code Implementation | Complete Bronze + Silver tasks |\n| **05 mins** | Wrap-Up | Formative Checkpoint & Debrief | Consolidate key principles |\n\n<!--\nPresenter Notes:\n- Walk through the time budget so students understand expectations and pacing.\n-->`,\n },\n\n {\n id: 'takeaways-summary',\n name: 'Key Takeaways & Wrap-up',\n category: 'content',\n description: 'Three memorable synthesis takeaways with actionable next steps.',\n layout: {\n boxes: [\n {\n id: 'heading',\n target: 'h2',\n pos: [80, 50, 1120, 70],\n fontSize: '2rem',\n },\n {\n id: 'list-box',\n target: 'ol',\n pos: [80, 150, 1120, 340],\n fontSize: '1.25rem',\n },\n {\n id: 'callout-next',\n target: 'blockquote',\n pos: [80, 520, 1120, 140],\n fontSize: '1.1rem',\n },\n ],\n },\n markdownSnippet: `<!-- layout:\n boxes:\n - id: heading\n target: h2\n pos: [80, 50, 1120, 70]\n fontSize: 2rem\n - id: list-box\n target: ol\n pos: [80, 150, 1120, 340]\n fontSize: 1.25rem\n - id: callout-next\n target: blockquote\n pos: [80, 520, 1120, 140]\n fontSize: 1.1rem\n-->\n\n## 🏁 Key Takeaways & Action Items\n\n1. **Decouple Before Scaling:** Separate producer rate from consumer processing capacity.\n2. **Design for Failure:** Always configure retries, backoff intervals, and dead-letter queues.\n3. **Measure End-to-End:** Track P99 latency and error rates across all distributed boundaries.\n\n> 📝 **Next Action Item:** Complete the Silver Tier refactoring challenge before our next peer-review session.\n\n<!--\nPresenter Notes:\n- Deliver a crisp 2-minute wrap-up reinforcing the 3 core takeaways.\n- Acknowledge strong peer collaboration during the hands-on lab.\n-->`,\n },\n];\n\n/**\n * Find a preset by its unique ID\n */\nexport function getSlideLayoutPresetById(id: string): SlideLayoutPreset | undefined {\n return SLIDE_LAYOUT_PRESETS.find(p => p.id === id);\n}\n\n/**\n * Filter presets by category\n */\nexport function getSlideLayoutPresetsByCategory(category: SlideLayoutCategory): SlideLayoutPreset[] {\n return SLIDE_LAYOUT_PRESETS.filter(p => p.category === category);\n}\n"]}