Osteoarthritis
"osteoarthritis"[MeSH Terms] AND "treatment"[MeSH Terms]
| Type | Features |
|---|---|
| Primary (Idiopathic) | No identifiable cause; appears insidiously with aging; oligoarticular, affecting weight-bearing joints |
| Secondary | ~5% of cases; younger individuals with predisposing conditions (joint deformity, prior injury, diabetes, obesity) |


| Feature | Osteoarthritis | Rheumatoid Arthritis |
|---|---|---|
| Primary mechanism | Mechanical injury to cartilage | Autoimmunity |
| Role of inflammation | Secondary; exacerbates damage | Primary driver |
| Joints involved | Weight-bearing (knees, hips) | Small joints of fingers first; multiple joints |
| Pathology | Cartilage degeneration, osteophytes, subchondral cysts; minimal inflammation | Inflammatory pannus, severe synovitis, ankylosis |
| Serum antibodies | None | ACPA, rheumatoid factor |
| Other organ involvement | No | Yes (lungs, heart, blood vessels) |
| Intervention | Notes |
|---|---|
| Education & self-management | Understanding the disease and setting expectations |
| Weight management | BMI ≥25: aim for 5-10% loss; 5 kg weight loss reduces incident knee OA from 21% to 7% |
| Physical activity | Walking, cycling, swimming - reduces pain and improves function |
| Therapeutic exercise | Structured, progressive - especially quadriceps strengthening for knee OA |
| Behavioral change support | Referral to physiotherapist, dietitian |
| Drug | Role |
|---|---|
| NSAIDs | First-line analgesic; topical NSAIDs preferred for knee/hand (lower systemic risk) |
| Acetaminophen | Modest benefit; safer than NSAIDs in comorbidities |
| Intraarticular corticosteroids | Short-term relief; avoid repeated injections |
| Duloxetine | For central sensitization/neuropathic components |
| Opioids | At most very modest benefit; avoid when possible |
| Viscosupplements (hyaluronic acid) | Limited evidence; not routinely recommended |
| Platelet-rich plasma | Not of documented benefit |
| Glucosamine/chondroitin | Supplements with limited/uncertain evidence |
Osteoarthritis fast
| Stage | Event |
|---|---|
| Chondrocyte injury | Mechanical stress → MMPs released → Type II collagen degraded |
| Early OA | ↓ Proteoglycans, ↑ water content, fibrillation of cartilage surface; IL-1, IL-6, TNF, PGE₂, NO amplify damage |
| Late OA | Full-thickness cartilage loss, bone eburnation, subchondral cysts, osteophytes, loose bodies ("joint mice") |
| OA | RA | |
|---|---|---|
| Mechanism | Mechanical | Autoimmune |
| Morning stiffness | <30 min | >1 hour |
| Joints | DIP, knees, hips | MCP, PIP, wrists |
| Nodes | Heberden (DIP) | None |
| Serology | Negative | RF, ACPA positive |
| Inflammation | Minimal | Severe (pannus) |
| Systemic features | None | Yes |
| Fact | Number |
|---|---|
| Global prevalence | >500 million |
| Age >70 affected | ~40% |
| Morning stiffness | <30 min |
| Synovial WBC in OA | <2000/µL |
| Stable disease trajectory | ~85% of patients |
| Weight loss reducing knee OA | 5 kg reduces risk 21% → 7% |
| Premature mortality increase | 20-25% |
Make a ppt too
mkdir -p /home/daytona/workspace/osteoarthritis-ppt && ls /home/daytona/workspac…
~/osteoarthritis-ppt/make_ppt.js
const pptxgen = require("pptxgenjs");
const pres = new pptxgen();
pres.layout = "LAYOUT_16x9";
pres.title = "Osteoarthritis";
pres.author = "Orris Medical";
// ── Color Palette ──────────────────────────────────────────────
// Deep navy dominates; warm amber accent; soft slate for cards
const C = {
navy: "0D2B4E",
navyMid: "14396A",
amber: "E8A020",
amberLt: "F5C055",
slate: "1E3F6B",
card: "162E52",
white: "FFFFFF",
offWhite:"EAF0F8",
grey: "A8BACE",
red: "C0392B",
green: "27AE60",
teal: "1A7F7A",
};
// ── Helper: dark slide background ─────────────────────────────
function darkBg(slide) {
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 10, h: 5.625,
fill: { color: C.navy }, line: { color: C.navy }
});
}
// ── Helper: accent bar ─────────────────────────────────────────
function accentBar(slide, y = 5.2) {
slide.addShape(pres.ShapeType.rect, {
x: 0, y, w: 10, h: 0.08,
fill: { color: C.amber }, line: { color: C.amber }
});
}
// ── Helper: section heading strip ─────────────────────────────
function sectionStrip(slide, text) {
slide.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 10, h: 0.85,
fill: { color: C.amber }, line: { color: C.amber }
});
slide.addText(text, {
x: 0.3, y: 0, w: 9.4, h: 0.85,
fontSize: 22, bold: true, color: C.navy,
valign: "middle", margin: 0
});
}
// ── Helper: card box ──────────────────────────────────────────
function card(slide, x, y, w, h, opts = {}) {
slide.addShape(pres.ShapeType.rect, {
x, y, w, h,
fill: { color: opts.fill || C.card },
line: { color: opts.border || C.slate, pt: 0.5 },
shadow: { type: "outer", color: "000000", blur: 6, offset: 2, angle: 135, opacity: 0.2 }
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 1 — Title
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
darkBg(s);
// Big amber left accent bar
s.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.18, h: 5.625,
fill: { color: C.amber }, line: { color: C.amber }
});
// Decorative circles
s.addShape(pres.ShapeType.ellipse, {
x: 7.2, y: -0.5, w: 3.5, h: 3.5,
fill: { color: C.navyMid }, line: { color: C.navyMid }
});
s.addShape(pres.ShapeType.ellipse, {
x: 8, y: 3.2, w: 2.2, h: 2.2,
fill: { color: C.slate }, line: { color: C.slate }
});
s.addShape(pres.ShapeType.ellipse, {
x: 6.5, y: 3.8, w: 1.2, h: 1.2,
fill: { color: C.amber, transparency: 60 }, line: { color: C.amber, transparency: 60 }
});
s.addText("OSTEOARTHRITIS", {
x: 0.5, y: 1.3, w: 6.8, h: 1.0,
fontSize: 40, bold: true, color: C.white,
charSpacing: 4, margin: 0
});
s.addText("A Comprehensive Fast Review", {
x: 0.5, y: 2.35, w: 6.8, h: 0.55,
fontSize: 18, color: C.amberLt, italic: true, margin: 0
});
s.addShape(pres.ShapeType.rect, {
x: 0.5, y: 3.05, w: 3.8, h: 0.04,
fill: { color: C.amber }, line: { color: C.amber }
});
s.addText([
{ text: "Definition • Epidemiology • Pathogenesis", options: { breakLine: true } },
{ text: "Morphology • Clinical Features • Diagnosis • Management" }
], {
x: 0.5, y: 3.2, w: 7, h: 0.8,
fontSize: 11, color: C.grey, margin: 0
});
s.addText("Sources: Goldman-Cecil Medicine | Robbins & Kumar Basic Pathology", {
x: 0.5, y: 5.15, w: 9, h: 0.35,
fontSize: 9, color: C.grey, italic: true, margin: 0
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 2 — Definition & Epidemiology
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
darkBg(s);
sectionStrip(s, "Definition & Epidemiology");
accentBar(s);
// Definition card
card(s, 0.3, 1.05, 9.4, 1.3);
s.addText("DEFINITION", {
x: 0.55, y: 1.1, w: 2, h: 0.35,
fontSize: 9, bold: true, color: C.amber, margin: 0, charSpacing: 2
});
s.addText(
"Failed repair of synovial joint tissues after intra-articular stress → breakdown of cartilage & bone → pain, stiffness, functional disability. Most common joint disease. Primarily degenerative; inflammation is secondary.",
{ x: 0.55, y: 1.42, w: 9.0, h: 0.8, fontSize: 12, color: C.offWhite, margin: 0 }
);
// Two epi cards side by side
const epiItems = [
["500 M+", "people affected worldwide"],
["~40%", "of people >70 affected"],
["47%", "lifetime knee OA risk (women)"],
["85%", "of OA burden = knee OA"],
["25%", "US adults by 2040"],
["80%", "report movement limitations"],
];
const cols = 3;
epiItems.forEach((item, i) => {
const col = i % cols;
const row = Math.floor(i / cols);
const x = 0.3 + col * 3.15;
const y = 2.55 + row * 1.1;
card(s, x, y, 2.9, 0.9, { fill: C.slate });
s.addText(item[0], {
x: x + 0.1, y: y + 0.05, w: 2.7, h: 0.42,
fontSize: 22, bold: true, color: C.amber, margin: 0, align: "center"
});
s.addText(item[1], {
x: x + 0.1, y: y + 0.48, w: 2.7, h: 0.34,
fontSize: 9.5, color: C.grey, margin: 0, align: "center"
});
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 3 — Classification & Risk Factors
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
darkBg(s);
sectionStrip(s, "Classification & Risk Factors");
accentBar(s);
// Primary vs Secondary
card(s, 0.3, 1.0, 4.5, 2.0, { fill: C.card });
s.addText("PRIMARY (Idiopathic)", {
x: 0.5, y: 1.05, w: 4.1, h: 0.4,
fontSize: 13, bold: true, color: C.amber, margin: 0
});
s.addText([
{ text: "• Appears insidiously with aging", options: { breakLine: true } },
{ text: "• Oligoarticular (few joints)", options: { breakLine: true } },
{ text: "• Mainly weight-bearing joints", options: { breakLine: true } },
{ text: "• No identifiable cause", options: { breakLine: true } },
{ text: "• 95% of all OA cases" }
], { x: 0.5, y: 1.5, w: 4.1, h: 1.35, fontSize: 11.5, color: C.offWhite, margin: 0 });
card(s, 5.2, 1.0, 4.5, 2.0, { fill: C.card });
s.addText("SECONDARY", {
x: 5.4, y: 1.05, w: 4.1, h: 0.4,
fontSize: 13, bold: true, color: C.teal, margin: 0
});
s.addText([
{ text: "• ~5% of all OA cases", options: { breakLine: true } },
{ text: "• Younger individuals", options: { breakLine: true } },
{ text: "• Causes: prior joint injury,", options: { breakLine: true } },
{ text: " joint deformity, obesity,", options: { breakLine: true } },
{ text: " diabetes, metabolic disease" }
], { x: 5.4, y: 1.5, w: 4.1, h: 1.35, fontSize: 11.5, color: C.offWhite, margin: 0 });
// Risk factors strip
s.addText("KEY RISK FACTORS", {
x: 0.3, y: 3.15, w: 4, h: 0.3,
fontSize: 9, bold: true, color: C.amber, charSpacing: 2, margin: 0
});
const risks = [
["🔢", "Age >50"],
["♀", "Female sex"],
["⚖", "Obesity (BMI ↑)"],
["🦵", "Prior joint injury"],
["🧬", "Genetics (GDF5, RUNX2)"],
];
risks.forEach((r, i) => {
const x = 0.3 + i * 1.88;
card(s, x, 3.5, 1.75, 0.75, { fill: C.slate });
s.addText(r[0] + " " + r[1], {
x: x + 0.08, y: 3.55, w: 1.6, h: 0.6,
fontSize: 10.5, color: C.white, margin: 0, align: "center", valign: "middle"
});
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 4 — Pathogenesis
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
darkBg(s);
sectionStrip(s, "Pathogenesis");
accentBar(s);
const stages = [
{
num: "1",
title: "Chondrocyte Injury",
color: C.amber,
items: [
"Biomechanical stress + genetic predisposition",
"Type II collagen network disrupted",
"Proteoglycan concentration ↓",
"Water content ↑ (matrix swells)"
]
},
{
num: "2",
title: "Early OA",
color: "#2ECC71",
items: [
"Chondrocytes proliferate & secrete MMPs",
"IL-1, IL-6, TNF, PGE₂, NO released",
"TGF-β induces further MMP production",
"Surface fibrillation develops"
]
},
{
num: "3",
title: "Late OA",
color: C.red,
items: [
"Full-thickness cartilage sloughing",
"Bone eburnation (ivory surface)",
"Subchondral cysts form",
"Osteophytes + loose bodies ('joint mice')"
]
}
];
stages.forEach((st, i) => {
const x = 0.3 + i * 3.18;
card(s, x, 0.95, 2.95, 4.1, { fill: C.card });
// Number circle
s.addShape(pres.ShapeType.ellipse, {
x: x + 1.1, y: 1.05, w: 0.75, h: 0.75,
fill: { color: st.color }, line: { color: st.color }
});
s.addText(st.num, {
x: x + 1.1, y: 1.05, w: 0.75, h: 0.75,
fontSize: 18, bold: true, color: C.navy, align: "center", valign: "middle", margin: 0
});
s.addText(st.title, {
x: x + 0.12, y: 1.87, w: 2.71, h: 0.5,
fontSize: 12.5, bold: true, color: st.color, align: "center", margin: 0
});
s.addText(
st.items.map(it => "• " + it).join("\n"),
{ x: x + 0.15, y: 2.43, w: 2.65, h: 2.5, fontSize: 10.5, color: C.offWhite, margin: 0 }
);
});
// Arrow connectors
[1, 2].forEach(i => {
const ax = 0.3 + i * 3.18 - 0.15;
s.addShape(pres.ShapeType.rect, {
x: ax, y: 2.85, w: 0.18, h: 0.08,
fill: { color: C.amber }, line: { color: C.amber }
});
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 5 — Morphology
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
darkBg(s);
sectionStrip(s, "Morphology / Gross & Histologic Features");
accentBar(s);
const morph = [
{ term: "Fibrillation", desc: "Earliest change — cartilage surface clefts and splits", color: C.teal },
{ term: "Bone Eburnation", desc: "Full cartilage loss; exposed subchondral bone polished to ivory appearance", color: C.amber },
{ term: "Subchondral Cysts", desc: "Synovial fluid forced into bone via ball-valve mechanism; fibrous walls", color: "#9B59B6" },
{ term: "Osteophytes", desc: "Bony spurs at joint margins capped by fibrocartilage; driven by BMP & TGF-β", color: C.green },
{ term: "Loose Bodies", desc: "'Joint mice' — dislodged cartilage/bone fragments tumbling in the joint cavity", color: "#E74C3C" },
{ term: "Mild Synovitis", desc: "Mild congestion & fibrosis only (contrast: RA has destructive inflammatory pannus)", color: C.grey },
];
morph.forEach((m, i) => {
const row = Math.floor(i / 2);
const col = i % 2;
const x = 0.3 + col * 4.85;
const y = 1.05 + row * 1.3;
card(s, x, y, 4.6, 1.1, { fill: C.card });
s.addShape(pres.ShapeType.rect, {
x, y, w: 0.18, h: 1.1,
fill: { color: m.color }, line: { color: m.color }
});
s.addText(m.term, {
x: x + 0.28, y: y + 0.08, w: 4.2, h: 0.38,
fontSize: 12.5, bold: true, color: m.color, margin: 0
});
s.addText(m.desc, {
x: x + 0.28, y: y + 0.48, w: 4.2, h: 0.52,
fontSize: 10, color: C.offWhite, margin: 0
});
});
// Nodes reminder
card(s, 0.3, 5.0, 9.4, 0.45, { fill: C.slate });
s.addText(
"Hand nodes: Heberden's nodes = DIP osteophytes | Bouchard's nodes = PIP osteophytes",
{ x: 0.5, y: 5.0, w: 9, h: 0.45, fontSize: 11, color: C.amberLt, align: "center", valign: "middle", margin: 0 }
);
}
// ══════════════════════════════════════════════════════════════
// SLIDE 6 — Clinical Features
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
darkBg(s);
sectionStrip(s, "Clinical Features");
accentBar(s);
// Joints column
card(s, 0.3, 1.0, 2.5, 4.15, { fill: C.card });
s.addText("JOINTS AFFECTED", {
x: 0.4, y: 1.08, w: 2.3, h: 0.38,
fontSize: 9.5, bold: true, color: C.amber, charSpacing: 1.5, margin: 0
});
const joints = ["Knees (most common)", "Hips", "Hands (DIP > PIP)", "Lumbar/Cervical spine", "Feet (1st MTP)"];
joints.forEach((j, i) => {
s.addShape(pres.ShapeType.rect, {
x: 0.42, y: 1.58 + i * 0.65, w: 0.12, h: 0.35,
fill: { color: C.amber }, line: { color: C.amber }
});
s.addText(j, {
x: 0.65, y: 1.58 + i * 0.65, w: 2.0, h: 0.35,
fontSize: 11, color: C.offWhite, margin: 0, valign: "middle"
});
});
// Symptoms column
card(s, 3.05, 1.0, 3.2, 4.15, { fill: C.card });
s.addText("SYMPTOMS", {
x: 3.15, y: 1.08, w: 3.0, h: 0.38,
fontSize: 9.5, bold: true, color: C.teal, charSpacing: 1.5, margin: 0
});
const syms = [
"Mechanical pain (activity, end of day)",
"Morning stiffness < 30 min",
"Crepitus / grating",
"Functional limitation",
"Locking / catching (knee)"
];
syms.forEach((sy, i) => {
s.addText("• " + sy, {
x: 3.15, y: 1.55 + i * 0.68, w: 3.0, h: 0.6,
fontSize: 11, color: C.offWhite, margin: 0
});
});
// Signs column
card(s, 6.5, 1.0, 3.2, 4.15, { fill: C.card });
s.addText("SIGNS", {
x: 6.6, y: 1.08, w: 3.0, h: 0.38,
fontSize: 9.5, bold: true, color: "#9B59B6", charSpacing: 1.5, margin: 0
});
const signs = [
"Joint line tenderness",
"Bony swelling (osteophytes)",
"Crepitus on movement",
"Decreased ROM",
"Effusion (knee)",
"Varus / valgus deformity"
];
signs.forEach((sg, i) => {
s.addText("• " + sg, {
x: 6.6, y: 1.55 + i * 0.6, w: 3.0, h: 0.55,
fontSize: 11, color: C.offWhite, margin: 0
});
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 7 — Diagnosis + OA vs RA
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
darkBg(s);
sectionStrip(s, "Diagnosis");
accentBar(s);
// Diagnosis criteria card
card(s, 0.3, 1.0, 4.4, 4.15, { fill: C.card });
s.addText("CLINICAL DIAGNOSIS", {
x: 0.5, y: 1.08, w: 4.0, h: 0.38,
fontSize: 10, bold: true, color: C.amber, charSpacing: 1.5, margin: 0
});
const diagPoints = [
"Pain + brief morning stiffness + functional limitation",
"Crepitus + restricted movement + bony enlargement",
"NO routine labs required",
"Imaging only for atypical presentations"
];
diagPoints.forEach((d, i) => {
s.addText("• " + d, {
x: 0.5, y: 1.6 + i * 0.62, w: 4.0, h: 0.55,
fontSize: 11, color: C.offWhite, margin: 0
});
});
s.addText("X-RAY FINDINGS (4 Classic)", {
x: 0.5, y: 3.55, w: 4.0, h: 0.38,
fontSize: 10, bold: true, color: C.amberLt, charSpacing: 1.5, margin: 0
});
const xray = ["1. Joint space narrowing", "2. Subchondral sclerosis", "3. Subchondral cysts", "4. Osteophytes"];
xray.forEach((x2, i) => {
s.addText(x2, {
x: 0.5, y: 3.98 + i * 0.3, w: 4.0, h: 0.28,
fontSize: 10.5, color: C.offWhite, margin: 0
});
});
// OA vs RA table
card(s, 5.0, 1.0, 4.7, 4.15, { fill: C.card });
s.addText("OA vs RA", {
x: 5.15, y: 1.08, w: 4.4, h: 0.38,
fontSize: 12, bold: true, color: C.amber, align: "center", margin: 0
});
const rows = [
["Feature", "OA", "RA"],
["Morning stiffness", "<30 min", ">1 hr"],
["Joints", "DIP, knees, hips", "MCP, PIP, wrists"],
["Inflammation", "Minimal", "Severe (pannus)"],
["Serology", "Negative", "RF / ACPA +ve"],
["Systemic features", "None", "Yes"],
["Nodes", "Heberden (DIP)", "None"],
];
rows.forEach((row, ri) => {
const isHeader = ri === 0;
const ry = 1.55 + ri * 0.5;
const bg = isHeader ? C.amber : (ri % 2 === 0 ? C.navyMid : C.card);
const tc = isHeader ? C.navy : C.offWhite;
s.addShape(pres.ShapeType.rect, {
x: 5.05, y: ry, w: 4.55, h: 0.44,
fill: { color: bg }, line: { color: C.slate, pt: 0.3 }
});
[row[0], row[1], row[2]].forEach((cell, ci) => {
const cw = [1.85, 1.3, 1.3];
const cx = 5.05 + cw.slice(0, ci).reduce((a, b) => a + b, 0);
s.addText(cell, {
x: cx + 0.05, y: ry, w: cw[ci] - 0.1, h: 0.44,
fontSize: isHeader ? 9 : 8.5, bold: isHeader, color: tc,
valign: "middle", margin: 0
});
});
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 8 — Management
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
darkBg(s);
sectionStrip(s, "Management");
accentBar(s);
// Step labels
const steps = [
{
label: "STEP 1",
title: "Core Non-Pharmacologic",
color: C.green,
items: ["Education & self-management", "Weight loss (5-10% of body weight)", "Aerobic exercise (walking, cycling, swimming)", "Therapeutic exercise (quadriceps strengthening)", "Physiotherapy / dietitian referral"]
},
{
label: "STEP 2",
title: "Pharmacologic",
color: C.amber,
items: ["Topical NSAIDs (first-line; knee/hand)", "Oral NSAIDs (if topical insufficient)", "Intraarticular corticosteroids (short-term)", "Duloxetine (central sensitization)", "⚠ Avoid: opioids, PRP, viscosupplements"]
},
{
label: "STEP 3",
title: "Surgical",
color: C.red,
items: ["Total joint replacement (end-stage)", "When pain disrupts sleep / ADLs", "After all conservative options exhausted", "Projected 50% ↑ in knee replacements by 2050"]
}
];
steps.forEach((st, i) => {
const x = 0.3 + i * 3.18;
card(s, x, 1.0, 2.95, 4.15, { fill: C.card });
s.addShape(pres.ShapeType.rect, {
x, y: 1.0, w: 2.95, h: 0.45,
fill: { color: st.color }, line: { color: st.color }
});
s.addText(st.label + " — " + st.title, {
x: x + 0.1, y: 1.0, w: 2.75, h: 0.45,
fontSize: 10.5, bold: true, color: C.navy, valign: "middle", margin: 0
});
st.items.forEach((item, j) => {
s.addText("• " + item, {
x: x + 0.12, y: 1.52 + j * 0.55, w: 2.7, h: 0.5,
fontSize: 10.5, color: C.offWhite, margin: 0
});
});
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 9 — Key Numbers & Prognosis
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
darkBg(s);
sectionStrip(s, "Key Numbers & Prognosis");
accentBar(s);
const nums = [
{ val: "500M+", label: "Worldwide prevalence" },
{ val: "40%", label: "People >70 affected" },
{ val: "<30 min", label: "Morning stiffness (OA)" },
{ val: "<2000", label: "Synovial WBC/µL in OA" },
{ val: "85%", label: "Stable disease trajectory" },
{ val: "5 kg", label: "Weight loss: risk 21% → 7%" },
{ val: "20-25%", label: "Premature mortality ↑ (knee)" },
{ val: "50%", label: "↑ Knee replacements by 2050" },
];
nums.forEach((n, i) => {
const col = i % 4;
const row = Math.floor(i / 4);
const x = 0.25 + col * 2.38;
const y = 1.1 + row * 1.75;
card(s, x, y, 2.18, 1.5, { fill: C.card });
s.addShape(pres.ShapeType.rect, {
x, y, w: 2.18, h: 0.06,
fill: { color: C.amber }, line: { color: C.amber }
});
s.addText(n.val, {
x: x + 0.08, y: y + 0.1, w: 2.02, h: 0.75,
fontSize: 26, bold: true, color: C.amber, align: "center", margin: 0
});
s.addText(n.label, {
x: x + 0.08, y: y + 0.88, w: 2.02, h: 0.52,
fontSize: 9.5, color: C.grey, align: "center", margin: 0
});
});
}
// ══════════════════════════════════════════════════════════════
// SLIDE 10 — Summary / Closing
// ══════════════════════════════════════════════════════════════
{
const s = pres.addSlide();
darkBg(s);
s.addShape(pres.ShapeType.rect, {
x: 0, y: 0, w: 0.18, h: 5.625,
fill: { color: C.amber }, line: { color: C.amber }
});
s.addShape(pres.ShapeType.rect, {
x: 9.82, y: 0, w: 0.18, h: 5.625,
fill: { color: C.amber }, line: { color: C.amber }
});
s.addText("SUMMARY", {
x: 1.0, y: 0.4, w: 8, h: 0.55,
fontSize: 10, bold: true, color: C.amber, charSpacing: 5, align: "center", margin: 0
});
s.addText("Osteoarthritis", {
x: 1.0, y: 0.95, w: 8, h: 0.7,
fontSize: 30, bold: true, color: C.white, align: "center", margin: 0
});
const summPoints = [
["Mechanism", "Failed synovial joint repair → cartilage & bone breakdown"],
["3-Stage Path.", "Chondrocyte injury → Early (MMPs, cytokines) → Late (eburnation, osteophytes)"],
["Vs RA", "OA = mechanical/degenerative; RA = autoimmune/inflammatory; stiffness <30 min vs >1 hr"],
["Diagnosis", "Clinical (pain + stiffness + function); X-ray: JSN, sclerosis, cysts, osteophytes"],
["Treatment", "Core: exercise + weight loss first; then NSAIDs; surgery for end-stage disease"],
];
summPoints.forEach((pt, i) => {
const y = 1.85 + i * 0.67;
s.addShape(pres.ShapeType.rect, {
x: 0.9, y: y + 0.08, w: 1.3, h: 0.38,
fill: { color: C.amber }, line: { color: C.amber }
});
s.addText(pt[0], {
x: 0.9, y: y + 0.08, w: 1.3, h: 0.38,
fontSize: 9, bold: true, color: C.navy, align: "center", valign: "middle", margin: 0
});
s.addText(pt[1], {
x: 2.35, y: y + 0.08, w: 6.9, h: 0.38,
fontSize: 11, color: C.offWhite, valign: "middle", margin: 0
});
});
s.addText("Sources: Goldman-Cecil Medicine • Robbins & Kumar Basic Pathology • Firestein & Kelley's Rheumatology", {
x: 1.0, y: 5.22, w: 8, h: 0.3,
fontSize: 8, color: C.grey, italic: true, align: "center", margin: 0
});
}
// ── Write file ─────────────────────────────────────────────────
pres.writeFile({ fileName: "/home/daytona/workspace/osteoarthritis-ppt/Osteoarthritis.pptx" })
.then(() => console.log("✅ Saved: Osteoarthritis.pptx"))
.catch(err => console.error("❌ Error:", err));
cd /home/daytona/workspace/osteoarthritis-ppt && node make_ppt.js
Osteoarthritis
Presentation · PPTX
| Slide | Content |
|---|---|
| 1 | Title slide |
| 2 | Definition & Epidemiology (stat cards) |
| 3 | Classification & Risk Factors |
| 4 | Pathogenesis (3-stage visual) |
| 5 | Morphology (6 features with color-coded cards) |
| 6 | Clinical Features (joints / symptoms / signs) |
| 7 | Diagnosis + OA vs RA comparison table |
| 8 | Management (3-step ladder) |
| 9 | Key Numbers & Prognosis |
| 10 | Summary slide |