From 7fd0f2111703675ce681f62691cfa7003f7e65ac Mon Sep 17 00:00:00 2001 From: Prashaan Shakya Date: Fri, 3 Jul 2026 18:53:38 +0545 Subject: [PATCH] mindmap skill: fully self-contained, remove all script/directory dependencies Embeds the entire generator (with the RealRate logo inlined as base64) directly in skills/mindmap.md so it no longer needs a pre-existing gen_mindmap.py, a sibling RealRate Logos/ folder, or any filesystem scanning to locate its script. Removes the now-redundant root-level gen_mindmap.py and run_mindmaps.sh/ps1 wrapper scripts. --- gen_mindmap.py | 1648 -------------------------------------- run_mindmaps.ps1 | 25 - run_mindmaps.sh | 35 - skills/mindmap.md | 1910 +++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 1851 insertions(+), 1767 deletions(-) delete mode 100644 gen_mindmap.py delete mode 100644 run_mindmaps.ps1 delete mode 100644 run_mindmaps.sh diff --git a/gen_mindmap.py b/gen_mindmap.py deleted file mode 100644 index 7e83176..0000000 --- a/gen_mindmap.py +++ /dev/null @@ -1,1648 +0,0 @@ -""" -RealRate radial mindmap — universal generator -Usage: - python gen_mindmap.py # TriLinc Global Impact Fund (default) - python gen_mindmap.py trilinc # TriLinc Global Impact Fund - python gen_mindmap.py strata # Strata Critical Medical Inc - python gen_mindmap.py hp # HP Inc. - python gen_mindmap.py angi # Angi Inc. - python gen_mindmap.py nvidia # Nvidia Corp. - python gen_mindmap.py harley # Harley Davidson INC -""" -import sys, math, base64, re, requests, urllib3, time, os -from pathlib import Path -from PIL import Image as _PIL -from playwright.sync_api import sync_playwright - -urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) - -# ── Company selection ────────────────────────────────────────────────────────── -COMPANY = sys.argv[1].lower() if len(sys.argv) > 1 else "trilinc" -if COMPANY not in ("trilinc", "strata", "hp", "angi", "nvidia", "tesla", "apple", "harley"): - print(f"Unknown company '{COMPANY}'. Use: trilinc, strata, hp, angi, nvidia, tesla, apple, harley"); sys.exit(1) - -# ── Constants ────────────────────────────────────────────────────────────────── -W, H = 1920, 1080 -F = "'Manrope',Segoe UI,Helvetica Neue,Arial,sans-serif" -BG = "#050B18"; GREY="#AFAFAF"; WH="#FFFFFF" -AMBER="#F59E0B"; CYAN="#3DBACD"; LIME="#86EF60"; SKY="#60A5FA" -EMER="#34D399"; PINK="#F472B6"; PURP="#A78BFA"; ORAN="#FB923C" -TBLUE="#2563EB"; TAQUA="#0891B2" -_ACCENT_BY_COMPANY = { - "trilinc": EMER, "strata": SKY, "tesla": SKY, "angi": PINK, - "nvidia": LIME, "harley": AMBER, "apple": ORAN, -} -ACCENT = _ACCENT_BY_COMPANY.get(COMPANY, CYAN) - -CACHE_DIR = Path(__file__).parent / "img_cache" -CACHE_DIR.mkdir(exist_ok=True) - -HDRS = { - "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36", - "Referer": "https://en.wikipedia.org/", - "Accept": "image/webp,image/jpeg,image/*,*/*;q=0.8", - "Accept-Language": "en-US,en;q=0.9", -} - -# ── Utilities ────────────────────────────────────────────────────────────────── -def verify_ranking_url(industry_slug, fallback_year): - try: - hdrs = {"User-Agent": HDRS["User-Agent"], "Accept-Language": "en-US,en;q=0.9"} - r = requests.get("https://realrate.ai/rankings", timeout=20, headers=hdrs, verify=False) - r.raise_for_status() - hits = re.findall(r'/rankings/([\w]+)/(\d{4})', r.text) - matches = [(slug, yr) for slug, yr in hits if industry_slug in slug] - if matches: - slug, yr = max(matches, key=lambda x: x[1]) - url = f"https://realrate.ai/rankings/{slug}/{yr}" - print(f" Ranking URL verified: {url}") - return url - except Exception as e: - print(f" Warning: rankings page fetch failed — {e}") - fallback = f"https://realrate.ai/rankings/{industry_slug}/{fallback_year}" - print(f" Ranking URL (fallback): {fallback}") - return fallback - -def raster_mime(d): - if d[:5] == 'iVBOR': return 'image/png' - if d[:5] == 'UklGR': return 'image/webp' - if d[:4] == '/9j/': return 'image/jpeg' - return None - -def is_raster_b64(d): - return raster_mime(d) is not None - -def cache_path(url, suffix=".cache"): - return CACHE_DIR / (base64.urlsafe_b64encode(url.encode()).decode()[:80] + suffix) - -def fetch_b64(url): - cf = cache_path(url) - if cf.exists(): - d = cf.read_text() - if is_raster_b64(d): - return d - print(f" Cache invalid, re-fetching {url[-50:]}") - cf.unlink() - time.sleep(1.2) - r = requests.get(url, timeout=30, headers=HDRS, verify=False) - r.raise_for_status() - d = base64.b64encode(r.content).decode() - if not is_raster_b64(d): - raise ValueError(f"Not a raster image: {url[-40:]}") - cf.write_text(d) - return d - -def wiki_image_url(article_title, thumb_size=400): - api = "https://en.wikipedia.org/w/api.php" - params = {"action":"query","titles":article_title,"prop":"pageimages", - "pithumbsize":thumb_size,"format":"json","formatversion":"2"} - r = requests.get(api, params=params, headers=HDRS, verify=False, timeout=20) - r.raise_for_status() - pages = r.json().get("query",{}).get("pages",[]) - if pages and "thumbnail" in pages[0]: - return pages[0]["thumbnail"]["source"] - return None - -def try_wiki(article_titles, label, size=400): - for title in article_titles: - try: - time.sleep(1.2) - url = wiki_image_url(title, size) - if not url: - print(f" {label} '{title}' — no image found"); continue - d = fetch_b64(url) - print(f" {label} OK [{title}]"); return d - except Exception as e: - print(f" {label} '{title}' fail: {e}") - return None - -def try_fetch(urls, label): - for url in urls: - try: - d = fetch_b64(url); print(f" {label} OK"); return d - except Exception as e: print(f" {label} ..{url[-40:]} fail: {e}") - return None - -# ── Ranking URL ──────────────────────────────────────────────────────────────── -print("Verifying ranking URL…") -_ranking_cfg = { - "trilinc": ("us_finance_services", "2025"), - "strata": ("us_air", "2026"), - "hp": ("us_computers", "2025"), - "angi": ("us_advertising", "2025"), - "nvidia": ("us_semiconductors", "2026"), - "tesla": ("us_motor", "2026"), - "apple": ("us_computers", "2025"), - "harley": ("us_motor", "2026"), -} -RANKING_URL = verify_ranking_url(*_ranking_cfg[COMPANY]) - -# ── Assets ──────────────────────────────────────────────────────────────────── -print("Fetching assets…") - -RL_PATH = Path(__file__).parent.parent / "RealRate Logos" / "RealRate_logo_horizontal.png" -RL_D = base64.b64encode(RL_PATH.read_bytes()).decode() if RL_PATH.exists() else None -print(" RealRate logo:", "OK" if RL_D else "MISSING") - -LOGO_SVG_D = None # SVG logo data (base64) — used when PNG logo unavailable - -if COMPANY == "trilinc": - B1_D = try_fetch(["https://www.trilincglobal.com/wp-content/uploads/2023/05/gloria-website-photo.jpg"], - "Gloria Nelund") or try_wiki(["Gloria Nelund","TriLinc Global Impact Fund"], "Gloria Nelund") - B2_D = try_wiki(["Sustainable Development Goals","Social finance","Microfinance"], "Fund Overview") - B6_D = try_wiki(["Developing country","Sub-Saharan Africa"], "Globe/Impact") - LOGO_D = None - -elif COMPANY == "strata": - B1_D = try_wiki(["Air ambulance","Air medical services","Medical evacuation"], "Air Medical") - B2_D = try_wiki(["Critical care medicine","Intensive care medicine","Emergency medical services"], "Company Overview") - B6_D = try_wiki(["Helicopter","Aviation medicine","Emergency medicine"], "Helicopter") - LOGO_D = try_fetch(["https://www.realrate-archive.com/us_air/logos/0001779128_256x256.png"], "Strata logo") - -elif COMPANY == "hp": - B1_D = try_wiki(["Enrique Lores","HP Inc."], "Enrique Lores") - B2_D = try_wiki(["HP Inc.","Hewlett-Packard"], "HP Overview") - B6_D = try_wiki(["AI PC","HP LaserJet","Personal computer"], "HP Strategy") - LOGO_D = try_fetch(["https://www.realrate-archive.com/us_computers/logos/0000047217_256x256.png"], "HP logo") - -elif COMPANY == "angi": - B1_D = try_wiki(["Jeff Kip","Angi Inc.","HomeAdvisor"], "Jeff Kip / Angi") - B2_D = try_wiki(["Angi Inc.","HomeAdvisor","Home services"], "Angi Overview") - B6_D = try_wiki(["Home improvement","Home repair","Handyman"], "Highlights") - LOGO_D = try_fetch(["https://www.realrate-archive.com/us_advertising/logos/0001707092_256x256.png"], "Angi logo") - -elif COMPANY == "nvidia": - B1_D = try_wiki(["Jensen Huang","Nvidia"], "Jensen Huang") - B2_D = try_wiki(["Nvidia","Nvidia Headquarters"], "Nvidia Overview") - B6_D = None # AI Leadership uses svg_neural icon - LOGO_D = try_fetch([ - "https://upload.wikimedia.org/wikipedia/commons/thumb/2/21/Nvidia_logo.svg/320px-Nvidia_logo.svg.png", - "https://upload.wikimedia.org/wikipedia/commons/thumb/2/21/Nvidia_logo.svg/640px-Nvidia_logo.svg.png", - ], "Nvidia logo") - NV_GPU_D = try_wiki(["Hopper (microarchitecture)","Blackwell (microarchitecture)","Nvidia GPU","GeForce RTX 4090"], "GPU chip image") - NV_DC_D = try_wiki(["Data center","Server room","Cloud computing"], "Data center image") - -elif COMPANY == "tesla": - B1_D = try_wiki(["Elon Musk","Tesla Motors"], "Elon Musk") - B2_D = try_wiki(["Tesla Inc.","Tesla Gigafactory Shanghai","Tesla Model Y"], "Tesla Overview") - B6_D = try_wiki(["Tesla Cybertruck","Tesla Model Y","Tesla Model 3"], "Tesla Car") - LOGO_D = None - svg_local = Path(__file__).parent / "Tesla Inc" / "tesla_t_logo.svg" - svg_url = "https://upload.wikimedia.org/wikipedia/commons/b/bd/Tesla_Motors.svg" - svg_cf = cache_path(svg_url, ".svgcache") - if svg_local.exists(): - LOGO_SVG_D = base64.b64encode(svg_local.read_bytes()).decode() - print(" Tesla SVG logo OK (local)") - elif svg_cf.exists(): - LOGO_SVG_D = svg_cf.read_text(); print(" Tesla SVG logo OK (cached)") - else: - LOGO_D = try_fetch([ - "https://www.tesla.com/apple-touch-icon.png", - "https://digitalassets.tesla.com/tesla-contents/image/upload/Logomark_Red_RGB.png", - "https://logo.clearbit.com/tesla.com", - ], "Tesla logo PNG") - if not LOGO_D: - try: - time.sleep(1.2) - r = requests.get(svg_url, timeout=30, headers=HDRS, verify=False) - r.raise_for_status() - if b'' - f'' - f'' - f'' - f'') - -def svg_leaf(cx, cy, col): - return (f'' - f'' - f'' - f'') - -def svg_handshake(cx, cy, col): - return (f'' - f'' - f'' - f'') - -def svg_helicopter(cx, cy, col): - return (f'' - f'' - f'' - f'' - f'' - f'' - f'' - f'' - f'') - -def svg_cross(cx, cy, col): - return (f'' - f'') - -def svg_growth(cx, cy, col): - return (f'' - f'' - f'') - -def svg_house(cx, cy, col): - return (f'' - f'' - f'') - -def svg_wrench(cx, cy, col): - return (f'' - f'' - f'') - -def svg_chip(cx, cy, col): - return ( - f'' - f'' - f'' - f'' - f'' - f'' - f'' - f'' - f'' - f'' - ) - -def svg_neural(cx, cy, col): - inp = [(cx-17, cy-10), (cx-17, cy), (cx-17, cy+10)] - hid = [(cx, cy-7), (cx, cy+7)] - out = [(cx+17, cy)] - svg = "" - for ix,iy in inp: - for hx,hy in hid: - svg += f'' - for hx,hy in hid: - for ox,oy in out: - svg += f'' - for nx,ny in inp: - svg += f'' - for nx,ny in hid: - svg += f'' - for nx,ny in out: - svg += f'' - return svg - -def svg_trend(cx, cy, col, label="ECR"): - return (f'' - f'' - f'{label}') - -def svg_car(cx, cy, col): - return ( - f'' - f'' - f'' - f'' - f'' - ) - -def svg_bolt(cx, cy, col): - return ( - f'' - ) - -def svg_motorcycle(cx, cy, col): - return ( - f'' - f'' - f'' - f'' - f'' - f'' - ) - -# ── Reusable SVG component builders ─────────────────────────────────────────── -def ecr_gauge(cx, cy, ecr_val, ecr_max, status, col=None): - arc_r = 36 - c = col or LIME - ea = (-math.pi/2) + 2*math.pi*min(ecr_val/ecr_max, 0.95) - return ( - f'' - f'' - f'ECR' - f'{ecr_val}%' - f'{status}' - ) - -def balance_sheet_svg(cx, cy, assets_label): - return ( - f'BALANCE SHEET' - + "".join(f'' for i,h in enumerate([24,28,8,12,6])) - + f'{assets_label}' - ) - -def pie_svg(cx, cy, r, segments, center_label, fsize=13): - sa = -math.pi/2 - svg = "" - for pct, sc in segments: - sw = 2*math.pi*pct/100; ea = sa+sw - x1 = cx+r*math.cos(sa); y1 = cy+r*math.sin(sa) - x2 = cx+r*math.cos(ea); y2 = cy+r*math.sin(ea) - svg += f'' - sa = ea - svg += f'' - svg += f'{center_label}' - return svg - -def ecr_drivers_svg(cx, cy, plus_label, minus_label, ecr_pct, status, col=None): - c = col or EMER - return ( - f'ECR DRIVERS' - f'' - f'{plus_label}' - f'' - f'{minus_label}' - f'{ecr_pct}' - f'{status}' - ) - -# ── Shared helpers ───────────────────────────────────────────────────────────── -def cedge(cx,cy,r,tx,ty): - angle = math.atan2(ty-cy, tx-cx) - return int(cx+r*math.cos(angle)), int(cy+r*math.sin(angle)) - -def ico(kind,x,y,col): - cx,cy=x+10,y+10 - if kind=="clock": - return (f'' - f'' - f'') - if kind=="star": - pts=[] - for i in range(10): - a_=math.pi*i/5-math.pi/2; r_=8 if i%2==0 else 3.5 - pts.append(f"{cx+r_*math.cos(a_):.1f},{cy+r_*math.sin(a_):.1f}") - return f'' - if kind=="chart": - bars=[(x,y+12,3,8),(x+4,y+6,3,14),(x+8,y+2,3,18),(x+12,y+7,3,13),(x+16,y+4,3,16)] - return "".join(f'' for bx,by,bw,bh in bars) - if kind=="trending": - return (f'' - f'') - if kind=="globe": - return (f'' - f'' - f'') - if kind=="building": - return (f'' - f'' - f'' - f'') - if kind=="dollar": - return f'$' - if kind=="leaf": - return (f'' - f'') - if kind=="news": - return (f'' - f'' - f'') - if kind=="people": - return (f'' - f'' - f'' - f'') - return "" - -# ══════════════════════════════════════════════════════════════════════════════ -def build(): - p=[]; a=p.append - - HX,HY,HW,HH = 700,348,480,292 - HCX,HCY = HX+HW//2, HY+HH//2 # 940, 494 - - # Branch circles - B1_CX,B1_CY,B1_R = 640,300,82 # AMBER - B7_CX,B7_CY,B7_R = 600,600,68 # PURP - B2_CX,B2_CY,B2_R = 940,130,64 # CYAN - B3_CX,B3_CY,B3_R = 1400,200,64 # LIME - B4_CX,B4_CY,B4_R = 1480,430,62 # SKY - B5_CX,B5_CY,B5_R = 1390,720,62 # EMER - B6_CX,B6_CY,B6_R = 920,820,62 # ORAN - - # Decorative circles - D1_CX,D1_CY,D1_R = 700, 820, 44 - D2_CX,D2_CY,D2_R = 1155, 770, 44 - D3_CX,D3_CY,D3_R = 220, 623, 44 - D4_CX,D4_CY,D4_R = 1170, 185, 44 - - a(f'') - a('') - a(f''' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ''') - a('') - - a(f'') - - GRID = 240 - for gy in range(0, H+1, GRID): - a(f'') - for gx in range(0, W+1, GRID): - a(f'') - for gy in range(0, H+1, GRID): - for gx in range(0, W+1, GRID): - a(f'') - - a(f'') - - for dx,dy,dr,dc,dop in [ - (188,748,3,AMBER,.28),(312,82,2,ACCENT,.24),(1722,142,3,PURP,.24),(1632,952,2,ACCENT,.27), - (858,50,2,LIME,.2),(1098,1030,2,PURP,.2),(502,515,1.5,ACCENT,.14),(1438,575,1.5,AMBER,.14), - (658,988,2,ACCENT,.17),(1288,76,2,LIME,.17),(448,298,1.5,CYAN,.11),(1564,385,1.5,SKY,.11)]: - a(f'') - - def t(x,y,s,sz=13,col=WH,anch="start",wt="400",op=1,sp="0"): - a(f'{s}') - - def mline(x1,y1,cp1x,cp1y,cp2x,cp2y,x2,y2,col): - q=f"M{x1},{y1} C{cp1x},{cp1y} {cp2x},{cp2y} {x2},{y2}" - a(f'') - a(f'') - a(f'') - a(f'') - a(f'') - - def sline(x1,y1,cpx,cpy,x2,y2,col): - q=f"M{x1},{y1} Q{cpx},{cpy} {x2},{y2}" - a(f'') - a(f'') - a(f'') - - def white_box(x, y, w, h, col=None, op=.35): - c = col or ACCENT - a(f'') - a(f'') - - def hub_logo_png(x, y, data, size=64, box=72): - white_box(x, y, box, box, op=.3) - if data: - pad = (box - size) // 2 - a(f'') - return bool(data) - - def draw_circle(cx, cy, r, col, grad, label, *, - img=None, clip_id=None, svg_icon=None, inner_svg=None, fallback="?"): - a(f'') - a(f'') - a(f'') - if inner_svg: - a(f'') - a(inner_svg) - else: - if img: - a(f'') - elif svg_icon: - a(svg_icon) - else: - t(cx, cy+8, fallback, 32, WH, "middle", "800") - a(f'') - lw = max(220, len(label)*12+22) - a(f'') - t(cx, cy+r+35, label, 20, col, "middle", "800", sp=".5") - - def snode(nx,ny,nw,nh,col,grad,line1,line2="",icon_kind=""): - a(f'') - a(f'') - if icon_kind: - ix=nx+nw-30; iy=ny+(nh-22)//2 - a(f'') - a(ico(icon_kind,ix,iy,col)) - tx=nx+14; tw=nw-16-(46 if icon_kind else 0) - a(f'') - if line2: - a(f'{line1}') - a(f'{line2}') - else: - a(f'{line1}') - a('') - - # ── MAIN LINES ──────────────────────────────────────────────────────────── - ex1,ey1 = cedge(B1_CX,B1_CY,B1_R, 772,385) - mline(772,385, 720,360, 680,335, ex1,ey1, AMBER) - ex2,ey2 = cedge(B2_CX,B2_CY,B2_R, 940,294) - mline(940,294, 938,260, 940,220, ex2,ey2, CYAN) - ex3,ey3 = cedge(B3_CX,B3_CY,B3_R, 1108,385) - mline(1108,385, 1200,310, 1340,244, ex3,ey3, LIME) - ex4,ey4 = cedge(B4_CX,B4_CY,B4_R, 1138,473) - mline(1138,473, 1265,462, 1398,446, ex4,ey4, SKY) - ex5,ey5 = cedge(B5_CX,B5_CY,B5_R, 1098,592) - mline(1098,592, 1218,635, 1328,675, ex5,ey5, EMER) - ex6,ey6 = cedge(B6_CX,B6_CY,B6_R, 933,694) - mline(933,694, 930,742, 924,778, ex6,ey6, ORAN) - ex7,ey7 = cedge(B7_CX,B7_CY,B7_R, 749,554) - mline(749,554, 690,565, 634,578, ex7,ey7, PURP) - - # ── SUB LINES ───────────────────────────────────────────────────────────── - s1_ce = cedge(B1_CX,B1_CY,B1_R, 225,147) - sline(*s1_ce, 450,220, 225,147, AMBER) - s2_ce = cedge(B1_CX,B1_CY,B1_R, 225,283) - sline(*s2_ce, 450,296, 225,283, AMBER) - s3_ce = cedge(B1_CX,B1_CY,B1_R, 225,479) - sline(*s3_ce, 450,430, 225,479, AMBER) - - ap1_ce = cedge(B2_CX,B2_CY,B2_R, 665,57) - sline(*ap1_ce, 810,92, 665,57, CYAN) - ap2_ce = cedge(B2_CX,B2_CY,B2_R, 1225,57) - sline(*ap2_ce, 1160,90, 1225,57, CYAN) - - in1_ce = cedge(B3_CX,B3_CY,B3_R, 1689,51) - sline(*in1_ce, 1500,126, 1689,51, LIME) - in2_ce = cedge(B3_CX,B3_CY,B3_R, 1689,147) - sline(*in2_ce, 1500,174, 1689,147, LIME) - - fn1_ce = cedge(B4_CX,B4_CY,B4_R, 1735,291) - sline(*fn1_ce, 1558,362, 1735,291, SKY) - fn2_ce = cedge(B4_CX,B4_CY,B4_R, 1735,387) - sline(*fn2_ce, 1558,416, 1735,387, SKY) - fn3_ce = cedge(B4_CX,B4_CY,B4_R, 1735,483) - sline(*fn3_ce, 1558,460, 1735,483, SKY) - - b5_1ce = cedge(B5_CX,B5_CY,B5_R, 1682,663) - sline(*b5_1ce, 1464,692, 1682,663, EMER) - b5_2ce = cedge(B5_CX,B5_CY,B5_R, 1622,759) - sline(*b5_2ce, 1464,730, 1622,759, EMER) - b5_3ce = cedge(B5_CX,B5_CY,B5_R, 1682,855) - sline(*b5_3ce, 1464,788, 1682,855, EMER) - - b6_1ce = cedge(B6_CX,B6_CY,B6_R, 720,983) - sline(*b6_1ce, 820,940, 720,983, ORAN) - b6_2ce = cedge(B6_CX,B6_CY,B6_R, 1110,983) - sline(*b6_2ce, 960,942, 1110,983, ORAN) - b6_3ce = cedge(B6_CX,B6_CY,B6_R, 1500,983) - sline(*b6_3ce, 1062,942, 1500,983, ORAN) - - b7_1ce = cedge(B7_CX,B7_CY,B7_R, 215,768) - sline(*b7_1ce, 430,680, 215,768, PURP) - b7_2ce = cedge(B7_CX,B7_CY,B7_R, 215,864) - sline(*b7_2ce, 430,762, 215,864, PURP) - b7_3ce = cedge(B7_CX,B7_CY,B7_R, 215,960) - sline(*b7_3ce, 430,842, 215,960, PURP) - - # ══════════════════════════════════════════════════════════════════════════ - # COMPANY-SPECIFIC BRANCH CONTENT - # ══════════════════════════════════════════════════════════════════════════ - if COMPANY == "trilinc": - - # B1 — GLORIA NELUND - draw_circle(B1_CX,B1_CY,B1_R, AMBER,"gAmb","Gloria Nelund · CEO", img=B1_D, clip_id="b1Clip") - snode(15,104, 420,86,AMBER,"gAmb","CEO, Founder & President","Chief Compliance Officer · TriLinc","star") - snode(15,240, 420,86,AMBER,"gAmb","Deutsche Bank: CEO US Private Wealth","Managed $50B · World's 5th largest bank","chart") - snode(15,436, 420,86,AMBER,"gAmb","Founded TriLinc 2008","40+ years in international asset management","trending") - - # B2 — FUND OVERVIEW - draw_circle(B2_CX,B2_CY,B2_R, CYAN,"gCyn","FUND OVERVIEW", img=B2_D, clip_id="b2Clip", fallback="FO") - snode(460,14, 410,86,CYAN,"gCyn","Founded: 2008 · Delaware, USA","Ticker: TRLC · Public offering closed 2017","clock") - snode(1010,14, 430,86,CYAN,"gCyn","~$1.4B AUM · TriLinc Global Advisors","Female-founded · -owned · -led","building") - - # B3 — INDUSTRY POSITION - draw_circle(B3_CX,B3_CY,B3_R, LIME,"gLme","INDUSTRY POSITION", - inner_svg=ecr_gauge(B3_CX,B3_CY,124,150,"TOP-RATED")) - snode(1474, 8, 430,86,LIME,"gLme","ECR: 124% · Top-Rated · RealRate","#1 of 4 US Finance Services companies","star") - snode(1474,104, 430,86,LIME,"gLme","46pp above industry avg (78%)","Highest ECR in US Finance Services 2025","chart") - - # B4 — FINANCIAL HEALTH - draw_circle(B4_CX,B4_CY,B4_R, SKY,"gSky","FINANCIAL HEALTH", - inner_svg=balance_sheet_svg(B4_CX,B4_CY,"$282.8M")) - snode(1560,248, 350,86,SKY,"gSky","Total Assets: $282.8M","Stockholders' Equity: $272.6M","dollar") - snode(1560,344, 350,86,SKY,"gSky","Liabilities: $10.2M","Equity-to-Assets ratio: 96.4%","chart") - snode(1560,440, 350,86,SKY,"gSky","Net Income: –$8.5M","ECR driver: Equity +57pp · Revenue –17pp","trending") - - # B5 — INVESTMENT STRATEGY - draw_circle(B5_CX,B5_CY,B5_R, EMER,"gEmr","INVESTMENT STRATEGY", - inner_svg=pie_svg(B5_CX,B5_CY,32,[(40,LIME),(30,CYAN),(20,AMBER),(10,EMER)],"SME")) - snode(1462,620, 440,86,EMER,"gEmr","Direct loans · Loan participations","Trade finance · Convertible debt","dollar") - snode(1462,716, 440,86,EMER,"gEmr","Target: SMEs with <500 employees","Developing economies · local sub-advisors","globe") - snode(1462,812, 440,86,EMER,"gEmr","Structured credit · Preferred equity","Growth-stage businesses · 4 continents","chart") - - # B6 — IMPACT FOCUS - draw_circle(B6_CX,B6_CY,B6_R, ORAN,"gOrn","IMPACT FOCUS", - img=B6_D, clip_id="b6Clip", svg_icon=svg_leaf(B6_CX,B6_CY,ORAN)) - snode(530,940, 380,86,ORAN,"gOrn","Building Sustainable Communities","Education · Energy · Housing · Health","leaf") - snode(920,940, 380,86,ORAN,"gOrn","Strengthening the Workforce","Job creation · Equality · Capacity building","people") - snode(1310,940,380,86,ORAN,"gOrn","Financial inclusion · Food security","Measurable social impact metrics tracked","globe") - - # B7 — MISSION & HISTORY - draw_circle(B7_CX,B7_CY,B7_R, PURP,"gMH","Mission & History", - svg_icon=svg_handshake(B7_CX,B7_CY,PURP)) - snode(15,725, 400,86,PURP,"gPrp","2008: Founded · Delaware, USA","Female-founded · -owned · -led fund","clock") - snode(15,821, 400,86,PURP,"gPrp","2017: Public offering closed","TRLC listed · OTC Pink Markets","trending") - snode(15,917, 400,86,PURP,"gPrp","2025: #1 US Finance Services · RealRate","Named Top Real Leader of Impact Investing","star") - - # DECORATIVE - draw_circle(D1_CX,D1_CY,D1_R, ORAN,"gOrn","Global Reach", - img=B6_D, clip_id="d1Clip", svg_icon=svg_globe(D1_CX,D1_CY,ORAN)) - draw_circle(D2_CX,D2_CY,D2_R, EMER,"gEmr","Sub-Advisors", - svg_icon=svg_handshake(D2_CX,D2_CY,EMER)) - draw_circle(D3_CX,D3_CY,D3_R, LIME,"gLme","ECR Trend", - svg_icon=svg_trend(D3_CX,D3_CY,LIME,"ECR +46pp")) - draw_circle(D4_CX,D4_CY,D4_R, CYAN,"gCyn","$1.4B AUM", fallback=" ") - t(D4_CX, D4_CY-6, "$1.4B", 22, WH, "middle", "800") - t(D4_CX, D4_CY+12, "AUM", 16, CYAN, "middle", "700") - - ECR_VAL, RANK_VAL, STATUS_VAL = "124%", "#1 / 4", "Top-Rated" - - elif COMPANY == "strata": - - # B1 — AIR MEDICAL SERVICES - draw_circle(B1_CX,B1_CY,B1_R, AMBER,"gAmb","Air Medical Services", - img=B1_D, clip_id="b1Clip", svg_icon=svg_helicopter(B1_CX,B1_CY,AMBER)) - snode(15,104, 420,86,AMBER,"gAmb","Air Medical Transport · Critical Care","Emergency Response Services","star") - snode(15,240, 420,86,AMBER,"gAmb","OTC-listed · CIK: 0001779128 · Delaware","Air ambulance services · US market","building") - snode(15,436, 420,86,AMBER,"gAmb","Critical airborne medical transport","Serving patients across US air network","trending") - - # B2 — COMPANY OVERVIEW - draw_circle(B2_CX,B2_CY,B2_R, CYAN,"gCyn","COMPANY OVERVIEW", - img=B2_D, clip_id="b2Clip", fallback="CO") - snode(460,14, 410,86,CYAN,"gCyn","Air Medical Transport · Critical Care","Emergency Response · Delaware, USA","clock") - snode(1010,14, 430,86,CYAN,"gCyn","CIK: 0001779128 · OTC-listed · STCM","US Air Industry · Publicly reporting","news") - - # B3 — INDUSTRY POSITION - draw_circle(B3_CX,B3_CY,B3_R, LIME,"gLme","INDUSTRY POSITION", - inner_svg=ecr_gauge(B3_CX,B3_CY,123,150,"TOP-RATED")) - snode(1474, 8, 430,86,LIME,"gLme","ECR: 123% · Top-Rated · RealRate","#1 of 4 US Air companies","star") - snode(1474,104, 430,86,LIME,"gLme","54pp above industry avg (69%)","Highest ECR in US Air 2025","chart") - - # B4 — FINANCIAL HEALTH - draw_circle(B4_CX,B4_CY,B4_R, SKY,"gSky","FINANCIAL HEALTH", - inner_svg=balance_sheet_svg(B4_CX,B4_CY,"$325.5M")) - snode(1560,248, 350,86,SKY,"gSky","Total Assets: $325.5M","Stockholders' Equity: $279.1M","dollar") - snode(1560,344, 350,86,SKY,"gSky","Liabilities: $46.4M","Revenue: $197.1M (FY2025)","chart") - snode(1560,440, 350,86,SKY,"gSky","Net Income: +$41.3M","First profitable year in company history","trending") - - # B5 — ECR ANALYSIS - draw_circle(B5_CX,B5_CY,B5_R, EMER,"gEmr","ECR ANALYSIS", - inner_svg=ecr_drivers_svg(B5_CX,B5_CY,"+46pp","–81pp","123%","TOP-RATED")) - snode(1462,620, 440,86,EMER,"gEmr","Greatest Strength: Operating Expenses","+46pp contribution to ECR","chart") - snode(1462,716, 440,86,EMER,"gEmr","Greatest Weakness: Other Expenses","–81pp drag on ECR","trending") - snode(1462,812, 440,86,EMER,"gEmr","ECR: 123% · 54pp above industry avg","Market average: 69%","star") - - # B6 — 2025 HIGHLIGHTS - draw_circle(B6_CX,B6_CY,B6_R, ORAN,"gOrn","2025 HIGHLIGHTS", - img=B6_D, clip_id="b6Clip", svg_icon=svg_helicopter(B6_CX,B6_CY,ORAN)) - snode(530,940, 380,86,ORAN,"gOrn","FY2025 Revenue: $197.1M","Net Income: +$41.3M (first profitable)","dollar") - snode(920,940, 380,86,ORAN,"gOrn","Equity: $279.1M · Assets: $325.5M","Equity-to-Assets ratio: 85.8%","chart") - snode(1310,940,380,86,ORAN,"gOrn","ECR trajectory: 87→92→73→90→123%","Consistent upward ECR momentum","trending") - - # B7 — GROWTH JOURNEY - draw_circle(B7_CX,B7_CY,B7_R, PURP,"gMH","Growth Journey", - svg_icon=svg_growth(B7_CX,B7_CY,PURP)) - snode(15,725, 400,86,PURP,"gPrp","2021: Revenue $50.5M · Net Income –$40.1M","Rapid expansion phase begins","clock") - snode(15,821, 400,86,PURP,"gPrp","2022–2024: Revenue $146M → $249M","~4× growth in 3 years","trending") - snode(15,917, 400,86,PURP,"gPrp","2025: ECR 123% · #1 US Air · RealRate","First profitable year in history","star") - - # DECORATIVE - draw_circle(D1_CX,D1_CY,D1_R, AMBER,"gAmb","Air Fleet", - img=B6_D, clip_id="d1Clip", svg_icon=svg_helicopter(D1_CX,D1_CY,AMBER)) - draw_circle(D2_CX,D2_CY,D2_R, CYAN,"gCyn","Medical Care", - svg_icon=svg_cross(D2_CX,D2_CY,CYAN)) - draw_circle(D3_CX,D3_CY,D3_R, LIME,"gLme","ECR Trend", - svg_icon=svg_trend(D3_CX,D3_CY,LIME,"→ 123%")) - draw_circle(D4_CX,D4_CY,D4_R, SKY,"gSky","Revenue", fallback=" ") - t(D4_CX, D4_CY-6, "$197M", 22, WH, "middle", "800") - t(D4_CX, D4_CY+12, "FY2025", 16, SKY, "middle", "700") - - ECR_VAL, RANK_VAL, STATUS_VAL = "123%", "#1 / 4", "Top-Rated" - - elif COMPANY == "hp": - - # B1 — ENRIQUE LORES - draw_circle(B1_CX,B1_CY,B1_R, AMBER,"gAmb","Enrique Lores · CEO", img=B1_D, clip_id="b1Clip") - snode(15,104, 420,86,AMBER,"gAmb","President & CEO since November 2019","Joined HP in 1989 · 35+ years with HP","star") - snode(15,240, 420,86,AMBER,"gAmb","Led Imaging, Printing & Solutions","MBA IESE · Industrial Engineering","chart") - snode(15,436, 420,86,AMBER,"gAmb","'Future Ready' transformation plan","AI PCs · Subscriptions · Cost efficiency","trending") - - # B2 — COMPANY OVERVIEW - draw_circle(B2_CX,B2_CY,B2_R, CYAN,"gCyn","COMPANY OVERVIEW", - img=B2_D, clip_id="b2Clip", fallback="HP") - snode(460,14, 410,86,CYAN,"gCyn","Founded: 1939 · Palo Alto, California","Split from Hewlett-Packard: November 2015","clock") - snode(1010,14, 430,86,CYAN,"gCyn","~58,000 employees worldwide","HQ: 1501 Page Mill Rd · Palo Alto, CA","building") - - # B3 — INDUSTRY POSITION - draw_circle(B3_CX,B3_CY,B3_R, LIME,"gLme","INDUSTRY POSITION", - inner_svg=ecr_gauge(B3_CX,B3_CY,258,300,"RATED")) - snode(1474, 8, 430,86,LIME,"gLme","ECR: 258% · Rated · RealRate","#9 of 17 US Computers companies","star") - snode(1474,104, 430,86,LIME,"gLme","At the industry average (258%)","Balance sheet leverage offsets revenue strength","chart") - - # B4 — FINANCIAL HEALTH - draw_circle(B4_CX,B4_CY,B4_R, SKY,"gSky","FINANCIAL HEALTH", - inner_svg=balance_sheet_svg(B4_CX,B4_CY,"$39.9B")) - snode(1560,248, 350,86,SKY,"gSky","Revenue: $53.6B (FY2024)","Net Income: $2.8B · EPS: $2.81","dollar") - snode(1560,344, 350,86,SKY,"gSky","Operating margin: 7.1%","R&D investment: $1.64B","chart") - snode(1560,440, 350,86,SKY,"gSky","Total Assets: $39.9B · Cash: $3.25B","LT Debt: $8.3B · Equity Deficit: –$1.3B","trending") - - # B5 — BUSINESS SEGMENTS - draw_circle(B5_CX,B5_CY,B5_R, EMER,"gEmr","BUSINESS SEGMENTS", - inner_svg=pie_svg(B5_CX,B5_CY,32,[(64.3,LIME),(35.7,CYAN)],"2 SEG",fsize=7)) - snode(1462,620, 440,86,EMER,"gEmr","Personal Systems: ~$34.4B · 64%","PCs · Laptops · Workstations · Chromebooks","chart") - snode(1462,716, 440,86,EMER,"gEmr","Printing: ~$19.1B · 36%","LaserJet · OfficeJet · Instant Ink · Supplies","dollar") - snode(1462,812, 440,86,EMER,"gEmr","Stockholders' Equity: –$1.3B","Liabilities: $41.2B · Buyback-driven balance sheet","trending") - - # B6 — STRATEGY & INNOVATION - draw_circle(B6_CX,B6_CY,B6_R, ORAN,"gOrn","STRATEGY & INNOVATION", - img=B6_D, clip_id="b6Clip", svg_icon=svg_globe(B6_CX,B6_CY,ORAN)) - snode(530,940, 380,86,ORAN,"gOrn","AI PC leadership · HP Omnibook Ultra","Neural Processing Unit · Windows AI integration","trending") - snode(920,940, 380,86,ORAN,"gOrn","HP+ Instant Ink subscription model","Recurring revenue · Sustainability · HP Planet Partners","leaf") - snode(1310,940,380,86,ORAN,"gOrn","Poly collaboration hardware (acq. 2022)","Hybrid work solutions · Video conferencing","globe") - - # B7 — COMPANY HISTORY - draw_circle(B7_CX,B7_CY,B7_R, PURP,"gMH","Company History", - svg_icon=svg_growth(B7_CX,B7_CY,PURP)) - snode(15,725, 400,86,PURP,"gPrp","1939: Founded by Hewlett & Packard","Palo Alto garage · HP200A audio oscillator","clock") - snode(15,821, 400,86,PURP,"gPrp","2015: HP splits into HP Inc. & HPE","HP Inc. keeps HPQ · PC & Printer business","trending") - snode(15,917, 400,86,PURP,"gPrp","FY2024: Revenue $53.6B · ECR 258% · RealRate","'Future Ready' AI transformation underway","star") - - # DECORATIVE - draw_circle(D1_CX,D1_CY,D1_R, ORAN,"gOrn","Global Reach", - img=B6_D, clip_id="d1Clip", svg_icon=svg_globe(D1_CX,D1_CY,ORAN)) - draw_circle(D2_CX,D2_CY,D2_R, CYAN,"gCyn","Poly & Collab", - svg_icon=svg_handshake(D2_CX,D2_CY,CYAN)) - draw_circle(D3_CX,D3_CY,D3_R, LIME,"gLme","ECR Trend", - svg_icon=svg_trend(D3_CX,D3_CY,LIME,"258%")) - draw_circle(D4_CX,D4_CY,D4_R, SKY,"gSky","$53.6B", fallback=" ") - t(D4_CX, D4_CY-6, "$53.6B", 19, WH, "middle", "800") - t(D4_CX, D4_CY+12, "Revenue", 14, SKY, "middle", "700") - - ECR_VAL, RANK_VAL, STATUS_VAL = "258%", "#9 / 17", "Rated" - - elif COMPANY == "angi": - - # B1 — JEFF KIP / LEADERSHIP - draw_circle(B1_CX,B1_CY,B1_R, AMBER,"gAmb","Jeff Kip · CEO", - img=B1_D, clip_id="b1Clip", svg_icon=svg_house(B1_CX,B1_CY,AMBER)) - snode(15,104, 420,86,AMBER,"gAmb","Chief Executive Officer, Angi Inc.","NASDAQ: ANGI · Denver, Colorado","star") - snode(15,240, 420,86,AMBER,"gAmb","IAC subsidiary · ~4,500 employees","Brands: Angi · HomeAdvisor · Handy","building") - snode(15,436, 420,86,AMBER,"gAmb","Platform transformation · AI integration","Connecting homeowners with professionals","trending") - - # B2 — COMPANY OVERVIEW - draw_circle(B2_CX,B2_CY,B2_R, CYAN,"gCyn","COMPANY OVERVIEW", - img=B2_D, clip_id="b2Clip", fallback="AN") - snode(460,14, 410,86,CYAN,"gCyn","Founded: 1995 · Denver, Colorado","Formed 2017 via HomeAdvisor & Angie's List merger","clock") - snode(1010,14, 430,86,CYAN,"gCyn","~4,500 employees worldwide","Ticker: ANGI · NASDAQ · IAC subsidiary","building") - - # B3 — INDUSTRY POSITION - draw_circle(B3_CX,B3_CY,B3_R, LIME,"gLme","INDUSTRY POSITION", - inner_svg=ecr_gauge(B3_CX,B3_CY,157,200,"TOP-RATED")) - snode(1474, 8, 430,86,LIME,"gLme","ECR: 157% · Top-Rated · RealRate","#1 of 4 US Advertising companies","star") - snode(1474,104, 430,86,LIME,"gLme","78pp above industry avg (80%)","Highest ECR in US Advertising 2025","chart") - - # B4 — FINANCIAL HEALTH - draw_circle(B4_CX,B4_CY,B4_R, SKY,"gSky","FINANCIAL HEALTH", - inner_svg=balance_sheet_svg(B4_CX,B4_CY,"$1.68B")) - snode(1560,248, 350,86,SKY,"gSky","Total Assets: $1.68B","Stockholders' Equity: $1.46B","dollar") - snode(1560,344, 350,86,SKY,"gSky","Liabilities: $222.4M","Revenue: $1.03B","chart") - snode(1560,440, 350,86,SKY,"gSky","Net Income: +$43.8M","Equity-to-Assets ratio: 86.7%","trending") - - # B5 — PLATFORM & BRANDS - draw_circle(B5_CX,B5_CY,B5_R, EMER,"gEmr","PLATFORM & BRANDS", - inner_svg=pie_svg(B5_CX,B5_CY,32,[(50,LIME),(30,CYAN),(20,AMBER)],"3 BRANDS",fsize=6.5)) - snode(1462,620, 440,86,EMER,"gEmr","Angi (formerly Angie's List)","Homeowner marketplace · Reviews · Cost guides","globe") - snode(1462,716, 440,86,EMER,"gEmr","HomeAdvisor · Instant Pro Connect","Local professionals · Project cost estimator","people") - snode(1462,812, 440,86,EMER,"gEmr","Handy · On-demand home services","Cleaning · Assembly · Moving · Repairs","chart") - - # B6 — 2025 HIGHLIGHTS - draw_circle(B6_CX,B6_CY,B6_R, ORAN,"gOrn","2025 HIGHLIGHTS", - img=B6_D, clip_id="b6Clip", svg_icon=svg_house(B6_CX,B6_CY,ORAN)) - snode(530,940, 380,86,ORAN,"gOrn","Revenue: $1.03B · Net Income: +$43.8M","ECR Strength: Equity +68pp","dollar") - snode(920,940, 380,86,ORAN,"gOrn","Equity: $1.46B · Assets: $1.68B","Equity-to-Assets ratio: 86.7%","chart") - snode(1310,940,380,86,ORAN,"gOrn","ECR Weakness: Marketing Expenses –22pp","Industry avg: 80% · 78pp above average","trending") - - # B7 — COMPANY HISTORY - draw_circle(B7_CX,B7_CY,B7_R, PURP,"gMH","Company History", - svg_icon=svg_growth(B7_CX,B7_CY,PURP)) - snode(15,725, 400,86,PURP,"gPrp","1995: Angie's List · Columbus, Ohio","Crowd-sourced reviews for home contractors","clock") - snode(15,821, 400,86,PURP,"gPrp","1998: ServiceMagic → HomeAdvisor (2012)","2017: ANGI Homeservices via merger","trending") - snode(15,917, 400,86,PURP,"gPrp","2021: Rebranded to Angi Inc. · NASDAQ","2025: #1 US Advertising · RealRate","star") - - # DECORATIVE - draw_circle(D1_CX,D1_CY,D1_R, ORAN,"gOrn","Home Services", - img=B6_D, clip_id="d1Clip", svg_icon=svg_house(D1_CX,D1_CY,ORAN)) - draw_circle(D2_CX,D2_CY,D2_R, CYAN,"gCyn","Pro Network", - svg_icon=svg_handshake(D2_CX,D2_CY,CYAN)) - draw_circle(D3_CX,D3_CY,D3_R, LIME,"gLme","ECR Trend", - svg_icon=svg_trend(D3_CX,D3_CY,LIME,"→ 157%")) - draw_circle(D4_CX,D4_CY,D4_R, SKY,"gSky","$1.03B", fallback=" ") - t(D4_CX, D4_CY-6, "$1.03B", 20, WH, "middle", "800") - t(D4_CX, D4_CY+12, "Revenue", 14, SKY, "middle", "700") - - ECR_VAL, RANK_VAL, STATUS_VAL = "157%", "#1 / 4", "Top-Rated" - - elif COMPANY == "nvidia": - - # B1 — JENSEN HUANG - draw_circle(B1_CX,B1_CY,B1_R, AMBER,"gAmb","Jensen Huang · CEO", img=B1_D, clip_id="b1Clip") - snode(15,104, 420,86,AMBER,"gAmb","Co-Founder & CEO since 1993 · NVDA","Pioneer of GPU computing · CUDA architect","star") - snode(15,240, 420,86,AMBER,"gAmb","Oregon State BSc EE · Stanford MS EE","30+ years leading Nvidia as CEO","chart") - snode(15,436, 420,86,AMBER,"gAmb","Led Nvidia from gaming GPUs to AI supercomputing",""The most important chip company in the world"","trending") - - # B2 — COMPANY OVERVIEW - draw_circle(B2_CX,B2_CY,B2_R, CYAN,"gCyn","COMPANY OVERVIEW", - img=B2_D, clip_id="b2Clip", fallback="NV") - snode(460,14, 410,86,CYAN,"gCyn","Founded: April 5, 1993 · Santa Clara, CA","Founders: Huang · Priem · Malachowsky","clock") - snode(1010,14, 430,86,CYAN,"gCyn","~36,000 employees worldwide","HQ: Endeavor Campus · Santa Clara, CA","building") - - # B3 — INDUSTRY POSITION - draw_circle(B3_CX,B3_CY,B3_R, LIME,"gLme","INDUSTRY POSITION", - inner_svg=ecr_gauge(B3_CX,B3_CY,351,400,"TOP-RATED")) - snode(1474, 8, 430,86,LIME,"gLme","ECR: 351% · Top-Rated · RealRate","#8 of 44 US Semiconductors companies","star") - snode(1474,104, 430,86,LIME,"gLme","98pp above industry avg (253%)","Top-Rated in US Semiconductors 2025","chart") - - # B4 — FINANCIAL HEALTH - draw_circle(B4_CX,B4_CY,B4_R, SKY,"gSky","FINANCIAL HEALTH", - inner_svg=balance_sheet_svg(B4_CX,B4_CY,"$111.6B")) - snode(1560,248, 350,86,SKY,"gSky","Revenue: $130.5B (FY2025)","Net Income: $72.9B","dollar") - snode(1560,344, 350,86,SKY,"gSky","Total Assets: $111.6B","Stockholders' Equity: $79.3B","chart") - snode(1560,440, 350,86,SKY,"gSky","Liabilities: $32.3B","R&D investment: $12.9B","trending") - - # B5 — BUSINESS SEGMENTS - draw_circle(B5_CX,B5_CY,B5_R, EMER,"gEmr","BUSINESS SEGMENTS", - inner_svg=pie_svg(B5_CX,B5_CY,32,[(88.3,LIME),(8.7,CYAN),(3.0,AMBER)],"DC 88%",fsize=6.5)) - snode(1462,620, 440,86,EMER,"gEmr","Data Center: ~$115.2B · 88%","AI training · inference · HPC · NVLink","chart") - snode(1462,716, 440,86,EMER,"gEmr","Gaming: ~$11.4B · 9%","GeForce RTX 50 series · DLSS 4 · Ray Tracing","dollar") - snode(1462,812, 440,86,EMER,"gEmr","Pro Viz · Automotive · OEM: ~$3.9B · 3%","DRIVE platform · Omniverse · Jetson","globe") - - # B6 — AI LEADERSHIP - draw_circle(B6_CX,B6_CY,B6_R, ORAN,"gOrn","AI LEADERSHIP", - svg_icon=svg_neural(B6_CX,B6_CY,ORAN)) - snode(530,940, 380,86,ORAN,"gOrn","Blackwell GPU architecture launch 2025","B200 · GB200 NVL72 · AI superchip era","trending") - snode(920,940, 380,86,ORAN,"gOrn","Revenue +114% YoY · Net Income +145%","AI demand acceleration · Data Center boom","chart") - snode(1310,940,380,86,ORAN,"gOrn","CUDA platform · 3M+ developers","Software ecosystem moat · AI standard","globe") - - # B7 — COMPANY HISTORY - draw_circle(B7_CX,B7_CY,B7_R, PURP,"gMH","Company History", - svg_icon=svg_growth(B7_CX,B7_CY,PURP)) - snode(15,725, 400,86,PURP,"gPrp","1993: Founded · Santa Clara, CA","Jensen Huang · Priem · Malachowsky","clock") - snode(15,821, 400,86,PURP,"gPrp","1999: GeForce 256 — world's first GPU","2006: CUDA — AI computing foundation","trending") - snode(15,917, 400,86,PURP,"gPrp","2025: ECR 351% · #8 US Semiconductors · RealRate","Revenue +114% YoY · AI supercycle","star") - - # DECORATIVE - draw_circle(D1_CX,D1_CY,D1_R, ORAN,"gOrn","AI Chips", - img=NV_GPU_D, clip_id="d1Clip", svg_icon=svg_chip(D1_CX,D1_CY,ORAN)) - draw_circle(D2_CX,D2_CY,D2_R, CYAN,"gCyn","Data Center", - img=NV_DC_D, clip_id="d2Clip", svg_icon=svg_wrench(D2_CX,D2_CY,CYAN)) - draw_circle(D3_CX,D3_CY,D3_R, LIME,"gLme","ECR Trend", - svg_icon=svg_trend(D3_CX,D3_CY,LIME,"→ 351%")) - draw_circle(D4_CX,D4_CY,D4_R, SKY,"gSky","$130.5B", fallback=" ") - t(D4_CX, D4_CY-6, "$130.5B", 18, WH, "middle", "800") - t(D4_CX, D4_CY+12, "Revenue", 14, SKY, "middle", "700") - - ECR_VAL, RANK_VAL, STATUS_VAL = "351%", "#8 / 44", "Top-Rated" - - elif COMPANY == "tesla": - - # B1 — ELON MUSK - draw_circle(B1_CX,B1_CY,B1_R, TBLUE,"gTBlu","Elon Musk · CEO", img=B1_D, clip_id="b1Clip") - snode(15,104, 420,86,TBLUE,"gTBlu","Co-Founder & CEO since 2008 · TSLA","SpaceX · xAI · Neuralink · The Boring Co","star") - snode(15,240, 420,86,TBLUE,"gTBlu","BSc Physics & Economics — Univ. Pennsylvania","Founded Zip2 (1995) · X.com → PayPal (1999)","chart") - snode(15,436, 420,86,TBLUE,"gTBlu","Autonomous AI vision: FSD & Robotaxi 2026","Tesla Bot (Optimus) · AI Supercomputer: Dojo","trending") - - # B2 — COMPANY OVERVIEW - draw_circle(B2_CX,B2_CY,B2_R, CYAN,"gCyn","COMPANY OVERVIEW", - img=B2_D, clip_id="b2Clip", fallback="TS") - snode(460,14, 410,86,CYAN,"gCyn","Founded: July 1, 2003 · San Carlos, CA","HQ: Austin, Texas (relocated 2021) · NASDAQ: TSLA","clock") - snode(1010,14, 430,86,CYAN,"gCyn","~125,665 employees worldwide","Gigafactories: Austin · Berlin · Shanghai · Fremont","building") - - # B3 — INDUSTRY POSITION - draw_circle(B3_CX,B3_CY,B3_R, SKY,"gSky","INDUSTRY POSITION", - inner_svg=ecr_gauge(B3_CX,B3_CY,135,150,"TOP-RATED",col=SKY)) - snode(1474, 8, 430,86,SKY,"gSky","ECR: 135% · Top-Rated · RealRate","#9 of 38 US Motor companies","star") - snode(1474,104, 430,86,SKY,"gSky","34pp above industry avg (102%)","9 of 38 US Motor companies Top-Rated","chart") - - # B4 — FINANCIAL HEALTH - draw_circle(B4_CX,B4_CY,B4_R, SKY,"gSky","FINANCIAL HEALTH", - inner_svg=balance_sheet_svg(B4_CX,B4_CY,"$137.8B")) - snode(1560,248, 350,86,SKY,"gSky","Revenue: $94.8B (FY2025)","Net Income: $3.9B · R&D: $6.4B","dollar") - snode(1560,344, 350,86,SKY,"gSky","Total Assets: $137.8B","Stockholders' Equity: $82.9B","chart") - snode(1560,440, 350,86,SKY,"gSky","Liabilities: $54.9B","Equity-to-Assets ratio: 60.2%","trending") - - # B5 — BUSINESS SEGMENTS - draw_circle(B5_CX,B5_CY,B5_R, TAQUA,"gTAqua","BUSINESS SEGMENTS", - inner_svg=pie_svg(B5_CX,B5_CY,32,[(81,SKY),(13,CYAN),(6,TBLUE)],"3 SEG",fsize=6.5)) - snode(1462,620, 440,86,TAQUA,"gTAqua","Automotive: ~$77.1B · ~81%","Model 3/Y/S/X/Cybertruck · FSD · Robotaxi","trending") - snode(1462,716, 440,86,TAQUA,"gTAqua","Energy Gen & Storage: ~$11.6B · ~13%","Powerwall · Megapack · Solar Roof","chart") - snode(1462,812, 440,86,TAQUA,"gTAqua","Services & Other: ~$6.1B · ~6%","Supercharger · Insurance · Tesla Fleet","globe") - - # B6 — 2025 HIGHLIGHTS - draw_circle(B6_CX,B6_CY,B6_R, TAQUA,"gTAqua","2025 HIGHLIGHTS", - img=B6_D, clip_id="b6Clip", svg_icon=svg_car(B6_CX,B6_CY,TAQUA)) - snode(530,940, 380,86,TAQUA,"gTAqua","Revenue: $94.8B · Net Income: $3.9B","R&D: $6.4B · SG&A: $5.8B · Tesla IR 2025","dollar") - snode(920,940, 380,86,TAQUA,"gTAqua","~1.79M vehicles delivered · FY2025","Cybertruck ramp · Model Y Juniper refresh","chart") - snode(1310,940,380,86,TAQUA,"gTAqua","Optimus production starts · FSD v13","Robotaxi pilot · Austin, TX · Tesla Shareholder","trending") - - # B7 — COMPANY HISTORY - draw_circle(B7_CX,B7_CY,B7_R, PURP,"gMH","Company History", - svg_icon=svg_growth(B7_CX,B7_CY,PURP)) - snode(15,725, 400,86,PURP,"gPrp","2003: Founded · San Carlos, California","Eberhard & Tarpenning · Musk joins 2004","clock") - snode(15,821, 400,86,PURP,"gPrp","2010: TSLA IPO · NASDAQ · 2012: Model S","First US EV company IPO since Ford (1956)","trending") - snode(15,917, 400,86,PURP,"gPrp","2025: ECR 135% · #9 US Motor · RealRate","Revenue $94.8B · Robotaxi & Optimus era","star") - - # DECORATIVE - draw_circle(D1_CX,D1_CY,D1_R, TBLUE,"gTBlu","EV Pioneer", - svg_icon=svg_car(D1_CX,D1_CY,TBLUE)) - draw_circle(D2_CX,D2_CY,D2_R, TAQUA,"gTAqua","Energy", - svg_icon=svg_bolt(D2_CX,D2_CY,TAQUA)) - draw_circle(D3_CX,D3_CY,D3_R, SKY,"gSky","ECR Trend", - svg_icon=svg_trend(D3_CX,D3_CY,SKY,"→ 135%")) - draw_circle(D4_CX,D4_CY,D4_R, CYAN,"gCyn","$94.8B", fallback=" ") - t(D4_CX, D4_CY-6, "$94.8B", 20, WH, "middle", "800") - t(D4_CX, D4_CY+12, "Revenue", 9, CYAN, "middle", "700") - - ECR_VAL, RANK_VAL, STATUS_VAL = "135%", "#9 / 38", "Top-Rated" - - elif COMPANY == "apple": - - # B1 — TIM COOK - draw_circle(B1_CX,B1_CY,B1_R, AMBER,"gAmb","Tim Cook · CEO", img=B1_D, clip_id="b1Clip") - snode(15,104, 420,86,AMBER,"gAmb","Chief Executive Officer since August 2011","Auburn BSc IE · Duke MBA · Former Apple COO","star") - snode(15,240, 420,86,AMBER,"gAmb","Led services transformation & Apple Silicon","$700B+ in share buybacks since 2012","chart") - snode(15,436, 420,86,AMBER,"gAmb","Apple Intelligence · Spatial Computing","Vision Pro · AI integration across ecosystem","trending") - - # B2 — COMPANY OVERVIEW - draw_circle(B2_CX,B2_CY,B2_R, CYAN,"gCyn","COMPANY OVERVIEW", - img=B2_D, clip_id="b2Clip", fallback="AP") - snode(460,14, 410,86,CYAN,"gCyn","Founded: April 1, 1976 · Cupertino, CA","Jobs · Wozniak · Wayne · NASDAQ: AAPL","clock") - snode(1010,14, 430,86,CYAN,"gCyn","~150,000 employees worldwide","Apple Park HQ · Cupertino, California","building") - - # B3 — INDUSTRY POSITION - draw_circle(B3_CX,B3_CY,B3_R, LIME,"gLme","INDUSTRY POSITION", - inner_svg=ecr_gauge(B3_CX,B3_CY,430,500,"TOP-RATED")) - snode(1474, 8, 430,86,LIME,"gLme","ECR: 430% · Top-Rated · RealRate","#1 of 17 US Computers companies","star") - snode(1474,104, 430,86,LIME,"gLme","177pp above industry avg (253%)","Highest ECR in US Computers 2025","chart") - - # B4 — FINANCIAL HEALTH - draw_circle(B4_CX,B4_CY,B4_R, SKY,"gSky","FINANCIAL HEALTH", - inner_svg=balance_sheet_svg(B4_CX,B4_CY,"$364.9B")) - snode(1560,248, 350,86,SKY,"gSky","Revenue: $416B (FY2025) +6% YoY","Net Income: $112B · Op. Margin: 32%","dollar") - snode(1560,344, 350,86,SKY,"gSky","Total Assets: $364.9B","Cash & Securities: $162B","chart") - snode(1560,440, 350,86,SKY,"gSky","R&D: $34.6B · Market Cap: $3.0T","Stockholders' Equity: $56.9B","trending") - - # B5 — BUSINESS SEGMENTS - draw_circle(B5_CX,B5_CY,B5_R, EMER,"gEmr","BUSINESS SEGMENTS", - inner_svg=pie_svg(B5_CX,B5_CY,32,[(48,ORAN),(23,LIME),(29,CYAN)],"3 SEG",fsize=6.5)) - snode(1462,620, 440,86,EMER,"gEmr","iPhone: ~$201B · 48%","iPhone 16 series · Apple Intelligence · 5G","chart") - snode(1462,716, 440,86,EMER,"gEmr","Services: ~$96B · 23%","App Store · iCloud · Apple TV+ · Apple Pay","dollar") - snode(1462,812, 440,86,EMER,"gEmr","Mac · iPad · Wearables: ~$119B · 29%","Apple Silicon · Vision Pro · AirPods Pro","globe") - - # B6 — 2025 HIGHLIGHTS - draw_circle(B6_CX,B6_CY,B6_R, ORAN,"gOrn","2025 HIGHLIGHTS", - img=B6_D, clip_id="b6Clip", svg_icon=svg_chip(B6_CX,B6_CY,ORAN)) - snode(530,940, 380,86,ORAN,"gOrn","Revenue: $416B (+6% YoY)","Net Income: $112B · Market Cap: $3.0T","dollar") - snode(920,940, 380,86,ORAN,"gOrn","Apple Intelligence & Siri AI overhaul","Vision Pro spatial computing · M4 chip era","trending") - snode(1310,940,380,86,ORAN,"gOrn","Services record: ~$96B revenue","App Store · iCloud · Subscription platform","chart") - - # B7 — COMPANY HISTORY - draw_circle(B7_CX,B7_CY,B7_R, PURP,"gMH","Company History", - svg_icon=svg_growth(B7_CX,B7_CY,PURP)) - snode(15,725, 400,86,PURP,"gPrp","1976: Founded · Cupertino, California","Jobs · Wozniak · Wayne · Apple I computer","clock") - snode(15,821, 400,86,PURP,"gPrp","1984: Macintosh · 2007: iPhone launched","2011: Tim Cook becomes CEO · Post-Jobs era","trending") - snode(15,917, 400,86,PURP,"gPrp","2025: ECR 430% · #1 US Computers · RealRate","Revenue $416B · Market Cap $3.0T","star") - - # DECORATIVE - draw_circle(D1_CX,D1_CY,D1_R, ORAN,"gOrn","Products", - img=B6_D, clip_id="d1Clip", svg_icon=svg_chip(D1_CX,D1_CY,ORAN)) - draw_circle(D2_CX,D2_CY,D2_R, CYAN,"gCyn","Ecosystem", - svg_icon=svg_neural(D2_CX,D2_CY,CYAN)) - draw_circle(D3_CX,D3_CY,D3_R, LIME,"gLme","ECR Trend", - svg_icon=svg_trend(D3_CX,D3_CY,LIME,"→ 430%")) - draw_circle(D4_CX,D4_CY,D4_R, SKY,"gSky","$3.0T", fallback=" ") - t(D4_CX, D4_CY-6, "$3.0T", 22, WH, "middle", "800") - t(D4_CX, D4_CY+12, "Mkt Cap", 14, SKY, "middle", "700") - - ECR_VAL, RANK_VAL, STATUS_VAL = "430%", "#1 / 17", "Top-Rated" - - elif COMPANY == "harley": - - # B1 — JOCHEN ZEITZ / CEO - draw_circle(B1_CX,B1_CY,B1_R, AMBER,"gAmb","Jochen Zeitz · CEO", - img=B1_D, clip_id="b1Clip", svg_icon=svg_motorcycle(B1_CX,B1_CY,AMBER)) - snode(15,104, 420,86,AMBER,"gAmb","President & CEO since February 2020","Architect of Hardwire 5-year strategy 2021–2025","star") - snode(15,240, 420,86,AMBER,"gAmb","Former CEO of Puma AG · Sustainability champion","Led HD's pivot to premium focus & profitability","chart") - snode(15,436, 420,86,AMBER,"gAmb","LiveWire EV spin-off 2022 · NYSE: LVWR","Selective market expansion · Global brand depth","trending") - - # B2 — COMPANY OVERVIEW - draw_circle(B2_CX,B2_CY,B2_R, CYAN,"gCyn","COMPANY OVERVIEW", - img=B2_D, clip_id="b2Clip", fallback="HD") - snode(460,14, 410,86,CYAN,"gCyn","Founded: 1903 · Milwaukee, Wisconsin","NYSE: HOG · One of the world's oldest motorcycle brands","clock") - snode(1010,14, 430,86,CYAN,"gCyn","~5,900 employees worldwide","HQ: 3700 W Juneau Ave · Milwaukee, WI 53208","building") - - # B3 — INDUSTRY POSITION - draw_circle(B3_CX,B3_CY,B3_R, LIME,"gLme","INDUSTRY POSITION", - inner_svg=ecr_gauge(B3_CX,B3_CY,147,200,"TOP-RATED")) - snode(1474, 8, 430,86,LIME,"gLme","ECR: 147% · Top-Rated · RealRate","#5 of 38 US Motor companies","star") - snode(1474,104, 430,86,LIME,"gLme","45pp above industry avg (102%)","Top-Rated in US Motor 2026","chart") - - # B4 — FINANCIAL HEALTH - draw_circle(B4_CX,B4_CY,B4_R, SKY,"gSky","FINANCIAL HEALTH", - inner_svg=balance_sheet_svg(B4_CX,B4_CY,"$12.1B")) - snode(1560,248, 350,86,SKY,"gSky","Revenue: $5.84B · Net Income: $695M","Total Assets: $12.1B","dollar") - snode(1560,344, 350,86,SKY,"gSky","Stockholders' Equity: $3.25B","Liabilities: ~$8.85B","chart") - snode(1560,440, 350,86,SKY,"gSky","ECR Strength: Stockholders' Equity +30pp","ECR Weakness: Current Liabilities –18pp","trending") - - # B5 — ECR ANALYSIS - draw_circle(B5_CX,B5_CY,B5_R, EMER,"gEmr","ECR ANALYSIS", - inner_svg=ecr_drivers_svg(B5_CX,B5_CY,"+30pp","–18pp","147%","TOP-RATED")) - snode(1462,620, 440,86,EMER,"gEmr","Greatest Strength: Stockholders' Equity","+30pp contribution to ECR","chart") - snode(1462,716, 440,86,EMER,"gEmr","Greatest Weakness: Liabilities, Current","–18pp drag on ECR","trending") - snode(1462,812, 440,86,EMER,"gEmr","ECR: 147% · 45pp above industry avg","Market average: 102% · #5 of 38 US Motor","star") - - # B6 — HARDWIRE STRATEGY / HIGHLIGHTS - draw_circle(B6_CX,B6_CY,B6_R, ORAN,"gOrn","HARDWIRE STRATEGY", - img=B6_D, clip_id="b6Clip", svg_icon=svg_motorcycle(B6_CX,B6_CY,ORAN)) - snode(530,940, 380,86,ORAN,"gOrn","Revenue: $5.84B · Net Income: $695M","Premium motorcycle focus · Selective market expansion","dollar") - snode(920,940, 380,86,ORAN,"gOrn","HD Financial Services (HDFS)","Retail loans · Wholesale financing · Insurance","chart") - snode(1310,940,380,86,ORAN,"gOrn","LiveWire (NYSE: LVWR) · EV expansion","S2 Del Mar · S2 Mulholland · Electric future","trending") - - # B7 — COMPANY HISTORY - draw_circle(B7_CX,B7_CY,B7_R, PURP,"gMH","Company History", - svg_icon=svg_growth(B7_CX,B7_CY,PURP)) - snode(15,725, 400,86,PURP,"gPrp","1903: Founded · Milwaukee, Wisconsin","William Harley & Arthur Davidson · Backyard workshop","clock") - snode(15,821, 400,86,PURP,"gPrp","1969: AMF acquisition · 1981: Management buyout","120+ years of American motorcycle heritage","trending") - snode(15,917, 400,86,PURP,"gPrp","2026: ECR 147% · #5 US Motor · RealRate","Hardwire strategy · Premium focus · EV expansion","star") - - # DECORATIVE - draw_circle(D1_CX,D1_CY,D1_R, ORAN,"gOrn","Heritage", - img=B6_D, clip_id="d1Clip", svg_icon=svg_motorcycle(D1_CX,D1_CY,ORAN)) - draw_circle(D2_CX,D2_CY,D2_R, CYAN,"gCyn","HDFS", - svg_icon=svg_handshake(D2_CX,D2_CY,CYAN)) - draw_circle(D3_CX,D3_CY,D3_R, LIME,"gLme","ECR Trend", - svg_icon=svg_trend(D3_CX,D3_CY,LIME,"→ 147%")) - draw_circle(D4_CX,D4_CY,D4_R, SKY,"gSky","$5.84B", fallback=" ") - t(D4_CX, D4_CY-6, "$5.84B", 20, WH, "middle", "800") - t(D4_CX, D4_CY+12, "Revenue", 14, SKY, "middle", "700") - - ECR_VAL, RANK_VAL, STATUS_VAL = "147%", "#5 / 38", "Top-Rated" - - # ══════════════════════════════════════════════════════════════════════════ - # CENTER HUB - # ══════════════════════════════════════════════════════════════════════════ - HR = 200 - - a(f'') - a(f'') - a(f'') - a(f'') - a(f'') - a(f'') - a(f'') - a(f'') - a(f'') - - for ang_deg in [0, 90, 180, 270]: - a1 = math.radians(ang_deg - 18); a2 = math.radians(ang_deg + 18) - ri = HR - 8 - a(f'') - - for i in range(8): - ang = math.radians(i * 45) - a(f'') - - # ── Hub Row 1: RealRate logo (centered, top) ───────────────────────────── - rl_w, rl_h = 220, 52 - rl_x, rl_y = HCX - rl_w // 2, HY + 10 - white_box(rl_x, rl_y, rl_w, rl_h) - if RL_D: - a(f'') - - a(f'') - - # ── Hub Row 2: Company logo (centered, 72×72) stacked above company name ── - lg_bw, lg_bh = 72, 72 - lg_bx = HCX - lg_bw // 2 # centered - lg_by = HY + 76 # top of logo box - - if COMPANY == "trilinc": - white_box(lg_bx, lg_by, lg_bw, lg_bh, op=.3) - a(f'' - f'' - f'' - f'' - f'' - f'') - t(HCX, HY+170, "TriLinc Global", 36, WH, "middle", "800") - t(HCX, HY+170, "Impact Investing · SME Lending · Developing Economies", 17, GREY, "middle", "500", op=.88, sp=".4") - t(HCX, HY+184, "TRLC · Est. 2008 · Delaware, USA", 18, GREY, "middle", "500", sp=".3") - - elif COMPANY == "strata": - if not hub_logo_png(lg_bx, lg_by, LOGO_D): - a(f'' - f'' - f'' - f'' - f'' - f'' - f'' - f'' - f'' - f'' - f'') - t(HCX, HY+164, "Strata Critical", 28, WH, "middle", "800") - t(HCX, HY+192, "Medical", 28, WH, "middle", "800") - t(HCX, HY+170, "Air Medical Transport · Critical Care · Emergency Response", 17, GREY, "middle", "500", op=.88, sp=".4") - t(HCX, HY+184, "CIK: 0001779128 · OTC-listed · Delaware, USA", 18, GREY, "middle", "500", sp=".3") - - elif COMPANY == "hp": - if not hub_logo_png(lg_bx, lg_by, LOGO_D): - a(f'' - f'' - f'' - f'' - f'' - f'') - t(HCX, HY+170, "HP Inc.", 46, WH, "middle", "800") - t(HCX, HY+170, "Personal Systems · Printing · Technology", 17, GREY, "middle", "500", op=.88, sp=".4") - t(HCX, HY+184, "Est. 1939 · HPQ · Palo Alto, California", 18, GREY, "middle", "500", sp=".3") - - elif COMPANY == "angi": - t(HCX, HY+130, "Angi Inc.", 52, WH, "middle", "800") - t(HCX, HY+170, "Home Services · Marketplace · Reviews", 18, GREY, "middle", "500", op=.88, sp=".4") - t(HCX, HY+184, "ANGI · NASDAQ · Est. 1995 · Denver, CO", 18, GREY, "middle", "500", sp=".3") - - elif COMPANY == "nvidia": - hub_logo_png(lg_bx, lg_by, LOGO_D) - t(HCX, HY+170, "Nvidia Corp.", 38, WH, "middle", "800") - t(HCX, HY+170, "AI Computing · GPU Architecture · Data Center", 17, GREY, "middle", "500", op=.88, sp=".4") - t(HCX, HY+184, "NVDA · Est. 1993 · Santa Clara, California", 18, GREY, "middle", "500", sp=".3") - - elif COMPANY == "apple": - if not hub_logo_png(lg_bx, lg_by, LOGO_D): - a(f'' - f'' - f'' - f'') - t(HCX, HY+170, "Apple Inc.", 46, WH, "middle", "800") - t(HCX, HY+170, "iPhone · Mac · Services · Apple Intelligence", 17, GREY, "middle", "500", op=.88, sp=".4") - t(HCX, HY+184, "AAPL · Est. 1976 · Cupertino, California", 18, GREY, "middle", "500", sp=".3") - - elif COMPANY == "tesla": - # Logo LEFT, name RIGHT in the same row - tl_cy = HY + 112 # row vertical center - tl_bx = HCX - 150 # logo box left edge (x=790) - tl_by = tl_cy - lg_bw // 2 # logo box top - white_box(tl_bx, tl_by, lg_bw, lg_bh, op=.3) - if LOGO_SVG_D: - _svg = base64.b64decode(LOGO_SVG_D).decode('utf-8') - _svg = _svg.replace('viewBox="0 0 278.67201 360.43799"', 'viewBox="0 15 278.67201 237"') - _svg_enc = base64.b64encode(_svg.encode('utf-8')).decode() - a(f'') - elif LOGO_D: - a(f'') - _nx = (tl_bx + lg_bw + 12 + HCX + 155) // 2 # center of right zone ≈ 984 - t(_nx, tl_cy + 14, "Tesla Inc.", 40, WH, "middle", "800") - t(HCX, HY+170, "Electric Vehicles · Energy Storage · AI Robotics", 17, GREY, "middle", "500", op=.88, sp=".4") - t(HCX, HY+184, "TSLA · NASDAQ · Est. 2003 · Austin, Texas", 18, GREY, "middle", "500", sp=".3") - - elif COMPANY == "harley": - if not hub_logo_png(lg_bx, lg_by, LOGO_D): - a(f'' - f'' - f'H-D' - f'') - t(HCX, HY+170, "Harley Davidson INC", 34, WH, "middle", "800") - t(HCX, HY+170, "Motorcycles · Financial Services · LiveWire EV", 17, GREY, "middle", "500", op=.88, sp=".4") - t(HCX, HY+184, "HOG · NYSE · Est. 1903 · Milwaukee, Wisconsin", 18, GREY, "middle", "500", sp=".3") - - a(f'') - a(f'') - - def badge(bx,by,bw,bh,c,label,val,fsz=24): - a(f'') - t(bx+bw//2, by+16, label, 16, c, "middle", wt="700", sp="1.1") - t(bx+bw//2, by+40, val, fsz, WH, "middle", "800") - - # Badges centred at HCX; span 336px → fits inside circle at this y (r=200, d≈104) - by_,bh_ = HY+200, 50 - badge(HCX-168, by_, 100, bh_, CYAN, "ECR SCORE", ECR_VAL, 28) - badge(HCX-60, by_, 120, bh_, AMBER, "INDUSTRY RANK",RANK_VAL, 24) - badge(HCX+68, by_, 100, bh_, LIME, "STATUS", STATUS_VAL, 18) - - a(f'') - t(W//2,1070,"Powered by RealRate: Using Explainable Financial AI · realrate.ai · ECR Data from RealRate", - 20,"#A8D8FF","middle",op=.9,sp=".6") - - a(''); return '\n'.join(p) - -html = (f'' - f'' - f'' - f'' - f'{build()}') - -# ── Output paths ─────────────────────────────────────────────────────────────── -HERE = Path(__file__).parent -_subdirs = { - "trilinc": None, - "strata": "Strata Critical Medical", - "hp": "HP Inc", - "angi": "Angi Inc", - "nvidia": "Nvidia Corp", - "tesla": "Tesla Inc", - "apple": "Apple Inc", - "harley": "Harley Davidson INC", -} -_subdir = _subdirs[COMPANY] -OUT_DIR = HERE / _subdir if _subdir else HERE -if _subdir: - OUT_DIR.mkdir(exist_ok=True) -OUT = str(OUT_DIR / f"{COMPANY}-mindmap.png") -POST_PATH = str(OUT_DIR / f"{COMPANY}-linkedin-post.txt") - -# ── Render ───────────────────────────────────────────────────────────────────── -print("Rendering…") -with sync_playwright() as pw: - br = pw.chromium.launch() - pg = br.new_page(viewport={"width": W, "height": H}, device_scale_factor=2) - pg.set_content(html, timeout=60000) - try: - pg.wait_for_load_state("networkidle", timeout=45000) - except Exception: - pass - pg.wait_for_timeout(2500) - HI_OUT = OUT.replace(".png", "_2x.png") - pg.screenshot(path=HI_OUT, clip={"x": 0, "y": 0, "width": W, "height": H}) - br.close() - -img_out = _PIL.open(HI_OUT).resize((W, H), _PIL.LANCZOS) -img_out.save(OUT, "PNG", optimize=True) -os.remove(HI_OUT) -print(f"Done (1920×1080): {OUT}") - -# ── LinkedIn post ────────────────────────────────────────────────────────────── -if COMPANY == "trilinc": - CAPTION = f"""\ -TriLinc Global Impact Fund ranks #1 in US Finance Services. ECR: 124%. - -46 percentage points above the industry average of 78%. Top-Rated by RealRate's independent, explainable financial AI. - -THE FUND -Founded 2008 · Delaware, USA · Ticker: TRLC · ~$1.4B AUM -Female-founded · Female-owned · Female-led - -LEADERSHIP -Gloria Nelund — Founder, Chief Executive Officer & Chief Compliance Officer -Former CEO, US Private Wealth at Deutsche Bank — oversaw $50 billion in assets under management -Over 40 years of experience in international asset management - -FINANCIAL HEALTH -Total Assets: $282.8M · Stockholders' Equity: $272.6M · Liabilities: $10.2M -Equity-to-Assets Ratio: 96.4% · Net Income: –$8.5M -Primary ECR Drivers: Equity +57pp · Revenue –17pp - -INVESTMENT STRATEGY -Direct loans · Trade finance · Structured credit · Preferred equity -SMEs with fewer than 500 employees · Developing economies · Local sub-advisors · 4 continents - -IMPACT -Sustainable community development · Workforce capacity building · Financial inclusion · Food security -Sectors: Education · Energy · Housing · Health - -2008: Founded | 2017: TRLC listed on OTC Pink Markets | 2025: Ranked #1 in US Finance Services - -Powered by RealRate: Using Explainable Financial AI - -Full US Finance Services ranking: {RANKING_URL} - -#RealRate #ImpactInvesting #ESG #SMELending #FinancialHealth""" - -elif COMPANY == "hp": - CAPTION = f"""\ -HP Inc. ranks #9 in US Computers. ECR: 258%. - -At the industry average of 258%. Rated by RealRate's independent, explainable financial AI. - -THE COMPANY -Personal computing and printing technology leader · Palo Alto, California -Founded 1939 · Spun off from Hewlett-Packard November 2015 · Ticker: HPQ -~58,000 employees worldwide - -LEADERSHIP -Enrique Lores — President & Chief Executive Officer -Joined HP in 1989 · Led Imaging, Printing & Solutions before becoming CEO November 2019 -"Future Ready" transformation — restructuring for AI-era growth and subscription revenue - -FINANCIAL HEALTH -Revenue: $53.6B (FY2024) · Net Income: $2.8B · Operating margin: 7.1% -Total Assets: $39.9B · Stockholders' Equity: –$1.3B (deficit from cumulative buybacks) -Cash: $3.25B · Long-term Debt: $8.3B · R&D: $1.64B - -BUSINESS SEGMENTS -Personal Systems: ~$34.4B (64%) — PCs, laptops, workstations, Chromebooks -Printing: ~$19.1B (36%) — LaserJet, OfficeJet, Instant Ink supplies -Poly collaboration hardware — acquired 2022 · hybrid work solutions - -HISTORY -1939: William Hewlett & Dave Packard found the company in a Palo Alto garage -2015: Hewlett-Packard splits into HP Inc. (HPQ) and Hewlett Packard Enterprise (HPE) -FY2024: $53.6B revenue · ECR 258% · AI PC transformation underway - -Powered by RealRate: Using Explainable Financial AI - -Full US Computers ranking: {RANKING_URL} - -#RealRate #HPInc #AIComputer #FinancialHealth #TechIndustry""" - -elif COMPANY == "strata": - CAPTION = f"""\ -Strata Critical Medical ranks #1 in US Air. ECR: 123%. - -54 percentage points above the industry average of 69%. Top-Rated by RealRate's independent, explainable financial AI. - -THE COMPANY -Air Medical Transport · Critical Care · Emergency Response · Delaware, USA -CIK: 0001779128 · OTC-listed · STCM · Publicly reporting - -FINANCIAL HEALTH -Total Assets: $325.5M · Stockholders' Equity: $279.1M · Liabilities: $46.4M -Revenue: $197.1M (FY2025) · Net Income: +$41.3M -First profitable year in company history - -ECR DRIVERS -Greatest Strength: Operating Expenses — +46pp contribution to ECR -Greatest Weakness: Other Expenses — –81pp drag on ECR - -GROWTH JOURNEY -2021: Revenue $50.5M · Net Income –$40.1M — Rapid expansion phase begins -2022–2024: Revenue grew from $146M to $249M — approximately 4× growth in 3 years -2025: ECR 123% · #1 US Air · RealRate — First profitable year in history - -Powered by RealRate: Using Explainable Financial AI - -Full US Air ranking: {RANKING_URL} - -#RealRate #AirMedical #CriticalCare #FinancialHealth #Healthcare""" - -elif COMPANY == "nvidia": - CAPTION = f"""\ -Nvidia Corp. ranks #8 in US Semiconductors. ECR: 351%. - -98 percentage points above the industry average of 253%. Top-Rated by RealRate's independent, explainable financial AI. - -THE COMPANY -AI computing and GPU technology leader · Santa Clara, California -Founded April 5, 1993 · NASDAQ: NVDA · ~36,000 employees worldwide - -LEADERSHIP -Jensen Huang — Co-Founder & Chief Executive Officer -Oregon State BSc Electrical Engineering · Stanford MS Electrical Engineering -Led Nvidia from gaming graphics chipmaker to the world's AI computing infrastructure provider - -FINANCIAL HEALTH -Revenue: $130.5B (FY2025) · Net Income: $72.9B -Total Assets: $111.6B · Stockholders' Equity: $79.3B · Liabilities: $32.3B -R&D investment: $12.9B - -ECR DRIVERS -Greatest Strength: Net Income — +94pp contribution to ECR -Greatest Weakness: Stockholders' Equity — –56pp drag on ECR - -BUSINESS SEGMENTS -Data Center: ~$115.2B (88%) — H100, H200, Blackwell B200, GB200 NVL72, NVLink, InfiniBand -Gaming: ~$11.4B (9%) — GeForce RTX 50 series · DLSS 4 · Ray Tracing -Professional Visualization · Automotive · OEM: ~$3.9B (3%) — DRIVE platform · Omniverse · Jetson - -HISTORY -1993: Jensen Huang, Curtis Priem & Chris Malachowsky found Nvidia in Santa Clara -1999: GeForce 256 — world's first GPU | 2006: CUDA platform — AI computing foundation -2025: ECR 351% · #8 US Semiconductors · Revenue +114% YoY · RealRate - -Powered by RealRate: Using Explainable Financial AI - -Full US Semiconductors ranking: {RANKING_URL} - -#RealRate #Nvidia #AIComputing #GPUs #FinancialHealth""" - -elif COMPANY == "tesla": - CAPTION = f"""\ -Tesla Inc ranks #9 in US Motor. ECR: 135%. - -34 percentage points above the industry average of 102%. Top-Rated by RealRate's independent, explainable financial AI. - -THE COMPANY -Electric vehicles, energy storage, and AI company · Austin, Texas -Founded July 1, 2003 · NASDAQ: TSLA -~125,665 employees worldwide - -LEADERSHIP -Elon Musk — Co-Founder & Chief Executive Officer (since 2008) -Also CEO of SpaceX, xAI, Neuralink & The Boring Company -Driving Tesla's transition from EV maker to full-stack AI and robotics company - -FINANCIAL HEALTH -Revenue: $94.8B (FY2025) · Net Income: $3.9B · R&D: $6.4B -Total Assets: $137.8B · Stockholders' Equity: $82.9B · Liabilities: $54.9B -Equity-to-Assets Ratio: 60.2% - -ECR DRIVERS -Greatest Strength: Cost of Goods and Services Sold — +36pp contribution to ECR -Greatest Weakness: Other Expenses — –27pp drag on ECR - -BUSINESS SEGMENTS -Automotive: ~81% — Model 3/Y/S/X/Cybertruck · Full Self-Driving · Robotaxi -Energy Generation & Storage: ~13% — Powerwall · Megapack · Solar Roof -Services & Other: ~6% — Supercharger network · Insurance · Tesla Fleet - -HISTORY -2003: Tesla Motors founded by Martin Eberhard & Marc Tarpenning · San Carlos, California -2008: Elon Musk becomes CEO · First Roadster delivered | 2010: TSLA IPO on NASDAQ -2025: ECR 135% · #9 US Motor · Top-Rated · Revenue $94.8B · Robotaxi & Optimus era - -Powered by RealRate: Using Explainable Financial AI - -Full US Motor ranking: {RANKING_URL} - -#RealRate #Tesla #ElectricVehicles #FinancialHealth #EV""" - -elif COMPANY == "angi": - CAPTION = f"""\ -Angi Inc. ranks #1 in US Advertising. ECR: 157%. - -78 percentage points above the industry average of 80%. Top-Rated by RealRate's independent, explainable financial AI. - -THE COMPANY -Online home services marketplace · Denver, Colorado -Founded 1995 · NASDAQ: ANGI · IAC subsidiary -~4,500 employees worldwide - -LEADERSHIP -Jeff Kip — Chief Executive Officer -Brands: Angi (formerly Angie's List) · HomeAdvisor · Handy -Connecting homeowners with local service professionals across the United States - -FINANCIAL HEALTH -Total Assets: $1.68B · Stockholders' Equity: $1.46B · Liabilities: $222.4M -Revenue: $1.03B · Net Income: +$43.8M -Equity-to-Assets Ratio: 86.7% - -ECR DRIVERS -Greatest Strength: Stockholders' Equity — +68pp contribution to ECR -Greatest Weakness: Marketing & Selling Expenses — –22pp drag on ECR - -PLATFORM -Angi: Homeowner marketplace · Crowd-sourced reviews · Cost guides -HomeAdvisor: Instant Pro Connect · Local professionals · Project matching -Handy: On-demand home services · Cleaning · Assembly · Moving · Repairs - -HISTORY -1995: Angie's List founded in Columbus, Ohio — review platform for home service contractors -1998: ServiceMagic founded, rebranded HomeAdvisor in 2012 -2017: ANGI Homeservices formed via HomeAdvisor & Angie's List merger | 2021: Rebranded to Angi Inc. -2025: ECR 157% · #1 US Advertising · RealRate - -Powered by RealRate: Using Explainable Financial AI - -Full US Advertising ranking: {RANKING_URL} - -#RealRate #HomeServices #AngiInc #FinancialHealth #Marketplace""" - -elif COMPANY == "harley": - CAPTION = f"""\ -Harley Davidson INC ranks #5 in US Motor. ECR: 147%. - -45 percentage points above the industry average of 102%. Top-Rated by RealRate's independent, explainable financial AI. - -THE COMPANY -Iconic American motorcycle brand · Milwaukee, Wisconsin -Founded 1903 · NYSE: HOG · ~5,900 employees worldwide -Brands: Harley-Davidson · LiveWire · Harley-Davidson Financial Services (HDFS) - -LEADERSHIP -Jochen Zeitz — President & Chief Executive Officer -Former CEO of Puma AG · Architect of the "Hardwire" 2021–2025 strategic plan -Focus on premium motorcycles, selective market expansion, and EV platform development - -FINANCIAL HEALTH -Revenue: $5.84B · Net Income: $695M -Total Assets: $12.1B · Stockholders' Equity: $3.25B · Liabilities: ~$8.85B - -ECR DRIVERS -Greatest Strength: Stockholders' Equity — +30pp contribution to ECR -Greatest Weakness: Liabilities, Current — –18pp drag on ECR - -BUSINESS -Motorcycles & Related Products: Touring, Softail, Sportster, Adventure, Electric -Financial Services (HDFS): Retail loans, wholesale financing, insurance, licensing -LiveWire (NYSE: LVWR): Dedicated EV motorcycle brand, spun off 2022 - -HISTORY -1903: William Harley & Arthur Davidson build first motorcycle in Milwaukee backyard -1969: AMF acquisition | 1981: Management buyout — independence restored -2021: Hardwire strategy launched | 2022: LiveWire EV brand spun off -2026: ECR 147% · #5 US Motor · Top-Rated · RealRate - -Powered by RealRate: Using Explainable Financial AI - -Full US Motor ranking: {RANKING_URL} - -#RealRate #HarleyDavidson #Motorcycles #FinancialHealth #EV""" - -elif COMPANY == "apple": - CAPTION = f"""\ -Apple Inc. ranks #1 in US Computers. ECR: 430%. - -177 percentage points above the industry average of 253%. Top-Rated by RealRate's independent, explainable financial AI. - -THE COMPANY -World's most valuable technology company · Cupertino, California -Founded April 1, 1976 · NASDAQ: AAPL · ~150,000 employees worldwide - -LEADERSHIP -Tim Cook — Chief Executive Officer -CEO since August 2011 · Auburn University BSc Industrial Engineering · Duke MBA -Led Apple's transformation from hardware maker to services, AI, and spatial computing company - -FINANCIAL HEALTH -Revenue: $416B (FY2025) · +6% YoY · Net Income: $112B · Operating Margin: 32% -Total Assets: $364.9B · Stockholders' Equity: $56.9B -Cash & Securities: $162B · R&D investment: $34.6B · Market Cap: $3.0 Trillion - -BUSINESS SEGMENTS -iPhone: ~$201B (48%) — iPhone 16 series · Apple Intelligence · 5G -Services: ~$96B (23%) — App Store · iCloud · Apple TV+ · Apple Pay · Apple Arcade -Mac · iPad · Wearables: ~$119B (29%) — Apple Silicon M4 · Vision Pro · AirPods Pro - -HISTORY -1976: Steve Jobs, Steve Wozniak & Ronald Wayne found Apple · Cupertino, California -1984: Macintosh launched | 2007: iPhone changes mobile computing | 2011: Tim Cook becomes CEO -2025: ECR 430% · #1 US Computers · Revenue $416B · Market Cap $3.0 Trillion · RealRate - -Powered by RealRate: Using Explainable Financial AI - -Full US Computers ranking: {RANKING_URL} - -#RealRate #Apple #iPhone #FinancialHealth #TechIndustry""" - -with open(POST_PATH, "w", encoding="utf-8") as _f: - _f.write(CAPTION + "\n") -print("LinkedIn post saved:", POST_PATH) diff --git a/run_mindmaps.ps1 b/run_mindmaps.ps1 deleted file mode 100644 index 5e2bbc3..0000000 --- a/run_mindmaps.ps1 +++ /dev/null @@ -1,25 +0,0 @@ -# Run from any directory — script always executes from its own folder -$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path -Set-Location $ScriptDir - -$COMPANIES = @("trilinc", "strata", "hp", "angi", "nvidia", "tesla", "apple", "harley") - -if ($args.Count -eq 0) { - Write-Host "Usage: .\run_mindmaps.ps1 [company2 ...] | .\run_mindmaps.ps1 all" - Write-Host "Companies: $($COMPANIES -join ', ')" - exit 0 -} - -$targets = if ($args[0] -eq "all") { $COMPANIES } else { $args } - -foreach ($company in $targets) { - if ($COMPANIES -notcontains $company) { - Write-Warning "Unknown company: $company — skipping" - continue - } - Write-Host "Generating mind map for $company..." - python gen_mindmap.py $company - if ($LASTEXITCODE -ne 0) { - Write-Warning "Failed: $company (exit $LASTEXITCODE)" - } -} diff --git a/run_mindmaps.sh b/run_mindmaps.sh deleted file mode 100644 index ce78a7f..0000000 --- a/run_mindmaps.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -set -e -# Always run from the script's own directory -cd "$(dirname "$0")" - -COMPANIES=(trilinc strata hp angi nvidia tesla apple harley) - -usage() { - echo "Usage: bash run_mindmaps.sh [company2 ...] | bash run_mindmaps.sh all" - echo "Companies: ${COMPANIES[*]}" -} - -if [ $# -eq 0 ]; then - usage - exit 0 -fi - -if [ "$1" = "all" ]; then - targets=("${COMPANIES[@]}") -else - targets=("$@") -fi - -for company in "${targets[@]}"; do - found=0 - for c in "${COMPANIES[@]}"; do - [ "$c" = "$company" ] && found=1 && break - done - if [ $found -eq 0 ]; then - echo "Warning: Unknown company '$company' — skipping" - continue - fi - echo "Generating mind map for $company..." - python gen_mindmap.py "$company" -done diff --git a/skills/mindmap.md b/skills/mindmap.md index eb70aa7..8a9bf48 100644 --- a/skills/mindmap.md +++ b/skills/mindmap.md @@ -1,80 +1,1872 @@ ---- -description: Generate a RealRate mind map for one or more companies. Usage: /mindmap [company2 ...] | /mindmap all -argument-hint: -allowed-tools: [Bash] ---- +# RealRate Mind Map Generator -# Mind Map Generator +Generate a 1920×1080 radial "mind map" infographic (PNG) plus a ready-to-post +LinkedIn caption for one or more RealRate-ranked companies. Usage: +`/mindmap [company2 ...]` or `/mindmap all`. -Generate 1920×1080 LinkedIn mind map images for one or more RealRate-ranked companies. +This skill is self-contained — everything needed to run it lives in this +file. It does **not** scan the filesystem for a pre-existing script, does +**not** assume any personal machine path, and does **not** require any +sibling folder (like a `RealRate Logos/` asset folder) to already exist. +The complete generator — including the RealRate logo, embedded as base64 — +lives in the "Generator source" section below. Clone this repo onto any +machine and it works identically, with nothing else present. -## Arguments +## How this skill works — no directory scanning, no pre-existing files -The user invoked this command with: $ARGUMENTS +1. Copy the Python source verbatim from **Generator source** below into a + new file named `gen_mindmap.py`, written into whichever directory the + user wants the output to land in (ask if unclear; default to the + current working directory). The script writes its own output — a PNG, + a caption `.txt`, and a small `img_cache/` folder — next to wherever it + is placed, so placing it in the target output directory is what + controls where results go. +2. Run it once per requested company: + ``` + python gen_mindmap.py + ``` + (fall back to `python3` if `python` doesn't resolve on this machine). + If the request is `all`, run it once for every key in the Supported + Companies table below. +3. After the run, delete the `gen_mindmap.py` file (and, unless the user + wants to keep it for faster re-runs, the `img_cache/` folder) — leave + only the generated PNG and caption `.txt` behind. This skill never + leaves a script file sitting in the user's project. +4. Report the output file paths to the user. This skill only generates + files — never open, upload, or post the image or caption anywhere. -## Supported Companies +Do not retype, paraphrase, or "improve" the script from memory — copy it +byte-for-byte from the fenced block below. It's long because it draws +custom SVG icons, gauges, and precise per-company layout; small edits +easily break positioning. -| Argument | Company | Industry | ECR | Rank | -|---|---|---|---|---| -| `trilinc` | TriLinc Global | US Finance Services | 124% | #1/4 | -| `strata` | Strata Critical Medical | US Air | 123% | #1/4 | -| `hp` | HP Inc. | US Computers | 258% | #9/17 | -| `angi` | Angi Inc. | US Advertising | 157% | #1/4 | -| `nvidia` | Nvidia Corp. | US Semiconductors | 351% | #8/44 | -| `tesla` | Tesla Inc. | US Motor | 135% | #9/38 | -| `apple` | Apple Inc. | US Computers | 430% | #1/17 | -| `harley` | Harley Davidson INC | US Motor | 147% | #5/38 | +## First-run dependencies -Use `all` to run every company in sequence. +The generator needs `requests`, `playwright`, `Pillow`, and a one-time +Playwright browser install: -## Instructions +``` +pip install requests playwright Pillow +playwright install chromium +``` -1. Parse $ARGUMENTS. Lowercase and trim each token. -2. If no argument is given, list the supported companies above and stop. -3. If the argument is `all`, expand to the full company list above. -4. For each company in the list: - - Run via Bash: - ``` - python gen_mindmap.py - ``` - - `gen_mindmap.py` is the source of truth for supported companies. If it exits with an error, report the error message to the user and continue to the next company. - - On success, report the output path printed by the script (e.g. `Done (1920×1080): `). -5. After all runs, print a summary: - - ✓ succeeded: list company names - - ✗ failed: list company names with their error +If a run fails with a missing package or missing browser error, tell the +user to run the above and retry — do not silently install dependencies +without asking first. -## Output locations +## Standing rule — one generator, embedded here -Each company writes to its own subfolder inside the project directory: +This skill file is the single source of truth for the generator. To add a +new company, edit the `elif COMPANY == "companyname":` blocks inside the +embedded script directly — there are two such blocks (one for image/asset +fetching near the top, one for the SVG copy/caption text near the bottom). +Never fork a second script or duplicate the generator elsewhere. Once +edited, update the Supported Companies and Archive Slugs tables below to +match. -| Company | Subfolder | -|---|---| -| trilinc | *(root — no subfolder)* | -| strata | `Strata Critical Medical/` | -| hp | `HP Inc/` | -| angi | `Angi Inc/` | -| nvidia | `Nvidia Corp/` | -| tesla | `Tesla Inc/` | -| apple | `Apple Inc/` | -| harley | `Harley Davidson INC/` | +## Supported companies -Files per company: `-mindmap.png` (1920×1080) · `-linkedin-post.txt` +| Key | Company | Industry | +|---|---|---| +| `trilinc` | TriLinc Global Impact Fund | US Finance Services | +| `strata` | Strata Critical Medical | US Air | +| `hp` | HP Inc. | US Computers | +| `angi` | Angi Inc. | US Advertising | +| `nvidia` | Nvidia Corp. | US Semiconductors | +| `tesla` | Tesla Inc. | US Motor | +| `apple` | Apple Inc. | US Computers | +| `harley` | Harley Davidson INC | US Motor | -## First-run dependencies +If an unrecognised key is given, stop and tell the user which keys are +supported instead of guessing. + +**Archive slugs per company** (industry archive path vs. public rankings +slug — these can differ by year): + +| Company | Archive path | Rankings slug | +|---|---|---| +| trilinc | `us_finance_services/2025/` | `us_finance_services/2026` | +| strata | `us_air/2025/` | `us_air/2026` | +| hp | `us_computers/2025/` | `us_computers/2025` | +| angi | `us_advertising/2025/` | `us_advertising/2026` | +| nvidia | `us_semiconductors/2025/` | `us_semiconductors/2026` | +| tesla | `us_motor/2025/` | `us_motor/2026` | +| apple | `us_computers/2025/` | `us_computers/2025` | +| harley | `us_motor/2025/` | `us_motor/2026` | + +## Data source — always fetch live, never hardcode + +**Rule: never hardcode or recall ECR/financial values from memory. Always +fetch live from the ranking data archive first**, using the archive path +for that company's industry from the table above, then update the +relevant `elif COMPANY ==` block in the embedded script with the verified +numbers before generating. -The generator needs the packages in `requirements.txt` (repo root) and a -one-time Playwright browser install. If a run fails with a missing package or -missing browser error, tell the user to run: +The archive is internal-only — used for data verification, never shared or +linked publicly (not in captions, not in code comments, not committed to a +public file). Only the public rankings URL +(`realrate.ai/rankings/[slug]/[year]`) and methodology URL +(`realrate.ai/methodology`) are safe to reference publicly. The embedded +script already fetches the live rankings URL on every run and only falls +back to the slug table above if that fetch fails. + +## Shared canvas & layout + +All companies share the same layout constants — read these before editing +the embedded script or adding a new company block: ``` -pip install -r requirements.txt -playwright install chromium +SVG coords: W=1920, H=1080 (internal coordinate space — never change) +Output size: 1920×1080 px (SVG viewBox scales via preserveAspectRatio="none") +Hub centre: HCX=940, HCY=494 (rect HX=700, HY=348, HW=480, HH=292) +Hub radius: HR=200 +Render: Playwright viewport=1920×1080, device_scale_factor=2 → Pillow LANCZOS → 1920×1080 ``` -and then retry — do not silently install dependencies without asking first. -Fall back to `python3`/`pip3` if `python`/`pip` don't resolve on this machine. +Font sizes are defined in the same 1920×1080 SVG coordinate space as the +output, so SVG px = visible px directly (1:1 scale). + +**Hub centre layout (all companies):** + +``` +Row 1 (HY+10 → HY+62): RealRate logo — white box 220×52, centred at HCX + separator at HY+68 + +Row 2 (company content): + • All except Tesla — company logo centred in 72×72 white box (top HY+76), + company name centred at HCX below the box (HY+170) + • Tesla only — T-mark logo 72×72 white box LEFT (x=HCX-150), + "Tesla Inc." centred in the right zone (x≈984, y=tl_cy+14) + + separator at HY+156 + descriptor line 1 at HY+170 + descriptor line 2 at HY+184 + separator at HY+192 + +Badges (HY+200, h=50): + ECR SCORE 100px HCX-168 + INDUSTRY RANK 120px HCX-60 + STATUS 100px HCX+68 + — badge span=336px, fits inside circle at this y (d≈104, r=200) +``` + +**Branch circle positions (all companies):** + +| Role | Colour | cx, cy, r | +|---|---|---| +| B1 — CEO / Leader | AMBER #F59E0B | 640, 300, 82 | +| B7 — History / Journey | PURP #A78BFA | 600, 600, 68 | +| B2 — Company Overview | CYAN #3DBACD | 940, 130, 64 | +| B3 — Industry Position | LIME #86EF60 | 1400, 200, 64 | +| B4 — Financial Health | SKY #60A5FA | 1480, 430, 62 | +| B5 — Segments / Strategy | EMER #34D399 | 1390, 720, 62 | +| B6 — Highlights / Focus | ORAN #FB923C | 920, 820, 62 | + +**Decorative circle positions (all companies):** + +| Role | cx, cy, r | +|---|---| +| D1 — bottom-left | 700, 820, 44 | +| D2 — bottom-right | 1155, 770, 44 | +| D3 — mid-left | 220, 623, 44 | +| D4 — top-right | 1170, 185, 44 | + +**Accent colour per company:** EMER (trilinc) · SKY (strata) · CYAN (hp) · +PINK (angi) · LIME (nvidia) · SKY (tesla — full blue palette: TBLUE #2563EB +· TAQUA #0891B2 · PURP · CYAN · SKY) + +**Font sizes (SVG coords = visible px at 1:1 scale):** + +| Context | SVG px | Visible px | +|---|---|---| +| Node box title | 22 | ~14 | +| Node box subtitle | 18 | ~11 | +| Branch outer label | 20 | ~12.5 | +| ECR gauge value | 22 | ~14 | +| ECR gauge label / status | 12–14 | ~8 | +| Hub company name | 28–52 (varies) | ~18–33 | +| Hub descriptor text | 17–18 | ~11 | +| Badge value | 18–28 | ~11–17 | +| Badge label | 16 | ~10 | +| D4 data value | 19–22 | ~12–14 | +| Footer | 20 | ~12.5 | + +## LinkedIn post rules + +The caption is generated automatically by the script on every run — +paste-ready, no edits needed. Rules baked into the generator's caption +logic: + +- Never tag companies in the caption — always in the first pinned comment +- Max 5 hashtags, always include `#RealRate` +- Every post must include: `Powered by RealRate: Using Explainable Financial AI` +- Link only to the public rankings page for that industry/year — never to + the internal archive +- The ranking URL is fetched live on every run; falls back to the slug in + the Archive Slugs table above if the live fetch fails + +To update caption copy, edit the `CAPTION` f-string in the relevant +`elif COMPANY == "..."` block inside the embedded script. + +## Key links + +| | URL | +|---|---| +| Rankings (public) | https://realrate.ai/rankings | +| Methodology (public) | https://realrate.ai/methodology | +| Internal ranking archive | *(internal only — never link or share publicly)* | + +## Generator source + +Copy this exactly into `gen_mindmap.py` (see step 1 above). It embeds the +RealRate logo as base64 internally, so no external logo file is needed. + +```python +""" +RealRate radial mindmap — universal generator +Usage: + python gen_mindmap.py # TriLinc Global Impact Fund (default) + python gen_mindmap.py trilinc # TriLinc Global Impact Fund + python gen_mindmap.py strata # Strata Critical Medical Inc + python gen_mindmap.py hp # HP Inc. + python gen_mindmap.py angi # Angi Inc. + python gen_mindmap.py nvidia # Nvidia Corp. + python gen_mindmap.py harley # Harley Davidson INC +""" +import sys, math, base64, re, requests, urllib3, time, os +from pathlib import Path +from PIL import Image as _PIL +from playwright.sync_api import sync_playwright + +urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) + +# ── Company selection ────────────────────────────────────────────────────────── +COMPANY = sys.argv[1].lower() if len(sys.argv) > 1 else "trilinc" +if COMPANY not in ("trilinc", "strata", "hp", "angi", "nvidia", "tesla", "apple", "harley"): + print(f"Unknown company '{COMPANY}'. Use: trilinc, strata, hp, angi, nvidia, tesla, apple, harley"); sys.exit(1) + +# ── Constants ────────────────────────────────────────────────────────────────── +W, H = 1920, 1080 +F = "'Manrope',Segoe UI,Helvetica Neue,Arial,sans-serif" +BG = "#050B18"; GREY="#AFAFAF"; WH="#FFFFFF" +AMBER="#F59E0B"; CYAN="#3DBACD"; LIME="#86EF60"; SKY="#60A5FA" +EMER="#34D399"; PINK="#F472B6"; PURP="#A78BFA"; ORAN="#FB923C" +TBLUE="#2563EB"; TAQUA="#0891B2" +_ACCENT_BY_COMPANY = { + "trilinc": EMER, "strata": SKY, "tesla": SKY, "angi": PINK, + "nvidia": LIME, "harley": AMBER, "apple": ORAN, +} +ACCENT = _ACCENT_BY_COMPANY.get(COMPANY, CYAN) + +CACHE_DIR = Path(__file__).parent / "img_cache" +CACHE_DIR.mkdir(exist_ok=True) + +HDRS = { + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0 Safari/537.36", + "Referer": "https://en.wikipedia.org/", + "Accept": "image/webp,image/jpeg,image/*,*/*;q=0.8", + "Accept-Language": "en-US,en;q=0.9", +} + +# ── Utilities ────────────────────────────────────────────────────────────────── +def verify_ranking_url(industry_slug, fallback_year): + try: + hdrs = {"User-Agent": HDRS["User-Agent"], "Accept-Language": "en-US,en;q=0.9"} + r = requests.get("https://realrate.ai/rankings", timeout=20, headers=hdrs, verify=False) + r.raise_for_status() + hits = re.findall(r'/rankings/([\w]+)/(\d{4})', r.text) + matches = [(slug, yr) for slug, yr in hits if industry_slug in slug] + if matches: + slug, yr = max(matches, key=lambda x: x[1]) + url = f"https://realrate.ai/rankings/{slug}/{yr}" + print(f" Ranking URL verified: {url}") + return url + except Exception as e: + print(f" Warning: rankings page fetch failed — {e}") + fallback = f"https://realrate.ai/rankings/{industry_slug}/{fallback_year}" + print(f" Ranking URL (fallback): {fallback}") + return fallback + +def raster_mime(d): + if d[:5] == 'iVBOR': return 'image/png' + if d[:5] == 'UklGR': return 'image/webp' + if d[:4] == '/9j/': return 'image/jpeg' + return None + +def is_raster_b64(d): + return raster_mime(d) is not None + +def cache_path(url, suffix=".cache"): + return CACHE_DIR / (base64.urlsafe_b64encode(url.encode()).decode()[:80] + suffix) + +def fetch_b64(url): + cf = cache_path(url) + if cf.exists(): + d = cf.read_text() + if is_raster_b64(d): + return d + print(f" Cache invalid, re-fetching {url[-50:]}") + cf.unlink() + time.sleep(1.2) + r = requests.get(url, timeout=30, headers=HDRS, verify=False) + r.raise_for_status() + d = base64.b64encode(r.content).decode() + if not is_raster_b64(d): + raise ValueError(f"Not a raster image: {url[-40:]}") + cf.write_text(d) + return d + +def wiki_image_url(article_title, thumb_size=400): + api = "https://en.wikipedia.org/w/api.php" + params = {"action":"query","titles":article_title,"prop":"pageimages", + "pithumbsize":thumb_size,"format":"json","formatversion":"2"} + r = requests.get(api, params=params, headers=HDRS, verify=False, timeout=20) + r.raise_for_status() + pages = r.json().get("query",{}).get("pages",[]) + if pages and "thumbnail" in pages[0]: + return pages[0]["thumbnail"]["source"] + return None + +def try_wiki(article_titles, label, size=400): + for title in article_titles: + try: + time.sleep(1.2) + url = wiki_image_url(title, size) + if not url: + print(f" {label} '{title}' — no image found"); continue + d = fetch_b64(url) + print(f" {label} OK [{title}]"); return d + except Exception as e: + print(f" {label} '{title}' fail: {e}") + return None + +def try_fetch(urls, label): + for url in urls: + try: + d = fetch_b64(url); print(f" {label} OK"); return d + except Exception as e: print(f" {label} ..{url[-40:]} fail: {e}") + return None + +# ── Ranking URL ──────────────────────────────────────────────────────────────── +print("Verifying ranking URL…") +_ranking_cfg = { + "trilinc": ("us_finance_services", "2025"), + "strata": ("us_air", "2026"), + "hp": ("us_computers", "2025"), + "angi": ("us_advertising", "2025"), + "nvidia": ("us_semiconductors", "2026"), + "tesla": ("us_motor", "2026"), + "apple": ("us_computers", "2025"), + "harley": ("us_motor", "2026"), +} +RANKING_URL = verify_ranking_url(*_ranking_cfg[COMPANY]) + +# ── Assets ──────────────────────────────────────────────────────────────────── +print("Fetching assets…") + +RL_D = "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" # RealRate logo, embedded directly in this script — no external file dependency +print(" RealRate logo: OK (embedded)") + +LOGO_SVG_D = None # SVG logo data (base64) — used when PNG logo unavailable + +if COMPANY == "trilinc": + B1_D = try_fetch(["https://www.trilincglobal.com/wp-content/uploads/2023/05/gloria-website-photo.jpg"], + "Gloria Nelund") or try_wiki(["Gloria Nelund","TriLinc Global Impact Fund"], "Gloria Nelund") + B2_D = try_wiki(["Sustainable Development Goals","Social finance","Microfinance"], "Fund Overview") + B6_D = try_wiki(["Developing country","Sub-Saharan Africa"], "Globe/Impact") + LOGO_D = None + +elif COMPANY == "strata": + B1_D = try_wiki(["Air ambulance","Air medical services","Medical evacuation"], "Air Medical") + B2_D = try_wiki(["Critical care medicine","Intensive care medicine","Emergency medical services"], "Company Overview") + B6_D = try_wiki(["Helicopter","Aviation medicine","Emergency medicine"], "Helicopter") + LOGO_D = try_fetch(["https://www.realrate-archive.com/us_air/logos/0001779128_256x256.png"], "Strata logo") + +elif COMPANY == "hp": + B1_D = try_wiki(["Enrique Lores","HP Inc."], "Enrique Lores") + B2_D = try_wiki(["HP Inc.","Hewlett-Packard"], "HP Overview") + B6_D = try_wiki(["AI PC","HP LaserJet","Personal computer"], "HP Strategy") + LOGO_D = try_fetch(["https://www.realrate-archive.com/us_computers/logos/0000047217_256x256.png"], "HP logo") + +elif COMPANY == "angi": + B1_D = try_wiki(["Jeff Kip","Angi Inc.","HomeAdvisor"], "Jeff Kip / Angi") + B2_D = try_wiki(["Angi Inc.","HomeAdvisor","Home services"], "Angi Overview") + B6_D = try_wiki(["Home improvement","Home repair","Handyman"], "Highlights") + LOGO_D = try_fetch(["https://www.realrate-archive.com/us_advertising/logos/0001707092_256x256.png"], "Angi logo") + +elif COMPANY == "nvidia": + B1_D = try_wiki(["Jensen Huang","Nvidia"], "Jensen Huang") + B2_D = try_wiki(["Nvidia","Nvidia Headquarters"], "Nvidia Overview") + B6_D = None # AI Leadership uses svg_neural icon + LOGO_D = try_fetch([ + "https://upload.wikimedia.org/wikipedia/commons/thumb/2/21/Nvidia_logo.svg/320px-Nvidia_logo.svg.png", + "https://upload.wikimedia.org/wikipedia/commons/thumb/2/21/Nvidia_logo.svg/640px-Nvidia_logo.svg.png", + ], "Nvidia logo") + NV_GPU_D = try_wiki(["Hopper (microarchitecture)","Blackwell (microarchitecture)","Nvidia GPU","GeForce RTX 4090"], "GPU chip image") + NV_DC_D = try_wiki(["Data center","Server room","Cloud computing"], "Data center image") + +elif COMPANY == "tesla": + B1_D = try_wiki(["Elon Musk","Tesla Motors"], "Elon Musk") + B2_D = try_wiki(["Tesla Inc.","Tesla Gigafactory Shanghai","Tesla Model Y"], "Tesla Overview") + B6_D = try_wiki(["Tesla Cybertruck","Tesla Model Y","Tesla Model 3"], "Tesla Car") + LOGO_D = None + svg_local = Path(__file__).parent / "Tesla Inc" / "tesla_t_logo.svg" + svg_url = "https://upload.wikimedia.org/wikipedia/commons/b/bd/Tesla_Motors.svg" + svg_cf = cache_path(svg_url, ".svgcache") + if svg_local.exists(): + LOGO_SVG_D = base64.b64encode(svg_local.read_bytes()).decode() + print(" Tesla SVG logo OK (local)") + elif svg_cf.exists(): + LOGO_SVG_D = svg_cf.read_text(); print(" Tesla SVG logo OK (cached)") + else: + LOGO_D = try_fetch([ + "https://www.tesla.com/apple-touch-icon.png", + "https://digitalassets.tesla.com/tesla-contents/image/upload/Logomark_Red_RGB.png", + "https://logo.clearbit.com/tesla.com", + ], "Tesla logo PNG") + if not LOGO_D: + try: + time.sleep(1.2) + r = requests.get(svg_url, timeout=30, headers=HDRS, verify=False) + r.raise_for_status() + if b'' + f'' + f'' + f'' + f'') + +def svg_leaf(cx, cy, col): + return (f'' + f'' + f'' + f'') + +def svg_handshake(cx, cy, col): + return (f'' + f'' + f'' + f'') + +def svg_helicopter(cx, cy, col): + return (f'' + f'' + f'' + f'' + f'' + f'' + f'' + f'' + f'') + +def svg_cross(cx, cy, col): + return (f'' + f'') + +def svg_growth(cx, cy, col): + return (f'' + f'' + f'') + +def svg_house(cx, cy, col): + return (f'' + f'' + f'') + +def svg_wrench(cx, cy, col): + return (f'' + f'' + f'') + +def svg_chip(cx, cy, col): + return ( + f'' + f'' + f'' + f'' + f'' + f'' + f'' + f'' + f'' + f'' + ) + +def svg_neural(cx, cy, col): + inp = [(cx-17, cy-10), (cx-17, cy), (cx-17, cy+10)] + hid = [(cx, cy-7), (cx, cy+7)] + out = [(cx+17, cy)] + svg = "" + for ix,iy in inp: + for hx,hy in hid: + svg += f'' + for hx,hy in hid: + for ox,oy in out: + svg += f'' + for nx,ny in inp: + svg += f'' + for nx,ny in hid: + svg += f'' + for nx,ny in out: + svg += f'' + return svg + +def svg_trend(cx, cy, col, label="ECR"): + return (f'' + f'' + f'{label}') + +def svg_car(cx, cy, col): + return ( + f'' + f'' + f'' + f'' + f'' + ) + +def svg_bolt(cx, cy, col): + return ( + f'' + ) + +def svg_motorcycle(cx, cy, col): + return ( + f'' + f'' + f'' + f'' + f'' + f'' + ) + +# ── Reusable SVG component builders ─────────────────────────────────────────── +def ecr_gauge(cx, cy, ecr_val, ecr_max, status, col=None): + arc_r = 36 + c = col or LIME + ea = (-math.pi/2) + 2*math.pi*min(ecr_val/ecr_max, 0.95) + return ( + f'' + f'' + f'ECR' + f'{ecr_val}%' + f'{status}' + ) + +def balance_sheet_svg(cx, cy, assets_label): + return ( + f'BALANCE SHEET' + + "".join(f'' for i,h in enumerate([24,28,8,12,6])) + + f'{assets_label}' + ) + +def pie_svg(cx, cy, r, segments, center_label, fsize=13): + sa = -math.pi/2 + svg = "" + for pct, sc in segments: + sw = 2*math.pi*pct/100; ea = sa+sw + x1 = cx+r*math.cos(sa); y1 = cy+r*math.sin(sa) + x2 = cx+r*math.cos(ea); y2 = cy+r*math.sin(ea) + svg += f'' + sa = ea + svg += f'' + svg += f'{center_label}' + return svg + +def ecr_drivers_svg(cx, cy, plus_label, minus_label, ecr_pct, status, col=None): + c = col or EMER + return ( + f'ECR DRIVERS' + f'' + f'{plus_label}' + f'' + f'{minus_label}' + f'{ecr_pct}' + f'{status}' + ) + +# ── Shared helpers ───────────────────────────────────────────────────────────── +def cedge(cx,cy,r,tx,ty): + angle = math.atan2(ty-cy, tx-cx) + return int(cx+r*math.cos(angle)), int(cy+r*math.sin(angle)) + +def ico(kind,x,y,col): + cx,cy=x+10,y+10 + if kind=="clock": + return (f'' + f'' + f'') + if kind=="star": + pts=[] + for i in range(10): + a_=math.pi*i/5-math.pi/2; r_=8 if i%2==0 else 3.5 + pts.append(f"{cx+r_*math.cos(a_):.1f},{cy+r_*math.sin(a_):.1f}") + return f'' + if kind=="chart": + bars=[(x,y+12,3,8),(x+4,y+6,3,14),(x+8,y+2,3,18),(x+12,y+7,3,13),(x+16,y+4,3,16)] + return "".join(f'' for bx,by,bw,bh in bars) + if kind=="trending": + return (f'' + f'') + if kind=="globe": + return (f'' + f'' + f'') + if kind=="building": + return (f'' + f'' + f'' + f'') + if kind=="dollar": + return f'$' + if kind=="leaf": + return (f'' + f'') + if kind=="news": + return (f'' + f'' + f'') + if kind=="people": + return (f'' + f'' + f'' + f'') + return "" + +# ══════════════════════════════════════════════════════════════════════════════ +def build(): + p=[]; a=p.append + + HX,HY,HW,HH = 700,348,480,292 + HCX,HCY = HX+HW//2, HY+HH//2 # 940, 494 + + # Branch circles + B1_CX,B1_CY,B1_R = 640,300,82 # AMBER + B7_CX,B7_CY,B7_R = 600,600,68 # PURP + B2_CX,B2_CY,B2_R = 940,130,64 # CYAN + B3_CX,B3_CY,B3_R = 1400,200,64 # LIME + B4_CX,B4_CY,B4_R = 1480,430,62 # SKY + B5_CX,B5_CY,B5_R = 1390,720,62 # EMER + B6_CX,B6_CY,B6_R = 920,820,62 # ORAN + + # Decorative circles + D1_CX,D1_CY,D1_R = 700, 820, 44 + D2_CX,D2_CY,D2_R = 1155, 770, 44 + D3_CX,D3_CY,D3_R = 220, 623, 44 + D4_CX,D4_CY,D4_R = 1170, 185, 44 + + a(f'') + a('') + a(f''' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ''') + a('') + + a(f'') + + GRID = 240 + for gy in range(0, H+1, GRID): + a(f'') + for gx in range(0, W+1, GRID): + a(f'') + for gy in range(0, H+1, GRID): + for gx in range(0, W+1, GRID): + a(f'') + + a(f'') + + for dx,dy,dr,dc,dop in [ + (188,748,3,AMBER,.28),(312,82,2,ACCENT,.24),(1722,142,3,PURP,.24),(1632,952,2,ACCENT,.27), + (858,50,2,LIME,.2),(1098,1030,2,PURP,.2),(502,515,1.5,ACCENT,.14),(1438,575,1.5,AMBER,.14), + (658,988,2,ACCENT,.17),(1288,76,2,LIME,.17),(448,298,1.5,CYAN,.11),(1564,385,1.5,SKY,.11)]: + a(f'') + + def t(x,y,s,sz=13,col=WH,anch="start",wt="400",op=1,sp="0"): + a(f'{s}') + + def mline(x1,y1,cp1x,cp1y,cp2x,cp2y,x2,y2,col): + q=f"M{x1},{y1} C{cp1x},{cp1y} {cp2x},{cp2y} {x2},{y2}" + a(f'') + a(f'') + a(f'') + a(f'') + a(f'') + + def sline(x1,y1,cpx,cpy,x2,y2,col): + q=f"M{x1},{y1} Q{cpx},{cpy} {x2},{y2}" + a(f'') + a(f'') + a(f'') + + def white_box(x, y, w, h, col=None, op=.35): + c = col or ACCENT + a(f'') + a(f'') + + def hub_logo_png(x, y, data, size=64, box=72): + white_box(x, y, box, box, op=.3) + if data: + pad = (box - size) // 2 + a(f'') + return bool(data) + + def draw_circle(cx, cy, r, col, grad, label, *, + img=None, clip_id=None, svg_icon=None, inner_svg=None, fallback="?"): + a(f'') + a(f'') + a(f'') + if inner_svg: + a(f'') + a(inner_svg) + else: + if img: + a(f'') + elif svg_icon: + a(svg_icon) + else: + t(cx, cy+8, fallback, 32, WH, "middle", "800") + a(f'') + lw = max(220, len(label)*12+22) + a(f'') + t(cx, cy+r+35, label, 20, col, "middle", "800", sp=".5") + + def snode(nx,ny,nw,nh,col,grad,line1,line2="",icon_kind=""): + a(f'') + a(f'') + if icon_kind: + ix=nx+nw-30; iy=ny+(nh-22)//2 + a(f'') + a(ico(icon_kind,ix,iy,col)) + tx=nx+14; tw=nw-16-(46 if icon_kind else 0) + a(f'') + if line2: + a(f'{line1}') + a(f'{line2}') + else: + a(f'{line1}') + a('') + + # ── MAIN LINES ──────────────────────────────────────────────────────────── + ex1,ey1 = cedge(B1_CX,B1_CY,B1_R, 772,385) + mline(772,385, 720,360, 680,335, ex1,ey1, AMBER) + ex2,ey2 = cedge(B2_CX,B2_CY,B2_R, 940,294) + mline(940,294, 938,260, 940,220, ex2,ey2, CYAN) + ex3,ey3 = cedge(B3_CX,B3_CY,B3_R, 1108,385) + mline(1108,385, 1200,310, 1340,244, ex3,ey3, LIME) + ex4,ey4 = cedge(B4_CX,B4_CY,B4_R, 1138,473) + mline(1138,473, 1265,462, 1398,446, ex4,ey4, SKY) + ex5,ey5 = cedge(B5_CX,B5_CY,B5_R, 1098,592) + mline(1098,592, 1218,635, 1328,675, ex5,ey5, EMER) + ex6,ey6 = cedge(B6_CX,B6_CY,B6_R, 933,694) + mline(933,694, 930,742, 924,778, ex6,ey6, ORAN) + ex7,ey7 = cedge(B7_CX,B7_CY,B7_R, 749,554) + mline(749,554, 690,565, 634,578, ex7,ey7, PURP) + + # ── SUB LINES ───────────────────────────────────────────────────────────── + s1_ce = cedge(B1_CX,B1_CY,B1_R, 225,147) + sline(*s1_ce, 450,220, 225,147, AMBER) + s2_ce = cedge(B1_CX,B1_CY,B1_R, 225,283) + sline(*s2_ce, 450,296, 225,283, AMBER) + s3_ce = cedge(B1_CX,B1_CY,B1_R, 225,479) + sline(*s3_ce, 450,430, 225,479, AMBER) + + ap1_ce = cedge(B2_CX,B2_CY,B2_R, 665,57) + sline(*ap1_ce, 810,92, 665,57, CYAN) + ap2_ce = cedge(B2_CX,B2_CY,B2_R, 1225,57) + sline(*ap2_ce, 1160,90, 1225,57, CYAN) + + in1_ce = cedge(B3_CX,B3_CY,B3_R, 1689,51) + sline(*in1_ce, 1500,126, 1689,51, LIME) + in2_ce = cedge(B3_CX,B3_CY,B3_R, 1689,147) + sline(*in2_ce, 1500,174, 1689,147, LIME) + + fn1_ce = cedge(B4_CX,B4_CY,B4_R, 1735,291) + sline(*fn1_ce, 1558,362, 1735,291, SKY) + fn2_ce = cedge(B4_CX,B4_CY,B4_R, 1735,387) + sline(*fn2_ce, 1558,416, 1735,387, SKY) + fn3_ce = cedge(B4_CX,B4_CY,B4_R, 1735,483) + sline(*fn3_ce, 1558,460, 1735,483, SKY) + + b5_1ce = cedge(B5_CX,B5_CY,B5_R, 1682,663) + sline(*b5_1ce, 1464,692, 1682,663, EMER) + b5_2ce = cedge(B5_CX,B5_CY,B5_R, 1622,759) + sline(*b5_2ce, 1464,730, 1622,759, EMER) + b5_3ce = cedge(B5_CX,B5_CY,B5_R, 1682,855) + sline(*b5_3ce, 1464,788, 1682,855, EMER) + + b6_1ce = cedge(B6_CX,B6_CY,B6_R, 720,983) + sline(*b6_1ce, 820,940, 720,983, ORAN) + b6_2ce = cedge(B6_CX,B6_CY,B6_R, 1110,983) + sline(*b6_2ce, 960,942, 1110,983, ORAN) + b6_3ce = cedge(B6_CX,B6_CY,B6_R, 1500,983) + sline(*b6_3ce, 1062,942, 1500,983, ORAN) + + b7_1ce = cedge(B7_CX,B7_CY,B7_R, 215,768) + sline(*b7_1ce, 430,680, 215,768, PURP) + b7_2ce = cedge(B7_CX,B7_CY,B7_R, 215,864) + sline(*b7_2ce, 430,762, 215,864, PURP) + b7_3ce = cedge(B7_CX,B7_CY,B7_R, 215,960) + sline(*b7_3ce, 430,842, 215,960, PURP) + + # ══════════════════════════════════════════════════════════════════════════ + # COMPANY-SPECIFIC BRANCH CONTENT + # ══════════════════════════════════════════════════════════════════════════ + if COMPANY == "trilinc": + + # B1 — GLORIA NELUND + draw_circle(B1_CX,B1_CY,B1_R, AMBER,"gAmb","Gloria Nelund · CEO", img=B1_D, clip_id="b1Clip") + snode(15,104, 420,86,AMBER,"gAmb","CEO, Founder & President","Chief Compliance Officer · TriLinc","star") + snode(15,240, 420,86,AMBER,"gAmb","Deutsche Bank: CEO US Private Wealth","Managed $50B · World's 5th largest bank","chart") + snode(15,436, 420,86,AMBER,"gAmb","Founded TriLinc 2008","40+ years in international asset management","trending") + + # B2 — FUND OVERVIEW + draw_circle(B2_CX,B2_CY,B2_R, CYAN,"gCyn","FUND OVERVIEW", img=B2_D, clip_id="b2Clip", fallback="FO") + snode(460,14, 410,86,CYAN,"gCyn","Founded: 2008 · Delaware, USA","Ticker: TRLC · Public offering closed 2017","clock") + snode(1010,14, 430,86,CYAN,"gCyn","~$1.4B AUM · TriLinc Global Advisors","Female-founded · -owned · -led","building") + + # B3 — INDUSTRY POSITION + draw_circle(B3_CX,B3_CY,B3_R, LIME,"gLme","INDUSTRY POSITION", + inner_svg=ecr_gauge(B3_CX,B3_CY,124,150,"TOP-RATED")) + snode(1474, 8, 430,86,LIME,"gLme","ECR: 124% · Top-Rated · RealRate","#1 of 4 US Finance Services companies","star") + snode(1474,104, 430,86,LIME,"gLme","46pp above industry avg (78%)","Highest ECR in US Finance Services 2025","chart") + + # B4 — FINANCIAL HEALTH + draw_circle(B4_CX,B4_CY,B4_R, SKY,"gSky","FINANCIAL HEALTH", + inner_svg=balance_sheet_svg(B4_CX,B4_CY,"$282.8M")) + snode(1560,248, 350,86,SKY,"gSky","Total Assets: $282.8M","Stockholders' Equity: $272.6M","dollar") + snode(1560,344, 350,86,SKY,"gSky","Liabilities: $10.2M","Equity-to-Assets ratio: 96.4%","chart") + snode(1560,440, 350,86,SKY,"gSky","Net Income: –$8.5M","ECR driver: Equity +57pp · Revenue –17pp","trending") + + # B5 — INVESTMENT STRATEGY + draw_circle(B5_CX,B5_CY,B5_R, EMER,"gEmr","INVESTMENT STRATEGY", + inner_svg=pie_svg(B5_CX,B5_CY,32,[(40,LIME),(30,CYAN),(20,AMBER),(10,EMER)],"SME")) + snode(1462,620, 440,86,EMER,"gEmr","Direct loans · Loan participations","Trade finance · Convertible debt","dollar") + snode(1462,716, 440,86,EMER,"gEmr","Target: SMEs with <500 employees","Developing economies · local sub-advisors","globe") + snode(1462,812, 440,86,EMER,"gEmr","Structured credit · Preferred equity","Growth-stage businesses · 4 continents","chart") + + # B6 — IMPACT FOCUS + draw_circle(B6_CX,B6_CY,B6_R, ORAN,"gOrn","IMPACT FOCUS", + img=B6_D, clip_id="b6Clip", svg_icon=svg_leaf(B6_CX,B6_CY,ORAN)) + snode(530,940, 380,86,ORAN,"gOrn","Building Sustainable Communities","Education · Energy · Housing · Health","leaf") + snode(920,940, 380,86,ORAN,"gOrn","Strengthening the Workforce","Job creation · Equality · Capacity building","people") + snode(1310,940,380,86,ORAN,"gOrn","Financial inclusion · Food security","Measurable social impact metrics tracked","globe") + + # B7 — MISSION & HISTORY + draw_circle(B7_CX,B7_CY,B7_R, PURP,"gMH","Mission & History", + svg_icon=svg_handshake(B7_CX,B7_CY,PURP)) + snode(15,725, 400,86,PURP,"gPrp","2008: Founded · Delaware, USA","Female-founded · -owned · -led fund","clock") + snode(15,821, 400,86,PURP,"gPrp","2017: Public offering closed","TRLC listed · OTC Pink Markets","trending") + snode(15,917, 400,86,PURP,"gPrp","2025: #1 US Finance Services · RealRate","Named Top Real Leader of Impact Investing","star") + + # DECORATIVE + draw_circle(D1_CX,D1_CY,D1_R, ORAN,"gOrn","Global Reach", + img=B6_D, clip_id="d1Clip", svg_icon=svg_globe(D1_CX,D1_CY,ORAN)) + draw_circle(D2_CX,D2_CY,D2_R, EMER,"gEmr","Sub-Advisors", + svg_icon=svg_handshake(D2_CX,D2_CY,EMER)) + draw_circle(D3_CX,D3_CY,D3_R, LIME,"gLme","ECR Trend", + svg_icon=svg_trend(D3_CX,D3_CY,LIME,"ECR +46pp")) + draw_circle(D4_CX,D4_CY,D4_R, CYAN,"gCyn","$1.4B AUM", fallback=" ") + t(D4_CX, D4_CY-6, "$1.4B", 22, WH, "middle", "800") + t(D4_CX, D4_CY+12, "AUM", 16, CYAN, "middle", "700") + + ECR_VAL, RANK_VAL, STATUS_VAL = "124%", "#1 / 4", "Top-Rated" + + elif COMPANY == "strata": + + # B1 — AIR MEDICAL SERVICES + draw_circle(B1_CX,B1_CY,B1_R, AMBER,"gAmb","Air Medical Services", + img=B1_D, clip_id="b1Clip", svg_icon=svg_helicopter(B1_CX,B1_CY,AMBER)) + snode(15,104, 420,86,AMBER,"gAmb","Air Medical Transport · Critical Care","Emergency Response Services","star") + snode(15,240, 420,86,AMBER,"gAmb","OTC-listed · CIK: 0001779128 · Delaware","Air ambulance services · US market","building") + snode(15,436, 420,86,AMBER,"gAmb","Critical airborne medical transport","Serving patients across US air network","trending") + + # B2 — COMPANY OVERVIEW + draw_circle(B2_CX,B2_CY,B2_R, CYAN,"gCyn","COMPANY OVERVIEW", + img=B2_D, clip_id="b2Clip", fallback="CO") + snode(460,14, 410,86,CYAN,"gCyn","Air Medical Transport · Critical Care","Emergency Response · Delaware, USA","clock") + snode(1010,14, 430,86,CYAN,"gCyn","CIK: 0001779128 · OTC-listed · STCM","US Air Industry · Publicly reporting","news") + + # B3 — INDUSTRY POSITION + draw_circle(B3_CX,B3_CY,B3_R, LIME,"gLme","INDUSTRY POSITION", + inner_svg=ecr_gauge(B3_CX,B3_CY,123,150,"TOP-RATED")) + snode(1474, 8, 430,86,LIME,"gLme","ECR: 123% · Top-Rated · RealRate","#1 of 4 US Air companies","star") + snode(1474,104, 430,86,LIME,"gLme","54pp above industry avg (69%)","Highest ECR in US Air 2025","chart") + + # B4 — FINANCIAL HEALTH + draw_circle(B4_CX,B4_CY,B4_R, SKY,"gSky","FINANCIAL HEALTH", + inner_svg=balance_sheet_svg(B4_CX,B4_CY,"$325.5M")) + snode(1560,248, 350,86,SKY,"gSky","Total Assets: $325.5M","Stockholders' Equity: $279.1M","dollar") + snode(1560,344, 350,86,SKY,"gSky","Liabilities: $46.4M","Revenue: $197.1M (FY2025)","chart") + snode(1560,440, 350,86,SKY,"gSky","Net Income: +$41.3M","First profitable year in company history","trending") + + # B5 — ECR ANALYSIS + draw_circle(B5_CX,B5_CY,B5_R, EMER,"gEmr","ECR ANALYSIS", + inner_svg=ecr_drivers_svg(B5_CX,B5_CY,"+46pp","–81pp","123%","TOP-RATED")) + snode(1462,620, 440,86,EMER,"gEmr","Greatest Strength: Operating Expenses","+46pp contribution to ECR","chart") + snode(1462,716, 440,86,EMER,"gEmr","Greatest Weakness: Other Expenses","–81pp drag on ECR","trending") + snode(1462,812, 440,86,EMER,"gEmr","ECR: 123% · 54pp above industry avg","Market average: 69%","star") + + # B6 — 2025 HIGHLIGHTS + draw_circle(B6_CX,B6_CY,B6_R, ORAN,"gOrn","2025 HIGHLIGHTS", + img=B6_D, clip_id="b6Clip", svg_icon=svg_helicopter(B6_CX,B6_CY,ORAN)) + snode(530,940, 380,86,ORAN,"gOrn","FY2025 Revenue: $197.1M","Net Income: +$41.3M (first profitable)","dollar") + snode(920,940, 380,86,ORAN,"gOrn","Equity: $279.1M · Assets: $325.5M","Equity-to-Assets ratio: 85.8%","chart") + snode(1310,940,380,86,ORAN,"gOrn","ECR trajectory: 87→92→73→90→123%","Consistent upward ECR momentum","trending") + + # B7 — GROWTH JOURNEY + draw_circle(B7_CX,B7_CY,B7_R, PURP,"gMH","Growth Journey", + svg_icon=svg_growth(B7_CX,B7_CY,PURP)) + snode(15,725, 400,86,PURP,"gPrp","2021: Revenue $50.5M · Net Income –$40.1M","Rapid expansion phase begins","clock") + snode(15,821, 400,86,PURP,"gPrp","2022–2024: Revenue $146M → $249M","~4× growth in 3 years","trending") + snode(15,917, 400,86,PURP,"gPrp","2025: ECR 123% · #1 US Air · RealRate","First profitable year in history","star") + + # DECORATIVE + draw_circle(D1_CX,D1_CY,D1_R, AMBER,"gAmb","Air Fleet", + img=B6_D, clip_id="d1Clip", svg_icon=svg_helicopter(D1_CX,D1_CY,AMBER)) + draw_circle(D2_CX,D2_CY,D2_R, CYAN,"gCyn","Medical Care", + svg_icon=svg_cross(D2_CX,D2_CY,CYAN)) + draw_circle(D3_CX,D3_CY,D3_R, LIME,"gLme","ECR Trend", + svg_icon=svg_trend(D3_CX,D3_CY,LIME,"→ 123%")) + draw_circle(D4_CX,D4_CY,D4_R, SKY,"gSky","Revenue", fallback=" ") + t(D4_CX, D4_CY-6, "$197M", 22, WH, "middle", "800") + t(D4_CX, D4_CY+12, "FY2025", 16, SKY, "middle", "700") + + ECR_VAL, RANK_VAL, STATUS_VAL = "123%", "#1 / 4", "Top-Rated" + + elif COMPANY == "hp": + + # B1 — ENRIQUE LORES + draw_circle(B1_CX,B1_CY,B1_R, AMBER,"gAmb","Enrique Lores · CEO", img=B1_D, clip_id="b1Clip") + snode(15,104, 420,86,AMBER,"gAmb","President & CEO since November 2019","Joined HP in 1989 · 35+ years with HP","star") + snode(15,240, 420,86,AMBER,"gAmb","Led Imaging, Printing & Solutions","MBA IESE · Industrial Engineering","chart") + snode(15,436, 420,86,AMBER,"gAmb","'Future Ready' transformation plan","AI PCs · Subscriptions · Cost efficiency","trending") + + # B2 — COMPANY OVERVIEW + draw_circle(B2_CX,B2_CY,B2_R, CYAN,"gCyn","COMPANY OVERVIEW", + img=B2_D, clip_id="b2Clip", fallback="HP") + snode(460,14, 410,86,CYAN,"gCyn","Founded: 1939 · Palo Alto, California","Split from Hewlett-Packard: November 2015","clock") + snode(1010,14, 430,86,CYAN,"gCyn","~58,000 employees worldwide","HQ: 1501 Page Mill Rd · Palo Alto, CA","building") + + # B3 — INDUSTRY POSITION + draw_circle(B3_CX,B3_CY,B3_R, LIME,"gLme","INDUSTRY POSITION", + inner_svg=ecr_gauge(B3_CX,B3_CY,258,300,"RATED")) + snode(1474, 8, 430,86,LIME,"gLme","ECR: 258% · Rated · RealRate","#9 of 17 US Computers companies","star") + snode(1474,104, 430,86,LIME,"gLme","At the industry average (258%)","Balance sheet leverage offsets revenue strength","chart") + + # B4 — FINANCIAL HEALTH + draw_circle(B4_CX,B4_CY,B4_R, SKY,"gSky","FINANCIAL HEALTH", + inner_svg=balance_sheet_svg(B4_CX,B4_CY,"$39.9B")) + snode(1560,248, 350,86,SKY,"gSky","Revenue: $53.6B (FY2024)","Net Income: $2.8B · EPS: $2.81","dollar") + snode(1560,344, 350,86,SKY,"gSky","Operating margin: 7.1%","R&D investment: $1.64B","chart") + snode(1560,440, 350,86,SKY,"gSky","Total Assets: $39.9B · Cash: $3.25B","LT Debt: $8.3B · Equity Deficit: –$1.3B","trending") + + # B5 — BUSINESS SEGMENTS + draw_circle(B5_CX,B5_CY,B5_R, EMER,"gEmr","BUSINESS SEGMENTS", + inner_svg=pie_svg(B5_CX,B5_CY,32,[(64.3,LIME),(35.7,CYAN)],"2 SEG",fsize=7)) + snode(1462,620, 440,86,EMER,"gEmr","Personal Systems: ~$34.4B · 64%","PCs · Laptops · Workstations · Chromebooks","chart") + snode(1462,716, 440,86,EMER,"gEmr","Printing: ~$19.1B · 36%","LaserJet · OfficeJet · Instant Ink · Supplies","dollar") + snode(1462,812, 440,86,EMER,"gEmr","Stockholders' Equity: –$1.3B","Liabilities: $41.2B · Buyback-driven balance sheet","trending") + + # B6 — STRATEGY & INNOVATION + draw_circle(B6_CX,B6_CY,B6_R, ORAN,"gOrn","STRATEGY & INNOVATION", + img=B6_D, clip_id="b6Clip", svg_icon=svg_globe(B6_CX,B6_CY,ORAN)) + snode(530,940, 380,86,ORAN,"gOrn","AI PC leadership · HP Omnibook Ultra","Neural Processing Unit · Windows AI integration","trending") + snode(920,940, 380,86,ORAN,"gOrn","HP+ Instant Ink subscription model","Recurring revenue · Sustainability · HP Planet Partners","leaf") + snode(1310,940,380,86,ORAN,"gOrn","Poly collaboration hardware (acq. 2022)","Hybrid work solutions · Video conferencing","globe") + + # B7 — COMPANY HISTORY + draw_circle(B7_CX,B7_CY,B7_R, PURP,"gMH","Company History", + svg_icon=svg_growth(B7_CX,B7_CY,PURP)) + snode(15,725, 400,86,PURP,"gPrp","1939: Founded by Hewlett & Packard","Palo Alto garage · HP200A audio oscillator","clock") + snode(15,821, 400,86,PURP,"gPrp","2015: HP splits into HP Inc. & HPE","HP Inc. keeps HPQ · PC & Printer business","trending") + snode(15,917, 400,86,PURP,"gPrp","FY2024: Revenue $53.6B · ECR 258% · RealRate","'Future Ready' AI transformation underway","star") + + # DECORATIVE + draw_circle(D1_CX,D1_CY,D1_R, ORAN,"gOrn","Global Reach", + img=B6_D, clip_id="d1Clip", svg_icon=svg_globe(D1_CX,D1_CY,ORAN)) + draw_circle(D2_CX,D2_CY,D2_R, CYAN,"gCyn","Poly & Collab", + svg_icon=svg_handshake(D2_CX,D2_CY,CYAN)) + draw_circle(D3_CX,D3_CY,D3_R, LIME,"gLme","ECR Trend", + svg_icon=svg_trend(D3_CX,D3_CY,LIME,"258%")) + draw_circle(D4_CX,D4_CY,D4_R, SKY,"gSky","$53.6B", fallback=" ") + t(D4_CX, D4_CY-6, "$53.6B", 19, WH, "middle", "800") + t(D4_CX, D4_CY+12, "Revenue", 14, SKY, "middle", "700") + + ECR_VAL, RANK_VAL, STATUS_VAL = "258%", "#9 / 17", "Rated" + + elif COMPANY == "angi": + + # B1 — JEFF KIP / LEADERSHIP + draw_circle(B1_CX,B1_CY,B1_R, AMBER,"gAmb","Jeff Kip · CEO", + img=B1_D, clip_id="b1Clip", svg_icon=svg_house(B1_CX,B1_CY,AMBER)) + snode(15,104, 420,86,AMBER,"gAmb","Chief Executive Officer, Angi Inc.","NASDAQ: ANGI · Denver, Colorado","star") + snode(15,240, 420,86,AMBER,"gAmb","IAC subsidiary · ~4,500 employees","Brands: Angi · HomeAdvisor · Handy","building") + snode(15,436, 420,86,AMBER,"gAmb","Platform transformation · AI integration","Connecting homeowners with professionals","trending") + + # B2 — COMPANY OVERVIEW + draw_circle(B2_CX,B2_CY,B2_R, CYAN,"gCyn","COMPANY OVERVIEW", + img=B2_D, clip_id="b2Clip", fallback="AN") + snode(460,14, 410,86,CYAN,"gCyn","Founded: 1995 · Denver, Colorado","Formed 2017 via HomeAdvisor & Angie's List merger","clock") + snode(1010,14, 430,86,CYAN,"gCyn","~4,500 employees worldwide","Ticker: ANGI · NASDAQ · IAC subsidiary","building") + + # B3 — INDUSTRY POSITION + draw_circle(B3_CX,B3_CY,B3_R, LIME,"gLme","INDUSTRY POSITION", + inner_svg=ecr_gauge(B3_CX,B3_CY,157,200,"TOP-RATED")) + snode(1474, 8, 430,86,LIME,"gLme","ECR: 157% · Top-Rated · RealRate","#1 of 4 US Advertising companies","star") + snode(1474,104, 430,86,LIME,"gLme","78pp above industry avg (80%)","Highest ECR in US Advertising 2025","chart") + + # B4 — FINANCIAL HEALTH + draw_circle(B4_CX,B4_CY,B4_R, SKY,"gSky","FINANCIAL HEALTH", + inner_svg=balance_sheet_svg(B4_CX,B4_CY,"$1.68B")) + snode(1560,248, 350,86,SKY,"gSky","Total Assets: $1.68B","Stockholders' Equity: $1.46B","dollar") + snode(1560,344, 350,86,SKY,"gSky","Liabilities: $222.4M","Revenue: $1.03B","chart") + snode(1560,440, 350,86,SKY,"gSky","Net Income: +$43.8M","Equity-to-Assets ratio: 86.7%","trending") + + # B5 — PLATFORM & BRANDS + draw_circle(B5_CX,B5_CY,B5_R, EMER,"gEmr","PLATFORM & BRANDS", + inner_svg=pie_svg(B5_CX,B5_CY,32,[(50,LIME),(30,CYAN),(20,AMBER)],"3 BRANDS",fsize=6.5)) + snode(1462,620, 440,86,EMER,"gEmr","Angi (formerly Angie's List)","Homeowner marketplace · Reviews · Cost guides","globe") + snode(1462,716, 440,86,EMER,"gEmr","HomeAdvisor · Instant Pro Connect","Local professionals · Project cost estimator","people") + snode(1462,812, 440,86,EMER,"gEmr","Handy · On-demand home services","Cleaning · Assembly · Moving · Repairs","chart") + + # B6 — 2025 HIGHLIGHTS + draw_circle(B6_CX,B6_CY,B6_R, ORAN,"gOrn","2025 HIGHLIGHTS", + img=B6_D, clip_id="b6Clip", svg_icon=svg_house(B6_CX,B6_CY,ORAN)) + snode(530,940, 380,86,ORAN,"gOrn","Revenue: $1.03B · Net Income: +$43.8M","ECR Strength: Equity +68pp","dollar") + snode(920,940, 380,86,ORAN,"gOrn","Equity: $1.46B · Assets: $1.68B","Equity-to-Assets ratio: 86.7%","chart") + snode(1310,940,380,86,ORAN,"gOrn","ECR Weakness: Marketing Expenses –22pp","Industry avg: 80% · 78pp above average","trending") + + # B7 — COMPANY HISTORY + draw_circle(B7_CX,B7_CY,B7_R, PURP,"gMH","Company History", + svg_icon=svg_growth(B7_CX,B7_CY,PURP)) + snode(15,725, 400,86,PURP,"gPrp","1995: Angie's List · Columbus, Ohio","Crowd-sourced reviews for home contractors","clock") + snode(15,821, 400,86,PURP,"gPrp","1998: ServiceMagic → HomeAdvisor (2012)","2017: ANGI Homeservices via merger","trending") + snode(15,917, 400,86,PURP,"gPrp","2021: Rebranded to Angi Inc. · NASDAQ","2025: #1 US Advertising · RealRate","star") + + # DECORATIVE + draw_circle(D1_CX,D1_CY,D1_R, ORAN,"gOrn","Home Services", + img=B6_D, clip_id="d1Clip", svg_icon=svg_house(D1_CX,D1_CY,ORAN)) + draw_circle(D2_CX,D2_CY,D2_R, CYAN,"gCyn","Pro Network", + svg_icon=svg_handshake(D2_CX,D2_CY,CYAN)) + draw_circle(D3_CX,D3_CY,D3_R, LIME,"gLme","ECR Trend", + svg_icon=svg_trend(D3_CX,D3_CY,LIME,"→ 157%")) + draw_circle(D4_CX,D4_CY,D4_R, SKY,"gSky","$1.03B", fallback=" ") + t(D4_CX, D4_CY-6, "$1.03B", 20, WH, "middle", "800") + t(D4_CX, D4_CY+12, "Revenue", 14, SKY, "middle", "700") + + ECR_VAL, RANK_VAL, STATUS_VAL = "157%", "#1 / 4", "Top-Rated" + + elif COMPANY == "nvidia": -## Automation scripts (run outside Claude) + # B1 — JENSEN HUANG + draw_circle(B1_CX,B1_CY,B1_R, AMBER,"gAmb","Jensen Huang · CEO", img=B1_D, clip_id="b1Clip") + snode(15,104, 420,86,AMBER,"gAmb","Co-Founder & CEO since 1993 · NVDA","Pioneer of GPU computing · CUDA architect","star") + snode(15,240, 420,86,AMBER,"gAmb","Oregon State BSc EE · Stanford MS EE","30+ years leading Nvidia as CEO","chart") + snode(15,436, 420,86,AMBER,"gAmb","Led Nvidia from gaming GPUs to AI supercomputing",""The most important chip company in the world"","trending") -- PowerShell: `.\run_mindmaps.ps1 apple nvidia` or `.\run_mindmaps.ps1 all` -- Bash: `bash run_mindmaps.sh apple nvidia` or `bash run_mindmaps.sh all` + # B2 — COMPANY OVERVIEW + draw_circle(B2_CX,B2_CY,B2_R, CYAN,"gCyn","COMPANY OVERVIEW", + img=B2_D, clip_id="b2Clip", fallback="NV") + snode(460,14, 410,86,CYAN,"gCyn","Founded: April 5, 1993 · Santa Clara, CA","Founders: Huang · Priem · Malachowsky","clock") + snode(1010,14, 430,86,CYAN,"gCyn","~36,000 employees worldwide","HQ: Endeavor Campus · Santa Clara, CA","building") + + # B3 — INDUSTRY POSITION + draw_circle(B3_CX,B3_CY,B3_R, LIME,"gLme","INDUSTRY POSITION", + inner_svg=ecr_gauge(B3_CX,B3_CY,351,400,"TOP-RATED")) + snode(1474, 8, 430,86,LIME,"gLme","ECR: 351% · Top-Rated · RealRate","#8 of 44 US Semiconductors companies","star") + snode(1474,104, 430,86,LIME,"gLme","98pp above industry avg (253%)","Top-Rated in US Semiconductors 2025","chart") + + # B4 — FINANCIAL HEALTH + draw_circle(B4_CX,B4_CY,B4_R, SKY,"gSky","FINANCIAL HEALTH", + inner_svg=balance_sheet_svg(B4_CX,B4_CY,"$111.6B")) + snode(1560,248, 350,86,SKY,"gSky","Revenue: $130.5B (FY2025)","Net Income: $72.9B","dollar") + snode(1560,344, 350,86,SKY,"gSky","Total Assets: $111.6B","Stockholders' Equity: $79.3B","chart") + snode(1560,440, 350,86,SKY,"gSky","Liabilities: $32.3B","R&D investment: $12.9B","trending") + + # B5 — BUSINESS SEGMENTS + draw_circle(B5_CX,B5_CY,B5_R, EMER,"gEmr","BUSINESS SEGMENTS", + inner_svg=pie_svg(B5_CX,B5_CY,32,[(88.3,LIME),(8.7,CYAN),(3.0,AMBER)],"DC 88%",fsize=6.5)) + snode(1462,620, 440,86,EMER,"gEmr","Data Center: ~$115.2B · 88%","AI training · inference · HPC · NVLink","chart") + snode(1462,716, 440,86,EMER,"gEmr","Gaming: ~$11.4B · 9%","GeForce RTX 50 series · DLSS 4 · Ray Tracing","dollar") + snode(1462,812, 440,86,EMER,"gEmr","Pro Viz · Automotive · OEM: ~$3.9B · 3%","DRIVE platform · Omniverse · Jetson","globe") + + # B6 — AI LEADERSHIP + draw_circle(B6_CX,B6_CY,B6_R, ORAN,"gOrn","AI LEADERSHIP", + svg_icon=svg_neural(B6_CX,B6_CY,ORAN)) + snode(530,940, 380,86,ORAN,"gOrn","Blackwell GPU architecture launch 2025","B200 · GB200 NVL72 · AI superchip era","trending") + snode(920,940, 380,86,ORAN,"gOrn","Revenue +114% YoY · Net Income +145%","AI demand acceleration · Data Center boom","chart") + snode(1310,940,380,86,ORAN,"gOrn","CUDA platform · 3M+ developers","Software ecosystem moat · AI standard","globe") + + # B7 — COMPANY HISTORY + draw_circle(B7_CX,B7_CY,B7_R, PURP,"gMH","Company History", + svg_icon=svg_growth(B7_CX,B7_CY,PURP)) + snode(15,725, 400,86,PURP,"gPrp","1993: Founded · Santa Clara, CA","Jensen Huang · Priem · Malachowsky","clock") + snode(15,821, 400,86,PURP,"gPrp","1999: GeForce 256 — world's first GPU","2006: CUDA — AI computing foundation","trending") + snode(15,917, 400,86,PURP,"gPrp","2025: ECR 351% · #8 US Semiconductors · RealRate","Revenue +114% YoY · AI supercycle","star") + + # DECORATIVE + draw_circle(D1_CX,D1_CY,D1_R, ORAN,"gOrn","AI Chips", + img=NV_GPU_D, clip_id="d1Clip", svg_icon=svg_chip(D1_CX,D1_CY,ORAN)) + draw_circle(D2_CX,D2_CY,D2_R, CYAN,"gCyn","Data Center", + img=NV_DC_D, clip_id="d2Clip", svg_icon=svg_wrench(D2_CX,D2_CY,CYAN)) + draw_circle(D3_CX,D3_CY,D3_R, LIME,"gLme","ECR Trend", + svg_icon=svg_trend(D3_CX,D3_CY,LIME,"→ 351%")) + draw_circle(D4_CX,D4_CY,D4_R, SKY,"gSky","$130.5B", fallback=" ") + t(D4_CX, D4_CY-6, "$130.5B", 18, WH, "middle", "800") + t(D4_CX, D4_CY+12, "Revenue", 14, SKY, "middle", "700") + + ECR_VAL, RANK_VAL, STATUS_VAL = "351%", "#8 / 44", "Top-Rated" + + elif COMPANY == "tesla": + + # B1 — ELON MUSK + draw_circle(B1_CX,B1_CY,B1_R, TBLUE,"gTBlu","Elon Musk · CEO", img=B1_D, clip_id="b1Clip") + snode(15,104, 420,86,TBLUE,"gTBlu","Co-Founder & CEO since 2008 · TSLA","SpaceX · xAI · Neuralink · The Boring Co","star") + snode(15,240, 420,86,TBLUE,"gTBlu","BSc Physics & Economics — Univ. Pennsylvania","Founded Zip2 (1995) · X.com → PayPal (1999)","chart") + snode(15,436, 420,86,TBLUE,"gTBlu","Autonomous AI vision: FSD & Robotaxi 2026","Tesla Bot (Optimus) · AI Supercomputer: Dojo","trending") + + # B2 — COMPANY OVERVIEW + draw_circle(B2_CX,B2_CY,B2_R, CYAN,"gCyn","COMPANY OVERVIEW", + img=B2_D, clip_id="b2Clip", fallback="TS") + snode(460,14, 410,86,CYAN,"gCyn","Founded: July 1, 2003 · San Carlos, CA","HQ: Austin, Texas (relocated 2021) · NASDAQ: TSLA","clock") + snode(1010,14, 430,86,CYAN,"gCyn","~125,665 employees worldwide","Gigafactories: Austin · Berlin · Shanghai · Fremont","building") + + # B3 — INDUSTRY POSITION + draw_circle(B3_CX,B3_CY,B3_R, SKY,"gSky","INDUSTRY POSITION", + inner_svg=ecr_gauge(B3_CX,B3_CY,135,150,"TOP-RATED",col=SKY)) + snode(1474, 8, 430,86,SKY,"gSky","ECR: 135% · Top-Rated · RealRate","#9 of 38 US Motor companies","star") + snode(1474,104, 430,86,SKY,"gSky","34pp above industry avg (102%)","9 of 38 US Motor companies Top-Rated","chart") + + # B4 — FINANCIAL HEALTH + draw_circle(B4_CX,B4_CY,B4_R, SKY,"gSky","FINANCIAL HEALTH", + inner_svg=balance_sheet_svg(B4_CX,B4_CY,"$137.8B")) + snode(1560,248, 350,86,SKY,"gSky","Revenue: $94.8B (FY2025)","Net Income: $3.9B · R&D: $6.4B","dollar") + snode(1560,344, 350,86,SKY,"gSky","Total Assets: $137.8B","Stockholders' Equity: $82.9B","chart") + snode(1560,440, 350,86,SKY,"gSky","Liabilities: $54.9B","Equity-to-Assets ratio: 60.2%","trending") + + # B5 — BUSINESS SEGMENTS + draw_circle(B5_CX,B5_CY,B5_R, TAQUA,"gTAqua","BUSINESS SEGMENTS", + inner_svg=pie_svg(B5_CX,B5_CY,32,[(81,SKY),(13,CYAN),(6,TBLUE)],"3 SEG",fsize=6.5)) + snode(1462,620, 440,86,TAQUA,"gTAqua","Automotive: ~$77.1B · ~81%","Model 3/Y/S/X/Cybertruck · FSD · Robotaxi","trending") + snode(1462,716, 440,86,TAQUA,"gTAqua","Energy Gen & Storage: ~$11.6B · ~13%","Powerwall · Megapack · Solar Roof","chart") + snode(1462,812, 440,86,TAQUA,"gTAqua","Services & Other: ~$6.1B · ~6%","Supercharger · Insurance · Tesla Fleet","globe") + + # B6 — 2025 HIGHLIGHTS + draw_circle(B6_CX,B6_CY,B6_R, TAQUA,"gTAqua","2025 HIGHLIGHTS", + img=B6_D, clip_id="b6Clip", svg_icon=svg_car(B6_CX,B6_CY,TAQUA)) + snode(530,940, 380,86,TAQUA,"gTAqua","Revenue: $94.8B · Net Income: $3.9B","R&D: $6.4B · SG&A: $5.8B · Tesla IR 2025","dollar") + snode(920,940, 380,86,TAQUA,"gTAqua","~1.79M vehicles delivered · FY2025","Cybertruck ramp · Model Y Juniper refresh","chart") + snode(1310,940,380,86,TAQUA,"gTAqua","Optimus production starts · FSD v13","Robotaxi pilot · Austin, TX · Tesla Shareholder","trending") + + # B7 — COMPANY HISTORY + draw_circle(B7_CX,B7_CY,B7_R, PURP,"gMH","Company History", + svg_icon=svg_growth(B7_CX,B7_CY,PURP)) + snode(15,725, 400,86,PURP,"gPrp","2003: Founded · San Carlos, California","Eberhard & Tarpenning · Musk joins 2004","clock") + snode(15,821, 400,86,PURP,"gPrp","2010: TSLA IPO · NASDAQ · 2012: Model S","First US EV company IPO since Ford (1956)","trending") + snode(15,917, 400,86,PURP,"gPrp","2025: ECR 135% · #9 US Motor · RealRate","Revenue $94.8B · Robotaxi & Optimus era","star") + + # DECORATIVE + draw_circle(D1_CX,D1_CY,D1_R, TBLUE,"gTBlu","EV Pioneer", + svg_icon=svg_car(D1_CX,D1_CY,TBLUE)) + draw_circle(D2_CX,D2_CY,D2_R, TAQUA,"gTAqua","Energy", + svg_icon=svg_bolt(D2_CX,D2_CY,TAQUA)) + draw_circle(D3_CX,D3_CY,D3_R, SKY,"gSky","ECR Trend", + svg_icon=svg_trend(D3_CX,D3_CY,SKY,"→ 135%")) + draw_circle(D4_CX,D4_CY,D4_R, CYAN,"gCyn","$94.8B", fallback=" ") + t(D4_CX, D4_CY-6, "$94.8B", 20, WH, "middle", "800") + t(D4_CX, D4_CY+12, "Revenue", 9, CYAN, "middle", "700") + + ECR_VAL, RANK_VAL, STATUS_VAL = "135%", "#9 / 38", "Top-Rated" + + elif COMPANY == "apple": + + # B1 — TIM COOK + draw_circle(B1_CX,B1_CY,B1_R, AMBER,"gAmb","Tim Cook · CEO", img=B1_D, clip_id="b1Clip") + snode(15,104, 420,86,AMBER,"gAmb","Chief Executive Officer since August 2011","Auburn BSc IE · Duke MBA · Former Apple COO","star") + snode(15,240, 420,86,AMBER,"gAmb","Led services transformation & Apple Silicon","$700B+ in share buybacks since 2012","chart") + snode(15,436, 420,86,AMBER,"gAmb","Apple Intelligence · Spatial Computing","Vision Pro · AI integration across ecosystem","trending") + + # B2 — COMPANY OVERVIEW + draw_circle(B2_CX,B2_CY,B2_R, CYAN,"gCyn","COMPANY OVERVIEW", + img=B2_D, clip_id="b2Clip", fallback="AP") + snode(460,14, 410,86,CYAN,"gCyn","Founded: April 1, 1976 · Cupertino, CA","Jobs · Wozniak · Wayne · NASDAQ: AAPL","clock") + snode(1010,14, 430,86,CYAN,"gCyn","~150,000 employees worldwide","Apple Park HQ · Cupertino, California","building") + + # B3 — INDUSTRY POSITION + draw_circle(B3_CX,B3_CY,B3_R, LIME,"gLme","INDUSTRY POSITION", + inner_svg=ecr_gauge(B3_CX,B3_CY,430,500,"TOP-RATED")) + snode(1474, 8, 430,86,LIME,"gLme","ECR: 430% · Top-Rated · RealRate","#1 of 17 US Computers companies","star") + snode(1474,104, 430,86,LIME,"gLme","177pp above industry avg (253%)","Highest ECR in US Computers 2025","chart") + + # B4 — FINANCIAL HEALTH + draw_circle(B4_CX,B4_CY,B4_R, SKY,"gSky","FINANCIAL HEALTH", + inner_svg=balance_sheet_svg(B4_CX,B4_CY,"$364.9B")) + snode(1560,248, 350,86,SKY,"gSky","Revenue: $416B (FY2025) +6% YoY","Net Income: $112B · Op. Margin: 32%","dollar") + snode(1560,344, 350,86,SKY,"gSky","Total Assets: $364.9B","Cash & Securities: $162B","chart") + snode(1560,440, 350,86,SKY,"gSky","R&D: $34.6B · Market Cap: $3.0T","Stockholders' Equity: $56.9B","trending") + + # B5 — BUSINESS SEGMENTS + draw_circle(B5_CX,B5_CY,B5_R, EMER,"gEmr","BUSINESS SEGMENTS", + inner_svg=pie_svg(B5_CX,B5_CY,32,[(48,ORAN),(23,LIME),(29,CYAN)],"3 SEG",fsize=6.5)) + snode(1462,620, 440,86,EMER,"gEmr","iPhone: ~$201B · 48%","iPhone 16 series · Apple Intelligence · 5G","chart") + snode(1462,716, 440,86,EMER,"gEmr","Services: ~$96B · 23%","App Store · iCloud · Apple TV+ · Apple Pay","dollar") + snode(1462,812, 440,86,EMER,"gEmr","Mac · iPad · Wearables: ~$119B · 29%","Apple Silicon · Vision Pro · AirPods Pro","globe") + + # B6 — 2025 HIGHLIGHTS + draw_circle(B6_CX,B6_CY,B6_R, ORAN,"gOrn","2025 HIGHLIGHTS", + img=B6_D, clip_id="b6Clip", svg_icon=svg_chip(B6_CX,B6_CY,ORAN)) + snode(530,940, 380,86,ORAN,"gOrn","Revenue: $416B (+6% YoY)","Net Income: $112B · Market Cap: $3.0T","dollar") + snode(920,940, 380,86,ORAN,"gOrn","Apple Intelligence & Siri AI overhaul","Vision Pro spatial computing · M4 chip era","trending") + snode(1310,940,380,86,ORAN,"gOrn","Services record: ~$96B revenue","App Store · iCloud · Subscription platform","chart") + + # B7 — COMPANY HISTORY + draw_circle(B7_CX,B7_CY,B7_R, PURP,"gMH","Company History", + svg_icon=svg_growth(B7_CX,B7_CY,PURP)) + snode(15,725, 400,86,PURP,"gPrp","1976: Founded · Cupertino, California","Jobs · Wozniak · Wayne · Apple I computer","clock") + snode(15,821, 400,86,PURP,"gPrp","1984: Macintosh · 2007: iPhone launched","2011: Tim Cook becomes CEO · Post-Jobs era","trending") + snode(15,917, 400,86,PURP,"gPrp","2025: ECR 430% · #1 US Computers · RealRate","Revenue $416B · Market Cap $3.0T","star") + + # DECORATIVE + draw_circle(D1_CX,D1_CY,D1_R, ORAN,"gOrn","Products", + img=B6_D, clip_id="d1Clip", svg_icon=svg_chip(D1_CX,D1_CY,ORAN)) + draw_circle(D2_CX,D2_CY,D2_R, CYAN,"gCyn","Ecosystem", + svg_icon=svg_neural(D2_CX,D2_CY,CYAN)) + draw_circle(D3_CX,D3_CY,D3_R, LIME,"gLme","ECR Trend", + svg_icon=svg_trend(D3_CX,D3_CY,LIME,"→ 430%")) + draw_circle(D4_CX,D4_CY,D4_R, SKY,"gSky","$3.0T", fallback=" ") + t(D4_CX, D4_CY-6, "$3.0T", 22, WH, "middle", "800") + t(D4_CX, D4_CY+12, "Mkt Cap", 14, SKY, "middle", "700") + + ECR_VAL, RANK_VAL, STATUS_VAL = "430%", "#1 / 17", "Top-Rated" + + elif COMPANY == "harley": + + # B1 — JOCHEN ZEITZ / CEO + draw_circle(B1_CX,B1_CY,B1_R, AMBER,"gAmb","Jochen Zeitz · CEO", + img=B1_D, clip_id="b1Clip", svg_icon=svg_motorcycle(B1_CX,B1_CY,AMBER)) + snode(15,104, 420,86,AMBER,"gAmb","President & CEO since February 2020","Architect of Hardwire 5-year strategy 2021–2025","star") + snode(15,240, 420,86,AMBER,"gAmb","Former CEO of Puma AG · Sustainability champion","Led HD's pivot to premium focus & profitability","chart") + snode(15,436, 420,86,AMBER,"gAmb","LiveWire EV spin-off 2022 · NYSE: LVWR","Selective market expansion · Global brand depth","trending") + + # B2 — COMPANY OVERVIEW + draw_circle(B2_CX,B2_CY,B2_R, CYAN,"gCyn","COMPANY OVERVIEW", + img=B2_D, clip_id="b2Clip", fallback="HD") + snode(460,14, 410,86,CYAN,"gCyn","Founded: 1903 · Milwaukee, Wisconsin","NYSE: HOG · One of the world's oldest motorcycle brands","clock") + snode(1010,14, 430,86,CYAN,"gCyn","~5,900 employees worldwide","HQ: 3700 W Juneau Ave · Milwaukee, WI 53208","building") + + # B3 — INDUSTRY POSITION + draw_circle(B3_CX,B3_CY,B3_R, LIME,"gLme","INDUSTRY POSITION", + inner_svg=ecr_gauge(B3_CX,B3_CY,147,200,"TOP-RATED")) + snode(1474, 8, 430,86,LIME,"gLme","ECR: 147% · Top-Rated · RealRate","#5 of 38 US Motor companies","star") + snode(1474,104, 430,86,LIME,"gLme","45pp above industry avg (102%)","Top-Rated in US Motor 2026","chart") + + # B4 — FINANCIAL HEALTH + draw_circle(B4_CX,B4_CY,B4_R, SKY,"gSky","FINANCIAL HEALTH", + inner_svg=balance_sheet_svg(B4_CX,B4_CY,"$12.1B")) + snode(1560,248, 350,86,SKY,"gSky","Revenue: $5.84B · Net Income: $695M","Total Assets: $12.1B","dollar") + snode(1560,344, 350,86,SKY,"gSky","Stockholders' Equity: $3.25B","Liabilities: ~$8.85B","chart") + snode(1560,440, 350,86,SKY,"gSky","ECR Strength: Stockholders' Equity +30pp","ECR Weakness: Current Liabilities –18pp","trending") + + # B5 — ECR ANALYSIS + draw_circle(B5_CX,B5_CY,B5_R, EMER,"gEmr","ECR ANALYSIS", + inner_svg=ecr_drivers_svg(B5_CX,B5_CY,"+30pp","–18pp","147%","TOP-RATED")) + snode(1462,620, 440,86,EMER,"gEmr","Greatest Strength: Stockholders' Equity","+30pp contribution to ECR","chart") + snode(1462,716, 440,86,EMER,"gEmr","Greatest Weakness: Liabilities, Current","–18pp drag on ECR","trending") + snode(1462,812, 440,86,EMER,"gEmr","ECR: 147% · 45pp above industry avg","Market average: 102% · #5 of 38 US Motor","star") + + # B6 — HARDWIRE STRATEGY / HIGHLIGHTS + draw_circle(B6_CX,B6_CY,B6_R, ORAN,"gOrn","HARDWIRE STRATEGY", + img=B6_D, clip_id="b6Clip", svg_icon=svg_motorcycle(B6_CX,B6_CY,ORAN)) + snode(530,940, 380,86,ORAN,"gOrn","Revenue: $5.84B · Net Income: $695M","Premium motorcycle focus · Selective market expansion","dollar") + snode(920,940, 380,86,ORAN,"gOrn","HD Financial Services (HDFS)","Retail loans · Wholesale financing · Insurance","chart") + snode(1310,940,380,86,ORAN,"gOrn","LiveWire (NYSE: LVWR) · EV expansion","S2 Del Mar · S2 Mulholland · Electric future","trending") + + # B7 — COMPANY HISTORY + draw_circle(B7_CX,B7_CY,B7_R, PURP,"gMH","Company History", + svg_icon=svg_growth(B7_CX,B7_CY,PURP)) + snode(15,725, 400,86,PURP,"gPrp","1903: Founded · Milwaukee, Wisconsin","William Harley & Arthur Davidson · Backyard workshop","clock") + snode(15,821, 400,86,PURP,"gPrp","1969: AMF acquisition · 1981: Management buyout","120+ years of American motorcycle heritage","trending") + snode(15,917, 400,86,PURP,"gPrp","2026: ECR 147% · #5 US Motor · RealRate","Hardwire strategy · Premium focus · EV expansion","star") + + # DECORATIVE + draw_circle(D1_CX,D1_CY,D1_R, ORAN,"gOrn","Heritage", + img=B6_D, clip_id="d1Clip", svg_icon=svg_motorcycle(D1_CX,D1_CY,ORAN)) + draw_circle(D2_CX,D2_CY,D2_R, CYAN,"gCyn","HDFS", + svg_icon=svg_handshake(D2_CX,D2_CY,CYAN)) + draw_circle(D3_CX,D3_CY,D3_R, LIME,"gLme","ECR Trend", + svg_icon=svg_trend(D3_CX,D3_CY,LIME,"→ 147%")) + draw_circle(D4_CX,D4_CY,D4_R, SKY,"gSky","$5.84B", fallback=" ") + t(D4_CX, D4_CY-6, "$5.84B", 20, WH, "middle", "800") + t(D4_CX, D4_CY+12, "Revenue", 14, SKY, "middle", "700") + + ECR_VAL, RANK_VAL, STATUS_VAL = "147%", "#5 / 38", "Top-Rated" + + # ══════════════════════════════════════════════════════════════════════════ + # CENTER HUB + # ══════════════════════════════════════════════════════════════════════════ + HR = 200 + + a(f'') + a(f'') + a(f'') + a(f'') + a(f'') + a(f'') + a(f'') + a(f'') + a(f'') + + for ang_deg in [0, 90, 180, 270]: + a1 = math.radians(ang_deg - 18); a2 = math.radians(ang_deg + 18) + ri = HR - 8 + a(f'') + + for i in range(8): + ang = math.radians(i * 45) + a(f'') + + # ── Hub Row 1: RealRate logo (centered, top) ───────────────────────────── + rl_w, rl_h = 220, 52 + rl_x, rl_y = HCX - rl_w // 2, HY + 10 + white_box(rl_x, rl_y, rl_w, rl_h) + if RL_D: + a(f'') + + a(f'') + + # ── Hub Row 2: Company logo (centered, 72×72) stacked above company name ── + lg_bw, lg_bh = 72, 72 + lg_bx = HCX - lg_bw // 2 # centered + lg_by = HY + 76 # top of logo box + + if COMPANY == "trilinc": + white_box(lg_bx, lg_by, lg_bw, lg_bh, op=.3) + a(f'' + f'' + f'' + f'' + f'' + f'') + t(HCX, HY+170, "TriLinc Global", 36, WH, "middle", "800") + t(HCX, HY+170, "Impact Investing · SME Lending · Developing Economies", 17, GREY, "middle", "500", op=.88, sp=".4") + t(HCX, HY+184, "TRLC · Est. 2008 · Delaware, USA", 18, GREY, "middle", "500", sp=".3") + + elif COMPANY == "strata": + if not hub_logo_png(lg_bx, lg_by, LOGO_D): + a(f'' + f'' + f'' + f'' + f'' + f'' + f'' + f'' + f'' + f'' + f'') + t(HCX, HY+164, "Strata Critical", 28, WH, "middle", "800") + t(HCX, HY+192, "Medical", 28, WH, "middle", "800") + t(HCX, HY+170, "Air Medical Transport · Critical Care · Emergency Response", 17, GREY, "middle", "500", op=.88, sp=".4") + t(HCX, HY+184, "CIK: 0001779128 · OTC-listed · Delaware, USA", 18, GREY, "middle", "500", sp=".3") + + elif COMPANY == "hp": + if not hub_logo_png(lg_bx, lg_by, LOGO_D): + a(f'' + f'' + f'' + f'' + f'' + f'') + t(HCX, HY+170, "HP Inc.", 46, WH, "middle", "800") + t(HCX, HY+170, "Personal Systems · Printing · Technology", 17, GREY, "middle", "500", op=.88, sp=".4") + t(HCX, HY+184, "Est. 1939 · HPQ · Palo Alto, California", 18, GREY, "middle", "500", sp=".3") + + elif COMPANY == "angi": + t(HCX, HY+130, "Angi Inc.", 52, WH, "middle", "800") + t(HCX, HY+170, "Home Services · Marketplace · Reviews", 18, GREY, "middle", "500", op=.88, sp=".4") + t(HCX, HY+184, "ANGI · NASDAQ · Est. 1995 · Denver, CO", 18, GREY, "middle", "500", sp=".3") + + elif COMPANY == "nvidia": + hub_logo_png(lg_bx, lg_by, LOGO_D) + t(HCX, HY+170, "Nvidia Corp.", 38, WH, "middle", "800") + t(HCX, HY+170, "AI Computing · GPU Architecture · Data Center", 17, GREY, "middle", "500", op=.88, sp=".4") + t(HCX, HY+184, "NVDA · Est. 1993 · Santa Clara, California", 18, GREY, "middle", "500", sp=".3") + + elif COMPANY == "apple": + if not hub_logo_png(lg_bx, lg_by, LOGO_D): + a(f'' + f'' + f'' + f'') + t(HCX, HY+170, "Apple Inc.", 46, WH, "middle", "800") + t(HCX, HY+170, "iPhone · Mac · Services · Apple Intelligence", 17, GREY, "middle", "500", op=.88, sp=".4") + t(HCX, HY+184, "AAPL · Est. 1976 · Cupertino, California", 18, GREY, "middle", "500", sp=".3") + + elif COMPANY == "tesla": + # Logo LEFT, name RIGHT in the same row + tl_cy = HY + 112 # row vertical center + tl_bx = HCX - 150 # logo box left edge (x=790) + tl_by = tl_cy - lg_bw // 2 # logo box top + white_box(tl_bx, tl_by, lg_bw, lg_bh, op=.3) + if LOGO_SVG_D: + _svg = base64.b64decode(LOGO_SVG_D).decode('utf-8') + _svg = _svg.replace('viewBox="0 0 278.67201 360.43799"', 'viewBox="0 15 278.67201 237"') + _svg_enc = base64.b64encode(_svg.encode('utf-8')).decode() + a(f'') + elif LOGO_D: + a(f'') + _nx = (tl_bx + lg_bw + 12 + HCX + 155) // 2 # center of right zone ≈ 984 + t(_nx, tl_cy + 14, "Tesla Inc.", 40, WH, "middle", "800") + t(HCX, HY+170, "Electric Vehicles · Energy Storage · AI Robotics", 17, GREY, "middle", "500", op=.88, sp=".4") + t(HCX, HY+184, "TSLA · NASDAQ · Est. 2003 · Austin, Texas", 18, GREY, "middle", "500", sp=".3") + + elif COMPANY == "harley": + if not hub_logo_png(lg_bx, lg_by, LOGO_D): + a(f'' + f'' + f'H-D' + f'') + t(HCX, HY+170, "Harley Davidson INC", 34, WH, "middle", "800") + t(HCX, HY+170, "Motorcycles · Financial Services · LiveWire EV", 17, GREY, "middle", "500", op=.88, sp=".4") + t(HCX, HY+184, "HOG · NYSE · Est. 1903 · Milwaukee, Wisconsin", 18, GREY, "middle", "500", sp=".3") + + a(f'') + a(f'') + + def badge(bx,by,bw,bh,c,label,val,fsz=24): + a(f'') + t(bx+bw//2, by+16, label, 16, c, "middle", wt="700", sp="1.1") + t(bx+bw//2, by+40, val, fsz, WH, "middle", "800") + + # Badges centred at HCX; span 336px → fits inside circle at this y (r=200, d≈104) + by_,bh_ = HY+200, 50 + badge(HCX-168, by_, 100, bh_, CYAN, "ECR SCORE", ECR_VAL, 28) + badge(HCX-60, by_, 120, bh_, AMBER, "INDUSTRY RANK",RANK_VAL, 24) + badge(HCX+68, by_, 100, bh_, LIME, "STATUS", STATUS_VAL, 18) + + a(f'') + t(W//2,1070,"Powered by RealRate: Using Explainable Financial AI · realrate.ai · ECR Data from RealRate", + 20,"#A8D8FF","middle",op=.9,sp=".6") + + a(''); return '\n'.join(p) + +html = (f'' + f'' + f'' + f'' + f'{build()}') + +# ── Output paths ─────────────────────────────────────────────────────────────── +HERE = Path(__file__).parent +_subdirs = { + "trilinc": None, + "strata": "Strata Critical Medical", + "hp": "HP Inc", + "angi": "Angi Inc", + "nvidia": "Nvidia Corp", + "tesla": "Tesla Inc", + "apple": "Apple Inc", + "harley": "Harley Davidson INC", +} +_subdir = _subdirs[COMPANY] +OUT_DIR = HERE / _subdir if _subdir else HERE +if _subdir: + OUT_DIR.mkdir(exist_ok=True) +OUT = str(OUT_DIR / f"{COMPANY}-mindmap.png") +POST_PATH = str(OUT_DIR / f"{COMPANY}-linkedin-post.txt") + +# ── Render ───────────────────────────────────────────────────────────────────── +print("Rendering…") +with sync_playwright() as pw: + br = pw.chromium.launch() + pg = br.new_page(viewport={"width": W, "height": H}, device_scale_factor=2) + pg.set_content(html, timeout=60000) + try: + pg.wait_for_load_state("networkidle", timeout=45000) + except Exception: + pass + pg.wait_for_timeout(2500) + HI_OUT = OUT.replace(".png", "_2x.png") + pg.screenshot(path=HI_OUT, clip={"x": 0, "y": 0, "width": W, "height": H}) + br.close() + +img_out = _PIL.open(HI_OUT).resize((W, H), _PIL.LANCZOS) +img_out.save(OUT, "PNG", optimize=True) +os.remove(HI_OUT) +print(f"Done (1920×1080): {OUT}") + +# ── LinkedIn post ────────────────────────────────────────────────────────────── +if COMPANY == "trilinc": + CAPTION = f"""\ +TriLinc Global Impact Fund ranks #1 in US Finance Services. ECR: 124%. + +46 percentage points above the industry average of 78%. Top-Rated by RealRate's independent, explainable financial AI. + +THE FUND +Founded 2008 · Delaware, USA · Ticker: TRLC · ~$1.4B AUM +Female-founded · Female-owned · Female-led + +LEADERSHIP +Gloria Nelund — Founder, Chief Executive Officer & Chief Compliance Officer +Former CEO, US Private Wealth at Deutsche Bank — oversaw $50 billion in assets under management +Over 40 years of experience in international asset management + +FINANCIAL HEALTH +Total Assets: $282.8M · Stockholders' Equity: $272.6M · Liabilities: $10.2M +Equity-to-Assets Ratio: 96.4% · Net Income: –$8.5M +Primary ECR Drivers: Equity +57pp · Revenue –17pp + +INVESTMENT STRATEGY +Direct loans · Trade finance · Structured credit · Preferred equity +SMEs with fewer than 500 employees · Developing economies · Local sub-advisors · 4 continents + +IMPACT +Sustainable community development · Workforce capacity building · Financial inclusion · Food security +Sectors: Education · Energy · Housing · Health + +2008: Founded | 2017: TRLC listed on OTC Pink Markets | 2025: Ranked #1 in US Finance Services + +Powered by RealRate: Using Explainable Financial AI + +Full US Finance Services ranking: {RANKING_URL} + +#RealRate #ImpactInvesting #ESG #SMELending #FinancialHealth""" + +elif COMPANY == "hp": + CAPTION = f"""\ +HP Inc. ranks #9 in US Computers. ECR: 258%. + +At the industry average of 258%. Rated by RealRate's independent, explainable financial AI. + +THE COMPANY +Personal computing and printing technology leader · Palo Alto, California +Founded 1939 · Spun off from Hewlett-Packard November 2015 · Ticker: HPQ +~58,000 employees worldwide + +LEADERSHIP +Enrique Lores — President & Chief Executive Officer +Joined HP in 1989 · Led Imaging, Printing & Solutions before becoming CEO November 2019 +"Future Ready" transformation — restructuring for AI-era growth and subscription revenue + +FINANCIAL HEALTH +Revenue: $53.6B (FY2024) · Net Income: $2.8B · Operating margin: 7.1% +Total Assets: $39.9B · Stockholders' Equity: –$1.3B (deficit from cumulative buybacks) +Cash: $3.25B · Long-term Debt: $8.3B · R&D: $1.64B + +BUSINESS SEGMENTS +Personal Systems: ~$34.4B (64%) — PCs, laptops, workstations, Chromebooks +Printing: ~$19.1B (36%) — LaserJet, OfficeJet, Instant Ink supplies +Poly collaboration hardware — acquired 2022 · hybrid work solutions + +HISTORY +1939: William Hewlett & Dave Packard found the company in a Palo Alto garage +2015: Hewlett-Packard splits into HP Inc. (HPQ) and Hewlett Packard Enterprise (HPE) +FY2024: $53.6B revenue · ECR 258% · AI PC transformation underway + +Powered by RealRate: Using Explainable Financial AI + +Full US Computers ranking: {RANKING_URL} + +#RealRate #HPInc #AIComputer #FinancialHealth #TechIndustry""" + +elif COMPANY == "strata": + CAPTION = f"""\ +Strata Critical Medical ranks #1 in US Air. ECR: 123%. + +54 percentage points above the industry average of 69%. Top-Rated by RealRate's independent, explainable financial AI. + +THE COMPANY +Air Medical Transport · Critical Care · Emergency Response · Delaware, USA +CIK: 0001779128 · OTC-listed · STCM · Publicly reporting + +FINANCIAL HEALTH +Total Assets: $325.5M · Stockholders' Equity: $279.1M · Liabilities: $46.4M +Revenue: $197.1M (FY2025) · Net Income: +$41.3M +First profitable year in company history + +ECR DRIVERS +Greatest Strength: Operating Expenses — +46pp contribution to ECR +Greatest Weakness: Other Expenses — –81pp drag on ECR + +GROWTH JOURNEY +2021: Revenue $50.5M · Net Income –$40.1M — Rapid expansion phase begins +2022–2024: Revenue grew from $146M to $249M — approximately 4× growth in 3 years +2025: ECR 123% · #1 US Air · RealRate — First profitable year in history + +Powered by RealRate: Using Explainable Financial AI + +Full US Air ranking: {RANKING_URL} + +#RealRate #AirMedical #CriticalCare #FinancialHealth #Healthcare""" + +elif COMPANY == "nvidia": + CAPTION = f"""\ +Nvidia Corp. ranks #8 in US Semiconductors. ECR: 351%. + +98 percentage points above the industry average of 253%. Top-Rated by RealRate's independent, explainable financial AI. + +THE COMPANY +AI computing and GPU technology leader · Santa Clara, California +Founded April 5, 1993 · NASDAQ: NVDA · ~36,000 employees worldwide + +LEADERSHIP +Jensen Huang — Co-Founder & Chief Executive Officer +Oregon State BSc Electrical Engineering · Stanford MS Electrical Engineering +Led Nvidia from gaming graphics chipmaker to the world's AI computing infrastructure provider + +FINANCIAL HEALTH +Revenue: $130.5B (FY2025) · Net Income: $72.9B +Total Assets: $111.6B · Stockholders' Equity: $79.3B · Liabilities: $32.3B +R&D investment: $12.9B + +ECR DRIVERS +Greatest Strength: Net Income — +94pp contribution to ECR +Greatest Weakness: Stockholders' Equity — –56pp drag on ECR + +BUSINESS SEGMENTS +Data Center: ~$115.2B (88%) — H100, H200, Blackwell B200, GB200 NVL72, NVLink, InfiniBand +Gaming: ~$11.4B (9%) — GeForce RTX 50 series · DLSS 4 · Ray Tracing +Professional Visualization · Automotive · OEM: ~$3.9B (3%) — DRIVE platform · Omniverse · Jetson + +HISTORY +1993: Jensen Huang, Curtis Priem & Chris Malachowsky found Nvidia in Santa Clara +1999: GeForce 256 — world's first GPU | 2006: CUDA platform — AI computing foundation +2025: ECR 351% · #8 US Semiconductors · Revenue +114% YoY · RealRate + +Powered by RealRate: Using Explainable Financial AI + +Full US Semiconductors ranking: {RANKING_URL} + +#RealRate #Nvidia #AIComputing #GPUs #FinancialHealth""" + +elif COMPANY == "tesla": + CAPTION = f"""\ +Tesla Inc ranks #9 in US Motor. ECR: 135%. + +34 percentage points above the industry average of 102%. Top-Rated by RealRate's independent, explainable financial AI. + +THE COMPANY +Electric vehicles, energy storage, and AI company · Austin, Texas +Founded July 1, 2003 · NASDAQ: TSLA +~125,665 employees worldwide + +LEADERSHIP +Elon Musk — Co-Founder & Chief Executive Officer (since 2008) +Also CEO of SpaceX, xAI, Neuralink & The Boring Company +Driving Tesla's transition from EV maker to full-stack AI and robotics company + +FINANCIAL HEALTH +Revenue: $94.8B (FY2025) · Net Income: $3.9B · R&D: $6.4B +Total Assets: $137.8B · Stockholders' Equity: $82.9B · Liabilities: $54.9B +Equity-to-Assets Ratio: 60.2% + +ECR DRIVERS +Greatest Strength: Cost of Goods and Services Sold — +36pp contribution to ECR +Greatest Weakness: Other Expenses — –27pp drag on ECR + +BUSINESS SEGMENTS +Automotive: ~81% — Model 3/Y/S/X/Cybertruck · Full Self-Driving · Robotaxi +Energy Generation & Storage: ~13% — Powerwall · Megapack · Solar Roof +Services & Other: ~6% — Supercharger network · Insurance · Tesla Fleet + +HISTORY +2003: Tesla Motors founded by Martin Eberhard & Marc Tarpenning · San Carlos, California +2008: Elon Musk becomes CEO · First Roadster delivered | 2010: TSLA IPO on NASDAQ +2025: ECR 135% · #9 US Motor · Top-Rated · Revenue $94.8B · Robotaxi & Optimus era + +Powered by RealRate: Using Explainable Financial AI + +Full US Motor ranking: {RANKING_URL} + +#RealRate #Tesla #ElectricVehicles #FinancialHealth #EV""" + +elif COMPANY == "angi": + CAPTION = f"""\ +Angi Inc. ranks #1 in US Advertising. ECR: 157%. + +78 percentage points above the industry average of 80%. Top-Rated by RealRate's independent, explainable financial AI. + +THE COMPANY +Online home services marketplace · Denver, Colorado +Founded 1995 · NASDAQ: ANGI · IAC subsidiary +~4,500 employees worldwide + +LEADERSHIP +Jeff Kip — Chief Executive Officer +Brands: Angi (formerly Angie's List) · HomeAdvisor · Handy +Connecting homeowners with local service professionals across the United States + +FINANCIAL HEALTH +Total Assets: $1.68B · Stockholders' Equity: $1.46B · Liabilities: $222.4M +Revenue: $1.03B · Net Income: +$43.8M +Equity-to-Assets Ratio: 86.7% + +ECR DRIVERS +Greatest Strength: Stockholders' Equity — +68pp contribution to ECR +Greatest Weakness: Marketing & Selling Expenses — –22pp drag on ECR + +PLATFORM +Angi: Homeowner marketplace · Crowd-sourced reviews · Cost guides +HomeAdvisor: Instant Pro Connect · Local professionals · Project matching +Handy: On-demand home services · Cleaning · Assembly · Moving · Repairs + +HISTORY +1995: Angie's List founded in Columbus, Ohio — review platform for home service contractors +1998: ServiceMagic founded, rebranded HomeAdvisor in 2012 +2017: ANGI Homeservices formed via HomeAdvisor & Angie's List merger | 2021: Rebranded to Angi Inc. +2025: ECR 157% · #1 US Advertising · RealRate + +Powered by RealRate: Using Explainable Financial AI + +Full US Advertising ranking: {RANKING_URL} + +#RealRate #HomeServices #AngiInc #FinancialHealth #Marketplace""" + +elif COMPANY == "harley": + CAPTION = f"""\ +Harley Davidson INC ranks #5 in US Motor. ECR: 147%. + +45 percentage points above the industry average of 102%. Top-Rated by RealRate's independent, explainable financial AI. + +THE COMPANY +Iconic American motorcycle brand · Milwaukee, Wisconsin +Founded 1903 · NYSE: HOG · ~5,900 employees worldwide +Brands: Harley-Davidson · LiveWire · Harley-Davidson Financial Services (HDFS) + +LEADERSHIP +Jochen Zeitz — President & Chief Executive Officer +Former CEO of Puma AG · Architect of the "Hardwire" 2021–2025 strategic plan +Focus on premium motorcycles, selective market expansion, and EV platform development + +FINANCIAL HEALTH +Revenue: $5.84B · Net Income: $695M +Total Assets: $12.1B · Stockholders' Equity: $3.25B · Liabilities: ~$8.85B + +ECR DRIVERS +Greatest Strength: Stockholders' Equity — +30pp contribution to ECR +Greatest Weakness: Liabilities, Current — –18pp drag on ECR + +BUSINESS +Motorcycles & Related Products: Touring, Softail, Sportster, Adventure, Electric +Financial Services (HDFS): Retail loans, wholesale financing, insurance, licensing +LiveWire (NYSE: LVWR): Dedicated EV motorcycle brand, spun off 2022 + +HISTORY +1903: William Harley & Arthur Davidson build first motorcycle in Milwaukee backyard +1969: AMF acquisition | 1981: Management buyout — independence restored +2021: Hardwire strategy launched | 2022: LiveWire EV brand spun off +2026: ECR 147% · #5 US Motor · Top-Rated · RealRate + +Powered by RealRate: Using Explainable Financial AI + +Full US Motor ranking: {RANKING_URL} + +#RealRate #HarleyDavidson #Motorcycles #FinancialHealth #EV""" + +elif COMPANY == "apple": + CAPTION = f"""\ +Apple Inc. ranks #1 in US Computers. ECR: 430%. + +177 percentage points above the industry average of 253%. Top-Rated by RealRate's independent, explainable financial AI. + +THE COMPANY +World's most valuable technology company · Cupertino, California +Founded April 1, 1976 · NASDAQ: AAPL · ~150,000 employees worldwide + +LEADERSHIP +Tim Cook — Chief Executive Officer +CEO since August 2011 · Auburn University BSc Industrial Engineering · Duke MBA +Led Apple's transformation from hardware maker to services, AI, and spatial computing company + +FINANCIAL HEALTH +Revenue: $416B (FY2025) · +6% YoY · Net Income: $112B · Operating Margin: 32% +Total Assets: $364.9B · Stockholders' Equity: $56.9B +Cash & Securities: $162B · R&D investment: $34.6B · Market Cap: $3.0 Trillion + +BUSINESS SEGMENTS +iPhone: ~$201B (48%) — iPhone 16 series · Apple Intelligence · 5G +Services: ~$96B (23%) — App Store · iCloud · Apple TV+ · Apple Pay · Apple Arcade +Mac · iPad · Wearables: ~$119B (29%) — Apple Silicon M4 · Vision Pro · AirPods Pro + +HISTORY +1976: Steve Jobs, Steve Wozniak & Ronald Wayne found Apple · Cupertino, California +1984: Macintosh launched | 2007: iPhone changes mobile computing | 2011: Tim Cook becomes CEO +2025: ECR 430% · #1 US Computers · Revenue $416B · Market Cap $3.0 Trillion · RealRate + +Powered by RealRate: Using Explainable Financial AI + +Full US Computers ranking: {RANKING_URL} + +#RealRate #Apple #iPhone #FinancialHealth #TechIndustry""" + +with open(POST_PATH, "w", encoding="utf-8") as _f: + _f.write(CAPTION + "\n") +print("LinkedIn post saved:", POST_PATH) +```