Files
Crussell/frontend/static/images/portfolio/placeholder-06.svg
T
popertots 4146f8e09a fix: pre-launch review — security, money safety, privacy, legal, code quality
Security (P0):
- IsJTIRevoked fails closed on DB error (previously accepted revoked tokens)
- Remove dead consume parameter from SCA gate (prevented token replay)
- Rate limiter map TTL-based eviction (prevented memory exhaustion)
- 2FA attempt map already had LRU eviction (verified)

Money Safety (P1):
- Gift card transfer refuses expired destination cards
- Gift card balance deduction has WHERE balance >= amount guard
- Webhook clawback acquires till-sale advisory lock
- Sweep/retry lock keys aligned

Privacy/Cookies (P2):
- Self-host Google Fonts (Playfair Display woff2)
- Replace CARTO map tiles with OpenStreetMap raster tiles
- Replace Wikimedia/icon-icons external images with local SVGs
- Remove external image URLs from CSP

Legal (P3):
- Privacy policy: add 6 missing data categories (gift cards, 2FA, GDPR, notifications, technical, cookies)
- Terms: add Tips section (optionality, non-refundable, same processing as bookings)

Code Quality (P4):
- twofa.Check accepts db.Querier for testability
- depositPromotionMinPct uses literal 0.20 (not misleading alias)
- HolidayHours.svelte uses proper type (not as any[])
- Remove stale TODO comments from main.go

Testing (P5):
- 94 new float64 money validity tests across 3 test files
- Cover VAT, splits, refunds, gift cards, rounding, precision boundaries
- All 27 backend test packages pass
2026-08-22 00:34:51 +01:00

24 lines
1.3 KiB
XML

<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 400 300">
<defs>
<linearGradient id="bg6" x1="0%" y1="0%" x2="100%" y2="100%">
<stop offset="0%" stop-color="#fce4ec"/>
<stop offset="100%" stop-color="#f48fb1"/>
</linearGradient>
</defs>
<rect width="400" height="300" fill="url(#bg6)" rx="8"/>
<!-- Floral nail pattern -->
<ellipse cx="200" cy="150" rx="50" ry="90" fill="#fff" opacity="0.2"/>
<!-- Flower -->
<circle cx="200" cy="120" r="6" fill="#e91e63" opacity="0.5"/>
<circle cx="192" cy="112" r="5" fill="#f06292" opacity="0.4"/>
<circle cx="208" cy="112" r="5" fill="#f06292" opacity="0.4"/>
<circle cx="192" cy="128" r="5" fill="#f06292" opacity="0.4"/>
<circle cx="208" cy="128" r="5" fill="#f06292" opacity="0.4"/>
<circle cx="200" cy="120" r="3" fill="#fff" opacity="0.7"/>
<!-- Stem -->
<path d="M200 126 Q200 145 200 160" fill="none" stroke="#4caf50" stroke-width="2" opacity="0.4"/>
<!-- Small leaves -->
<ellipse cx="195" cy="140" rx="6" ry="3" fill="#81c784" opacity="0.4" transform="rotate(-30 195 140)"/>
<ellipse cx="205" cy="148" rx="6" ry="3" fill="#81c784" opacity="0.4" transform="rotate(30 205 148)"/>
<text x="200" y="260" text-anchor="middle" fill="#880e4f" font-family="Georgia, serif" font-size="14" opacity="0.6">Nail Art — Floral</text>
</svg>