21 yo girl has acne scars on face from when she had acne in teenage also has a lot of black heads on nose even after face masks and has a lot of open pore and oily skin what all shout she do and use

Reading File
Now let me search the medical library and web in parallel for comprehensive information on acne scars, blackheads, open pores, and oily skin management.
Finding Sources
Finding Sources
Searching the Web

acne scars blackheads open pores oily skin treatment skincare routine 2024 dermatologist

Finding Sources
Finding Sources
Reading Web Page

https://www.mayoclinic.org/diseases-conditions/acne/expert-a…

Finding Sources
Searching the Web

retinol niacinamide AHA BHA acne scars open pores blackheads oily skin routine dermatologist 2025

Here is a thorough, dermatologist-aligned guide for her skin concerns - acne scars, blackheads, open pores, and oily skin.

Complete Skincare Guide: Acne Scars + Blackheads + Open Pores + Oily Skin

Her skin has four overlapping concerns, but they all respond to a smart, layered routine. Here's what to do - broken into daily routine, key ingredients, professional treatments, and habits.

Understanding Her Skin

  • Acne scars - likely a mix of post-inflammatory hyperpigmentation (dark/red marks, flat) and possibly atrophic (pitted/depressed) scars. These need cell turnover + collagen stimulation.
  • Blackheads - open comedones where sebum + dead skin oxidize in the pore. Face masks (pore strips) give temporary results because they pull the plug but don't fix the root cause (excess oil + slow cell shedding).
  • Open/enlarged pores - caused by excess sebum and reduced skin elasticity. They can't be "closed" but can be made less visible.
  • Oily skin - overactive sebaceous glands. Stripping the skin with harsh cleansers makes it worse - the skin overcompensates by producing more oil.

Daily Skincare Routine

Morning (AM)

StepWhat to UseWhy
1. CleanserGentle, low-pH, non-stripping gel cleanser (e.g. CeraVe Foaming, La Roche-Posay Effaclar Gel)Removes overnight oil without disrupting barrier
2. Toner (optional)Alcohol-free BHA toner (e.g. Paula's Choice 2% BHA) OR niacinamide tonerExfoliates inside pores, controls oil
3. SerumNiacinamide 10% (e.g. The Ordinary, Minimalist)Reduces oil production, minimizes pore appearance, fades post-acne marks
4. MoisturizerOil-free, non-comedogenic gel moisturizer (e.g. Neutrogena Hydro Boost, La Roche-Posay Effaclar Mat)Critical - skipping it causes rebound oiliness
5. SunscreenSPF 50, oil-free, non-comedogenic (e.g. EltaMD UV Clear, La Roche-Posay Anthelios Clear Skin)Most important step - sun darkens acne scars significantly

Night (PM)

StepWhat to UseWhy
1. Double CleanseMicellar water or gentle cleansing oil FIRST, then gel cleanserFully removes sunscreen + pollution
2. Exfoliant (3x/week)AHA (Glycolic/Lactic acid) at night OR BHA (Salicylic acid 2%) - alternate, don't use both same nightAHA resurfaces top skin layer (scars), BHA unclogs pores (blackheads)
3. Treatment serumRetinol (start at 0.025-0.05%, use 2x/week to begin) OR Adapalene 0.1% (OTC, more effective)Single most important ingredient - speeds cell turnover, rebuilds collagen in scars, clears pores, reduces oil production
4. MoisturizerSame gentle gel moisturizer, or one with ceramides on retinol nightsRepairs skin barrier, reduces retinol dryness

Key Ingredients - What They Do

For Blackheads + Pores:

  • Salicylic Acid (BHA, 0.5-2%) - oil-soluble, gets inside the pore to dissolve the plug. This is why face masks fail - they sit on surface only. A BHA cleanser or toner used consistently is far more effective.
  • Niacinamide (5-10%) - reduces sebum production by ~50% in studies, visibly minimizes pore size over 8-12 weeks.
  • Clay masks (kaolin/bentonite) - fine 1-2x/week to absorb excess oil. Much better than pore strips.

For Acne Scars:

  • Retinoids (Retinol / Adapalene) - cornerstone treatment per NIH. Increases cell turnover, rebuilds collagen, fades pigmentation. Adapalene 0.1% gel (e.g. Differin) is available OTC and is proven for scars.
  • AHAs (Glycolic acid, Lactic acid) - exfoliate surface layer, fade post-inflammatory hyperpigmentation, smooth texture.
  • Vitamin C (L-Ascorbic acid 10-20%) - brightens pigmentation, boosts collagen synthesis. Use in the morning.
  • Azelaic Acid (10-20%) - fades dark marks, anti-inflammatory, great for darker skin tones.
  • Tranexamic acid + Kojic acid - target melanin production in hyperpigmented scars.

For Oily Skin:

  • Niacinamide - regulates sebum.
  • Zinc PCA - antimicrobial + controls oil.
  • Lightweight moisturizer - non-negotiable. Dehydrated oily skin over-produces oil.

What NOT to Do

  • Don't over-exfoliate - using AHA + BHA + retinol all in one night will wreck the skin barrier, causing redness, breakouts, and peeling. Rotate them across different nights.
  • Don't skip moisturizer - this is the most common mistake with oily skin. Stripping the skin causes more oil.
  • Don't use pore strips repeatedly - they don't address the cause and can damage the pore walls over time.
  • Don't skip SPF - UV exposure darkens post-acne marks drastically. Sunscreen is the single most impactful thing for scar fading.
  • Don't layer too many actives too soon - introduce one new active ingredient every 2-3 weeks to identify what works.

Suggested Weekly Schedule

DayAMPM
MonNiacinamide serum + SPFBHA exfoliant (Salicylic acid)
TueNiacinamide serum + SPFRetinol/Adapalene + moisturizer
WedVitamin C serum + SPFAHA exfoliant (Glycolic acid)
ThuNiacinamide serum + SPFRetinol/Adapalene + moisturizer
FriNiacinamide serum + SPFBHA exfoliant
SatNiacinamide serum + SPFRest night (just cleanse + moisturize) + clay mask optional
SunNiacinamide serum + SPFRetinol/Adapalene + moisturizer

Professional Treatments (for Pitted Scars + Persistent Blackheads)

If home care doesn't fully address pitted/atrophic scars after 3-6 months, a dermatologist can offer:
  • Microneedling (Dermaroller/RF microneedling) - stimulates collagen in depressed scars. Minimal risk of skin color changes, good for all skin tones. Usually 3-6 sessions.
  • Chemical peels (medium-depth) - glycolic or salicylic acid peels reduce blackheads, refine pores, and improve scar texture. Works well for post-inflammatory hyperpigmentation.
  • Laser resurfacing / Fractional CO2 - for deeper atrophic scars. More intensive, higher risk with darker skin tones.
  • Subcision - for deep tethered scars (a needle breaks the fibrous bands pulling the scar down).
  • Prescription Tretinoin (0.025-0.05%) - stronger than OTC retinol, faster results. Requires a dermatologist prescription.

Product Recommendations (Budget-Friendly)

ProductPurposeApprox. Range
CeraVe Foaming CleanserDaily cleanserAffordable
The Ordinary Niacinamide 10% + Zinc 1%Oil + poresVery affordable
Paula's Choice 2% BHA LiquidBlackheadsMid-range
Differin Adapalene 0.1% GelScars + poresAffordable, OTC
La Roche-Posay Anthelios Clear Skin SPF 60SunscreenMid-range
CeraVe PM Moisturizing LotionNight moisturizerAffordable

Timeline to Expect

  • Blackheads - noticeable improvement in 4-8 weeks with consistent BHA use
  • Oiliness/pore size - visible change in 8-12 weeks with niacinamide
  • Post-inflammatory hyperpigmentation (flat dark marks) - 3-6 months with retinoids + SPF
  • Pitted/atrophic scars - 6-12+ months with retinoids; faster with professional treatments
The most important two things to start with are daily SPF and a BHA exfoliant for blackheads. Add retinol/adapalene next, introduce vitamin C after that. Keep it simple early on and add one product at a time.

Create a printable skincare routine checklist she can follow daily

Reading File
Running Command

ls -la /tmp/workspace/ 2>/dev/null || mkdir -p /tmp/workspace/skincare && echo "created"

Running Command

mkdir -p /tmp/workspace/skincare && cat > /tmp/workspace/skincare/checklist.py << 'PYEOF' from reportlab.lib.pagesizes import A4 from reportlab.lib import colors from reportlab.lib.units import cm, mm from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph, Spacer, HRFlowable from reportlab.lib.styles import getSampleStyleSheet, ParagraphStyle from reportlab.lib.enums import TA_CENTER, TA_LEFT from reportlab.platypus import KeepTogether output_path = "/tmp/workspace/skincare/skincare_checklist.pdf" doc = SimpleDocTemplate( output_path, pagesize=A4, rightMargin=1.8*cm, leftMargin=1.8*cm, topMargin=1.5*cm, bottomMargin=1.5*cm ) # Color palette - soft feminine skincare theme PINK_DARK = colors.HexColor("#C2185B") PINK_MID = colors.HexColor("#E91E63") PINK_LIGHT = colors.HexColor("#FCE4EC") PINK_PALE = colors.HexColor("#FFF0F5") PEACH = colors.HexColor("#FFE0B2") PEACH_LIGHT = colors.HexColor("#FFF8F0") TEAL = colors.HexColor("#00897B") TEAL_LIGHT = colors.HexColor("#E0F2F1") LAVENDER = colors.HexColor("#EDE7F6") LAVENDER_MID= colors.HexColor("#7E57C2") GOLD = colors.HexColor("#F9A825") GREY_LIGHT = colors.HexColor("#F5F5F5") GREY_MID = colors.HexColor("#BDBDBD") WHITE = colors.white DARK = colors.HexColor("#212121") DARK_GREY = colors.HexColor("#424242") styles = getSampleStyleSheet() # Custom styles title_style = ParagraphStyle("title", parent=styles["Normal"], fontSize=22, textColor=PINK_DARK, alignment=TA_CENTER, fontName="Helvetica-Bold", spaceAfter=2, leading=26) subtitle_style = ParagraphStyle("subtitle", parent=styles["Normal"], fontSize=11, textColor=DARK_GREY, alignment=TA_CENTER, fontName="Helvetica", spaceAfter=4, leading=14) section_header_style = ParagraphStyle("sec_header", parent=styles["Normal"], fontSize=13, textColor=WHITE, alignment=TA_CENTER, fontName="Helvetica-Bold", leading=16) step_name_style = ParagraphStyle("step_name", parent=styles["Normal"], fontSize=10, textColor=DARK, fontName="Helvetica-Bold", leading=13) step_detail_style = ParagraphStyle("step_detail", parent=styles["Normal"], fontSize=8.5, textColor=DARK_GREY, fontName="Helvetica", leading=11) tip_style = ParagraphStyle("tip", parent=styles["Normal"], fontSize=8, textColor=TEAL, fontName="Helvetica-Oblique", leading=10) week_header_style = ParagraphStyle("week_header", parent=styles["Normal"], fontSize=9, textColor=WHITE, fontName="Helvetica-Bold", alignment=TA_CENTER, leading=11) week_cell_style = ParagraphStyle("week_cell", parent=styles["Normal"], fontSize=7.5, textColor=DARK_GREY, fontName="Helvetica", alignment=TA_CENTER, leading=10) note_style = ParagraphStyle("note", parent=styles["Normal"], fontSize=8, textColor=DARK_GREY, fontName="Helvetica", leading=11, leftIndent=4) footer_style = ParagraphStyle("footer", parent=styles["Normal"], fontSize=7.5, textColor=GREY_MID, alignment=TA_CENTER, fontName="Helvetica-Oblique") def checkbox_cell(label): return Paragraph(f"☐ {label}", step_name_style) def make_section_header(text, bg_color): header_data = [[Paragraph(text, section_header_style)]] t = Table(header_data, colWidths=[17.4*cm]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), bg_color), ("ROWPADDING", (0,0), (-1,-1), 6), ("LEFTPADDING", (0,0), (-1,-1), 10), ("RIGHTPADDING", (0,0), (-1,-1), 10), ("ROUNDEDCORNERS", [6,6,6,6]), ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ])) return t def make_step_row(emoji, step_label, product_hint, tip=None, bg=WHITE): check = Paragraph(f"☐", ParagraphStyle("chk", parent=styles["Normal"], fontSize=14, fontName="Helvetica", textColor=PINK_MID, alignment=TA_CENTER, leading=16)) em = Paragraph(emoji, ParagraphStyle("em", parent=styles["Normal"], fontSize=14, alignment=TA_CENTER, leading=16)) name = Paragraph(f"<b>{step_label}</b>", ParagraphStyle("sn", parent=styles["Normal"], fontSize=9.5, fontName="Helvetica-Bold", textColor=DARK, leading=12)) detail_parts = [name] if product_hint: detail_parts.append(Paragraph(product_hint, step_detail_style)) if tip: detail_parts.append(Paragraph(f"💡 {tip}", tip_style)) from reportlab.platypus import KeepTogether detail_cell = detail_parts row = [[check, em, detail_cell]] t = Table(row, colWidths=[0.8*cm, 0.9*cm, 15.7*cm]) t.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), bg), ("VALIGN", (0,0), (-1,-1), "TOP"), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (0,0), 4), ("LEFTPADDING", (2,0), (2,0), 6), ("LINEBELOW", (0,0), (-1,-1), 0.5, colors.HexColor("#EEEEEE")), ])) return t # ---- BUILD CONTENT ---- story = [] # ===== TITLE BLOCK ===== title_data = [[ Paragraph("🌸 My Daily Skincare Checklist", title_style), Paragraph("For: Acne Scars · Blackheads · Open Pores · Oily Skin", subtitle_style), ]] title_table = Table([[ Paragraph("🌸 My Daily Skincare Checklist", title_style), ]], colWidths=[17.4*cm]) title_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), PINK_LIGHT), ("TOPPADDING", (0,0), (-1,-1), 12), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (0,0), (-1,-1), 8), ("RIGHTPADDING", (0,0), (-1,-1), 8), ("ROUNDEDCORNERS", [8,8,0,0]), ])) story.append(title_table) sub_table = Table([[ Paragraph("For: Acne Scars · Blackheads · Open Pores · Oily Skin", subtitle_style), ]], colWidths=[17.4*cm]) sub_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), PINK_LIGHT), ("TOPPADDING", (0,0), (-1,-1), 0), ("BOTTOMPADDING", (0,0), (-1,-1), 8), ("LEFTPADDING", (0,0), (-1,-1), 8), ("ROUNDEDCORNERS", [0,0,8,8]), ])) story.append(sub_table) story.append(Spacer(1, 0.3*cm)) # ===== DATE LINE ===== date_data = [[ Paragraph("Date: _____________________________", ParagraphStyle("date", parent=styles["Normal"], fontSize=9, textColor=DARK_GREY, fontName="Helvetica", leading=12)), Paragraph("Week: _____________________________", ParagraphStyle("date", parent=styles["Normal"], fontSize=9, textColor=DARK_GREY, fontName="Helvetica", leading=12, alignment=TA_CENTER)), Paragraph("Mood: 😊 😐 😞", ParagraphStyle("date", parent=styles["Normal"], fontSize=9, textColor=DARK_GREY, fontName="Helvetica", leading=12, alignment=TA_CENTER)), ]] date_table = Table(date_data, colWidths=[6*cm, 6*cm, 5.4*cm]) date_table.setStyle(TableStyle([ ("BACKGROUND", (0,0), (-1,-1), GREY_LIGHT), ("TOPPADDING", (0,0), (-1,-1), 6), ("BOTTOMPADDING", (0,0), (-1,-1), 6), ("LEFTPADDING", (0,0), (-1,-1), 8), ("LINEBELOW", (0,0), (-1,-1), 0.5, GREY_MID), ])) story.append(date_table) story.append(Spacer(1, 0.4*cm)) # =================================================== # MORNING ROUTINE # =================================================== story.append(make_section_header("☀️ MORNING ROUTINE ( ~5 minutes )", PINK_MID)) story.append(Spacer(1, 0.15*cm)) am_steps = [ ("🧴", "Step 1 — Gentle Gel Cleanser", "e.g. CeraVe Foaming Cleanser / La Roche-Posay Effaclar Gel", "Wash face with lukewarm water. Pat dry — don't rub.", PINK_PALE), ("✨", "Step 2 — Niacinamide Serum (10%)", "e.g. The Ordinary Niacinamide 10% + Zinc / Minimalist", "Controls oil, shrinks pore appearance, fades dark marks. Apply 2-3 drops evenly.", PEACH_LIGHT), ("💧", "Step 3 — Oil-Free Moisturizer", "e.g. Neutrogena Hydro Boost Gel / La Roche-Posay Effaclar Mat", "Even oily skin NEEDS moisture — skipping causes more oil production!", PINK_PALE), ("🌞", "Step 4 — Sunscreen SPF 50 (NON-NEGOTIABLE)", "e.g. La Roche-Posay Anthelios Clear Skin SPF 60 / EltaMD UV Clear", "⭐ #1 most important step. UV darkens acne scars. Non-comedogenic, matte finish.", PEACH_LIGHT), ] for emoji, name, hint, tip, bg in am_steps: story.append(make_step_row(emoji, name, hint, tip, bg)) story.append(Spacer(1, 0.45*cm)) # =================================================== # EVENING ROUTINE # =================================================== story.append(make_section_header("🌙 EVENING ROUTINE ( ~8 minutes )", TEAL)) story.append(Spacer(1, 0.15*cm)) pm_steps = [ ("🧼", "Step 1 — Double Cleanse", "First: Micellar water / gentle cleansing oil · Then: Same gel cleanser as AM", "Remove sunscreen & pollution fully. This step prevents clogged pores.", TEAL_LIGHT), ("🌿", "Step 2 — Exfoliant (3x per week — rotate, see schedule below)", "BHA nights: Paula's Choice 2% BHA / Salicylic acid toner\nAHA nights: The Ordinary Glycolic Acid 7% / Lactic Acid 10%", "BHA = unclogs blackheads (oil-soluble). AHA = resurfaces scars. Never use both on same night!", LAVENDER), ("🌙", "Step 3 — Retinol / Adapalene (2-3x per week)", "e.g. Differin Adapalene 0.1% Gel (OTC) · OR Retinol 0.025% serum to start", "Start slow: 2 nights/week for 4 weeks, then increase. The most powerful scar treatment!", TEAL_LIGHT), ("🛡️", "Step 4 — Night Moisturizer (with ceramides on retinol nights)", "e.g. CeraVe PM Moisturizing Lotion / Simple Kind to Skin Moisturiser", "Seal in treatment + repair skin barrier overnight.", LAVENDER), ] for emoji, name, hint, tip, bg in pm_steps: story.append(make_step_row(emoji, name, hint, tip, bg)) story.append(Spacer(1, 0.45*cm)) # =================================================== # WEEKLY SCHEDULE # =================================================== story.append(make_section_header("📅 WEEKLY EXFOLIANT & TREATMENT SCHEDULE", LAVENDER_MID)) story.append(Spacer(1, 0.2*cm)) days = ["MON", "TUE", "WED", "THU", "FRI", "SAT", "SUN"] pm_treatments = [ "BHA\n(Salicylic\nAcid)", "Retinol /\nAdapalene", "AHA\n(Glycolic\nAcid)", "Retinol /\nAdapalene", "BHA\n(Salicylic\nAcid)", "REST\n(Clay mask\noptional)", "Retinol /\nAdapalene", ] bg_colors = [TEAL_LIGHT, LAVENDER, TEAL_LIGHT, LAVENDER, TEAL_LIGHT, PEACH_LIGHT, LAVENDER] header_row = [Paragraph(d, week_header_style) for d in days] treat_row = [Paragraph(t, week_cell_style) for t in pm_treatments] check_row = [Paragraph("☐", ParagraphStyle("wchk", parent=styles["Normal"], fontSize=14, alignment=TA_CENTER, textColor=PINK_MID, leading=16)) for _ in days] col_w = 17.4/7 week_table = Table( [header_row, treat_row, check_row], colWidths=[col_w*cm]*7, rowHeights=[0.65*cm, 1.5*cm, 0.6*cm] ) style_cmds = [ ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("ALIGN", (0,0), (-1,-1), "CENTER"), ("TOPPADDING", (0,0), (-1,-1), 3), ("BOTTOMPADDING", (0,0), (-1,-1), 3), ("GRID", (0,0), (-1,-1), 0.5, GREY_MID), ("LINEBELOW", (0,0), (6,0), 1, WHITE), ] for i, bg in enumerate(bg_colors): style_cmds.append(("BACKGROUND", (i,0), (i,0), LAVENDER_MID)) style_cmds.append(("BACKGROUND", (i,1), (i,2), bg)) week_table.setStyle(TableStyle(style_cmds)) story.append(week_table) story.append(Spacer(1, 0.4*cm)) # =================================================== # WEEKLY EXTRAS # =================================================== story.append(make_section_header("🎯 WEEKLY ADD-ONS ( 1-2x per week )", GOLD)) story.append(Spacer(1, 0.15*cm)) extras = [ ("🍃", "Clay Mask (Kaolin/Bentonite)", "Apply thin layer to oily T-zone/nose. Leave 10 min. Rinse well.", "Absorbs excess oil, helps minimise blackheads. Far better than pore strips.", PEACH_LIGHT), ("💆", "Face Massage / Gua Sha (optional)", "Use facial oil or moisturizer. Gentle upward strokes 3-5 min.", "Boosts circulation, helps with lymphatic drainage. Avoid over pressing on scarred areas.", PEACH_LIGHT), ] for emoji, name, hint, tip, bg in extras: story.append(make_step_row(emoji, name, hint, tip, bg)) story.append(Spacer(1, 0.4*cm)) # =================================================== # GOLDEN RULES # =================================================== story.append(make_section_header("⭐ GOLDEN RULES TO REMEMBER", colors.HexColor("#AD1457"))) story.append(Spacer(1, 0.15*cm)) rules = [ ("🚫", "Never skip SPF — even indoors. UV is the #1 cause of scars darkening."), ("🚫", "Never use AHA + BHA + Retinol on the same night — rotate them."), ("🚫", "Never skip moisturizer just because skin is oily — it makes oiliness WORSE."), ("✅", "Introduce ONE new active ingredient every 2-3 weeks to track reactions."), ("✅", "Always patch test a new product on your jawline for 3 days first."), ("✅", "Results take time: blackheads 4-8 wks · dark marks 3-6 months · pitted scars 6-12 months."), ("✅", "See a dermatologist if no improvement after 3 months — prescription retinoids work faster."), ] rule_rows = [] for icon, text in rules: col = colors.HexColor("#FFEBEE") if icon == "🚫" else colors.HexColor("#E8F5E9") rule_rows.append([ Paragraph(icon, ParagraphStyle("ri", parent=styles["Normal"], fontSize=11, alignment=TA_CENTER, leading=14)), Paragraph(text, ParagraphStyle("rt", parent=styles["Normal"], fontSize=8.5, textColor=DARK_GREY, fontName="Helvetica", leading=11)), ]) rules_table = Table(rule_rows, colWidths=[0.9*cm, 16.5*cm]) rule_style = [ ("VALIGN", (0,0), (-1,-1), "MIDDLE"), ("TOPPADDING", (0,0), (-1,-1), 4), ("BOTTOMPADDING", (0,0), (-1,-1), 4), ("LEFTPADDING", (1,0), (1,-1), 6), ("LINEBELOW", (0,0), (-1,-1), 0.4, GREY_MID), ] for i, (icon, _) in enumerate(rules): bg = colors.HexColor("#FFEBEE") if icon == "🚫" else colors.HexColor("#E8F5E9") rule_style.append(("BACKGROUND", (0,i), (-1,i), bg)) rules_table.setStyle(TableStyle(rule_style)) story.append(rules_table) story.append(Spacer(1, 0.4*cm)) # =================================================== # SKIN NOTES # =================================================== notes_header = make_section_header("📝 DAILY SKIN NOTES", colors.HexColor("#5C6BC0")) story.append(notes_header) story.append(Spacer(1, 0.15*cm)) note_rows = [ ["How does skin feel today?", "_"*60], ["Any new breakouts / reactions?", "_"*60], ["Products used today:", "_"*60], ["Water intake (aim 8 glasses):", "☐☐☐☐☐☐☐☐ glasses"], ["Sleep (aim 7-8 hrs):", "_______ hours"], ] notes_table = Table(note_rows, colWidths=[5.5*cm, 11.9*cm]) notes_table.setStyle(TableStyle([ ("FONTNAME", (0,0), (0,-1), "Helvetica-Bold"), ("FONTSIZE", (0,0), (-1,-1), 8.5), ("TEXTCOLOR", (0,0), (-1,-1), DARK_GREY), ("TOPPADDING", (0,0), (-1,-1), 5), ("BOTTOMPADDING", (0,0), (-1,-1), 5), ("LEFTPADDING", (0,0), (0,-1), 6), ("LINEBELOW", (0,0), (-1,-1), 0.4, GREY_MID), ("BACKGROUND", (0,0), (-1,-1), GREY_LIGHT), ("ROWBACKGROUNDS", (0,0), (-1,-1), [WHITE, GREY_LIGHT]), ])) story.append(notes_table) story.append(Spacer(1, 0.35*cm)) # FOOTER story.append(HRFlowable(width="100%", thickness=0.5, color=GREY_MID)) story.append(Spacer(1, 0.1*cm)) story.append(Paragraph("Consistency is everything · Print one sheet per day · Reprint weekly · See a dermatologist for personalised prescription advice", footer_style)) # BUILD doc.build(story) print(f"PDF created: {output_path}") PYEOF python3 /tmp/workspace/skincare/checklist.py

Your printable checklist is ready! Here's what's included on one beautifully designed A4 page:

skincare checklist

PDF Document · PDF


What's on the checklist:
  • ☀️ Morning Routine (4 steps with checkboxes) - Cleanser, Niacinamide serum, Moisturizer, SPF 50
  • 🌙 Evening Routine (4 steps with checkboxes) - Double cleanse, Exfoliant, Retinol/Adapalene, Night moisturizer
  • 📅 Weekly Schedule table - A 7-day grid showing which nights to use BHA, AHA, or Retinol so she never mixes the wrong actives
  • 🎯 Weekly Add-ons - Clay mask and face massage reminders
  • ⭐ Golden Rules - Color-coded do's and don'ts (red for never, green for always)
  • 📝 Daily Skin Notes section - Spaces to track skin feel, reactions, products used, water intake, and sleep
  • Date + Mood tracker at the top
She can print one sheet per day or laminate it and use a dry-erase marker. Print in color for best results.

She mainly has pitted scars not pigmentation

Finding Sources
Searching the Web

pitted atrophic acne scars icepick boxcar rolling treatment dermatologist 2024 2025

Reading Web Page

https://idealfaceandbody.com/atrophic-acne-scars

Searching PubMed

atrophic acne scars microneedling subcision treatment

This is an important distinction - pitted (atrophic) scars are a fundamentally different problem from pigmentation. Here's a complete, focused breakdown:

Pitted Acne Scars - What They Are & What Actually Works

Pitted scars are caused by collagen loss during the inflammatory healing of acne. The skin literally sinks in because the tissue underneath was destroyed. No cream can fill that void - treatment has to rebuild collagen from within or physically alter the scar structure.

First - Identify Her Scar Type (Changes the Treatment)

TypeAppearanceDepthBest Treatment
Ice pickDeep, narrow, V-shaped holesVery deepTCA CROSS, punch excision
BoxcarWide, rectangular pit with sharp edges (like chickenpox)Shallow-mediumFractional laser, RF microneedling, chemical peels
RollingWave-like undulating texture, broad shallow depressionsMediumSubcision, RF microneedling
She may have a mix. Most people with teenage acne have a combination of boxcar + rolling on cheeks.

What Home Products CAN'T Do

This is the honest truth: topicals alone cannot fill pitted scars. No retinol, no AHA, no serum will fill a physical depression in the dermis. What topicals can do:
  • Slightly improve the appearance of very shallow scars over 12+ months by building collagen incrementally (retinoids do this)
  • Keep skin smooth and textured so scars appear less pronounced
  • Prevent new scars from forming
For actual structural improvement, she needs in-clinic treatments.

Best In-Clinic Treatments (Most Effective to Least for Pits)

1. TCA CROSS - Best for Ice Pick Scars

A dermatologist applies 70-100% trichloroacetic acid into the narrow pit using a toothpick-like applicator. This causes controlled chemical inflammation that fills the pit with new collagen from the bottom up. Studies show 50-70% improvement in ice pick scars. Usually needs 3-6 sessions spaced 6-8 weeks apart. Affordable compared to laser.

2. Subcision - Best for Rolling Scars

A needle or cannula is inserted under the skin to cut the fibrous bands pulling the surface down. Releases the tethering so the skin lifts. Often combined with filler or PRP for better results. Shows 50-60% improvement. Minimal downtime.

3. RF Microneedling (Radio Frequency Microneedling) - Best Overall for Mixed/Boxcar

Needles penetrate into the dermis and deliver radiofrequency heat, triggering collagen remodeling. Safe for all skin tones with low risk of post-inflammatory darkening. Good for boxcar and rolling scars. Usually 3-6 sessions. Results improve for 3-6 months after each session as collagen builds. More effective than regular microneedling alone.

4. Fractional CO2 Laser / Erbium Laser - Best for Boxcar Scars

Most powerful resurfacing option. Ablative fractional lasers vaporize columns of skin, stimulating significant collagen production. Dramatic results but requires downtime (5-10 days of redness/peeling). Caution for darker skin tones - risk of post-inflammatory hyperpigmentation is real; consult a dermatologist experienced with Indian/olive/brown skin specifically.

5. Punch Excision - Best for Deep Individual Ice Pick Scars

Individual deep pits are surgically cut out and stitched closed. Trades a pit for a fine line scar that is far less visible. For very deep, isolated scars that don't respond to TCA.

6. Dermal Fillers (Temporary Fix)

Hyaluronic acid filler injected under depressed scars can "lift" them immediately. Results last 6-18 months. Not a cure - but useful for events or while waiting for collagen-building treatments to work.

Combination Approach (What Dermatologists Actually Do)

The best results come from combining treatments targeting different layers:
  • Subcision + RF Microneedling + PRP - covers tethered rolling scars + collagen rebuilding + accelerated healing
  • TCA CROSS + Fractional Laser - ice pick + surface texture in one session
  • PRP with microneedling - systematic review evidence confirms PRP significantly boosts scar improvement when combined with other procedures

What She Should Do at Home (to Support Clinic Treatment)

For pitted scars, home care is supportive, not curative:
StepWhy it Matters for Pits
Adapalene 0.1% (Differin) nightlyBest OTC retinoid - stimulates collagen over time, slightly improves shallow scars, prevents new ones
SPF 50 dailyPrevents UV damage to healing skin post-procedure; also keeps skin healthy for better treatment outcomes
Niacinamide 10% AMKeeps skin barrier strong, controls oil - secondary benefit for scar appearance
Vitamin C serum (optional, AM)Supports collagen synthesis - minor adjunct benefit
Stay well hydrated + avoid pickingPicking creates more ice pick scars

Realistic Timeline for Pitted Scars

ApproachExpected ImprovementTimeline
Adapalene alone (home only)10-20% very shallow scars6-12 months
TCA CROSS (3-6 sessions)50-70% ice pick scars4-9 months
RF Microneedling (4-6 sessions)40-60% boxcar/rolling4-8 months
Combination (subcision + laser + PRP)60-80% overall6-12 months
Single deep pits - punch excisionNear complete for individual scars1 session

Most Important Next Step for Her

She should see a dermatologist or cosmetic dermatologist for a scar assessment before spending money on home products for pits. The dermatologist will:
  1. Classify her specific scar types (ice pick / boxcar / rolling)
  2. Recommend the right combination treatment
  3. Assess her skin tone (crucial for laser safety)
  4. Possibly start her on prescription tretinoin as a skin primer before procedures
For home care right now, Adapalene 0.1% nightly + SPF 50 daily is the most evidence-backed starter combo while she arranges a dermatology consult. Keep the BHA/niacinamide routine for the blackheads and oily skin - that part of the previous advice still stands fully.

Bottom line: Pitted scars need professional treatment - they won't fill in with skincare alone. But the right in-clinic approach (especially TCA CROSS for ice picks and RF microneedling for boxcar/rolling) can produce genuinely significant improvement.

Can u suggest products from indian brands that are more affordable

Searching the Web

best Indian skincare brands affordable salicylic acid niacinamide retinol adapalene 2024 2025 Minimalist Dot and Key Plum

Searching the Web

Minimalist skincare India products ingredients price list BHA AHA retinol niacinamide

Searching the Web

Deconstruct Plum Dot Key Dermaco India skincare acne oily skin products price 2025

Here is a full Indian brand product guide, mapped to each step of her routine:

Indian Brand Skincare Products - Affordable Full Routine

⭐ Brand Tier Guide

  • Minimalist - best value for active ingredients, science-backed, widely available on Nykaa/Amazon/their site
  • Plum - good formulations, widely available, great for oily/acne skin
  • Deconstruct - newer but excellent, clinically tested, very affordable
  • The Derma Co - dermatologist-founded Indian brand, strong actives range
  • Suganda - smaller brand but excellent clean formulations, loved by dermatologists

☀️ MORNING ROUTINE

Step 1 - Cleanser

ProductPrice (approx.)
Minimalist Salicylic Acid + LHA 2% Cleanser - best pick, exfoliates inside pores while cleansing~₹249
Plum Green Tea Pore Cleansing Face Wash - great for oily/acne skin, gentle surfactants~₹200-220
Deconstruct Pore Minimizing Face Wash (salicylic + niacinamide)~₹299

Step 2 - Niacinamide Serum

ProductPrice (approx.)
Minimalist Niacinamide 10% + Zinc 1% - the gold standard, best price-to-performance ratio in India~₹599 (30ml)
Plum 10% Niacinamide Face Serum - good for sensitive/oily skin, slightly more hydrating~₹545
The Derma Co 5% Niacinamide Serum - lighter concentration, good starter option~₹399

Step 3 - Moisturizer (oil-free)

ProductPrice (approx.)
Minimalist Vitamin B5 10% Lightweight Moisturizer - oil-free, non-comedogenic, best for oily skin~₹349
Plum SebaClear Mattifying Gel Crème (with Sebacic Acid + Matcha) - controls oil for hours~₹483
Deconstruct Oil-Free Moisturizer (3% NMF Complex) - lightweight gel, very affordable~₹299

Step 4 - Sunscreen SPF 50 (NON-NEGOTIABLE)

ProductPrice (approx.)
Minimalist Light Fluid SPF 50 PA++++ - no white cast, matte finish, best for Indian skin tones~₹399
The Derma Co 1% Hyaluronic Sunscreen Aqua Gel SPF 50 PA++++ - CTRI-certified, top-rated~₹499
Deconstruct Gel Sunscreen SPF 50 PA++++ - in-vivo tested, non-greasy, bestseller~₹399
Plum 2% Niacinamide SPF 50 PA++++ Sunscreen - niacinamide bonus, no white cast~₹350-400

🌙 EVENING ROUTINE

Step 1 - Double Cleanse

  • Start with Minimalist Marula Oil 5% Cleansing Oil (₹399) or micellar water like Simple Micellar Water (₹299) to remove SPF
  • Follow with the same morning gel cleanser

Step 2 - BHA Exfoliant (3x/week for blackheads)

ProductPrice (approx.)
Minimalist Salicylic Acid 2% Face Serum - best BHA exfoliant in India, specifically targets blackheads/pores~₹599
The Derma Co 2% Salicylic Acid Serum~₹449

Step 3 - AHA Exfoliant (alternate nights for texture)

ProductPrice (approx.)
Minimalist Glycolic Acid 8% Exfoliating Liquid - resurfaces skin texture, good for shallow scar borders~₹599
Minimalist AHA PHA BHA 32% Face Peel - weekly use only, strong but very effective~₹799
Suganda 10% Lactic Acid Serum - gentler AHA, good for beginners~₹545

Step 4 - Retinol / Adapalene (for pitted scars - most important step)

ProductPrice (approx.)
Minimalist Retinol 0.3% Face Serum - start here, well-tolerated, excellent for collagen building~₹229-249
Minimalist Retinol 0.1% Serum - if 0.3% feels too strong initially~₹199
The Derma Co 0.1% Retinol Serum~₹599
Adapalene (Adaferin/Deriva gel 0.1%) - prescription OTC at chemists in India, ~₹150-180 for a tube - this is the strongest and best value option for pitted scars
Note on Adapalene: In India, Adapalene 0.1% gels (brand names: Adaferin, Deriva, Aclene) are available at medical stores for ₹150-200 a tube without prescription. This is the best bang for money for pitted scars - the same ingredient as Differin but a fraction of the cost.

Step 5 - Night Moisturizer

ProductPrice (approx.)
Minimalist Ceramides 0.3% + Bisabolol Moisturizer - repairs skin barrier on retinol nights~₹599
Plum 2% Niacinamide & Rice Water Night Crème~₹395
The Derma Co Ceramide Moisturizer~₹399

🎯 WEEKLY ADD-ONS

ProductPurposePrice
Minimalist AHA PHA BHA 32% PeelWeekly deep exfoliation (use once only, not for beginners)~₹799
mCaffeine Coffee Face Mask (with Kaolin clay)Clay mask for oily skin/blackheads~₹349
Plum Kaolin + Bentonite Clay MaskOil absorption, pore cleansing~₹350
Deconstruct Exfoliating MaskBHA + enzyme, good for blackheads~₹349

💰 Starter Budget Routine (Under ₹1500 total)

If she's just starting out and wants to keep costs minimal, this is the priority order to buy:
  1. Minimalist Salicylic Acid 2% Face Serum - ₹599 (tackles blackheads + oiliness)
  2. Adaferin / Adapalene 0.1% Gel - ₹150-180 (pitted scars - most impactful)
  3. The Derma Co Sunscreen SPF 50 Aqua Gel - ₹499 (protects healing skin daily)
  4. Minimalist Niacinamide 10% - ₹599 (oil control + pores)
Total: ~₹1850 for a complete active routine. She can add the moisturizer and cleanser from Minimalist or Plum in the next purchase.

Where to Buy

  • beminimalist.co - direct site, often has better prices
  • Nykaa - all brands available, frequent sales
  • Amazon India - check for combos/deals
  • Clinikally - sometimes has discounts on Minimalist

Quick Tip on Combinations to Avoid

  • Don't use Minimalist Glycolic + Salicylic on the same night - irritation
  • Don't use Retinol the same night as any AHA/BHA
  • Always introduce one new active at a time - wait 2 weeks before adding the next

What abt pilgrim 10% Niacinamide serum

Pilgrim is a solid Indian brand - their niacinamide serum is a popular pick. Let me get the details.
Searching sources...
Searching the Web

Pilgrim 10% Niacinamide serum review ingredients price India 2024 2025

Pilgrim 10% Niacinamide Serum - it's actually a very good pick for her. Here's a full breakdown:

Pilgrim 10% Niacinamide Serum - Review & Analysis

Price: ~₹545-599 (30ml) | Available on Nykaa, Amazon, discoverpilgrim.com

What's Inside (Full Ingredient Breakdown)

The full formula is: Purified Water, Niacinamide 10%, Butylene Glycol, Propanediol, Gluconolactone (PHA), Salicylic Acid (BHA), Zinc PCA, White Lotus Extract, Torreya Nucifera Extract, Sodium Hyaluronate, Allantoin, Panthenol, Tocopheryl Acetate

Why It's Actually Great for Her Specifically

IngredientWhat it Does for Her Skin
Niacinamide 10%Controls excess oil, minimizes pore appearance, strengthens skin barrier
Zinc PCARegulates sebum further, antimicrobial - tackles blackhead-causing bacteria
Gluconolactone (PHA)Gentle exfoliant - softer than AHA/BHA, improves texture without irritation
Salicylic Acid (BHA)Goes inside pores, dissolves blackhead plugs
Sodium HyaluronateKeeps oily skin hydrated so it doesn't overproduce oil
Allantoin + PanthenolSoothing, barrier-repairing - reduces irritation from actives
The standout thing about Pilgrim's formula vs. Minimalist's 10% Niacinamide is that Pilgrim packs in BHA (salicylic acid) + PHA (gluconolactone) alongside niacinamide. So it's essentially a 3-in-1 serum - oil control + pore exfoliation + niacinamide benefits all in one step. For her concerns (blackheads + open pores + oily skin) this is arguably better suited than plain Minimalist Niacinamide.

Pilgrim vs. Minimalist Niacinamide 10% - Head to Head

Pilgrim 10% NiacinamideMinimalist 10% Niacinamide + Zinc
Niacinamide10%10%
ZincZinc PCA ✅Zinc 1% ✅
BHA (Salicylic)✅ Yes❌ No
PHA (Gluconolactone)✅ Yes❌ No
Hyaluronic Acid✅ Yes❌ No
FragranceFragrance-free ✅Fragrance-free ✅
Price~₹545-599~₹599
Best forBlackheads + oily + poresGeneral oil control + brightness
Verdict: For her specific concerns, Pilgrim is the slightly better choice because of the added BHA and PHA. It does a bit more work in a single serum.

How She Should Use It

  • Apply every morning after cleansing on dry skin, 2-3 drops across the face
  • Because it contains salicylic acid, she does not need a separate BHA toner in the morning - this serum covers it
  • Still use a dedicated BHA serum at night (like Minimalist 2% Salicylic Acid) for deeper exfoliation on designated nights
  • Always follow with SPF in the morning

Any Concerns?

  • The salicylic acid concentration is low (not disclosed but typical in serums is 0.5-1%), so it won't replace a proper BHA exfoliant session at night - but it's great as a daily maintenance dose
  • If skin becomes dry or flaky in the first 1-2 weeks, reduce to every other day and build up
  • Avoid using it on the same night as retinol or strong AHA - it already has exfoliating actives

Bottom line: Yes, Pilgrim 10% Niacinamide is a solid buy for her. The combination of niacinamide + BHA + PHA + zinc in one serum makes it particularly well-matched to her skin concerns (oily, blackheads, open pores). It's a smart morning serum choice and slightly more feature-packed than Minimalist for her specific issues.

Why abt plum 10% niacinamide serum

Searching the Web

Plum 10% Niacinamide face serum ingredients full list review India 2024 2025

Reading Web Page

https://incidecoder.com/products/plum-10-niacinamide-rice-wa…

Here's an honest breakdown of the Plum 10% Niacinamide serum:

Plum 10% Niacinamide & Rice Water Serum - Full Review

Price: ~₹527-695 (30ml) | ~₹679 (50ml) on Flipkart/Nykaa

What's In It

Key ingredients: Niacinamide 10%, Fermented Rice Water, Hydrolyzed Sesame Protein PG-Propyl Methylsilanediol (silicone-sesame derivative), Hyaluronic Acid
Marketed benefits: Brightens skin, fades acne marks, improves texture

The Good

IngredientBenefit
Niacinamide 10%Controls oil, minimizes pores, strengthens barrier
Fermented Rice WaterBrightening, antioxidant, skin-softening
Hyaluronic AcidHydration without heaviness
No fragranceGood for acne-prone skin
TextureLightweight, fast-absorbing, no stickiness

⚠️ The Problem - Important for Her

There is a real concern raised by multiple acne-prone users on r/IndianSkincareAddicts (2025): Plum's niacinamide serum contains Hydrolyzed Sesame Protein PG-Propyl Methylsilanediol - a sesame-derived ingredient that is potentially comedogenic (pore-clogging) for some people.
Multiple users who switched from Minimalist to Plum's niacinamide reported:
  • New small red bumps appearing
  • Skin texture becoming bumpy and congested
  • Skin flushing on application
The issue is that Plum still markets this as "non-comedogenic" on the packaging, but that specific sesame derivative has known comedogenic potential.

Head to Head vs Pilgrim

Plum 10% NiacinamidePilgrim 10% Niacinamide
Niacinamide10% ✅10% ✅
BHA (Salicylic Acid)❌ No✅ Yes
PHA (Gluconolactone)❌ No✅ Yes
Zinc PCA❌ No✅ Yes
Rice Water / Brightening✅ Yes❌ No
Comedogenic risk⚠️ Sesame derivative - caution✅ Clean formula
Price (30ml)~₹527-659~₹545-599
Best forBrightening + tone (if no reaction)Blackheads + oily + pores

Verdict for Her

For her specific concerns (pitted scars, blackheads, open pores, oily skin) - Plum is NOT the best choice. Here's why:
  1. No BHA or Zinc - so it doesn't actually target blackheads, which is her main concern
  2. Comedogenic risk - with acne-prone/oily skin and open pores, adding a potentially pore-clogging ingredient is risky
  3. Focused on brightening - her issue is pitted scars, not pigmentation, so this serum is solving the wrong problem
Better alternatives ranked for her:
  1. Pilgrim 10% Niacinamide - BHA + PHA + Zinc included, cleaner formula ✅
  2. Minimalist 10% Niacinamide + Zinc - simple, reliable, no risky ingredients ✅
  3. Plum 10% Niacinamide - skip for now given the comedogenic concern ⚠️
If she specifically wants rice water brightening, the Plum 5% Niacinamide (lower concentration, less reaction risk) is a safer Plum option - but for her routine, brightening isn't the priority right now.

Search for dermatologist recommendations on Indian adapalene brands for pitted scars

Searching the Web

dermatologist recommended adapalene brand India pitted acne scars Adaferin Deriva Aclene 2024 2025

Searching PubMed

adapalene atrophic acne scars collagen remodeling

Searching the Web

Adaferin Deriva Aclene adapalene 0.1% gel India dermatologist review pitted scars best brand chemist

Searching PubMed

adapalene 0.3% acne scar atrophic improvement

Great - found a very relevant Indian dermatology consensus paper and clinical data. Here's a thorough answer:

Adapalene Brands in India - Dermatologist Guide for Pitted Scars

What the Evidence Says About Adapalene for Pitted Scars

The PRACT-India consensus (2025) - a Delphi panel of Indian dermatologists - specifically states:
"Adapalene 0.3% gel effectively treats atrophic acne scars and improves skin texture, with good tolerability. Adapalene 0.3% + BPO 2.5% gel is particularly effective for treating atrophic acne scars."
A clinical study published in PMC showed adapalene 0.3% produced statistically significant improvement in overall scar grade by 24 weeks, with boxcar scars showing the most reduction in count.
Key clinical takeaway: 0.3% works better than 0.1% for pitted/atrophic scars. 0.1% is good for acne prevention and early scar formation. For existing pitted scars, 0.3% is the target dose.

All Adapalene Brands Available in India

Adapalene 0.1% - Available OTC at Chemists

BrandManufacturerPriceNotes
Adaferin Gel 0.1%Galderma India~₹150-180 (15g)Original, gold standard - introduced in India in 2001, studied in the Indian J Dermatol post-marketing surveillance study. Specially formulated microcrystals that penetrate follicles within 5 minutes. Most widely available and trusted.
Deriva Gel 0.1%Micro Labs~₹130-160 (15g)Popular generic, widely available at medical stores, good alternative to Adaferin
Aclene Gel 0.1%Sun Pharma~₹120-150 (15g)Good availability, same active ingredient
Adpalen Gel 0.1%Various~₹100-140Generic, available at larger chemists

Adapalene 0.3% - Better for Existing Pitted Scars (Prescription)

BrandManufacturerPriceNotes
Adaferin 0.3% GelGalderma India~₹350-450 (15g)Prescription required; most recommended by Indian dermatologists for atrophic scars specifically
Deriva 0.3% GelMicro Labs~₹280-350Prescription, good alternative

Combination Products (Adapalene + Benzoyl Peroxide) - Best for Scars + Active Acne

BrandCombinationPriceNotes
Epiduo GelAdapalene 0.1% + BPO 2.5%~₹499-561Galderma; specifically recommended in PRACT-India guidelines for atrophic scars; available on Clinikally, Nykaa
Deriva CMS GelAdapalene + Clindamycin~₹200-250For inflammatory acne + scar prevention combo

Which One Should She Use?

If Starting Out (No Dermatologist Yet):

Adaferin 0.1% Gel (~₹150-180 at any chemist, no prescription needed)
  • Safest entry point
  • Apply a pea-sized amount at night to the entire face (not just spots)
  • Start 2 nights/week, build to nightly over 4-6 weeks
  • Expect a "purge" in weeks 2-4 - this is normal

If Seeing a Dermatologist:

Ask specifically for Adaferin 0.3% Gel or Epiduo Gel - both are cited by the Indian dermatology consensus for atrophic scar improvement. The 0.3% dose gives meaningfully better collagen remodeling than 0.1% for existing pitted scars.

Important Honest Caveat

From real user experience and the clinical data - adapalene alone will not fully resolve deep pitted scars. What it does:
  • ✅ Prevents NEW scars from forming
  • ✅ Gradually improves very shallow atrophic scars and skin texture over 6-12 months
  • ✅ Reduces boxcar scar count modestly (clinical study showed reduction from ~7 to ~4 over 24 weeks)
  • ❌ Will NOT fill deep ice pick scars
  • ❌ Results are slow - require 6+ months consistent use
For her, the ideal path is: Adaferin 0.1% now (home routine) + dermatologist consult for 0.3% or Epiduo + eventual TCA CROSS or RF microneedling for the deeper pits. Adapalene is the foundation, not the complete treatment.

How to Use It Correctly

  1. Cleanse and fully dry skin (wait 10-15 min after washing - applying to damp skin increases irritation)
  2. Apply a pea-sized amount to entire face, not just scars
  3. Use at night only - photodegradation is minimal but nighttime application is standard
  4. Always follow with moisturizer - Minimalist Ceramide or Plum night crème work well
  5. SPF 50 every morning without fail - adapalene makes skin more sun-sensitive during the adjustment phase
  6. Do not use on the same night as AHA or BHA for the first 2 months

Create a complete skincare routine PDF using Indian brands & adapalene for her specific skin type

Running Command

ls -la /tmp/workspace/skincare/

Writing File

~/skincare/routine_pdf.py

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

OUTPUT = "/tmp/workspace/skincare/indian_skincare_routine.pdf"

# ── COLOURS ────────────────────────────────────────────────────────────────
ROSE       = colors.HexColor("#AD1457")
ROSE_LIGHT = colors.HexColor("#FCE4EC")
ROSE_MID   = colors.HexColor("#E91E63")
PEACH      = colors.HexColor("#FF7043")
PEACH_LT   = colors.HexColor("#FFF3E0")
TEAL       = colors.HexColor("#00796B")
TEAL_LT    = colors.HexColor("#E0F2F1")
INDIGO     = colors.HexColor("#3949AB")
INDIGO_LT  = colors.HexColor("#E8EAF6")
GOLD       = colors.HexColor("#F9A825")
GOLD_LT    = colors.HexColor("#FFFDE7")
PURPLE     = colors.HexColor("#6A1B9A")
PURPLE_LT  = colors.HexColor("#F3E5F5")
GREEN      = colors.HexColor("#2E7D32")
GREEN_LT   = colors.HexColor("#E8F5E9")
RED_LT     = colors.HexColor("#FFEBEE")
GREY       = colors.HexColor("#F5F5F5")
GREY_MID   = colors.HexColor("#BDBDBD")
DARK       = colors.HexColor("#212121")
DARK_GREY  = colors.HexColor("#424242")
MED_GREY   = colors.HexColor("#757575")
WHITE      = colors.white

# ── STYLES ─────────────────────────────────────────────────────────────────
def S(name, **kw):
    base = getSampleStyleSheet()["Normal"]
    return ParagraphStyle(name, parent=base, **kw)

H1  = S("H1",  fontSize=20, textColor=ROSE,    fontName="Helvetica-Bold",
         alignment=TA_CENTER, leading=24, spaceAfter=2)
H2  = S("H2",  fontSize=13, textColor=WHITE,   fontName="Helvetica-Bold",
         alignment=TA_CENTER, leading=16)
H3  = S("H3",  fontSize=10, textColor=DARK,    fontName="Helvetica-Bold", leading=13)
H3W = S("H3W", fontSize=10, textColor=WHITE,   fontName="Helvetica-Bold",
         alignment=TA_CENTER, leading=13)
SUB = S("SUB", fontSize=9,  textColor=DARK_GREY,fontName="Helvetica",     leading=12)
SML = S("SML", fontSize=8,  textColor=DARK_GREY,fontName="Helvetica",     leading=10)
SML_I=S("SMLI",fontSize=8,  textColor=TEAL,    fontName="Helvetica-Oblique",leading=10)
SML_W=S("SMLW",fontSize=8,  textColor=WHITE,   fontName="Helvetica",
         alignment=TA_CENTER, leading=10)
CTR = S("CTR", fontSize=9,  textColor=DARK_GREY,fontName="Helvetica",
         alignment=TA_CENTER, leading=11)
CTR_B=S("CTRB",fontSize=9,  textColor=DARK,    fontName="Helvetica-Bold",
         alignment=TA_CENTER, leading=11)
FOOT= S("FOOT",fontSize=7,  textColor=GREY_MID, fontName="Helvetica-Oblique",
         alignment=TA_CENTER)
PRICE=S("PRC", fontSize=8.5,textColor=GREEN,   fontName="Helvetica-Bold",
         alignment=TA_CENTER, leading=11)
WARN= S("WARN",fontSize=8,  textColor=colors.HexColor("#B71C1C"),
         fontName="Helvetica-Bold", leading=11)
NOTE= S("NOTE",fontSize=8,  textColor=DARK_GREY,fontName="Helvetica",     leading=11)

# ── HELPERS ────────────────────────────────────────────────────────────────
W = 17.4 * cm   # usable width

def sec_header(text, bg):
    t = Table([[Paragraph(text, H2)]], colWidths=[W])
    t.setStyle(TableStyle([
        ("BACKGROUND",(0,0),(-1,-1), bg),
        ("TOPPADDING",(0,0),(-1,-1), 7),
        ("BOTTOMPADDING",(0,0),(-1,-1), 7),
        ("LEFTPADDING",(0,0),(-1,-1), 10),
    ]))
    return t

def divider(color=GREY_MID, thickness=0.5):
    return HRFlowable(width="100%", thickness=thickness, color=color)

def pill(text, bg, fg=WHITE):
    """Small inline coloured tag."""
    p = Table([[Paragraph(text, S("pill", fontSize=7, textColor=fg,
               fontName="Helvetica-Bold", alignment=TA_CENTER, leading=9))]],
              colWidths=[2.2*cm])
    p.setStyle(TableStyle([
        ("BACKGROUND",(0,0),(-1,-1), bg),
        ("TOPPADDING",(0,0),(-1,-1), 2),
        ("BOTTOMPADDING",(0,0),(-1,-1), 2),
        ("LEFTPADDING",(0,0),(-1,-1), 4),
        ("RIGHTPADDING",(0,0),(-1,-1), 4),
    ]))
    return p

def step_row(num, emoji, title, brand_product, price, tip="", bg=WHITE, alt_bg=GREY):
    """One step row: number | emoji | title+product | price."""
    num_p  = Paragraph(str(num), S("N", fontSize=14, textColor=WHITE,
                       fontName="Helvetica-Bold", alignment=TA_CENTER, leading=16))
    em_p   = Paragraph(emoji, S("E", fontSize=14, alignment=TA_CENTER, leading=16))
    body   = [Paragraph(f"<b>{title}</b>", H3)]
    for line in brand_product:
        body.append(Paragraph(line, SML))
    if tip:
        body.append(Paragraph(f"💡 {tip}", SML_I))
    pr_p   = Paragraph(price, PRICE)

    row = [[num_p, em_p, body, pr_p]]
    cw  = [0.65*cm, 0.75*cm, 13.5*cm, 2.5*cm]
    t   = Table(row, colWidths=cw)
    t.setStyle(TableStyle([
        ("BACKGROUND",(0,0),(-1,-1), bg),
        ("VALIGN",(0,0),(-1,-1), "TOP"),
        ("TOPPADDING",(0,0),(-1,-1), 6),
        ("BOTTOMPADDING",(0,0),(-1,-1), 6),
        ("LEFTPADDING",(0,0),(0,0), 5),
        ("LEFTPADDING",(2,0),(2,0), 6),
        ("RIGHTPADDING",(3,0),(3,0), 6),
        ("LINEBELOW",(0,0),(-1,-1), 0.4, GREY_MID),
    ]))
    return t

def product_card(emoji, name, brand, price, why, bg=GREY):
    body = [
        Paragraph(f"{emoji}  <b>{name}</b>", H3),
        Paragraph(f"Brand: {brand}", SML),
        Paragraph(f"Why: {why}", SML),
    ]
    pr = Paragraph(price, PRICE)
    row = [[body, pr]]
    t = Table(row, colWidths=[13.9*cm, 3.5*cm])
    t.setStyle(TableStyle([
        ("BACKGROUND",(0,0),(-1,-1), bg),
        ("VALIGN",(0,0),(-1,-1),"TOP"),
        ("TOPPADDING",(0,0),(-1,-1), 5),
        ("BOTTOMPADDING",(0,0),(-1,-1), 5),
        ("LEFTPADDING",(0,0),(0,0), 8),
        ("RIGHTPADDING",(1,0),(1,0), 8),
        ("LINEBELOW",(0,0),(-1,-1), 0.4, GREY_MID),
    ]))
    return t

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

# ── PAGE 1: COVER / PROFILE ───────────────────────────────────────────────
cover_top = Table([[
    Paragraph("🌸  Personalised Skincare Routine", H1),
    Paragraph("Complete Indian Brand Guide with Adapalene Protocol", S("sub2",
        fontSize=10, textColor=DARK_GREY, fontName="Helvetica",
        alignment=TA_CENTER, leading=13)),
]], colWidths=[W])
cover_top.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,-1), ROSE_LIGHT),
    ("TOPPADDING",(0,0),(-1,-1), 14),
    ("BOTTOMPADDING",(0,0),(-1,-1), 14),
    ("LEFTPADDING",(0,0),(-1,-1), 10),
]))
story.append(cover_top)
story.append(Spacer(1, 0.35*cm))

# Skin Profile Box
profile_rows = [
    [Paragraph("👤  Your Skin Profile", S("ph", fontSize=11, textColor=WHITE,
                fontName="Helvetica-Bold", leading=14)),
     Paragraph("", SML)],
    [Paragraph("Skin Type", S("pk", fontSize=9, textColor=WHITE,
                fontName="Helvetica-Bold")),
     Paragraph("Oily, Acne-Prone, 21 years", SML_W)],
    [Paragraph("Primary Concern", S("pk", fontSize=9, textColor=WHITE,
                fontName="Helvetica-Bold")),
     Paragraph("Pitted Atrophic Acne Scars (Ice Pick / Boxcar / Rolling)", SML_W)],
    [Paragraph("Secondary Concerns", S("pk", fontSize=9, textColor=WHITE,
                fontName="Helvetica-Bold")),
     Paragraph("Blackheads on Nose · Open / Enlarged Pores · Excess Oil", SML_W)],
    [Paragraph("Routine Level", S("pk", fontSize=9, textColor=WHITE,
                fontName="Helvetica-Bold")),
     Paragraph("Beginner to Intermediate", SML_W)],
]
pt = Table(profile_rows, colWidths=[4.5*cm, 12.9*cm])
pt.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,0), ROSE),
    ("BACKGROUND",(0,1),(-1,-1), colors.HexColor("#880E4F")),
    ("TEXTCOLOR",(0,0),(-1,-1), WHITE),
    ("TOPPADDING",(0,0),(-1,-1), 5),
    ("BOTTOMPADDING",(0,0),(-1,-1), 5),
    ("LEFTPADDING",(0,0),(0,-1), 8),
    ("LEFTPADDING",(1,0),(1,-1), 6),
    ("SPAN",(0,0),(1,0)),
    ("LINEBELOW",(0,0),(-1,-2), 0.4, colors.HexColor("#C2185B")),
]))
story.append(pt)
story.append(Spacer(1, 0.4*cm))

# Key Principle boxes
kp_data = [
    ["⭐ #1 Rule", "SPF 50 EVERY morning — UV darkens pitted scars and makes them harder to treat."],
    ["🔄 Rotation", "Never use AHA + BHA + Adapalene on the same night. Rotate them across the week."],
    ["⏳ Patience", "Adapalene takes 12-24 weeks to show scar improvement. Consistency > intensity."],
    ["💊 Best Upgrade", "Ask a dermatologist for Adaferin 0.3% — clinically proven for atrophic scars."],
]
kp_rows = [[Paragraph(a, S("kpa", fontSize=8.5, textColor=WHITE,
                            fontName="Helvetica-Bold", leading=11)),
            Paragraph(b, S("kpb", fontSize=8.5, textColor=WHITE,
                            fontName="Helvetica", leading=11))]
           for a,b in kp_data]
kpt = Table(kp_rows, colWidths=[3.2*cm, 14.2*cm])
kpt.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(0,-1), INDIGO),
    ("BACKGROUND",(1,0),(1,-1), colors.HexColor("#283593")),
    ("ROWBACKGROUNDS",(0,0),(-1,-1),
     [colors.HexColor("#303F9F"), colors.HexColor("#283593")]*4),
    ("TOPPADDING",(0,0),(-1,-1), 5),
    ("BOTTOMPADDING",(0,0),(-1,-1), 5),
    ("LEFTPADDING",(0,0),(0,-1), 8),
    ("LEFTPADDING",(1,0),(1,-1), 6),
    ("LINEBELOW",(0,0),(-1,-2), 0.3, colors.HexColor("#1A237E")),
]))
story.append(kpt)
story.append(Spacer(1, 0.5*cm))

# ── AM ROUTINE ────────────────────────────────────────────────────────────
story.append(sec_header("☀️   MORNING ROUTINE  (5-6 minutes)", ROSE_MID))
story.append(Spacer(1, 0.12*cm))

am_steps = [
    (1, "🧴", "Gentle Gel Cleanser",
     ["• Minimalist Salicylic Acid + LHA 2% Cleanser  (best pick — BHA while cleansing)",
      "• Alt: Plum Green Tea Pore Cleansing Face Wash",
      "• Alt: Deconstruct Pore Minimizing Face Wash"],
     "₹249-299",
     "Use lukewarm water. Pat dry — never rub. No harsh scrubs.", ROSE_LIGHT),

    (2, "✨", "Niacinamide Serum  ← Oil Control + Pore Minimizer",
     ["• Pilgrim 10% Niacinamide + Zinc PCA + BHA + PHA  (best for blackheads + pores)",
      "• Alt: Minimalist 10% Niacinamide + Zinc 1%",
      "• Apply 2-3 drops on dry face. Let absorb 60 seconds before next step."],
     "₹545-599",
     "Pilgrim is preferred here — it contains salicylic acid + gluconolactone for extra blackhead benefit.", PEACH_LT),

    (3, "💧", "Oil-Free Gel Moisturizer",
     ["• Minimalist Vitamin B5 10% Lightweight Moisturizer  (best for oily skin)",
      "• Alt: Deconstruct Oil-Free Moisturizer  (₹299)",
      "• Alt: Plum SebaClear Mattifying Gel Crème  (controls shine up to 2 hrs)"],
     "₹299-349",
     "NEVER skip this. Oily skin that is dehydrated produces more oil to compensate.", ROSE_LIGHT),

    (4, "🌞", "Sunscreen SPF 50 PA++++  ← Most Important Step",
     ["• The Derma Co 1% Hyaluronic Aqua Gel SPF 50 PA++++  (CTRI-certified, no white cast)",
      "• Alt: Minimalist Light Fluid SPF 50 PA++++  (matte finish, great for oily skin)",
      "• Alt: Deconstruct Gel Sunscreen SPF 50 PA++++  (in-vivo tested, non-greasy)",
      "• Apply as last step. Reapply every 2-3 hrs if outdoors."],
     "₹399-499",
     "UV exposure permanently darkens pitted scar borders. SPF is non-negotiable.", PEACH_LT),
]

for num, emoji, title, brand_product, price, tip, bg in am_steps:
    story.append(step_row(num, emoji, title, brand_product, price, tip, bg))

story.append(Spacer(1, 0.45*cm))

# ── PM ROUTINE ────────────────────────────────────────────────────────────
story.append(sec_header("🌙   EVENING ROUTINE  (8-10 minutes)", TEAL))
story.append(Spacer(1, 0.12*cm))

pm_steps = [
    (1, "🧼", "Double Cleanse  — Remove Sunscreen First",
     ["Step A: Minimalist Marula Oil 5% Cleansing Oil  OR  Simple Micellar Water (₹299)",
      "Step B: Same gel cleanser used in the morning",
      "Skipping double cleanse = SPF residue left on skin = clogged pores overnight."],
     "₹299-399",
     "Massage cleansing oil 60 seconds, then rinse. Follow immediately with gel cleanser.", TEAL_LT),

    (2, "🌿", "Exfoliant  — 3×/week  (rotate BHA and AHA, see schedule below)",
     ["BHA nights: Minimalist Salicylic Acid 2% Face Serum  — unclogs blackheads (oil-soluble)",
      "AHA nights: Minimalist Glycolic Acid 8% Exfoliating Liquid  — resurfaces scar edges",
      "⚠ Never use BHA and AHA on the same night.",
      "⚠ Never use exfoliant on same night as Adapalene."],
     "₹599 each",
     "BHA targets the blackheads on your nose; AHA smooths the texture around pitted scars.", INDIGO_LT),

    (3, "🎯", "Adapalene 0.1% Gel  — Core Scar Treatment  (3-4×/week)",
     ["• Adaferin Gel 0.1%  by Galderma India  (FIRST CHOICE — original, most researched)",
      "• Alt: Deriva Gel 0.1%  by Micro Labs  (same active, lower price)",
      "• Alt: Aclene Gel 0.1%  by Sun Pharma",
      "• Upgrade: Adaferin 0.3% (prescription) — Indian dermatologists recommend this",
      "  specifically for atrophic/pitted scars per PRACT-India 2025 consensus.",
      "Apply pea-sized amount to entire face (not just scars). On dry skin only."],
     "₹150-200",
     "Do NOT use on same nights as BHA or AHA exfoliants. Adapalene nights = moisturiser only after.", GOLD_LT),

    (4, "🛡️", "Night Moisturizer  — Especially important on Adapalene nights",
     ["• Minimalist Ceramides 0.3% + Bisabolol Moisturizer  (barrier repair best pick)",
      "• Alt: Plum 2% Niacinamide & Rice Water Night Crème  (brightening + hydrating)",
      "• Alt: CeraVe PM Moisturizing Lotion  (if budget allows international brands)"],
     "₹395-599",
     "Apply generously on adapalene nights to reduce peeling and dryness during the adjustment phase.", TEAL_LT),
]

for num, emoji, title, brand_product, price, tip, bg in pm_steps:
    story.append(step_row(num, emoji, title, brand_product, price, tip, bg))

story.append(Spacer(1, 0.45*cm))

# ── WEEKLY SCHEDULE ───────────────────────────────────────────────────────
story.append(sec_header("📅   WEEKLY TREATMENT SCHEDULE", PURPLE))
story.append(Spacer(1, 0.2*cm))

DAYS = ["MON","TUE","WED","THU","FRI","SAT","SUN"]
EVENING = [
    "BHA\nSalicylic\nAcid 2%",
    "Adapalene\n0.1% Gel",
    "AHA\nGlycolic\nAcid 8%",
    "Adapalene\n0.1% Gel",
    "BHA\nSalicylic\nAcid 2%",
    "REST\nClay Mask\n(optional)",
    "Adapalene\n0.1% Gel",
]
EV_COLORS = [INDIGO_LT, GOLD_LT, INDIGO_LT, GOLD_LT, INDIGO_LT, PEACH_LT, GOLD_LT]
EV_TEXT   = [INDIGO, PURPLE, INDIGO, PURPLE, INDIGO, PEACH, PURPLE]

cw7 = [W/7]*7
hdr_row  = [Paragraph(d, H3W) for d in DAYS]
ev_row   = [Paragraph(t, S("ec", fontSize=7.5, textColor=EV_TEXT[i],
             fontName="Helvetica-Bold", alignment=TA_CENTER, leading=10))
            for i,t in enumerate(EVENING)]
am_row   = [Paragraph("Cleanser\nNiacinamide\nMoisturiser\nSPF 50",
             S("am", fontSize=7, textColor=ROSE, fontName="Helvetica",
               alignment=TA_CENTER, leading=9)) for _ in DAYS]

sched = Table([hdr_row, am_row, ev_row],
              colWidths=cw7, rowHeights=[0.6*cm, 1.35*cm, 1.35*cm])
style_cmds = [
    ("ALIGN",(0,0),(-1,-1),"CENTER"),
    ("VALIGN",(0,0),(-1,-1),"MIDDLE"),
    ("TOPPADDING",(0,0),(-1,-1), 3),
    ("BOTTOMPADDING",(0,0),(-1,-1), 3),
    ("GRID",(0,0),(-1,-1), 0.5, GREY_MID),
    ("BACKGROUND",(0,0),(6,0), PURPLE),
    ("BACKGROUND",(0,1),(6,1), ROSE_LIGHT),
]
for i, bg in enumerate(EV_COLORS):
    style_cmds.append(("BACKGROUND",(i,2),(i,2), bg))
sched.setStyle(TableStyle(style_cmds))

legend = Table([[
    Paragraph("🟦 BHA Night", SML),
    Paragraph("🟨 Adapalene Night", SML),
    Paragraph("⬜ AHA Night", SML),
    Paragraph("🍑 Rest Night", SML),
]], colWidths=[W/4]*4)
legend.setStyle(TableStyle([
    ("TOPPADDING",(0,0),(-1,-1), 4),
    ("ALIGN",(0,0),(-1,-1),"CENTER"),
]))
story.append(sched)
story.append(legend)
story.append(Spacer(1, 0.45*cm))

# ── PAGE BREAK ────────────────────────────────────────────────────────────
story.append(PageBreak())

# ── PAGE 2: PRODUCT GUIDE + ADAPALENE PROTOCOL ───────────────────────────

story.append(sec_header("🛒   COMPLETE PRODUCT GUIDE  ( Prioritised by Importance )", ROSE_MID))
story.append(Spacer(1, 0.15*cm))

# Header row
hdr = Table([[
    Paragraph("Priority", CTR_B),
    Paragraph("Product & Brand", CTR_B),
    Paragraph("Key Ingredients", CTR_B),
    Paragraph("Concern Targeted", CTR_B),
    Paragraph("Price", CTR_B),
]], colWidths=[1.3*cm, 6.5*cm, 4.2*cm, 3.4*cm, 2.0*cm])
hdr.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,-1), ROSE),
    ("TEXTCOLOR",(0,0),(-1,-1), WHITE),
    ("TOPPADDING",(0,0),(-1,-1), 5),
    ("BOTTOMPADDING",(0,0),(-1,-1), 5),
    ("LEFTPADDING",(0,0),(-1,-1), 4),
    ("FONTNAME",(0,0),(-1,-1), "Helvetica-Bold"),
    ("FONTSIZE",(0,0),(-1,-1), 8),
]))
story.append(hdr)

products = [
    ("★★★", "Adaferin Gel 0.1%  (Galderma India)\n→ Upgrade to 0.3% via dermatologist",
     "Adapalene 0.1%\n(Retinoid)", "Pitted Scars\n(core treatment)", "₹150-180", GOLD_LT),
    ("★★★", "The Derma Co SPF 50 PA++++ Aqua Gel\nMandatory AM last step",
     "Hyaluronic Acid\nBroad-spectrum UV", "Scar darkening\nprevention", "₹449-499", ROSE_LIGHT),
    ("★★★", "Pilgrim 10% Niacinamide + BHA + PHA",
     "Niacinamide 10%\nSalicylic Acid\nZinc PCA", "Blackheads\nOpen Pores\nOil Control", "₹545-599", TEAL_LT),
    ("★★☆", "Minimalist Salicylic Acid 2% Face Serum",
     "BHA 2%", "Blackheads\nPore cleansing", "₹599", INDIGO_LT),
    ("★★☆", "Minimalist Salicylic Acid + LHA 2% Cleanser",
     "BHA + LHA", "Oily skin\nBlackheads (cleanser)", "₹249", INDIGO_LT),
    ("★★☆", "Minimalist Glycolic Acid 8% Exfoliating Liquid",
     "AHA (Glycolic 8%)", "Scar texture\nSmoothing", "₹599", PURPLE_LT),
    ("★★☆", "Minimalist Vitamin B5 10% Moisturizer",
     "Vitamin B5\nOil-free", "Oily skin\nBarrier support", "₹349", PEACH_LT),
    ("★★☆", "Minimalist Ceramides 0.3% Moisturizer",
     "Ceramides\nBisabolol", "Barrier repair on\nadapalene nights", "₹599", TEAL_LT),
    ("★☆☆", "Minimalist Glycolic Acid 8% OR Lactic Acid 10%\n(alternate as AHA)",
     "AHA", "Surface texture\nScar borders", "₹599", PURPLE_LT),
    ("★☆☆", "mCaffeine Coffee Clay Mask  (1-2×/week)",
     "Kaolin Clay\nCoffee", "Oil absorption\nBlackheads", "₹349", PEACH_LT),
    ("★☆☆", "Minimalist Marula Oil 5% Cleansing Oil\n(PM Step 1 only)",
     "Marula Oil", "Remove SPF\nbefore cleanser", "₹399", GOLD_LT),
]

for pri, name, ingr, concern, price, bg in products:
    r = Table([[
        Paragraph(pri, S("star", fontSize=8, textColor=GOLD,
                   fontName="Helvetica-Bold", alignment=TA_CENTER, leading=10)),
        Paragraph(name, SML),
        Paragraph(ingr, SML),
        Paragraph(concern, SML),
        Paragraph(price, PRICE),
    ]], colWidths=[1.3*cm, 6.5*cm, 4.2*cm, 3.4*cm, 2.0*cm])
    r.setStyle(TableStyle([
        ("BACKGROUND",(0,0),(-1,-1), bg),
        ("TOPPADDING",(0,0),(-1,-1), 4),
        ("BOTTOMPADDING",(0,0),(-1,-1), 4),
        ("LEFTPADDING",(0,0),(-1,-1), 4),
        ("VALIGN",(0,0),(-1,-1), "TOP"),
        ("LINEBELOW",(0,0),(-1,-1), 0.3, GREY_MID),
    ]))
    story.append(r)

story.append(Spacer(1, 0.45*cm))

# ── ADAPALENE PROTOCOL ────────────────────────────────────────────────────
story.append(sec_header("💊   ADAPALENE PROTOCOL  — Step-by-Step Guide for Pitted Scars", TEAL))
story.append(Spacer(1, 0.2*cm))

adapt_intro = [
    ["Phase", "Timeline", "Frequency", "What to Expect"],
    ["Phase 1\nIntroduction",  "Weeks 1-4",  "2 nights/week",
     "Mild dryness, flaking, possible purge (new pimples). Normal.\nDo NOT stop."],
    ["Phase 2\nBuilding",      "Weeks 5-10", "3-4 nights/week",
     "Skin adjusts. Purge settles. Texture begins improving."],
    ["Phase 3\nMaintenance",  "Week 11+",   "Every night (if tolerated)",
     "Scar depth visibly reduces over months. Boxcar + rolling scars improve most."],
    ["Phase 4\nUpgrade",      "Month 3-4",  "Prescription 0.3%",
     "See dermatologist. PRACT-India 2025 recommends 0.3% specifically for atrophic scars.\nEpiduo (Adapalene + BPO) is an option if acne recurs."],
]
at = Table(adapt_intro, colWidths=[2.8*cm, 2.2*cm, 2.6*cm, 9.8*cm])
at.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,0), TEAL),
    ("TEXTCOLOR",(0,0),(-1,0), WHITE),
    ("FONTNAME",(0,0),(-1,0), "Helvetica-Bold"),
    ("FONTSIZE",(0,0),(-1,-1), 8),
    ("TOPPADDING",(0,0),(-1,-1), 5),
    ("BOTTOMPADDING",(0,0),(-1,-1), 5),
    ("LEFTPADDING",(0,0),(-1,-1), 5),
    ("VALIGN",(0,0),(-1,-1), "TOP"),
    ("ROWBACKGROUNDS",(0,1),(-1,-1), [TEAL_LT, WHITE]),
    ("GRID",(0,0),(-1,-1), 0.4, GREY_MID),
]))
story.append(at)
story.append(Spacer(1, 0.3*cm))

# Key application rules
rules_title = Table([[Paragraph("📋  Adapalene Application Rules", S("rt",
    fontSize=10, textColor=WHITE, fontName="Helvetica-Bold", leading=13))]],
    colWidths=[W])
rules_title.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,-1), colors.HexColor("#00695C")),
    ("TOPPADDING",(0,0),(-1,-1), 5),
    ("BOTTOMPADDING",(0,0),(-1,-1), 5),
    ("LEFTPADDING",(0,0),(-1,-1), 8),
]))
story.append(rules_title)

rules = [
    ("✅", "Apply to FULLY DRY skin — wait 10-15 min after cleansing. Damp skin = more irritation."),
    ("✅", "Use a PEA-SIZED amount for the ENTIRE face. More is not better."),
    ("✅", "Apply at NIGHT only. Always follow with a moisturizer."),
    ("✅", "Wear SPF 50 every single morning — adapalene increases UV sensitivity."),
    ("🚫", "Do NOT use on the same night as AHA (glycolic) or BHA (salicylic acid)."),
    ("🚫", "Do NOT use around eyes, lips, or nostrils — these areas are too sensitive."),
    ("🚫", "Do NOT stop during the purge phase (weeks 2-4) — this is the retinoid clearing pores."),
    ("⚠️", "If severe redness/peeling occurs, drop to 1×/week and build back up slowly."),
]
for icon, text in rules:
    bg = GREEN_LT if icon == "✅" else (RED_LT if icon == "🚫" else GOLD_LT)
    r = Table([[
        Paragraph(icon, S("ri", fontSize=11, alignment=TA_CENTER, leading=14)),
        Paragraph(text, NOTE),
    ]], colWidths=[0.8*cm, 16.6*cm])
    r.setStyle(TableStyle([
        ("BACKGROUND",(0,0),(-1,-1), bg),
        ("TOPPADDING",(0,0),(-1,-1), 4),
        ("BOTTOMPADDING",(0,0),(-1,-1), 4),
        ("VALIGN",(0,0),(-1,-1), "MIDDLE"),
        ("LINEBELOW",(0,0),(-1,-1), 0.3, GREY_MID),
    ]))
    story.append(r)

story.append(Spacer(1, 0.45*cm))

# ── IN-CLINIC TREATMENTS ──────────────────────────────────────────────────
story.append(sec_header("🏥   WHEN HOME CARE IS NOT ENOUGH  — In-Clinic Treatments", INDIGO))
story.append(Spacer(1, 0.15*cm))

clinic_note = Table([[Paragraph(
    "⚠  Pitted scars are caused by collagen loss. Topicals improve texture slowly "
    "but cannot fill physical depressions. After 3-6 months of home routine, "
    "consider the following with a qualified dermatologist.",
    S("cn", fontSize=8.5, textColor=DARK_GREY, fontName="Helvetica-Oblique",
      leading=11))]],
    colWidths=[W])
clinic_note.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,-1), INDIGO_LT),
    ("TOPPADDING",(0,0),(-1,-1), 6),
    ("BOTTOMPADDING",(0,0),(-1,-1), 6),
    ("LEFTPADDING",(0,0),(-1,-1), 8),
]))
story.append(clinic_note)
story.append(Spacer(1, 0.1*cm))

clinic_rows = [
    ["Treatment", "Best For", "Sessions", "Improvement"],
    ["TCA CROSS\n(Trichloroacetic Acid)", "Ice Pick scars\n(deep narrow pits)", "3-6 sessions\n6-8 wks apart", "50-70% improvement"],
    ["Subcision", "Rolling scars\n(wave-like texture)", "2-4 sessions", "50-60% improvement"],
    ["RF Microneedling", "Boxcar + Rolling\n(broad depressions)", "4-6 sessions", "40-60% improvement"],
    ["Fractional CO2 Laser", "Boxcar scars\n(wide, sharp edges)", "2-3 sessions", "60-70% improvement\n⚠ Caution: darker skin"],
    ["Punch Excision", "Single deep ice\npick scars", "1 session per scar", "Near complete for\nindividual scars"],
]
ct = Table(clinic_rows, colWidths=[3.8*cm, 4.0*cm, 3.8*cm, 5.8*cm])
ct.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,0), INDIGO),
    ("TEXTCOLOR",(0,0),(-1,0), WHITE),
    ("FONTNAME",(0,0),(-1,0), "Helvetica-Bold"),
    ("FONTSIZE",(0,0),(-1,-1), 8),
    ("TOPPADDING",(0,0),(-1,-1), 4),
    ("BOTTOMPADDING",(0,0),(-1,-1), 4),
    ("LEFTPADDING",(0,0),(-1,-1), 5),
    ("VALIGN",(0,0),(-1,-1), "TOP"),
    ("ROWBACKGROUNDS",(0,1),(-1,-1), [INDIGO_LT, WHITE]),
    ("GRID",(0,0),(-1,-1), 0.4, GREY_MID),
]))
story.append(ct)
story.append(Spacer(1, 0.4*cm))

# ── BUDGET BREAKDOWN ─────────────────────────────────────────────────────
story.append(sec_header("💰   STARTER BUDGET PLAN  — What to Buy First", GOLD))
story.append(Spacer(1, 0.15*cm))

budget_rows = [
    ["Priority", "Product", "Why Buy First", "Price"],
    ["1st", "Adaferin Gel 0.1%  (Galderma)", "Core pitted scar treatment — adapalene", "~₹175"],
    ["2nd", "The Derma Co SPF 50 Aqua Gel", "Most impactful habit — protects scars", "~₹449"],
    ["3rd", "Pilgrim 10% Niacinamide Serum", "Oil + blackheads + pores in one product", "~₹575"],
    ["4th", "Minimalist Salicylic Acid 2% Serum", "Dedicated BHA for deep blackhead clearing", "~₹599"],
    ["5th", "Minimalist Glycolic Acid 8%", "AHA for scar texture + skin smoothing", "~₹599"],
    ["6th", "Minimalist Ceramide Moisturizer", "Barrier repair on adapalene nights", "~₹599"],
    ["", "TOTAL (Priority 1-4)", "Start here — full active routine", "~₹1,800"],
    ["", "TOTAL (Priority 1-6)", "Complete routine", "~₹2,996"],
]
bt = Table(budget_rows, colWidths=[1.5*cm, 6.2*cm, 6.7*cm, 3.0*cm])
bstyle = [
    ("BACKGROUND",(0,0),(-1,0), GOLD),
    ("TEXTCOLOR",(0,0),(-1,0), WHITE),
    ("FONTNAME",(0,0),(-1,0), "Helvetica-Bold"),
    ("FONTSIZE",(0,0),(-1,-1), 8),
    ("TOPPADDING",(0,0),(-1,-1), 4),
    ("BOTTOMPADDING",(0,0),(-1,-1), 4),
    ("LEFTPADDING",(0,0),(-1,-1), 5),
    ("VALIGN",(0,0),(-1,-1), "TOP"),
    ("GRID",(0,0),(-1,-1), 0.4, GREY_MID),
    ("ROWBACKGROUNDS",(0,1),(-1,-6), [GOLD_LT, WHITE]),
    ("BACKGROUND",(0,-2),(-1,-1), colors.HexColor("#FFF9C4")),
    ("FONTNAME",(0,-2),(-1,-1), "Helvetica-Bold"),
    ("TEXTCOLOR",(2,-2),(3,-1), GREEN),
]
bt.setStyle(TableStyle(bstyle))
story.append(bt)
story.append(Spacer(1, 0.35*cm))

# ── FINAL DO / DON'T ─────────────────────────────────────────────────────
dos_donts_title = sec_header("✅  DO'S & 🚫  DON'TS", colors.HexColor("#37474F"))
story.append(dos_donts_title)
story.append(Spacer(1, 0.15*cm))

dd_data = [
    ("✅", "Introduce ONE new product every 2-3 weeks to identify reactions."),
    ("✅", "Patch test all new actives on jawline for 3 days before full face use."),
    ("✅", "Apply adapalene to dry skin — wait 10-15 min after washing."),
    ("✅", "Continue SPF daily even in monsoon and indoors near windows."),
    ("✅", "Drink 8+ glasses of water and get 7-8 hrs sleep — skin repairs at night."),
    ("✅", "See a dermatologist after 3 months for prescription 0.3% adapalene."),
    ("🚫", "Never use AHA + BHA + Adapalene on the same night."),
    ("🚫", "Never use pore strips — they pull the plug but don't fix the cause."),
    ("🚫", "Never skip moisturiser because skin is oily — it makes oiliness worse."),
    ("🚫", "Never pop or pick at skin — each picking event creates a new pitted scar."),
    ("🚫", "Never use Plum Niacinamide serum — contains comedogenic sesame derivative."),
]
for icon, text in dd_data:
    bg = GREEN_LT if icon == "✅" else RED_LT
    r = Table([[
        Paragraph(icon, S("ddi", fontSize=11, alignment=TA_CENTER, leading=14)),
        Paragraph(text, NOTE),
    ]], colWidths=[0.7*cm, 16.7*cm])
    r.setStyle(TableStyle([
        ("BACKGROUND",(0,0),(-1,-1), bg),
        ("TOPPADDING",(0,0),(-1,-1), 4),
        ("BOTTOMPADDING",(0,0),(-1,-1), 4),
        ("VALIGN",(0,0),(-1,-1), "MIDDLE"),
        ("LINEBELOW",(0,0),(-1,-1), 0.3, GREY_MID),
    ]))
    story.append(r)

story.append(Spacer(1, 0.35*cm))

# ── RESULTS TIMELINE ─────────────────────────────────────────────────────
story.append(sec_header("⏳   REALISTIC RESULTS TIMELINE", colors.HexColor("#4A148C")))
story.append(Spacer(1, 0.15*cm))

tl_rows = [
    ["Timeframe", "What Improves", "Key Driver"],
    ["4-8 weeks",   "Blackheads visibly reduce on nose;\nOiliness reduces",
     "BHA (Salicylic) + Niacinamide"],
    ["8-12 weeks",  "Pore appearance minimises;\nSkin texture smoother",
     "Niacinamide + AHA + Adapalene"],
    ["3-6 months",  "Shallow boxcar/rolling scars softer;\nOverall skin tone improved",
     "Adapalene (collagen building)"],
    ["6-12 months", "Moderate improvement in pitted scar depth",
     "Adapalene 0.3% (dermatologist)"],
    ["After in-clinic\ntreatment",
     "Significant reduction in pitted scar depth (50-70%+)",
     "TCA CROSS / RF Microneedling /\nSubcision"],
]
tlt = Table(tl_rows, colWidths=[3.2*cm, 8.2*cm, 6.0*cm])
tlt.setStyle(TableStyle([
    ("BACKGROUND",(0,0),(-1,0), colors.HexColor("#4A148C")),
    ("TEXTCOLOR",(0,0),(-1,0), WHITE),
    ("FONTNAME",(0,0),(-1,0), "Helvetica-Bold"),
    ("FONTSIZE",(0,0),(-1,-1), 8),
    ("TOPPADDING",(0,0),(-1,-1), 5),
    ("BOTTOMPADDING",(0,0),(-1,-1), 5),
    ("LEFTPADDING",(0,0),(-1,-1), 5),
    ("VALIGN",(0,0),(-1,-1), "TOP"),
    ("ROWBACKGROUNDS",(0,1),(-1,-1), [PURPLE_LT, WHITE]),
    ("GRID",(0,0),(-1,-1), 0.4, GREY_MID),
]))
story.append(tlt)
story.append(Spacer(1, 0.3*cm))

# ── FOOTER ────────────────────────────────────────────────────────────────
story.append(divider())
story.append(Spacer(1, 0.1*cm))
story.append(Paragraph(
    "Prepared with dermatologist-aligned guidance · Based on PRACT-India 2025 Consensus & clinical evidence · "
    "For personalised prescription advice (tretinoin, 0.3% adapalene) please consult a qualified dermatologist",
    FOOT))

# ══════════════════════════════════════════════════════════════════════════
# BUILD
# ══════════════════════════════════════════════════════════════════════════
doc = SimpleDocTemplate(
    OUTPUT, pagesize=A4,
    rightMargin=1.8*cm, leftMargin=1.8*cm,
    topMargin=1.5*cm, bottomMargin=1.5*cm
)
doc.build(story)
print(f"PDF saved: {OUTPUT}")
Running Command

python3 /tmp/workspace/skincare/routine_pdf.py

Running Command

ls -lh /tmp/workspace/skincare/indian_skincare_routine.pdf

Your complete 2-page PDF is ready to download and print:

indian skincare routine

PDF Document · PDF


Here's everything packed into the PDF:

Page 1

  • Skin Profile Box - her exact concerns (pitted scars, blackheads, open pores, oily skin, 21F)
  • Key Principles panel - SPF rule, rotation rule, adapalene patience, upgrade path
  • Full Morning Routine (4 steps with specific Indian brand picks + prices)
  • Full Evening Routine (4 steps - double cleanse, BHA/AHA, Adapalene, moisturiser)
  • 7-day Weekly Schedule table - colour-coded showing exactly which nights to use BHA vs AHA vs Adapalene

Page 2

  • Complete Product Guide table - 11 products ranked by priority (★★★ to ★☆☆), with ingredients, concern targeted, and price
  • Adapalene Protocol - 4-phase table: Introduction (2×/week) → Building → Maintenance → Upgrade to 0.3% via dermatologist, based on PRACT-India 2025 consensus
  • Adapalene Application Rules - colour-coded green/red do's and don'ts
  • In-Clinic Treatments table - TCA CROSS, Subcision, RF Microneedling, Fractional CO2, Punch Excision with expected improvement %
  • Starter Budget Plan - what to buy in order, with ₹1,800 starter total and ₹2,996 complete routine
  • Do's & Don'ts panel - including the Plum warning
  • Results Timeline - week-by-week realistic expectations

Currently, if she can get only one out of the BHAAHA and adapting, which one should she get and how should she use it and also suggest alternative alternative brand as well. Indian brand.

The answer is clear: Adapalene.
Here's the reasoning and full guide:

If She Can Only Buy ONE Active — Get Adapalene

Why Adapalene Wins Over BHA and AHA

AdapaleneBHA (Salicylic)AHA (Glycolic)
Treats pitted scars✅ Yes — rebuilds collagen❌ No❌ Minimal
Clears blackheads✅ Yes — unclogs pores (retinoid)✅ Yes (better)❌ No
Controls oil✅ Yes — reduces sebum long-term✅ Short-term❌ No
Improves skin texture✅ Yes✅ Yes✅ Yes
Prevents new scars✅ Best in class❌ No❌ No
Price₹150-180₹599₹599
The simple logic: BHA and AHA manage symptoms (oiliness, blackheads, texture). Adapalene does ALL of that AND is the only OTC option that actually addresses the pitted scars at the root cause level - collagen rebuilding. It is also the cheapest of the three. If money allows only one purchase, adapalene has the broadest impact for her specific concerns.
The only thing she misses without BHA: faster blackhead clearance in the first 2-3 months. Adapalene will address blackheads too, just more slowly (8-12 weeks vs 4-6 weeks with BHA).

Recommended: Adaferin Gel 0.1% — How to Use It

Adaferin Gel 0.1% by Galderma India - ~₹150-180 at any chemist. No prescription needed.

Week-by-Week Schedule (Adapalene Only Routine)

WeekFrequencyNotes
Week 1-22 nights/week (Mon + Thu)Start gentle. Expect mild dryness.
Week 3-43 nights/weekYou may get a purge (new pimples) — do NOT stop.
Week 5-84 nights/weekSkin adapting. Texture starting to smooth.
Week 9+Every night (if tolerated)Maintenance dose for ongoing scar improvement.

Exact Nightly Application Steps

Without buying any other active, this is her complete PM routine using only what she likely already has:
  1. Cleanse - any gentle face wash (Plum Green Tea, Simple, or even a basic chemist cleanser)
  2. Wait 10-15 minutes - skin must be completely dry. This is the most important rule.
  3. Apply adapalene - take a pea-sized amount (literally the size of a small pea - no more). Dot it on forehead, both cheeks, nose, chin. Spread gently over entire face. Avoid eyes, nostrils, lips.
  4. Wait 5-10 minutes
  5. Apply any moisturizer - even basic Vaseline, Cetaphil, Pond's Superlight Gel, or whatever she has. Locking moisture in prevents peeling.
  6. Sleep
  7. Next morning: SPF 50 (use whatever sunscreen she has, any SPF 50)

On Non-Adapalene Nights (the other 4-5 nights/week at start)

Just cleanse + moisturise. That's it. No other actives needed while she's adjusting.
Once she can afford a second product, buy Minimalist 2% Salicylic Acid serum (₹599) as the next addition - to use on the nights she's NOT using adapalene, specifically targeting blackheads.

Indian Brand Alternatives for Adapalene 0.1%

All contain the exact same active ingredient (Adapalene 0.1%). The difference is only the brand, base formulation, and price:
BrandManufacturerPriceAvailabilityNotes
Adaferin Gel 0.1%Galderma India~₹175Pan India at medical storesFirst choice - original brand, most researched, Galderma microcrystal formula penetrates follicles faster. Introduced in India 2001.
Deriva Gel 0.1%Micro Labs~₹130-150Very widely availableBest alternative - Micro Labs is a reputable Indian pharma company, good formulation, cheaper than Adaferin
Aclene Gel 0.1%Sun Pharma~₹120-140Most chemistsSun Pharma is India's largest pharma - reliable quality, very affordable
Adpalen Gel 0.1%Generic/various~₹100-130Larger chemistsWorks fine, just less consistent base formulation
Epiduo GelGalderma India~₹499-561Clinikally, Nykaa, chemistsAdapalene 0.1% + Benzoyl Peroxide 2.5% combo - actually better for both scars AND active acne, but more expensive. Worth considering if she has occasional active breakouts too.
If Adaferin is out of stock: Deriva is the best like-for-like swap. Same concentration, reputable Indian manufacturer, ₹30-40 cheaper.

The Honest Expectation With Just Adapalene

  • Blackheads: Will improve in 8-12 weeks (slower than BHA, but it happens)
  • Oiliness: Reduces noticeably by month 2-3
  • Pitted scars: Shallow scars start improving at month 3-6; deeper ones need 6-12+ months
  • Side effects: Dryness and peeling in weeks 2-4 - this is normal and temporary
One tube of Adaferin lasts about 2-3 months used nightly. At ₹175 a tube, it is the most cost-effective skincare active available in India for her skin concerns.

What abt squalene glow creme serum pilgrim ?

Your credits are exhausted. You can purchase a top-up or subscribe to a plan to continue using Orris. If you're already subscribed, your daily credits will reset tomorrow.
This is a shared conversation. Sign in to Orris to start your own chat.