LinkBreeze v1.1.3
What's Changed
π Fixed
- Fresh Docker deploy crash (migration 0005 fails on startup) β Migrations 0005 and 0006 were missing
--> statement-breakpointmarkers.better-sqlite3only accepts one statement perprepare()call, so the multi-statement files crashed the server on every fresh deploy. Added the missing breakpoints. Fixes #38. - Preset themes ignored numeric
fontScalevalues β Presets like Editorial Paper (110%), Retro Sunset (120%) silently fell through to the default 15px. Now correctly treated as percentages. Pastel Softpreset rendered with wrong shadow βresolveShadow()was missing the"soft"case. Added.resolveSpacing()density values mismatched the enum β"relaxed"was dead code (fell to default alongside"normal"). Now correctly returns 16px for more spacing.- Theme name conflicts on duplicate and import β Both operations now reject names already in use instead of creating silent duplicates.
π Security
- Password complexity requirements β Setup and change-password now require at least one lowercase letter, one uppercase letter, and one number. Closes #7.
- Open-redirect hardening on
/go/:idβ Runtime protocol check added; onlyhttp:andhttps:URLs are accepted for redirect. - OG image and sitemap routes now respect
BASE_URLenv var β Both routes were missed in the v1.1.2 host-header injection fix. They fully trustedx-forwarded-host. Now fixed.
Changed
- Theme export schema density default:
"comfortable"β"normal"(matching the DB schema and Zod enum).
Full changelog: https://github.com/Manak-hash/LinkBreeze/blob/v1.1.3/CHANGELOG.md