Changelog

What's new in Hitman's Library

Latest

Designed States — No More Screenshot Crutches

Every "loading" and "blocked" state is now a proper designed UI — honest, intentional, and consistent with the design language. Screenshots are no longer used as automatic fallbacks when a live preview fails.

Preview tab loading state: clean domain name + three staggered pulsing dots — no screenshot background while the iframe loads. What you see while loading matches what you'll see when it's ready

Improved

Preview tab proxy-failed state: domain name + "Live preview unavailable" label + "Open site ↗" CTA. Honest about what's happening instead of silently showing a static screenshot as if it were live

Improved

Presentation mode proxy-failed state: subtle dot-grid background, large domain name, industry label, color palette swatches, and a "Visit site ↗" link. Blocked sites now feel like reference cards, not broken frames

Improved

Design card selected state: top accent line (2px) appears when a card is active — stronger visual signal that pairs with the brighter border

Improved

Design card color swatches are slightly larger (14px) for better readability at a glance

Improved

Empty panel state: "Select a site" now shows the list of available tabs (preview · colors · type · assets · figma) as a quiet visual hint of what's inside

Improved

Figma Layers — Copy Any Site as Editable Layers

New "Layers" button in the Figma tab copies the full site as real Figma layers — text, shapes, and structure — not a flat screenshot. No plugin required.

Layers button in the Figma tab — opens the site in a capture window using Figma's own publicly-hosted capture.js script (the same tool that powers their AI integrations). Click "Copy to clipboard" in the toolbar that appears, then ⌘V in Figma to get fully editable text, shapes, and layout — not a rasterized PNG

New

Element selection in capture mode — the capture toolbar lets you select any component (nav, card, pricing section) instead of capturing the full page, so you can pull only what you need into Figma

New

Performance & Design Polish

Faster perceived load across preview and presentation mode. Sharper visual hierarchy in the sidebar and detail panel.

Presentation mode shows the site thumbnail immediately while the proxy iframe loads — navigating between sites now feels instant instead of flashing to black

Improved

Presentation mode: added always-visible prev/next buttons to the bottom HUD — arrows are now immediately discoverable instead of requiring hover over the preview area

Improved

Sidebar active category now has a left border accent — clearer visual signal for which filter is selected, especially when multiple industries are active

Improved

Panel tabs: active tab label is now font-medium — stronger differentiation from inactive tabs at a glance

Improved

Critical: App Crash on Site Preview

Fixed a root-cause bug that crashed the entire app when previewing certain sites.

Added sandbox attribute to all proxy iframes — the root cause of "Application error" crashes. The proxy serves external sites at the hitmanslibrary.xyz origin, so their JavaScript ran same-origin, letting any unhandled JS error in those sites fire window.onerror on the parent and trigger the Next.js error page. Sandboxing the iframes without allow-same-origin isolates errors to the iframe while keeping postMessage (used for proxy-failed signals and the Figma picker) fully functional.

Fixed

Presentation Mode Redesign & Touch Targets

Presentation mode rebuilt from the ground up with a minimal overlay HUD. Touch targets increased to 44px+ across the entire UI.

Presentation mode: minimal overlay HUD — controls float at top-right and fade in after a beat so the first thing you see is the site, not chrome

Improved

Presentation mode: nav arrows appear only on hover over the preview area, keeping the experience immersive when you're just watching

Improved

Presentation mode: thin animated progress bar at the very top shows your position across the full collection at a glance

Improved

Presentation mode: bottom HUD shows domain, industry, counter, and color palette in one compact row instead of two separate top/bottom bars

Improved

Presentation mode: info row slides in the direction of navigation — left when going back, right when going forward — giving a physical sense of movement

Improved

Presentation mode: swipe left/right to navigate on touch devices — works on any phone or tablet without tapping arrows

New

Header icon buttons increased from 32px to 36px — easier to tap accurately on touch screens

Improved

Mobile category filter pills increased from 28px to 40px height — were consistently too small to tap without mis-tapping adjacent pill

Improved

Sidebar filter rows increased to 36px — matches minimum recommended touch target for dense lists

Improved

Detail panel action buttons (re-extract, close) increased from 32px to 36px

Improved

Panel tabs increased from 40px to 44px height — meets Apple HIG minimum touch target recommendation

Improved

Color copy button expanded to 28px minimum — was previously a 12px hit target from a 4px padding box

Improved

Type specimen action icons (copy, Google Fonts link) increased from 24px to 32px

Improved

Performance, Bug Fixes & Figma Tab

Fixed site-wide performance regression, wired the missing Figma tab, and patched several data display bugs.

Figma tab now appears in the detail panel — it was fully implemented but never wired into the panel tabs

Fixed

Replaced transition-all on all buttons and links with transition-colors — eliminates browser compositing cost across all CSS properties on every click target

Improved

Sidebar and mobile filter "All" count now shows the real total (e.g. 177) instead of the current page load (32)

Fixed

Removed invalid workflow key from next.config.mjs that was generating startup warnings on every dev server boot

Fixed

TypeScript Bug Fixes

Full type-error sweep — zero TS errors across the entire codebase.

Created missing UI components: Label, Select, Badge, Tabs, ScrollArea, Textarea, Slider — many node and panel components were importing these non-existent files

Fixed

Created missing lib/node-utils module — all node components importing getStatusColor() were silently broken at runtime

Fixed

Node components now use correct @xyflow/react v12 NodeProps generic — NodeProps<FlowNode<DataType>> instead of NodeProps<DataType>

Fixed

fetch() timeout option removed — not part of RequestInit; replaced with AbortController signal for proper 8s timeout on URL extraction

Fixed

motion/react Variants type — spring transition type is now a string literal (as const) so it satisfies AnimationGeneratorType

Fixed

unknown → ReactNode errors in 6 node files — output conditions now use !! to guarantee boolean before &&

Fixed

Missing CheckCircle import in excel-parser node

Fixed

prompt-node onFocus handler accepts SyntheticEvent instead of MouseEvent

Fixed

Implicit any on Slider onValueChange callbacks — destructured value now typed as number[]

Fixed

Implicit any on forEach callbacks in browser-extraction.ts — all font string arrays now typed explicitly

Fixed

Accessibility, Polish & Code Health

Keyboard navigation, screen-reader labels, design-token alignment, and bundle cleanup from a full quality audit.

Removed unused DesignBrowser component — eliminates dead code and reduces bundle

Improved

Type specimen sample text and glyphs now render at correct opacity — was using hsl() around an oklch token which browsers silently ignored

Fixed

Design cards are now keyboard-navigable — Tab to reach, Enter or Space to open the detail panel

Fixed

Status colors (success, error, loading) now use design tokens — consistent across nodes, type specimens, figma tab, and changelog

Improved

Consolidated to single icon library (@phosphor-icons) — removed lucide-react dependency

Improved

Search inputs now have accessible labels for screen readers via aria-label

Fixed

Filter and sort buttons now announce their active/inactive state to screen readers via aria-pressed

Fixed

Color swatch copy button now announces its action and value to screen readers

Fixed

Re-extract button uses aria-label instead of title — now accessible to screen readers and keyboard users

Fixed

Mobile detail sheet upgraded to native <dialog> with showModal() — gains proper focus trapping, Escape to close, and system backdrop

Fixed

Presentation mode screenshot alt text now describes the site by name, not just domain

Fixed

Extracted shared NodeStatus component — eliminates duplicated status icon logic across all node components

Improved

Google Fonts stylesheet now only injected once per URL — prevents duplicate network requests when multiple type specimens share a font

Fixed

Theme toggle button now announces the destination mode ("Switch to dark mode") rather than just "Toggle theme"

Fixed

Preloader is now hidden from screen readers via aria-hidden — decorative counter is not meaningful content

Fixed

Preloader setTimeout calls now properly cleaned up on unmount — eliminates potential state updates after component is removed

Fixed

Color swatches on gallery cards now have role="img" and aria-label with the hex value for screen readers

Fixed

Replaced all spring/bounce easing (0.34,1.56,0.64,1) with ease-out-expo (0.22,1,0.36,1) — animations feel faster and more intentional

Improved

Extracted DesignCard component and getDomain helper to their own files — reduces page.tsx by ~130 lines

Improved

Assets tab checkerboard background now uses design tokens — adapts correctly to light and dark mode

Improved

Preview tab screenshot image now uses loading="lazy" — deferred until the panel is actually viewed

Improved

Re-extract and close icon buttons in the detail panel increased from 28px to 32px for easier touch activation

Improved

Package name corrected from "ai-agent-builder" to "hitmans-library"

Improved

Figma Native Paste, Thumbnail Fix & UI Polish

Copy any screenshot directly to your clipboard and paste into Figma without any plugin. All 177 site cards now show their own captured screenshots reliably.

Figma tab — copy Desktop or Mobile screenshot as a PNG image, paste directly into Figma with ⌘V — no html.to.design plugin required

New

Sort pills in header — New / Old / A–Z / Top (quality)

New

Multi-select industry filters — hold multiple categories at once

New

Card hover reveals a visit ↗ button without opening the detail panel

New

Tags shown on gallery cards and in the detail panel header

New

Detail panel hostname is now a direct link to the site

New

All 177 thumbnails now use captured blob screenshots — eliminates blank cards from rate-limited external screenshot services

Improved

Sidebar category counts now match exactly what the gallery shows

Improved

Font 404 errors — removed dead @font-face declarations for missing SuisseIntl files

Fixed

Extraction error UI in Preview tab was never visible due to an impossible condition

Fixed

Re-extract could crash Colors/Type/Assets tabs by not normalizing null arrays

Fixed

Quality sort silently fell back to "newest" — now correctly sorts by extracted quality score

Fixed

SVG assets tab had an XSS vector from inline rendering of raw DB content

Fixed

Breakpoints, Full-Page Copy & Bug Fixes

Figma tab now lets you simulate any breakpoint and copy the full page. Stability fixes eliminate the client-side crash and missing site cards.

Breakpoint selector in Figma tab — switch between Auto / 390 / 768 / 1440px and see the site respond live

New

Full-page copy — one click captures the entire page as Figma layers, not just a single element

New

Client-side exception on some sites — API error responses now handled gracefully, no more crash on load

Fixed

Site cards not visible — gallery query was referencing non-existent DB columns, now uses safe correlated subqueries

Fixed

Retina screenshots — desktop now captured at 2× DPR, mobile at 3×, with lazy-image scroll-through before capture

Fixed

Card image hover — CSS transition replaces motion.img for better performance and no layout shift

Improved

Figma Element Picker & Live Preview

The Figma tab now shows the live site — hover to inspect, click any element to copy it to Figma instantly. Full-page copy is pre-loaded so it's immediate too.

Element picker — hover any element to highlight it, click to copy directly to Figma

New

Full-page Figma layers pre-loaded on tab open — copy is instant, no wait

New

HTML proxy — loads any site inside the panel regardless of X-Frame-Options restrictions

New

Live preview — embedded iframe replaces static screenshots entirely

New

Figma tab — dedicated panel tab with auto-capture on first open

New

Search input in header — search across all sites in real time

New

Panel header redesigned — compact icon row for visit, re-extract, and close

Improved

Preview simplified — responsive iframe with no desktop/mobile toggle needed

Improved

Filter effect dep used JSON.stringify on every render — replaced with stable primitives

Fixed

Copy to Figma, Mobile Views & More

A batch of tools that make the library more actionable — export designs, capture mobile layouts, and send layers directly to Figma.

Copy to Figma — paste any captured site as editable layers directly into Figma

New

Mobile screenshots alongside desktop — captured at 390×844 during extraction

New

Desktop / Mobile toggle in the preview tab

New

Palette export — copy colors as CSS custom properties or Tailwind config in one click

New

Bulk add — paste multiple URLs at once and watch them process in a live queue

New

Preloader — 000→100 counter on first visit

New

HEX and OKLCH values are now separately copyable from the colors tab

Improved

UI Redesign & Sound

The whole interface got a quiet, high-contrast overhaul. Sound feedback added for copy and success actions.

Full gallery layout redesign — cleaner grid, tighter type, better dark mode

Improved

Subtle sound effects on copy and successful extraction

New

Admin CMS — passcode protection and one-click duplicate removal

Improved

Admin page was unscrollable due to a global overflow:hidden — resolved

Fixed

Performance, Polish & Mobile

Faster perceived load, better mobile interactions, and more color control.

Skeleton loading on first page load and category filtering

New

HEX / OKLCH format toggle on the colors tab

New

Dark / light theme toggle — instant, no flash of wrong theme

Improved

Category labels rewritten to better reflect actual design context

Improved

Mobile sheet — safe-area insets and 44px touch targets throughout

Improved

Prevented scroll chaining between preview panel and page body on mobile

Fixed

Edge case: achromatic and scientific-notation OKLCH values now parse correctly

Fixed

Real Screenshots

Cards now show actual screenshots of the captured site instead of color blocks.

Live website screenshots displayed on every design card

New

Switched to a reliable headless screenshot pipeline after testing multiple providers

Improved

Copy Feedback & Social

Small interactions that make copying feel right.

Copy feedback on color swatches — animated toast on click

New

OG image and social meta for sharing the library

New

Microinteractions across the UI following Emil Kowalski's principles

Improved

Initial Launch

Hitman's Library ships. Extract, browse, and reference design systems from any URL.

Color palette extraction — brand colors with OKLCH values

New

Typography extraction — font families, roles, and Google Fonts links

New

Asset catalog — logos, icons, images discovered per site

New

Industry categorization for every captured site

New

Browse and search across your entire design library

New

Excel import for bulk seeding the library

New

Feb 23, 2026 — first commit