hi
What is the best treatment for alopecia areata, and what is the pathophysiology behind it? Is there any upcoming research about that?
alopecia areata treatment JAK inhibitors
alopecia areata upcoming research 2025 2026 new treatments
alopecia areata scalp hair loss patches clinical

This clinical photograph shows a close-up, superior-lateral view of the scalp of a patient with severe alopecia areata. The image reveals multiple large, well-demarcated, non-scarring patches of alopecia (hair loss). The exposed scalp skin appears smooth, pale, and lacks follicular ostia plugging, which is characteristic of non-cicatricial alopecia. Within the bald patches, a few vellus hairs and some short, broken hairs are visible. Minor erythematous punctate lesions are present on the bare scalp surface, possibly related to recent intralesional treatments. The remaining hair is dark, terminal, and demonstrates normal density and length in unaffected regions. This visual presentation is typical of autoimmune hair loss, where the disease progresses from focal patches toward more extensive involvement such as alopecia totalis. The photograph serves as a clinical reference for diagnosing patchy hair loss and monitoring disease activity and treatment response in dermatological settings.

This is a high-resolution clinical dermatology photograph of the scalp, captured with standard white-light illumination, showcasing a single well-demarcated alopecic patch on the left scalp (parietal/vertex region). The lesion measures several centimeters in diameter, with complete hair loss in the central area and preserved surrounding skin. The surface is smooth, non-erythematous, and non-scaly, with a soft, nonwarty border; no scarring or perifollicular hyperkeratosis is evident in this view. The appearance is most consistent with non-scarring alopecia such as alopecia areata (autoimmune) rather than tinea capitis or cicatricial processes. Hair shafts at the margin are diminished but follicles are not destroyed. The differential diagnosis includes alopecia areata, tinea capitis, traction alopecia, and less likely discoid lupus erythematosus. Clinically, alopecia areata commonly presents with sudden onset patchy hair loss and may have associated other patches or autoimmune conditions. In prognostic terms, this presentation can spontaneously remit or progress to additional patches; response to corticosteroids or immunomodulators is variable. This image is relevant for clinical education, differential diagnosis training, telemedicine triage, and research datasets focusing on patchy non-scarring alopecia. Useful for students learning recognition of alopecia areata versus fungal or scarring alopecias. Clinical photography like this supports teledermatology workflows and image-based learning modules.

Clinical photography of the scalp in a patient with extensive patchy alopecia areata. Modality: Dermatologic/clinical photography, high-resolution digital image, frontal-vertex perspective capturing the alopecic patches within the parietal and occipital regions. The scalp shows numerous well-circumscribed, irregularly shaped patches revealing exposed skin with minimal perifollicular erythema. Hair density is markedly diminished in affected zones with patchy distribution across the vertex, temples, and crown, consistent with non-scarring alopecia. The surrounding hair demonstrates variable thinning and preserved follicular openings at lesion margins. The appearance is typical for autoimmune-mediated hair loss where hair follicles are not destroyed but temporarily arrested; no scarring or dyspigmentation is evident. The differential diagnoses include alopecia areata, tinea capitis, telogen effluvium, and traction alopecia, though the presence of discrete patches and preserved skin architecture supports alopecia areata. Therapeutic implications include consideration of corticosteroid therapy, topical immunotherapy, or JAK inhibitors based on extent and progression. Clinically relevant associations may involve other autoimmune conditions such as thyroid disease, vitiligo, or diabetes. For education and research, this image demonstrates the classic pattern of patchy, non-scarring alopecia affecting the vertex and periauricular regions, highlighting diagnostic criteria, disease monitoring, and response assessment to therapy.


| Variant | Description |
|---|---|
| Patchy AA | Single or multiple round/oval patches, most common |
| Alopecia Totalis (AT) | Total scalp hair loss |
| Alopecia Universalis (AU) | Loss of all body hair |
| Ophiasis | Band-like loss along temporal/occipital scalp - worst prognosis |
| Sisaipho | Inverse ophiasis |
| Diffuse AA | Mimics androgenetic alopecia; diagnosed by exclamation point hairs |
| Disease Extent | Preferred Treatment |
|---|---|
| Patchy, limited (<50% scalp) | Intralesional triamcinolone ± topical steroids |
| Moderate-to-severe (>50% scalp) | Oral JAK inhibitor (baricitinib, ritlecitinib) |
| Rapidly progressing | Pulsed systemic steroids + JAK inhibitor |
| Refractory | Contact immunotherapy (DPCP), PUVA |
| Adjunct in all | Topical minoxidil |
Create a PowerPoint presentation with this information.
ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace && echo "created"
mkdir -p /tmp/workspace/alopecia-pptx && python /tmp/skills/shared/scripts/fetch_images.py "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_05df7481a5046e92c61ec66f93aa27a6451846518f3eae311cf77ace0691dba5.jpg" "https://cdn.orris.care/cdss_images/b8f9757f47ab60c8bb25c0e09f8cd43302b458afa5abbb4ca0af6af6db7dbf1f.png" 2>&1 | head -5
ls -lh /tmp/workspace/alopecia_areata.pptx 2>/dev/null && echo "FILE_EXISTS" || echo "FILE_MISSING"
mkdir -p /tmp/workspace && ls /tmp/workspace/ && python -c "from pptx import Presentation; print('pptx ok')" && python -c "from PIL import Image; print('PIL ok')"
ls /tmp/workspace/alopecia-pptx/
cd /tmp/workspace/alopecia-pptx && python3 - << 'EOF' import urllib.request, os # Fetch images images = { "clinical.jpg": "https://cdn.orris.care/cdss_images/pmc_clinical_VQA_05df7481a5046e92c61ec66f93aa27a6451846518f3eae311cf77ace0691dba5.jpg", "patho.png": "https://cdn.orris.care/cdss_images/b8f9757f47ab60c8bb25c0e09f8cd43302b458afa5abbb4ca0af6af6db7dbf1f.png", "dermnet.jpg": "https://cdn.orris.care/cdss_images/DermNetNZ_1760031771416_7e435acf-b0a8-45ea-b9e6-f4401ec0baa4.jpg", } for fname, url in images.items(): try: urllib.request.urlretrieve(url, fname) size = os.path.getsize(fname) print(f"{fname}: {size} bytes") except Exception as e: print(f"{fname}: FAILED - {e}") EOF
~/alopecia-pptx/build.py
from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
import os
# ── Colour palette ──────────────────────────────────────────────────────────
def rgb(r,g,b): return RGBColor(r,g,b)
DARK_BLUE = rgb(26, 62, 111)
MED_BLUE = rgb(45, 105, 175)
LIGHT_BLUE = rgb(173, 210, 240)
WHITE = rgb(255, 255, 255)
ORANGE = rgb(214, 109, 30)
GREY_LIGHT = rgb(242, 242, 242)
GREY_TEXT = rgb( 80, 80, 80)
TEAL = rgb( 32, 160, 140)
GREEN = rgb( 50, 150, 80)
RED = rgb(190, 40, 40)
NAVY_FOOT = rgb( 20, 50, 90)
SLIDE_W = Inches(13.333)
SLIDE_H = Inches(7.5)
DIR = "/tmp/workspace/alopecia-pptx/"
# ── Helpers ─────────────────────────────────────────────────────────────────
def new_prs():
prs = Presentation()
prs.slide_width = SLIDE_W
prs.slide_height = SLIDE_H
return prs
def blank(prs):
return prs.slides.add_slide(prs.slide_layouts[6])
def rect(sl, l, t, w, h, fill=None, line=None, lw=Pt(0)):
sh = sl.shapes.add_shape(1, l, t, w, h)
if fill:
sh.fill.solid(); sh.fill.fore_color.rgb = fill
else:
sh.fill.background()
if line:
sh.line.color.rgb = line; sh.line.width = lw
else:
sh.line.fill.background()
return sh
def txt(sl, text, l, t, w, h, sz=14, bold=False, italic=False,
color=WHITE, align=PP_ALIGN.LEFT, wrap=True):
tb = sl.shapes.add_textbox(l, t, w, h)
tf = tb.text_frame; tf.word_wrap = wrap
p = tf.paragraphs[0]; p.alignment = align
r = p.add_run(); r.text = text
r.font.size=Pt(sz); r.font.bold=bold; r.font.italic=italic
r.font.color.rgb = color
return tb
def para(tf, text, sz=12, bold=False, italic=False, color=GREY_TEXT,
align=PP_ALIGN.LEFT, sb=Pt(0)):
p = tf.add_paragraph(); p.alignment=align; p.space_before=sb
r = p.add_run(); r.text=text
r.font.size=Pt(sz); r.font.bold=bold; r.font.italic=italic
r.font.color.rgb=color
return p
def header(sl, title, sub=None):
rect(sl, 0, 0, SLIDE_W, Inches(1.0), fill=DARK_BLUE)
txt(sl, title, Inches(0.35), Inches(0.1), Inches(12.5), Inches(0.8),
sz=26, bold=True, color=WHITE)
if sub:
txt(sl, sub, Inches(0.35), Inches(0.72), Inches(12.5), Inches(0.25),
sz=11, italic=True, color=LIGHT_BLUE)
def footer(sl):
rect(sl, 0, Inches(7.0), SLIDE_W, Inches(0.5), fill=NAVY_FOOT)
txt(sl, "ORRIS Clinical Decision Support System | Alopecia Areata | 2025",
Inches(0.3), Inches(7.05), SLIDE_W-Inches(0.6), Inches(0.4),
sz=9, color=LIGHT_BLUE, align=PP_ALIGN.CENTER)
def img(sl, path, l, t, w, h):
if os.path.exists(path):
sl.shapes.add_picture(path, l, t, w, h)
else:
rect(sl, l, t, w, h, fill=LIGHT_BLUE)
def tbbox(sl, l, t, w, h):
tb = sl.shapes.add_textbox(l, t, w, h)
tf = tb.text_frame; tf.word_wrap = True
return tf
# ── Build ────────────────────────────────────────────────────────────────────
prs = new_prs()
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 1 — TITLE
# ════════════════════════════════════════════════════════════════════════════
s = blank(prs)
rect(s, 0, 0, SLIDE_W, SLIDE_H, fill=DARK_BLUE)
rect(s, 0, 0, Inches(5.2), SLIDE_H, fill=MED_BLUE)
rect(s, 0, Inches(5.9), Inches(5.2), Inches(0.13), fill=ORANGE)
txt(s, "Alopecia Areata",
Inches(0.4), Inches(1.5), Inches(4.5), Inches(1.6),
sz=46, bold=True, color=WHITE)
txt(s, "Pathophysiology, Diagnosis\n& Emerging Therapies",
Inches(0.4), Inches(3.2), Inches(4.5), Inches(1.1),
sz=20, color=LIGHT_BLUE)
txt(s, "A Comprehensive Clinical Overview | 2025",
Inches(0.4), Inches(4.5), Inches(4.5), Inches(0.5),
sz=13, italic=True, color=LIGHT_BLUE)
img(s, DIR+"dermnet.jpg",
Inches(5.4), Inches(0.5), Inches(7.6), Inches(6.2))
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 2 — OVERVIEW & DEFINITION
# ════════════════════════════════════════════════════════════════════════════
s = blank(prs)
header(s, "Overview & Definition")
# left panel
rect(s, Inches(0.25), Inches(1.1), Inches(6.7), Inches(5.75),
fill=GREY_LIGHT, line=LIGHT_BLUE, lw=Pt(1))
tf = tbbox(s, Inches(0.4), Inches(1.18), Inches(6.4), Inches(5.6))
para(tf, "What is Alopecia Areata?", 16, bold=True, color=DARK_BLUE)
para(tf, ("Alopecia areata (AA) is a chronic, relapsing, immune-mediated form of "
"non-scarring hair loss affecting ~2% of the global population across all "
"ages and ethnicities."), 12, color=GREY_TEXT, sb=Pt(5))
para(tf, "Epidemiology", 14, bold=True, color=DARK_BLUE, sb=Pt(8))
for b in ["• Lifetime prevalence: ~2% globally",
"• Affects ~6.8 million people in the US",
"• Bimodal peak incidence: 1st & 3rd decades",
"• ~25% have a positive family history",
"• Third most common cause of hair loss worldwide"]:
para(tf, b, 12, color=GREY_TEXT)
para(tf, "Disease Spectrum", 14, bold=True, color=DARK_BLUE, sb=Pt(8))
para(tf, ("Patchy AA (most common) → Alopecia Totalis (all scalp hair) → "
"Alopecia Universalis (all body hair). Nail changes in ~10%."),
12, color=GREY_TEXT)
para(tf, "Associated Conditions", 14, bold=True, color=DARK_BLUE, sb=Pt(8))
para(tf, "Atopic dermatitis · Thyroid disease · Vitiligo · SLE · Down syndrome · Type 1 diabetes",
11.5, italic=True, color=GREY_TEXT)
# right — clinical image
img(s, DIR+"clinical.jpg",
Inches(7.1), Inches(1.1), Inches(5.9), Inches(5.75))
txt(s, "Patchy alopecia areata — smooth non-scarred patches",
Inches(7.1), Inches(6.62), Inches(5.9), Inches(0.3),
sz=9, italic=True, color=GREY_TEXT, align=PP_ALIGN.CENTER)
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 3 — PATHOPHYSIOLOGY TEXT
# ════════════════════════════════════════════════════════════════════════════
s = blank(prs)
header(s, "Pathophysiology: Immune Privilege Collapse")
col_w = Inches(6.15)
# left
rect(s, Inches(0.25), Inches(1.1), col_w, Inches(5.75),
fill=GREY_LIGHT, line=LIGHT_BLUE, lw=Pt(1))
tf = tbbox(s, Inches(0.4), Inches(1.18), Inches(5.9), Inches(5.55))
para(tf, "Normal Hair Follicle Immune Privilege", 14, bold=True, color=DARK_BLUE)
para(tf, ("The anagen hair follicle is an 'immune-privileged' site characterised by:\n"
" • Low MHC class I expression\n"
" • Immunosuppressive cytokines (TGF-β1, α-MSH, ACTH)\n"
" • Downregulated antigen-presenting molecules"),
12, color=GREY_TEXT, sb=Pt(4))
para(tf, "Breakdown Mechanism", 14, bold=True, color=DARK_BLUE, sb=Pt(8))
for b in ["1. IL-15 overexpressed → activates CD8+ NKG2D+ T cells",
"2. IFN-γ secretion → upregulates MHC class I on follicle",
"3. CD8+ cytotoxic T cells accumulate peri-follicularly",
" → Classic 'swarm of bees' histological infiltrate",
"4. CD4+ T helper cells amplify local immune attack",
"5. Regulatory T cell (Treg) dysfunction → loss of tolerance",
"6. Premature catagen transition → hair shaft fracture"]:
para(tf, b, 12, color=GREY_TEXT)
para(tf, "Target: Follicular Melanocytes", 14, bold=True, color=DARK_BLUE, sb=Pt(8))
para(tf, ("White hair is spared — immune attack targets melanocyte-associated "
"autoantigens. Regrowing hair is often initially depigmented."),
12, color=GREY_TEXT)
# right
rect(s, Inches(6.6), Inches(1.1), col_w, Inches(5.75),
fill=rgb(235,245,255), line=LIGHT_BLUE, lw=Pt(1))
tf2 = tbbox(s, Inches(6.75), Inches(1.18), Inches(5.9), Inches(5.55))
para(tf2, "JAK-STAT Signalling — Primary Therapeutic Target", 14, bold=True, color=DARK_BLUE)
para(tf2, ("The JAK-STAT pathway drives AA pathogenesis and is the target of "
"all approved systemic therapies:"),
12, color=GREY_TEXT, sb=Pt(4))
for b in ["• IFN-γ → signals via JAK1 / JAK2",
"• IL-15 → signals via JAK1 / JAK3",
"• IL-2 → signals via JAK1 / JAK3",
"• STAT1 / STAT3 / STAT5 transcription factors activated",
"• Downstream: upregulation of MHC-I, chemokines, cytotoxic molecules"]:
para(tf2, b, 12, color=GREY_TEXT)
para(tf2, "Stem Cell Preservation", 14, bold=True, color=DARK_BLUE, sb=Pt(8))
para(tf2, ("Hair follicle stem cells in the bulge region are SPARED → explains "
"why spontaneous and treatment-induced regrowth remains possible "
"even in long-standing disease."),
12, color=GREY_TEXT)
para(tf2, "Genetic Susceptibility Loci", 14, bold=True, color=DARK_BLUE, sb=Pt(8))
for b in ["• HLA-DR4, HLA-DQ7 (strong association)",
"• ULBP3/6 — NKG2D ligands on follicle",
"• CTLA4, IL-2, IL-2RA polymorphisms",
"• IKZF4, RGMA regions"]:
para(tf2, b, 12, color=GREY_TEXT)
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 4 — PATHOPHYSIOLOGY DIAGRAM
# ════════════════════════════════════════════════════════════════════════════
s = blank(prs)
header(s, "Pathophysiology: Schematic Overview",
"JAK-STAT / Immune Privilege Collapse")
img(s, DIR+"patho.png",
Inches(0.5), Inches(1.1), Inches(12.3), Inches(5.65))
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 5 — CLINICAL VARIANTS TABLE
# ════════════════════════════════════════════════════════════════════════════
s = blank(prs)
header(s, "Clinical Variants of Alopecia Areata")
rows = [
("Variant", "Description", "Prognosis", "Prevalence"),
("Patchy AA", "One or more circular/oval\npatches on scalp or body",
">60% spontaneous remission\nwithin 1–2 years", "~70% of cases"),
("Alopecia Totalis (AT)", "Complete loss of all scalp hair",
"30–50% achieve regrowth\nwithout treatment", "~10–15%"),
("Alopecia Universalis (AU)", "Loss of all scalp AND body hair",
"<10% spontaneous regrowth;\nworst prognosis", "~5–10%"),
("Ophiasis", "Band-like loss in temporal\n& occipital scalp",
"Poor — worst among\npatchy variants", "~5%"),
("Sisaipho", "Inverse ophiasis: central scalp\nloss, temples spared",
"Moderate prognosis", "Rare"),
("Diffuse AA", "Diffuse thinning entire scalp;\nmimics androgenetic AA",
"Variable; often\nmisdiagnosed", "~5–10%"),
]
cx = [Inches(0.2), Inches(3.0), Inches(6.4), Inches(10.25)]
cw = [Inches(2.65), Inches(3.2), Inches(3.65), Inches(2.85)]
rh = Inches(0.86)
ry = Inches(1.05)
for ri, row in enumerate(rows):
hdr = ri == 0
for ci, cell in enumerate(row):
bg = DARK_BLUE if hdr else (GREY_LIGHT if ri%2==0 else WHITE)
fg = WHITE if hdr else (DARK_BLUE if ci==0 else GREY_TEXT)
rect(s, cx[ci], ry+ri*rh, cw[ci], rh,
fill=bg, line=LIGHT_BLUE, lw=Pt(0.5))
txt(s, cell, cx[ci]+Inches(0.07), ry+ri*rh+Inches(0.07),
cw[ci]-Inches(0.14), rh-Inches(0.1),
sz=11 if hdr else 10.5, bold=hdr, color=fg)
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 6 — CLINICAL FEATURES & DIAGNOSIS
# ════════════════════════════════════════════════════════════════════════════
s = blank(prs)
header(s, "Clinical Features & Diagnosis")
boxes = [
("Diagnostic Signs", [
"Exclamation-point hairs at patch margins",
"Smooth, non-scarred scalp surface",
"Dermoscopy: yellow dots (perifollicular)",
"Dermoscopy: black dots, broken hairs",
"Vellus hairs at patch centres",
"Nail pitting (~10% of patients)",
"Trachyonychia / onycholysis in extensive disease",
], GREY_LIGHT),
("Dermoscopy (Trichoscopy)", [
"Yellow dots — most common finding",
"Black dots (cadaverized hairs)",
"Broken hairs / tulip hairs",
"Tapered / exclamation-mark hairs",
"Pohl-Pinkus constrictions (banded hair)",
"Upright regrowing hairs",
"Micro-exclamation mark hairs",
], rgb(235,245,255)),
("Differential Diagnosis", [
"Tinea capitis (requires KOH / culture)",
"Trichotillomania (irregular borders)",
"Androgenetic alopecia (diffuse type)",
"Telogen effluvium (diffuse, not patchy)",
"Secondary syphilis (moth-eaten pattern)",
"Discoid lupus erythematosus (scarring)",
"Chemotherapy-induced alopecia",
], GREY_LIGHT),
]
for i, (title, items, bg) in enumerate(boxes):
bx = Inches(0.25) + i*Inches(4.36)
bw = Inches(4.1)
rect(s, bx, Inches(1.1), bw, Inches(5.75),
fill=bg, line=LIGHT_BLUE, lw=Pt(1))
rect(s, bx, Inches(1.1), bw, Inches(0.42), fill=DARK_BLUE)
txt(s, title, bx+Inches(0.08), Inches(1.12), bw-Inches(0.16), Inches(0.38),
sz=12.5, bold=True, color=WHITE)
tf = tbbox(s, bx+Inches(0.1), Inches(1.56), bw-Inches(0.2), Inches(5.2))
for b in items:
para(tf, f"• {b}", 11.5, color=GREY_TEXT)
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 7 — TREATMENT: MILD / LOCALIZED
# ════════════════════════════════════════════════════════════════════════════
s = blank(prs)
header(s, "Treatment: Localized & Mild Disease")
# Intralesional box
rect(s, Inches(0.25), Inches(1.1), Inches(6.15), Inches(2.85),
fill=rgb(230,245,230), line=GREEN, lw=Pt(1.5))
rect(s, Inches(0.25), Inches(1.1), Inches(6.15), Inches(0.4), fill=GREEN)
txt(s, "FIRST-LINE: Intralesional Corticosteroids (Gold Standard)",
Inches(0.35), Inches(1.13), Inches(5.9), Inches(0.35),
sz=12, bold=True, color=WHITE)
tf = tbbox(s, Inches(0.4), Inches(1.55), Inches(5.9), Inches(2.35))
for b in ["• Triamcinolone acetonide 2–10 mg/mL",
"• Inject 0.1 mL per site, sites spaced ~1 cm apart",
"• Repeat every 4–6 weeks",
"• Maximum 20 mg per session (avoid adrenal suppression)",
"• Best for patchy AA <50% scalp involvement",
"• Onset: visible regrowth within 4–8 weeks"]:
para(tf, b, 11.5, color=GREY_TEXT)
# Topical box
rect(s, Inches(0.25), Inches(4.05), Inches(6.15), Inches(2.7),
fill=rgb(230,238,255), line=MED_BLUE, lw=Pt(1.5))
rect(s, Inches(0.25), Inches(4.05), Inches(6.15), Inches(0.4), fill=MED_BLUE)
txt(s, "ADJUNCT: Topical & Other Local Therapies",
Inches(0.35), Inches(4.08), Inches(5.9), Inches(0.35),
sz=12, bold=True, color=WHITE)
tf2 = tbbox(s, Inches(0.4), Inches(4.5), Inches(5.9), Inches(2.2))
for b in ["• Superpotent topical steroids (clobetasol 0.05%) once/twice daily",
"• Topical minoxidil 5% — promotes regrowth (adjunct)",
"• Topical anthralin 0.5–1% short-contact immunotherapy",
"• Topical ruxolitinib 1.5% cream (emerging — Phase 2/3 data)",
"• Combination approaches are strongly recommended"]:
para(tf2, b, 11.5, color=GREY_TEXT)
# Prognosis box (right)
rect(s, Inches(6.55), Inches(1.1), Inches(6.5), Inches(5.65),
fill=rgb(255,250,230), line=ORANGE, lw=Pt(1.5))
rect(s, Inches(6.55), Inches(1.1), Inches(6.5), Inches(0.4), fill=ORANGE)
txt(s, "Prognosis & Disease Monitoring",
Inches(6.65), Inches(1.13), Inches(6.2), Inches(0.35),
sz=12, bold=True, color=WHITE)
tf3 = tbbox(s, Inches(6.7), Inches(1.55), Inches(6.2), Inches(5.15))
para(tf3, "Prognostic Factors", 13, bold=True, color=DARK_BLUE)
for b in ["✓ Patchy AA: >60% spontaneous remission ≤2 years",
"✓ Early onset → poorer prognosis",
"✓ Extensive involvement → worse outcome",
"✓ Ophiasis → very poor prognosis",
"✓ Nail involvement → more severe course",
"✓ Comorbid atopy → lower remission rate",
"✓ Duration >10 years → low spontaneous remission"]:
para(tf3, b, 11.5, color=GREY_TEXT)
para(tf3, "SALT Scoring (Severity of Alopecia Tool)", 13, bold=True,
color=DARK_BLUE, sb=Pt(8))
for b in ["• SALT score: 0 (no loss) → 100 (complete loss)",
"• SALT50: ≥50% improvement from baseline",
"• SALT90: ≥90% improvement (Phase 3 primary endpoint)",
"• Used in all JAK inhibitor clinical trials"]:
para(tf3, b, 11.5, color=GREY_TEXT)
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 8 — JAK INHIBITORS (4 cards)
# ════════════════════════════════════════════════════════════════════════════
s = blank(prs)
header(s, "Treatment: Moderate-to-Severe Disease — FDA-Approved JAK Inhibitors")
agents = [
("Baricitinib\n(Olumiant®)",
"FDA APPROVED\nJune 2022",
"JAK1 / JAK2 inhibitor",
["4 mg once daily (oral)",
"Approved for severe AA in adults ≥18",
"BRAVE-AA1 & AA2 Phase 3 trials",
"35–39% achieved SALT ≤20 at week 36",
"First FDA-approved systemic therapy for AA"],
GREEN),
("Ritlecitinib\n(Litfulo®)",
"FDA APPROVED\nJune 2023",
"JAK3 / TEC kinase inhibitor",
["50 mg once daily (oral)",
"Approved age ≥12 years",
"ALLEGRO Phase 2b/3 trial",
"~30% achieved SALT ≤20 at week 24",
"First JAK inhibitor approved for adolescents"],
MED_BLUE),
("Deuruxolitinib\n(Leqselvi®)",
"FDA APPROVED\nJuly 2024",
"JAK1 / JAK2 inhibitor",
["8 mg once daily (oral)",
"Approved for severe AA in adults ≥18",
"THRIVE-AA1 & AA2 Phase 3 trials",
"~30–45% SALT ≤20 at week 24",
"Most recently approved oral JAK inhibitor"],
TEAL),
("Tofacitinib",
"OFF-LABEL\nWidely Used",
"JAK1 / JAK3 inhibitor",
["5 mg twice daily (oral)",
"Not FDA-approved specifically for AA",
"Extensive real-world evidence published",
"Lower cost; often used where JAK-approved agents unavailable",
"Response rates ~50–70% in observational studies"],
ORANGE),
]
for i, (name, approval, moa, bullets, col) in enumerate(agents):
bx = Inches(0.2) + i*Inches(3.28)
bw = Inches(3.1)
rect(s, bx, Inches(1.1), bw, Inches(5.75), fill=GREY_LIGHT, line=col, lw=Pt(2))
rect(s, bx, Inches(1.1), bw, Inches(0.5), fill=col)
txt(s, name, bx+Inches(0.07), Inches(1.12), bw-Inches(0.14), Inches(0.46),
sz=11.5, bold=True, color=WHITE)
rect(s, bx+Inches(0.1), Inches(1.65), bw-Inches(0.2), Inches(0.42),
fill=col, line=WHITE, lw=Pt(0.5))
txt(s, approval, bx+Inches(0.1), Inches(1.66), bw-Inches(0.2), Inches(0.40),
sz=9.5, bold=True, color=WHITE, align=PP_ALIGN.CENTER)
txt(s, moa, bx+Inches(0.1), Inches(2.1), bw-Inches(0.2), Inches(0.3),
sz=9.5, italic=True, color=DARK_BLUE)
tf = tbbox(s, bx+Inches(0.1), Inches(2.43), bw-Inches(0.2), Inches(4.35))
for b in bullets:
para(tf, f"• {b}", 10.5, color=GREY_TEXT)
rect(s, Inches(0.2), Inches(6.87), Inches(12.93), Inches(0.55),
fill=rgb(255,240,240), line=RED, lw=Pt(0.5))
txt(s, ("⚠ Safety (class): Screen for TB, HBV, malignancy, cardiovascular risk before initiation. "
"MACE/VTE risk labelled. Live vaccines contraindicated. Avoid in pregnancy."),
Inches(0.35), Inches(6.88), Inches(12.6), Inches(0.5),
sz=9.5, color=RED)
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 9 — TREATMENT ALGORITHM TABLE
# ════════════════════════════════════════════════════════════════════════════
s = blank(prs)
header(s, "Treatment Algorithm Summary")
rows = [
("Treatment", "Severity / Setting", "Dosing / Regimen", "Evidence"),
("Intralesional\nTriamcinolone",
"Patchy AA — 1st line",
"2–10 mg/mL; 0.1 mL/site\nevery 4–6 weeks",
"Level A\nGold Standard"),
("Topical Steroids\n(Clobetasol 0.05%)",
"Mild-moderate\nadjunct",
"Once or twice daily;\ntaper once remission achieved",
"Level B"),
("Topical Minoxidil 5%",
"Any severity\nadjunct",
"Solution or foam\ntwice daily",
"Level B"),
("Baricitinib 4 mg\n(Olumiant®)",
"Severe AA\nAdults ≥18 yrs",
"4 mg oral once daily\nindefinite",
"Level A\nFDA Approved 2022"),
("Ritlecitinib 50 mg\n(Litfulo®)",
"Severe AA\nAge ≥12 yrs",
"50 mg oral once daily\nindefinite",
"Level A\nFDA Approved 2023"),
("Deuruxolitinib 8 mg\n(Leqselvi®)",
"Severe AA\nAdults ≥18 yrs",
"8 mg oral once daily\nindefinite",
"Level A\nFDA Approved 2024"),
("Contact Immunotherapy\n(DPCP / SADBE)",
"Refractory AT/AU\n(dermatology)",
"Sensitise → weekly\napplication titrated",
"Level B\nRefractory disease"),
("Systemic Steroids\n(Pulse)",
"Rapidly progressing\nbridge therapy",
"Methylprednisolone\n500 mg/day × 3 days/month",
"Level C\nBridge only"),
]
cx = [Inches(0.2), Inches(3.05), Inches(6.5), Inches(10.2)]
cw = [Inches(2.7), Inches(3.25), Inches(3.5), Inches(2.95)]
rh = Inches(0.72)
ry = Inches(1.05)
for ri, row in enumerate(rows):
hdr = ri == 0
for ci, cell in enumerate(row):
if hdr:
bg, fg = DARK_BLUE, WHITE
else:
bg = GREY_LIGHT if ri%2==0 else WHITE
fg = DARK_BLUE if ci==0 else GREY_TEXT
if ci == 3:
if "Level A" in cell:
bg = rgb(218,245,218)
elif "Level B" in cell:
bg = rgb(218,234,255)
else:
bg = rgb(255,245,215)
fg = GREY_TEXT
rect(s, cx[ci], ry+ri*rh, cw[ci], rh,
fill=bg, line=LIGHT_BLUE, lw=Pt(0.4))
txt(s, cell, cx[ci]+Inches(0.06), ry+ri*rh+Inches(0.06),
cw[ci]-Inches(0.12), rh-Inches(0.1),
sz=10 if not hdr else 11, bold=hdr, color=fg)
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 10 — RESEARCH PIPELINE
# ════════════════════════════════════════════════════════════════════════════
s = blank(prs)
header(s, "Research Pipeline & Emerging Therapies (2025–2026)")
pipeline = [
("Upadacitinib\n(Rinvoq®)",
"Phase 3 — UP-AA\nPositive Aug 2025",
"Selective JAK1 inhibitor",
["45% (15 mg) & 55% (30 mg) achieved SALT80 at wk 24",
"FDA submission anticipated 2025/26",
"Patients with ≥50% scalp loss at baseline",
"May show head-to-head advantages vs baricitinib"],
MED_BLUE),
("siRNA Therapy\n(Alys Pharma / UMass)",
"Phase IIa\nStarted May 2025",
"RNAi targeting immune mediators",
["First siRNA approach specifically for AA",
"Intradermal delivery platform",
"Targets key cytokine/chemokine mediators",
"Could enable durable remission with periodic dosing"],
TEAL),
("Cinainu\n(Legacy Healthcare)",
"Phase 3 — RAAINBOW-2\nIND cleared Jan 2026",
"Botanical drug candidate",
["Herbal/botanical-derived compound",
"Novel non-JAK mechanism of action",
"RAAINBOW-2 Phase 3 trial underway",
"Option for patients intolerant to JAK inhibitors"],
ORANGE),
("Additional Pipeline",
"Preclinical → Phase 1/2\nActive 2025–2026",
"Multiple mechanisms",
["IL-15 / IL-2 pathway blockers (e.g. nemolizumab)",
"Topical ruxolitinib 1.5% cream (Phase 3)",
"TYK2 inhibitors under Phase 2 investigation",
"Microbiome-based therapeutic strategies",
"Ritlecitinib paediatric real-world data collection"],
rgb(140,60,140)),
]
for i, (name, stage, moa, bullets, col) in enumerate(pipeline):
bx = Inches(0.2) + i*Inches(3.28)
bw = Inches(3.1)
rect(s, bx, Inches(1.1), bw, Inches(5.75), fill=GREY_LIGHT, line=col, lw=Pt(2))
rect(s, bx, Inches(1.1), bw, Inches(0.5), fill=col)
txt(s, name, bx+Inches(0.07), Inches(1.12), bw-Inches(0.14), Inches(0.46),
sz=11.5, bold=True, color=WHITE)
rect(s, bx+Inches(0.1), Inches(1.65), bw-Inches(0.2), Inches(0.38),
fill=rgb(220,220,220))
txt(s, stage, bx+Inches(0.1), Inches(1.66), bw-Inches(0.2), Inches(0.36),
sz=9, bold=True, color=col, align=PP_ALIGN.CENTER)
txt(s, moa, bx+Inches(0.1), Inches(2.07), bw-Inches(0.2), Inches(0.3),
sz=9.5, italic=True, color=DARK_BLUE)
tf = tbbox(s, bx+Inches(0.1), Inches(2.4), bw-Inches(0.2), Inches(4.4))
for b in bullets:
para(tf, f"• {b}", 10.5, color=GREY_TEXT)
footer(s)
# ════════════════════════════════════════════════════════════════════════════
# SLIDE 11 — KEY REFERENCES
# ════════════════════════════════════════════════════════════════════════════
s = blank(prs)
header(s, "Key References & Evidence Base")
rect(s, Inches(0.25), Inches(1.05), Inches(12.85), Inches(5.8),
fill=GREY_LIGHT, line=LIGHT_BLUE, lw=Pt(0.5))
tf = tbbox(s, Inches(0.4), Inches(1.12), Inches(12.5), Inches(5.65))
refs = [
("PMID 40860887",
"Safety of oral JAK inhibitors in alopecia areata — systematic review & meta-analysis (2025)",
"Systematic Review | 2025"),
("PMID 38659584",
"Comparative efficacy of JAK inhibitors in alopecia areata — network meta-analysis",
"Network Meta-Analysis | 2024"),
("PMID 39042154",
"JAK inhibitors vs steroids vs contact immunotherapy in AA — indirect treatment comparison",
"Network Meta-Analysis | 2024"),
("PMID 38279559",
"Oral JAK inhibitors vs biologics for alopecia areata — Bayesian NMA",
"Bayesian NMA | 2024"),
("PMID 38796079",
"Role of minoxidil in alopecia areata — systematic review",
"Systematic Review | 2024"),
("King et al., NEJM 2022",
"Baricitinib in severe alopecia areata: BRAVE-AA1 & BRAVE-AA2 Phase 3 trials",
"N Engl J Med 2022; 386:1687–1699"),
("Esteban-Cantos et al., NEJM 2023",
"Ritlecitinib for alopecia areata: ALLEGRO Phase 2b/3 trial results",
"N Engl J Med 2023; 389:1917–1925"),
("Strazzulla et al., JAAD 2018",
"Alopecia areata: Disease characteristics, clinical evaluation, and new perspectives on pathogenesis",
"J Am Acad Dermatol 2018; 78(1):1–12"),
("UP-AA Trial, 2025",
"Upadacitinib Phase 3 trial for severe alopecia areata — positive primary endpoint results",
"EADV Congress 2025 (late-breaking)"),
]
for pmid, title, journal in refs:
p = tf.add_paragraph(); p.alignment = PP_ALIGN.LEFT
r1 = p.add_run(); r1.text = pmid + " "
r1.font.size = Pt(11); r1.font.bold = True; r1.font.color.rgb = DARK_BLUE
r2 = p.add_run(); r2.text = title
r2.font.size = Pt(11); r2.font.color.rgb = GREY_TEXT
p2 = tf.add_paragraph(); p2.alignment = PP_ALIGN.LEFT
r3 = p2.add_run(); r3.text = " " + journal
r3.font.size = Pt(9.5); r3.font.italic = True; r3.font.color.rgb = MED_BLUE
footer(s)
# ─── Save ────────────────────────────────────────────────────────────────────
out = "/tmp/workspace/alopecia-pptx/Alopecia_Areata_2025.pptx"
prs.save(out)
print(f"Saved: {out}")
import os
print(f"Size: {os.path.getsize(out):,} bytes ({os.path.getsize(out)/1024:.1f} KB)")
cd /tmp/workspace/alopecia-pptx && python3 build.py 2>&1
Alopecia Areata 2025
Presentation · PPTX
| # | Slide | Key content |
|---|---|---|
| 1 | Title | Full-bleed clinical dermoscopy image, ORRIS branding |
| 2 | Overview & Definition | Epidemiology, disease spectrum, associated conditions + embedded clinical photo |
| 3 | Pathophysiology — Text | Immune privilege collapse mechanism, JAK-STAT pathway, stem cell preservation, genetic loci |
| 4 | Pathophysiology — Diagram | Full-slide pathophysiology schematic image |
| 5 | Clinical Variants Table | All 6 variants (Patchy AA, AT, AU, Ophiasis, Sisaipho, Diffuse) with prognosis & prevalence |
| 6 | Clinical Features & Diagnosis | 3-column layout: diagnostic signs / trichoscopy findings / differential diagnosis |
| 7 | Treatment: Mild Disease | Intralesional triamcinolone (gold standard), topical therapies, SALT scoring, prognostic factors |
| 8 | JAK Inhibitors | 4 cards - Baricitinib (2022), Ritlecitinib (2023), Deuruxolitinib (2024), Tofacitinib (off-label) + safety banner |
| 9 | Treatment Algorithm Table | 8-row color-coded evidence table with dosing and severity staging |
| 10 | Research Pipeline | Upadacitinib (UP-AA Phase 3, positive Aug 2025), siRNA therapy, Cinainu (RAAINBOW-2), emerging targets |
| 11 | Key References | 9 citations including 5 PubMed PMIDs + BRAVE-AA, ALLEGRO, UP-AA trial citations |