·
11 commits
to refs/heads/main
since this release
π Release Notes β Version 1.12.0
β¨ New Features
- InDesign Plugin: QRcodly integrates with Adobe InDesign β generate and place QR codes directly in your layouts via API key. Now active in the integrations marketplace, including Adobe review compliance and runtime hardening. (#375)
- Pro Checkout & Conversion Flow: Clicking "Upgrade to Pro" while signed out now leads straight into Stripe checkout after sign-in/sign-up via a new
/upgraderoute β instead of dropping users on the dashboard. Checkout opens in the same tab, all Pro gates (badges, API keys, integrations, bulk import) link to the pricing page, and the pricing copy was rewritten in all 9 languages. (#398) - Dedicated Redirect Domain: Short links are now served from a separate redirect domain; every other path 301s to the brand domain. A Safe-Browsing flag on a user's destination can never touch the main domain. (#393)
- URL Safety Screening: Destination URLs of short links and dynamic QR codes are checked against Google Web Risk (malware, phishing, unwanted software) before redirecting. (#387)
- API Key Scopes: API keys now support granular read/write/update/delete scopes and can be edited afterwards β scopes, description, and expiration. (#383)
- Duplicate Entities: One-click duplication for QR codes, templates, and short URLs β preserves config and tags, copies embedded images, and auto-names copies. (#380)
- User Ban System: Accounts can be banned via Clerk metadata β banned users are blocked at a central middleware choke point and see a dedicated info page. (#384)
- vCard Upgrades: vCard QR codes now separate private and business addresses, and bulk import supports title, note, and multi-line fields.
- Legal Pages: New Terms of Service and an updated privacy policy (DPO-reviewed) with full DE/EN localization.
π¨ UI & UX Improvements
- Browser Extension Redesign: The extension popup now matches the main app's look (shared logo, buttons, loader) and starts noticeably faster β the artificial splash delay is gone. (#372)
- Clickable Previews: QR code and template preview images open on click.
- Pricing Update: Promotional pricing ended β Pro is now β¬8.99/month or β¬6.99/month billed annually, with a clearer business-value pitch on the plans page. (#381, #398)
π Bug Fixes
- Scan analytics now geolocate by the visitor's IP instead of the backend's β country stats are accurate again. (#394, #396)
- Umami 3.1+ compatibility: dropped an invalid compare parameter that caused 400 responses in analytics queries.
- Fixed Google indexing problems (metadata/SEO fixes).
- Google Maps loader no longer breaks when switching locales. (#370)
- CDN caching fixes: previews and uploaded images get cache-busting filenames, and own CDN URLs are resolved back to storage keys during rendering. (#369)
- Bulk import limits are now checked before upload with a clear upgrade hint, instead of failing with a raw server error. (#398)
π Technical Improvements
- Dependency Modernization: Workspace upgraded to pnpm 11 (with build-script gating and supply-chain release quarantine), Clerk 7, Stripe 22, recharts 3, and fumadocs 11 β including all code migrations and a hardened Nixpacks deployment setup. (#398)
- Render Performance: Rendered QR code buffers are cached in Redis and
If-None-Matchrequests skip the render pipeline entirely. - CDN Asset Delivery: Image previews and uploads moved from short-lived pre-signed S3 URLs to stable public CDN URLs (Cloudflare R2 preparation) β browser caching finally works. (#368)
- Test Infrastructure: Clerk test credentials are cached across the suite (~30 API calls per run instead of ~1,500), with a memory-safe Jest worker setup; extension gained a Vitest smoke-test suite. (#398, #372)
π Dependencies
- Bump
electron35.7.5 β 41.0.2 (#351) - Bump
electron-store10.1.0 β 11.0.2 (#350) - Bump
next-intl4.7.0 β 4.8.3 (#349) - Bump
@tailwindcss/vite4.1.18 β 4.2.1 (#347) - Bump
softprops/action-gh-release2 β 3 (#367),actions/github-script7 β 9 (#366),release-drafter6 β 7 (#346)
Full Changelog: v1.11.0...v1.12.0