attachment
attachment

Acne and acne scar and tanning

Reading File
Searching the Web

acne treatment acne scars hyperpigmentation tanning dark skin South Asian 2025

Finding Sources
Searching PubMed

acne "skin of color" treatment hyperpigmentation

Finding Sources
Searching PubMed

acne vulgaris "post-inflammatory hyperpigmentation" treatment

Reading File
Reading File
Reading File
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Finding Sources
Based on all the information gathered, here is a thorough, personalized response for your skin concerns:

Your Skin Assessment (from the photo)

Looking at your photo, I can see:
  • Active acne - a few papules/pustules, particularly on the forehead
  • Post-acne marks - flat dark spots (post-inflammatory hyperpigmentation, or PIH) on the cheeks
  • Uneven skin tone / sun tanning - overall darker, uneven complexion typical for South Asian skin (Fitzpatrick type IV-V)
  • Possible shallow atrophic scars on the cheeks
This is a very common combination in South Asian men. The good news: all three are very treatable.

Understanding What You're Dealing With

Active Acne

Acne forms when hair follicles get blocked with oil (sebum) and dead skin cells. The bacteria Cutibacterium acnes then triggers inflammation, producing the papules and pustules you see. - Harrison's Principles of Internal Medicine 22E

Post-Acne Dark Marks (PIH)

In darker skin types like yours, melanocytes (pigment cells) are larger and hyper-reactive. After any inflammation (even a small pimple), they dump excess melanin into the skin, leaving a dark flat mark. This is not a true scar - it is flat, not indented - and it WILL fade, but slowly without treatment. Sun exposure makes it much darker and delays healing. - Dermatology 2-Volume Set 5e

Tanning

UV exposure darkens existing PIH marks and creates new uneven tanning. Tanning provides NO meaningful sun protection in darker skin - it is pure damage. - Andrews' Diseases of the Skin

Your Treatment Plan (Step by Step)

STEP 1 - Daily Non-Negotiables (Start Today)

ProductPurposeHow to use
Gentle face wash (salicylic acid 0.5-1%, e.g., CeraVe SA, Neutrogena)Unclogs pores, mild exfoliationTwice daily, lukewarm water
Broad-spectrum SPF 30-50 sunscreen (non-comedogenic, matte finish)Prevents PIH from darkening, prevents new tanningEvery morning, reapply if outdoors
Non-comedogenic moisturizerSkin barrier supportAfter washing
Sunscreen is the single most important product for your concerns. Without it, nothing else works properly. UV makes dark marks 5x harder to fade.

STEP 2 - Active Acne Treatment (Weeks 1-8)

Start with one or two topical agents:
Option A - Benzoyl Peroxide (BPO) 2.5-5% gel
  • Apply to active breakout areas only, at night
  • Kills C. acnes, reduces inflammation
  • Combine with a topical antibiotic (clindamycin gel) if moderate acne
Option B - Adapalene 0.1% gel (retinoid, OTC in many countries)
  • Apply at night to the whole face (not just spots)
  • Unclogs pores, prevents new comedones, and - bonus - also fades PIH marks over time
  • Start every other night for 2 weeks to avoid irritation; then nightly
  • Evidence shows adapalene 0.1% clears inflammatory lesions significantly in South/East Asian patients (PMID 40263971)
If moderate-to-severe (many papules/pustules): See a dermatologist for oral doxycycline 100 mg (short course, 8-12 weeks) combined with topical treatment. Harrison's recommends oral antibiotics for prominent inflammatory acne.

STEP 3 - Fading PIH (Dark Marks) - Weeks 4-16

Once active acne is controlled, add a depigmenting agent:
Best-evidence options for South Asian skin:
  1. Niacinamide 5-10% serum or moisturizer - inhibits melanin transfer, anti-inflammatory, very well tolerated. Apply morning and/or night. Excellent starting point.
  2. Azelaic acid 10-20% - dual action: treats active acne AND fades PIH. Particularly useful if you still have active acne. Apply once or twice daily. Available OTC in many countries (Finacea, Paula's Choice, etc.)
  3. Kojic acid or alpha-arbutin serums - melanin synthesis inhibitors, safe for dark skin tones
  4. Tretinoin 0.025-0.05% (prescription retinoid) - if your skin tolerates adapalene well, a dermatologist can upgrade to tretinoin. Studies show it improved baseline hyperpigmentation in Asian patients without worsening pigmentation. - PMC article on acne in skin of color
Avoid: Hydroquinone above 2% without medical supervision - it can cause ochronosis (paradoxical darkening) in dark skin with prolonged overuse.

STEP 4 - Tanning / Uneven Skin Tone

  • Wear SPF 30-50 daily - this alone will gradually even out tanning over 3-6 months
  • Apply a Vitamin C serum (10-15% L-ascorbic acid) in the morning before sunscreen - it inhibits tyrosinase (the enzyme that makes melanin), brightens overall tone, and gives antioxidant protection
  • For the body (neck, chest), use SPF and consider a gentle exfoliating body wash 2-3x/week

STEP 5 - Deeper Scars (If Any) - Months 3+

If after 3-4 months of the above routine you still see textural changes (indented/pitted scars, not just flat dark marks), the following have strong evidence in dark skin:
  • RF Microneedling - gold standard for atrophic acne scars in dark skin. It delivers radiofrequency energy to the dermis, bypassing epidermal melanin, so PIH risk is minimal. A 2024 network meta-analysis found microneedling combinations to be highly effective for acne scars (PMID 39110247)
  • Chemical peels (glycolic or salicylic acid, superficial) - done by a dermatologist, improve texture and PIH
  • Pico laser - best laser option for darker skin when done by experienced practitioners; avoids the post-laser hyperpigmentation risk of older lasers

Practical Routine Summary

Morning:
  1. Gentle cleanser
  2. Niacinamide serum (or Vitamin C serum)
  3. Light moisturizer
  4. SPF 30-50 sunscreen
Night:
  1. Gentle cleanser
  2. Azelaic acid or Adapalene gel (start with one; add the second after 4 weeks once skin adjusts)
  3. Light moisturizer

When to See a Doctor

Go to a dermatologist if:
  • Acne is worsening despite 8 weeks of topical treatment
  • You have deep nodules or cysts (may need isotretinoin - the most powerful acne treatment)
  • You develop raised/thickened scars (keloids are more common in South Asian skin - needs specialist treatment)
  • You want in-clinic procedures for scars

Timeline to expect: Sunscreen + niacinamide + adapalene used consistently will show noticeable improvement in 8-12 weeks. Full clearance of PIH can take 3-6 months. Be patient and consistent - stopping treatment is the main reason people don't see results.

Create a printable skincare routine guide I can follow daily

Reading File
Running Command

ls -la /home/daytona/workspace/

Running Command

mkdir -p /home/daytona/workspace/skincare-guide

Writing File

~/skincare-guide/generate_guide.py

from reportlab.lib.pagesizes import A4
from reportlab.lib import colors
from reportlab.lib.units import mm, cm
from reportlab.platypus import SimpleDocTemplate, Paragraph, Spacer, Table, TableStyle, HRFlowable
from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle
from reportlab.lib.enums import TA_CENTER, TA_LEFT
from reportlab.platypus import KeepTogether

OUTPUT = "/home/daytona/workspace/skincare-guide/Skincare_Routine_Guide.pdf"

# ── Colour palette ──────────────────────────────────────────────────────────
DEEP_TEAL   = colors.HexColor("#1A5276")
TEAL        = colors.HexColor("#2E86AB")
LIGHT_TEAL  = colors.HexColor("#D6EAF8")
AMBER       = colors.HexColor("#F39C12")
LIGHT_AMBER = colors.HexColor("#FEF9E7")
SOFT_GRAY   = colors.HexColor("#F2F3F4")
DARK_GRAY   = colors.HexColor("#2C3E50")
MID_GRAY    = colors.HexColor("#626567")
WHITE       = colors.white
MORNING_BG  = colors.HexColor("#FFF3CD")
NIGHT_BG    = colors.HexColor("#D5E8D4")
WEEKLY_BG   = colors.HexColor("#E8D5F0")

doc = SimpleDocTemplate(
    OUTPUT,
    pagesize=A4,
    topMargin=15*mm,
    bottomMargin=15*mm,
    leftMargin=18*mm,
    rightMargin=18*mm,
)

styles = getSampleStyleSheet()

def S(name, **kw):
    return ParagraphStyle(name, parent=styles["Normal"], **kw)

title_style = S("Title",
    fontSize=24, fontName="Helvetica-Bold",
    textColor=WHITE, alignment=TA_CENTER, spaceAfter=2)

subtitle_style = S("Sub",
    fontSize=11, fontName="Helvetica",
    textColor=colors.HexColor("#D6EAF8"), alignment=TA_CENTER, spaceAfter=4)

section_header_style = S("SecH",
    fontSize=13, fontName="Helvetica-Bold",
    textColor=WHITE, alignment=TA_CENTER, spaceAfter=2)

step_num_style = S("StepNum",
    fontSize=14, fontName="Helvetica-Bold",
    textColor=DEEP_TEAL, alignment=TA_CENTER)

step_title_style = S("StepTitle",
    fontSize=11, fontName="Helvetica-Bold",
    textColor=DARK_GRAY)

step_body_style = S("StepBody",
    fontSize=9.5, fontName="Helvetica",
    textColor=MID_GRAY, leading=13)

tip_style = S("Tip",
    fontSize=9, fontName="Helvetica-Oblique",
    textColor=colors.HexColor("#6C3483"),
    leftIndent=8, leading=13)

note_style = S("Note",
    fontSize=9, fontName="Helvetica",
    textColor=colors.HexColor("#784212"), leading=13)

small_bold = S("SmBold",
    fontSize=8.5, fontName="Helvetica-Bold",
    textColor=DARK_GRAY)

checkbox_style = S("CB",
    fontSize=10, fontName="Helvetica",
    textColor=DARK_GRAY, leading=16)

warn_style = S("Warn",
    fontSize=9, fontName="Helvetica-Bold",
    textColor=colors.HexColor("#C0392B"), leading=13)

# ── Helpers ─────────────────────────────────────────────────────────────────

def header_block(text, sub=None, bg=DEEP_TEAL):
    data = [[Paragraph(text, title_style)]]
    if sub:
        data.append([Paragraph(sub, subtitle_style)])
    t = Table(data, colWidths=[174*mm])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), bg),
        ("TOPPADDING",    (0,0), (-1,-1), 10),
        ("BOTTOMPADDING", (0,0), (-1,-1), 10),
        ("LEFTPADDING",   (0,0), (-1,-1), 8),
        ("RIGHTPADDING",  (0,0), (-1,-1), 8),
        ("ROUNDEDCORNERS", [6]),
    ]))
    return t

def section_banner(text, bg=TEAL):
    t = Table([[Paragraph(text, section_header_style)]], colWidths=[174*mm])
    t.setStyle(TableStyle([
        ("BACKGROUND", (0,0), (-1,-1), bg),
        ("TOPPADDING",    (0,0), (-1,-1), 6),
        ("BOTTOMPADDING", (0,0), (-1,-1), 6),
        ("LEFTPADDING",   (0,0), (-1,-1), 6),
        ("RIGHTPADDING",  (0,0), (-1,-1), 6),
    ]))
    return t

def step_row(num, icon, title, detail, tip=None, bg=SOFT_GRAY):
    num_cell  = Paragraph(f"{icon}<br/><font color='#1A5276'><b>{num}</b></font>", step_num_style)
    body = [Paragraph(title, step_title_style), Spacer(1, 2)]
    body.append(Paragraph(detail, step_body_style))
    if tip:
        body.append(Spacer(1, 3))
        body.append(Paragraph(f"<i>Tip: {tip}</i>", tip_style))
    body_cell = body

    t = Table([[num_cell, body_cell]], colWidths=[18*mm, 156*mm])
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,-1), bg),
        ("VALIGN",        (0,0), (-1,-1), "TOP"),
        ("TOPPADDING",    (0,0), (-1,-1), 8),
        ("BOTTOMPADDING", (0,0), (-1,-1), 8),
        ("LEFTPADDING",   (0,0), (0,-1),  8),
        ("LEFTPADDING",   (1,0), (1,-1),  10),
        ("RIGHTPADDING",  (0,0), (-1,-1), 8),
        ("LINEBELOW",     (0,0), (-1,-1), 0.5, colors.HexColor("#D5D8DC")),
    ]))
    return t

def checkbox_table(items, cols=2):
    # Build rows
    row_data = []
    row = []
    for i, item in enumerate(items):
        row.append(Paragraph(f"<font size=12>\u25a1</font>  {item}", checkbox_style))
        if len(row) == cols:
            row_data.append(row)
            row = []
    if row:
        while len(row) < cols:
            row.append(Paragraph("", checkbox_style))
        row_data.append(row)

    col_w = 174*mm / cols
    t = Table(row_data, colWidths=[col_w]*cols)
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,-1), WHITE),
        ("TOPPADDING",    (0,0), (-1,-1), 4),
        ("BOTTOMPADDING", (0,0), (-1,-1), 4),
        ("LEFTPADDING",   (0,0), (-1,-1), 8),
        ("RIGHTPADDING",  (0,0), (-1,-1), 8),
        ("GRID",          (0,0), (-1,-1), 0.3, colors.HexColor("#D5D8DC")),
    ]))
    return t

def info_box(lines, bg=LIGHT_AMBER):
    content = []
    for l in lines:
        content.append(Paragraph(l, note_style))
    t = Table([[content]], colWidths=[174*mm])
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,-1), bg),
        ("TOPPADDING",    (0,0), (-1,-1), 8),
        ("BOTTOMPADDING", (0,0), (-1,-1), 8),
        ("LEFTPADDING",   (0,0), (-1,-1), 12),
        ("RIGHTPADDING",  (0,0), (-1,-1), 12),
        ("BOX",           (0,0), (-1,-1), 1, AMBER),
    ]))
    return t

def progress_table():
    headers = ["Week", "What to expect", "Action"]
    rows = [
        ["1-2", "Mild purging / dryness possible with adapalene", "Reduce to every-other-night if irritated"],
        ["3-4", "Active breakouts reducing", "Add niacinamide or azelaic acid"],
        ["6-8", "Skin texture improving, PIH slowly fading", "Stay consistent - do not stop!"],
        ["10-12","PIH marks visibly lighter, tone more even", "Consider adding Vitamin C serum"],
        ["16+", "Most PIH cleared, scars improving", "Consult dermatologist for deeper scars"],
    ]
    col_w = [20*mm, 80*mm, 74*mm]
    data = [[Paragraph(h, small_bold) for h in headers]] + \
           [[Paragraph(str(c), step_body_style) for c in r] for r in rows]
    t = Table(data, colWidths=col_w)
    t.setStyle(TableStyle([
        ("BACKGROUND",    (0,0), (-1,0),  DEEP_TEAL),
        ("TEXTCOLOR",     (0,0), (-1,0),  WHITE),
        ("BACKGROUND",    (0,1), (-1,1),  LIGHT_TEAL),
        ("BACKGROUND",    (0,2), (-1,2),  WHITE),
        ("BACKGROUND",    (0,3), (-1,3),  LIGHT_TEAL),
        ("BACKGROUND",    (0,4), (-1,4),  WHITE),
        ("BACKGROUND",    (0,5), (-1,5),  LIGHT_TEAL),
        ("GRID",          (0,0), (-1,-1), 0.5, colors.HexColor("#BFC9CA")),
        ("TOPPADDING",    (0,0), (-1,-1), 5),
        ("BOTTOMPADDING", (0,0), (-1,-1), 5),
        ("LEFTPADDING",   (0,0), (-1,-1), 6),
        ("ALIGN",         (0,0), (0,-1),  "CENTER"),
        ("VALIGN",        (0,0), (-1,-1), "TOP"),
    ]))
    return t

# ══════════════════════════════════════════════════════════════════════════════
#  BUILD STORY
# ══════════════════════════════════════════════════════════════════════════════
story = []

# ── TITLE PAGE HEADER ────────────────────────────────────────────────────────
story.append(header_block(
    "Daily Skincare Routine Guide",
    sub="Personalised for Acne · Acne Scars · Tanning  |  South Asian Skin  |  June 2026"
))
story.append(Spacer(1, 6*mm))

# ── SKIN CONCERNS BOX ────────────────────────────────────────────────────────
story.append(info_box([
    "<b>Your Skin Concerns:</b>  Active acne (papules/pustules)  •  Post-inflammatory hyperpigmentation (PIH)  •  Sun tanning / uneven skin tone",
    "<b>Skin type:</b>  Fitzpatrick IV-V (South Asian)   <b>Key risk:</b>  PIH darkens quickly with UV — sunscreen is your #1 tool.",
], bg=LIGHT_TEAL))
story.append(Spacer(1, 5*mm))

# ══ MORNING ROUTINE ══════════════════════════════════════════════════════════
story.append(section_banner("☀   MORNING ROUTINE", bg=colors.HexColor("#E67E22")))
story.append(Spacer(1, 2*mm))

morning_steps = [
    ("1", "🌊", "Gentle Face Wash",
     "Use a mild, non-comedogenic cleanser (e.g. CeraVe Foaming, Cetaphil, or salicylic acid 0.5-1% wash). "
     "Wash with lukewarm water for 30-60 seconds. Pat dry — do NOT rub.",
     "Cold water as a final rinse tightens pores slightly."),
    ("2", "✨", "Vitamin C Serum (Optional but recommended)",
     "Apply 3-4 drops of a 10-15% L-ascorbic acid or ascorbyl glucoside serum to your face and neck. "
     "Wait 30-60 seconds to absorb. Brightens tone, inhibits melanin production, fades tanning.",
     "Store Vitamin C serum in the fridge to extend shelf life."),
    ("3", "💧", "Niacinamide Serum",
     "Apply 2-3 drops of 5-10% niacinamide serum (e.g. The Ordinary, Minimalist, or Dot & Key). "
     "Gently press into skin. Reduces PIH dark marks, controls sebum, and calms redness.",
     "Can be mixed with Vitamin C or applied over it after absorption."),
    ("4", "🧴", "Lightweight Moisturiser",
     "Apply a thin layer of oil-free, non-comedogenic moisturiser (e.g. CeraVe AM, Neutrogena Hydro Boost, "
     "Minimalist 10% Niacinamide+). Restores skin barrier — never skip, even if skin feels oily.",
     "Gel-based moisturisers work best for oily/combination South Asian skin."),
    ("5", "🌞", "SPF 30-50 Sunscreen — THE MOST IMPORTANT STEP",
     "Apply a generous, even layer of broad-spectrum SPF 30-50 (e.g. La Roche-Posay Anthelios, Re'equil Matte, "
     "Neutrogena Ultra Sheer). Cover face, neck, and ears. Reapply every 2 hours if outdoors. "
     "Without this, PIH marks cannot fade and tanning worsens.",
     "Choose a matte-finish, non-comedogenic formula — avoid thick white-cast sunscreens."),
]

for num, icon, title, detail, tip in morning_steps:
    story.append(step_row(num, icon, title, detail, tip, bg=MORNING_BG))

story.append(Spacer(1, 5*mm))

# ── MORNING CHECKLIST ────────────────────────────────────────────────────────
story.append(section_banner("Morning Checklist", bg=colors.HexColor("#CA6F1E")))
story.append(checkbox_table([
    "Face wash (30-60 sec)",
    "Vitamin C serum",
    "Niacinamide serum",
    "Moisturiser applied",
    "SPF 30-50 sunscreen",
    "Reapplied SPF (if outdoors)",
], cols=3))
story.append(Spacer(1, 6*mm))

# ══ NIGHT ROUTINE ════════════════════════════════════════════════════════════
story.append(section_banner("🌙   NIGHT ROUTINE", bg=colors.HexColor("#1E8449")))
story.append(Spacer(1, 2*mm))

night_steps = [
    ("1", "🧼", "Double Cleanse (if wore sunscreen)",
     "First cleanse: Use a gentle micellar water or cleansing oil to remove sunscreen fully. "
     "Second cleanse: Same gentle face wash as morning. Removing sunscreen properly prevents clogged pores.",
     "If you stayed indoors all day without sunscreen, a single cleanse is fine."),
    ("2", "⚗️", "Azelaic Acid 10-20% (Weeks 1-8)",
     "Apply a thin layer of azelaic acid gel/cream (e.g. Paula's Choice, Minimalist, The Ordinary) to the whole face. "
     "Wait 5-10 mins to absorb. Dual action: treats active acne AND fades PIH marks. Very well-tolerated.",
     "Start with every other night for the first week if your skin is sensitive."),
    ("3", "🔬", "Adapalene 0.1% Gel — Retinoid (Week 3+)",
     "After azelaic acid has absorbed, apply a pea-sized amount of adapalene 0.1% gel (e.g. Differin) "
     "to the whole face. Avoid eye area and lips. Unclogs pores, prevents new acne, speeds PIH fading. "
     "START slowly: every other night for the first 2 weeks, then nightly.",
     "NEVER use both adapalene AND azelaic acid on the same night until your skin is fully adjusted (4+ weeks)."),
    ("4", "🧴", "Moisturiser — Barrier Repair",
     "Apply a slightly richer moisturiser at night (e.g. CeraVe Moisturising Cream, Vanicream, or Sebamed). "
     "Lock in hydration and support barrier recovery overnight. "
     "Retinoids and azelaic acid can cause dryness — moisturiser prevents this.",
     "If skin is very dry from adapalene, apply moisturiser BEFORE adapalene (sandwich method)."),
]

for num, icon, title, detail, tip in night_steps:
    story.append(step_row(num, icon, title, detail, tip, bg=NIGHT_BG))

story.append(Spacer(1, 5*mm))

# ── NIGHT CHECKLIST ──────────────────────────────────────────────────────────
story.append(section_banner("Night Checklist", bg=colors.HexColor("#1A5276")))
story.append(checkbox_table([
    "Double cleanse (remove SPF)",
    "Azelaic acid applied",
    "Adapalene (pea size, whole face)",
    "Night moisturiser applied",
    "Did NOT pick / squeeze pimples",
    "Changed pillowcase (weekly)",
], cols=3))
story.append(Spacer(1, 6*mm))

# ══ WEEKLY TREATMENTS ════════════════════════════════════════════════════════
story.append(section_banner("📅   WEEKLY TREATMENTS", bg=colors.HexColor("#7D3C98")))
story.append(Spacer(1, 2*mm))

weekly_steps = [
    ("2-3x", "🧂", "Gentle Exfoliation (BHA)",
     "Use a salicylic acid toner (2%) or gentle exfoliating wash. Apply after cleansing, before other products. "
     "Removes dead skin cells, reduces blackheads, and helps actives penetrate better.",
     "Do NOT use on nights when you apply adapalene — over-exfoliation damages your skin barrier."),
    ("1x", "🎭", "Clay Mask (Optional)",
     "Apply a bentonite or kaolin clay mask to the T-zone (forehead, nose, chin) for 10-15 minutes. "
     "Absorbs excess oil, tightens pores, and reduces breakout frequency.",
     "Use on a night when you are NOT applying adapalene or azelaic acid."),
    ("1x", "💆", "Sheet Mask or Hydration Boost",
     "Use a hydrating sheet mask (hyaluronic acid, centella asiatica / cica) on a rest day. "
     "Helps replenish moisture if adapalene/azelaic acid is causing dryness.",
     "Cica/centella-based masks are especially calming for acne-prone South Asian skin."),
]

for num, icon, title, detail, tip in weekly_steps:
    story.append(step_row(num, icon, title, detail, tip, bg=WEEKLY_BG))

story.append(Spacer(1, 6*mm))

# ══ PROGRESS TRACKER ═════════════════════════════════════════════════════════
story.append(section_banner("📈   WHAT TO EXPECT — PROGRESS TIMELINE", bg=DEEP_TEAL))
story.append(Spacer(1, 2*mm))
story.append(progress_table())
story.append(Spacer(1, 5*mm))

# ══ PRODUCT RECOMMENDATIONS ══════════════════════════════════════════════════
story.append(section_banner("🛒   RECOMMENDED PRODUCTS (India / South Asia)", bg=colors.HexColor("#1A5276")))
story.append(Spacer(1, 2*mm))

prod_headers = ["Product Type", "Budget Option", "Mid-Range Option"]
prod_rows = [
    ["Face Wash",      "Cetaphil Gentle\nSkin Cleanser",       "CeraVe Foaming\nFacial Cleanser"],
    ["Vitamin C",      "The Ordinary\nAscorbyl Glucoside 12%", "Minimalist 16%\nAscorbyl Glucoside"],
    ["Niacinamide",    "The Ordinary\nNiacinamide 10%+Zinc",   "Minimalist 10%\nNiacinamide+Zinc"],
    ["Azelaic Acid",   "The Ordinary\nAzelaic Acid 10%",       "Minimalist Azelaic\nAcid 10%"],
    ["Adapalene",      "Differin 0.1%\n(Adapalene)",           "Galderma Epiduo (adapalene\n+BPO, Rx)"],
    ["Moisturiser",    "Cetaphil\nMoisturising Cream",          "CeraVe Moisturising\nCream"],
    ["Sunscreen",      "Re'equil Oxybenzone-\nfree SPF 50 PA+++","La Roche-Posay\nAnthelios SPF 50+"],
]
col_w = [42*mm, 66*mm, 66*mm]
prod_data = [[Paragraph(h, small_bold) for h in prod_headers]] + \
            [[Paragraph(c, step_body_style) for c in r] for r in prod_rows]
prod_table = Table(prod_data, colWidths=col_w)
prod_table.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (-1,0),  DEEP_TEAL),
    ("TEXTCOLOR",     (0,0), (-1,0),  WHITE),
    ("BACKGROUND",    (0,1), (-1,1),  LIGHT_TEAL),
    ("BACKGROUND",    (0,2), (-1,2),  WHITE),
    ("BACKGROUND",    (0,3), (-1,3),  LIGHT_TEAL),
    ("BACKGROUND",    (0,4), (-1,4),  WHITE),
    ("BACKGROUND",    (0,5), (-1,5),  LIGHT_TEAL),
    ("BACKGROUND",    (0,6), (-1,6),  WHITE),
    ("BACKGROUND",    (0,7), (-1,7),  LIGHT_TEAL),
    ("GRID",          (0,0), (-1,-1), 0.5, colors.HexColor("#BFC9CA")),
    ("TOPPADDING",    (0,0), (-1,-1), 5),
    ("BOTTOMPADDING", (0,0), (-1,-1), 5),
    ("LEFTPADDING",   (0,0), (-1,-1), 6),
    ("VALIGN",        (0,0), (-1,-1), "TOP"),
]))
story.append(prod_table)
story.append(Spacer(1, 6*mm))

# ══ DO'S AND DON'TS ══════════════════════════════════════════════════════════
dos_donts = [
    [
        Paragraph("<b><font color='#1E8449'>✅  DO</font></b>", step_title_style),
        Paragraph("<b><font color='#C0392B'>❌  DON'T</font></b>", step_title_style),
    ],
    [
        Paragraph(
            "• Wear SPF every single day, even indoors near windows<br/>"
            "• Change pillowcases at least once a week<br/>"
            "• Drink 2-3 litres of water daily<br/>"
            "• Keep your phone screen clean<br/>"
            "• Let skin breathe — avoid heavy makeup<br/>"
            "• Be patient — skin takes 8-12 weeks to change",
            step_body_style),
        Paragraph(
            "• Pick, squeeze, or pop pimples (causes PIH and scars)<br/>"
            "• Skip sunscreen — UV makes dark marks 5x worse<br/>"
            "• Use more than a pea-size of adapalene<br/>"
            "• Apply adapalene around eyes or lips<br/>"
            "• Use scrubs or harsh exfoliants on active acne<br/>"
            "• Expect overnight results — consistency is key",
            step_body_style),
    ],
]
dd_table = Table(dos_donts, colWidths=[87*mm, 87*mm])
dd_table.setStyle(TableStyle([
    ("BACKGROUND",    (0,0), (0,0),  colors.HexColor("#D5F5E3")),
    ("BACKGROUND",    (1,0), (1,0),  colors.HexColor("#FADBD8")),
    ("BACKGROUND",    (0,1), (0,1),  colors.HexColor("#EAFAF1")),
    ("BACKGROUND",    (1,1), (1,1),  colors.HexColor("#FEF9F9")),
    ("TOPPADDING",    (0,0), (-1,-1), 8),
    ("BOTTOMPADDING", (0,0), (-1,-1), 8),
    ("LEFTPADDING",   (0,0), (-1,-1), 10),
    ("RIGHTPADDING",  (0,0), (-1,-1), 10),
    ("BOX",           (0,0), (-1,-1), 1, colors.HexColor("#BFC9CA")),
    ("INNERGRID",     (0,0), (-1,-1), 0.5, colors.HexColor("#D5D8DC")),
    ("VALIGN",        (0,0), (-1,-1), "TOP"),
]))
story.append(section_banner("⚠️   DO'S AND DON'TS", bg=colors.HexColor("#1A5276")))
story.append(Spacer(1,2*mm))
story.append(dd_table)
story.append(Spacer(1, 5*mm))

# ══ SEE A DOCTOR IF ══════════════════════════════════════════════════════════
story.append(info_box([
    "<b>See a Dermatologist If:</b>",
    "• Acne worsens or does not improve after 8-10 weeks of this routine",
    "• You develop deep cysts or nodules (may need oral isotretinoin)",
    "• Scars are raised, thickened, or growing (keloid risk in South Asian skin — needs specialist care)",
    "• PIH is very dark and not fading after 4 months (may need prescription tretinoin or peel)",
    "• You want in-clinic procedures: RF microneedling, chemical peels, or pico laser for deeper scars",
], bg=colors.HexColor("#FADBD8")))

story.append(Spacer(1, 5*mm))

# ── FOOTER ───────────────────────────────────────────────────────────────────
footer = Table([[
    Paragraph("Prepared by Orris AI  •  June 2026  •  For educational purposes only — not a substitute for professional medical advice.", 
              S("Footer", fontSize=8, textColor=MID_GRAY, alignment=TA_CENTER))
]], colWidths=[174*mm])
footer.setStyle(TableStyle([
    ("TOPPADDING",    (0,0), (-1,-1), 6),
    ("LINEABOVE",     (0,0), (-1,-1), 0.5, MID_GRAY),
]))
story.append(footer)

# ── BUILD ────────────────────────────────────────────────────────────────────
doc.build(story)
print(f"PDF created: {OUTPUT}")
Running Command

cd /home/daytona/workspace/skincare-guide && python generate_guide.py 2>&1

Running Command

ls -lh /home/daytona/workspace/skincare-guide/Skincare_Routine_Guide.pdf

Your printable guide is ready! Download it here:

Skincare Routine Guide

PDF Document · PDF


Here's what's packed into the guide:
Page layout (A4, print-ready):
  • Header - personalised title with your skin concerns listed
  • Morning Routine (5 steps) - Face wash → Vitamin C → Niacinamide → Moisturiser → Sunscreen, each with a tip
  • Morning Checklist - 6 tick boxes to check off daily
  • Night Routine (4 steps) - Double cleanse → Azelaic acid → Adapalene → Night moisturiser, with guidance on timing and the "sandwich method"
  • Night Checklist - 6 tick boxes including "did not pick pimples"
  • Weekly Treatments - BHA exfoliation, clay mask, hydration mask
  • Progress Timeline table - what to expect at weeks 1-2, 3-4, 6-8, 10-12, and 16+
  • Product Recommendations table - budget vs mid-range options available in India
  • Do's and Don'ts - side-by-side colour-coded
  • See a Doctor If warning box - red alert conditions
Print it, stick it on your bathroom mirror, and check off the boxes every day. Consistency over 8-12 weeks is what gets results.
This is a shared conversation. Sign in to Orris to start your own chat.