Fix milestone sharing previews and publisher recovery

This commit is contained in:
2026-08-14 14:33:29 +02:00
parent e7581e488d
commit d8f7202bf6
10 changed files with 265 additions and 43 deletions

View File

@@ -57,14 +57,19 @@ def render_card(card):
else:
logo_x = 68
draw.text((logo_x, 70), "QR MASTER", font=medium, fill=navy)
badge_text = "Verified scan milestone"
badge_font = font("DejaVuSans.ttf", 19)
badge_box = draw.textbbox((0, 0), badge_text, font=badge_font)
badge_width = badge_box[2] - badge_box[0]
draw.rounded_rectangle((1120 - badge_width - 32, 61, 1132, 106), radius=7, fill="#ecfdf5")
draw.text((1116, 73), badge_text, font=badge_font, fill=mint, anchor="ra")
draw.line((68, 124, 1132, 124), fill="#e5edf5", width=2)
total = int(card.get("totalUniqueScans") or card.get("threshold") or 0)
total_scans = int(card.get("totalScans") or total)
draw.text((66, 212), f"{total:,}", font=display, fill=navy)
draw.text((73, 374), "UNIQUE SCANS", font=medium, fill=navy)
draw.text((74, 410), f"{total_scans:,} total scans", font=font("DejaVuSans.ttf", 20), fill=slate)
draw.line((68, 548, 108, 548), fill=blue, width=4)
draw.text((126, 530), "QR code milestone", font=regular, fill=slate)
trend = card.get("trend") or {}
raw_points = trend.get("points") or []
@@ -89,7 +94,11 @@ def render_card(card):
draw.ellipse((x - 8, y - 8, x + 8, y + 8), fill="#ffffff", outline=blue, width=5)
draw.text((left, top + height + 27), trend.get("startLabel") or "Created", font=font("DejaVuSans.ttf", 19), fill=slate)
draw.text((left + width, top + height + 27), trend.get("endLabel") or "Reached", font=font("DejaVuSans.ttf", 19), fill=slate, anchor="ra")
draw.text((870, 530), "VERIFIED SCAN DATA", font=font("DejaVuSans-Bold.ttf", 18), fill=mint)
draw.line((68, 536, 1132, 536), fill="#e5edf5", width=2)
title = str(card.get("qrTitle") or "QR code")
if len(title) > 52:
title = title[:49].rstrip() + "..."
draw.text((68, 558), title, font=medium, fill=navy)
path = Path(tempfile.mkstemp(suffix=".png")[1])
image.save(path, "PNG", optimize=True)
return path