Skip to main content
Support

Browse by category

All categories
Changelog

General changelog

All 18 entries, newest first. Click an entry to read it, or go back to the full changelog for the other areas.

fixedSaved work is now checked before it's used — across every tool

Compare PDF was crashing on a saved comparison it had never checked the shape of. That turned out not to be one tool's mistake but one habit, repeated: anything Loft saves on your device — bookmarks, measurements, receipts, documents, pinned tools, saved scenarios — was read back and simply assumed to still look the way it did when it was written. Almost always it does. When it doesn't, the failure landed somewhere else entirely, usually as a blank screen with an internal error on it. Everything Loft reads back is now checked first.

Bug fixes

  • A damaged saved item no longer takes the whole list with it. Your receipts, documents, pinned tools, recent files and saved measurements are read back one at a time and repaired individually. Before, a single damaged entry could throw while the list was being drawn — and because the drawing never finished, every item vanished from the screen even though all the others were perfectly fine. Now the damaged one is repaired where possible and set aside where it isn't, and the rest appear normally.

  • 3D measurements no longer stop a model from opening. Saved area and radius measurements are restored when you reopen the same file. Only some of what they contain was being checked, and the parts that weren't were exactly the parts used to redraw them — so a damaged measurement didn't produce a missing measurement, it produced a file that wouldn't open at all. The measurement is now discarded and the model opens.

  • Saved camera views can't freeze the viewer. A named view stores a camera position, a target and an up direction. Only the position was checked. A view missing either of the other two stopped the camera animation mid-flight, leaving the viewer unresponsive to further clicks with nothing on screen to explain it.

  • A shared Gerber link that's been truncated now just opens the board. View links carry the camera and layer settings in the URL, and only the version number in them was ever checked. A link that got clipped in a chat message or an email — a normal thing to happen to a long URL — failed to open the viewer at all instead of opening it at the default view.

  • Offline tools can no longer be un-cached by a bad read. When refreshing a pinned tool, a damaged record made the refresh look like a first-time pin, which deleted the offline copy that was working fine. Related: a damaged build record could make every tool that uses a WebAssembly engine — the 3D viewers, OCR, the media tools — refuse to load, because the file check they run couldn't read it.

  • Two-factor codes: the right message when something is wrong. A damaged vault reported "wrong passphrase", which for a vault of authentication codes reads as having lost them. It now reports what actually happened.

  • A blocked-storage browser no longer breaks the Gerber viewer. In private browsing and in some embedded contexts, asking for saved settings raises an error rather than returning nothing. One place asked without expecting that, and the viewer failed to render.

Under the hood

The shared helpers that read saved data now require a shape check rather than offering one — the unsafe version no longer compiles — and a build check keeps the pattern from coming back. Reading saved data and reading a file someone sent you are the same problem, and Loft now treats them the same way.

fixedCAD engine: a rounded cap no longer loses its crown

A shape defect that every internal check called healthy — the mesh was watertight, every counter read zero, and a third of the surface was simply not there.

Bug fixes

  • Rounded caps and domes keep their full crown. Where a curved surface has to be cut open along a seam to be flattened for meshing, the engine drew that cut as a straight line. On a flat surface that is correct; on a curved one the true seam bows outward, so the straight version cut inside the real boundary and sliced off a crescent of surface along each side of the seam. The region that was cut away then got covered by long triangles reaching straight across the interior of the shape — nearly 20 mm from where the surface actually is, on a part meshed to a 0.6 mm tolerance. Because the covering triangles still joined up edge to edge, the mesh passed every watertightness and completeness check while visibly missing its crown. The cut now follows the seam's real curvature, using the very same sampling the engine already applied everywhere else — one rule, now applied at the one place that was missing it. The worst affected part went from 1.9% of its volume missing to 0.65%, and the notch cut into the bottom of its sphere is gone.

  • A new internal meter catches this class of defect directly. The failure above was invisible because no measurement existed for it: interior mesh points can be generated, paid for, and then silently discarded when the boundary they were meant to fill turns out to be wrong. The engine now counts those orphaned points, so a surface that quietly loses part of itself reports it instead of passing clean.

Under the hood

The fix is deliberately not a new rule. The engine already knew how to follow a curved seam — one of the two code paths that produce such a seam did it correctly and the other did not, and they now share a single implementation. Watertightness held throughout, and the change costs the test corpus 0.006% more triangles.

fixedCAD engine: threads, coils, tubes and rings — the helical family, closed end to end

A systematic campaign through every way a part can wind, sweep or wrap — machine screws, hex-nut threads, coil springs, torus rings and tube loops — fixing each failure at its root rather than patching symptoms. Six engine releases in this batch.

Bug fixes

  • Machine screws render their threads. A family of screws rendered as smooth cylinders with stray spiral artifacts — the thread simply wasn't there, while every internal check read healthy. The file's own curve data described the thread exactly; the engine was re-deriving it by sampling and losing it. Trimmed thread edges are now recognised as exact sub-sections of their surface's own boundary data — a bit-for-bit identity, immune to the sampling ambiguities that caused the loss. The worst screw went from 436% volume error to 1%.

  • Coil springs and tube loops no longer come through nearly empty. Several helical parts emitted a few hundred triangles where tens of thousands belonged — a 25-turn spring reduced to a sliver. The route that meshes a wall between two rims assumed the wall runs straight between them and chorded straight across all 25 turns. That route now measures the wall's actual turning before accepting it, and hands anything it cannot certify to the general machinery, which meshes it properly. The spring went from 99.5% of its volume missing to within 0.6%.

  • Rings and drums with wound surfaces mesh in the window the file describes. Faces whose parameter space wraps many turns could be filled faithfully — over the wrong region, producing phantom surfaces invisible to every openness check. The meshing window is now elected from the file's own on-face evidence, and hole loops are carried into the same coordinate frame as the boundary they belong to.

  • Curve placement survives awkward authoring. Edges whose 2-D placement data lands in a wrong region mid-computation are now caught by a mid-segment consistency check and healed or honestly refused; edge placements are seeded from the junctions where edges meet, so a wire arrives as one continuous frame.

  • The engine's own quality meters got honest. Volume comparison now declares when it is not applicable — on open sheet bodies, promoted shells and multi-product files — instead of reporting enormous errors on parts whose shape is actually correct. Shell labels claiming closure are verified by computed closure rather than trusted.

The through-line

Nearly every defect in this family had the same structure: mature geometry kernels carry a dedicated method for each of these shapes, and the engine was routing them through general-purpose machinery that cannot express them. Each fix either taught the dedicated route to certify what it accepts, or gave the family the dedicated treatment it needed. Watertightness held or improved throughout, and the whole batch changed test-corpus triangle counts by low single digits.

fixedCAD engine: curved free-form surfaces now hold their roundness everywhere

The close of the coil-spring investigation: a missing accuracy rule in the engine's free-form surface meshing, found by asking how mature geometry kernels decide facet density and discovering ours only applied half the standard.

Bug fixes

  • A curved surface's interior is now held to the same roundness standard as its edges. Mesh accuracy is governed by two rules working together: a distance rule (a facet may not sag more than a set tolerance from the true surface) and an angle rule (adjacent facets may not turn more than a set angle). The engine applied both rules to part edges and to simple surfaces like cylinders and spheres — but sculpted, free-form surfaces got only the distance rule on their interiors. On small tightly-curved features the distance rule alone is far too permissive: the smaller the feature, the sharper the corners it allows, without limit. A coil spring's wire — the same circle the engine was already rendering smoothly where it appears as an edge — came out visibly polygonal across the surface between them. The interior now uses the very same angle limit as the edges, so one piece of geometry gets one answer wherever it appears.

  • When a surface hits its detail budget, it now coarsens gracefully instead of tearing. The interior point budget used to stop mid-construction, keeping whatever had been placed so far — which could leave part of a face dense and part empty. A face that exceeds its budget is now re-meshed slightly coarser as a whole, so the quality degrades evenly and predictably.

  • Detail follows the shape's own structure. Free-form surfaces are built from spans, and the mesh grid now aligns to them, placing density where the surface actually bends rather than by repeated halving. This also means the mesher can choose exactly the right number of divisions instead of the nearest power of two.

The result

The coil spring that started this investigation — which two weeks ago rendered as a solid metal rod — now measures within 2.8% of its exact mathematical volume, with a wire cross-section smoother than the reference kernel produces, at a comparable triangle count. The whole change costs half a percent more triangles across a 400-part test corpus, with no part losing watertightness.

fixedCAD engine: closed ring and tube surfaces no longer come through capped

A correctness fix for imported parts built from free-form surfaces that wrap all the way around — O-rings, seals, gaskets, torus-like rings and tube sweeps.

Bug fixes

  • A ring no longer comes through with half of it filled in solid. Some CAD systems write a surface that closes on itself in a compact "unrolled" form: instead of repeating the whole seam, the file repeats just the first few control points at the end. The engine's test for "does this surface join back up to itself?" only ever compared the very first control row against the very last one, which is right for the other way of writing the same surface and wrong for this one. So a surface that closes to within a millionth of a millimetre was read as an open sheet. Without a seam the engine has no way to know that the two edges of the file's parameter grid are the same physical edge, so one rim of the face got placed on the far side of the grid, the outline crossed itself, and the face was filled flat like a lid instead of curving round as a tube. On the test part exactly half the ring was capped, and the part measured exactly half its true volume.

  • The same surfaces now mesh with sensible, even detail. As a side effect of the missing seam, the affected rims were also being sampled around twelve times more finely than they needed, and neighbouring faces disagreed with each other on how finely. With the seam restored, all four faces of the test ring now agree, and the part meshes to within 0.3% of its exact volume — it was 50% out.

Why this class is hard to catch

A capped ring is watertight. Nothing is torn, nothing is missing, every internal consistency check reads clean — the part is simply the wrong solid, and only a comparison against the true volume or a cut through the part reveals it. That is why the engine's quality gates now include exact-volume and cross-section comparisons against an independent geometry kernel, alongside the structural checks.

fixedCAD engine: springs, threads and coils now mesh as the shapes they are

A correctness fix for imported parts whose surface wraps back close to itself — coil springs, threads, spirals and tightly-wound sweeps.

Bug fixes

  • A coil spring no longer comes through as a solid rod. To draw a curved face, the engine has to work out where each trimmed edge sits on its surface. It did that by walking the edge and projecting sample points back onto the surface — which works until the surface passes close to itself. On a coil, consecutive samples were more than twelve times further apart than the gap between neighbouring turns, so a point meant for one turn could be matched to the next one along. The engine then joined those points up faithfully, filling in the space between the coils: a spring came out as a smooth cylinder, and the mesh looked perfectly healthy by every internal check, because nothing was torn or missing — it was simply the wrong solid. Parts like this now use the exact curve the file already contains wherever the file provides it, instead of reconstructing it by sampling, so there is nothing to get wrong.

  • Curved faces are now refined along the direction that actually needs it. Two related issues came out of the same work: the check deciding whether a patch was flat enough could report a large deviation as a small one when two opposite bulges cancelled, and long thin patches were subdivided equally in both directions, leaving one direction far coarser than intended and the other far finer than necessary. Both are now measured per direction against the real deviation, which makes tightly-curved details sharper and, in many cases, uses fewer triangles.

Why this class is hard to catch

None of these defects produce a torn or open mesh. A filled-in spring is closed, watertight and consistent — it is just not the right shape. That is why the engine's quality checks now include a structural comparison against an independent geometry kernel: a cut through the part must produce the same number of separate cross-sections as the true solid. A spring must show one small circle per turn, not one large outline.

fixedCAD engine: imported curve data that was being thrown away is now used

Two more correctness fixes in the CAD engine's handling of imported STEP files, both found by asking what rule the code was actually applying rather than by watching a benchmark move.

Bug fixes

  • Curve data authored on a shifted parameter window is no longer discarded. A STEP file describes where an edge sits on a surface by giving a curve in the surface's own coordinates. On a surface that repeats — a cylinder, a cone, a surface of revolution — the file may describe that curve on any one of its repeats, and two halves of the same circle are routinely written on different ones. The engine already handled this for a curve written as a straight line, but not for the identical curve written in a general spline form: those were evaluated outside their own domain, came back as a single frozen point, and were rejected as unusable. The part was then meshed from a mixture of the file's data and the engine's own reconstruction, which disagreed about where a shared corner sat — enough to stack overlapping triangles at joints between a round face and a flat one. Imported parts now use the file's data wherever the file provides it, and on our reference parts the amount of authored curve data actually used rose sharply while rejections fell to near zero. One assembly went from hundreds of overlapping triangles to two.

  • The wrap-around test now applies to both surface directions. The previous release fixed a boundary test that asked "does this loop have enough points?" when it meant "does this loop go all the way around?". Its counterpart for the other surface direction was carrying no wrap-around test at all. Both now test the loop's actual winding, and a length is no longer compared against an angle.

Why these are hard to notice

Neither defect produces an open mesh. Discarded curve data yields geometry that is closed but doubled at the joins; a missing wrap-around test yields a part that is sealed but hollow. Both pass a watertightness check, which is why the engine's quality gates now also compare part volume and per-triangle placement against an independent geometry kernel, and why the reference parts are checked as rendered images rather than only as numbers.

fixedCAD engine: a shape-fidelity bug that watertightness checks could not see

A correctness fix in the CAD engine's surface meshing, found by measuring volume against an independent geometry kernel rather than by checking whether the mesh was closed.

Bug fixes

  • Recessed and counterbored features no longer lose their walls. When deciding whether a face's boundary loop wraps all the way around a cylindrical or conical surface, the mesher was effectively asking "does this loop have enough points?" instead of "does this loop go all the way around?". On a rim carrying fewer than twenty points the answer came back wrong, the surrounding band was left unfilled, and the part came through sealed but hollow — geometrically closed, so every watertightness check passed, while up to 14.5% of its volume was missing. Affected parts were typically sheet-metal enclosures and machined covers with countersunk or recessed features. The test is now the loop's actual winding, which reads the same whether the rim carries fourteen points or ninety.

Why it went unnoticed

Closed-mesh checks are blind to this class by construction: a missing wall that the surrounding surfaces close over leaves no open edge to find. It was caught by comparing part volume against an independent kernel — a check the engine's own quality gates did not previously carry, and now do.

changedCAD engine: cleaner curved blends, and sheet-metal parts that mesh closed

A measurement-driven pass over the CAD engine's surface tessellation, checked against an independent geometry kernel on real production parts — a con-rod assembly, a machine screw, a CNC hex nut, and two sheet-metal enclosures.

Improvements

  • Curved blends triangulate against the right target: fillets and swept blends are now optimised for their shape in 3-D rather than in the surface's own parameter space. On anisotropic surfaces those two disagree — a triangle that looks well-proportioned in parameter space can map to a needle-thin sliver on the real part — which showed up as faceting and shimmer along blends. Sliver-generating faces fall measurably across the heaviest files, with no increase in triangle count.
  • Sheet-metal parts mesh closed: enclosure covers and slider brackets that previously carried small cracks along welded seams now come through watertight. The cause was a boundary-repair step inventing a patch over a seam that was already sealed, which left the neighbouring edge uncovered.
  • Small-radius conic edges keep their roundness: the segment-count floor that keeps holes and bosses circular is now decided per edge against its neighbours, so a rim shared between a cylinder and a blend no longer over-samples one to serve the other.

Under the hood

  • Per-face shape measurement now runs against an independent kernel as ground truth, so "is this face the right shape" is a measured question rather than a judgement call. This is a local development tool only and ships with nothing.
  • Several internal quality meters were found to be measuring the wrong thing and were corrected — most notably one that welded distant vertices together on assemblies spanning a very wide range of feature sizes, which simultaneously hid real cracks and invented false ones. Parts with a large backdrop body next to millimetre-scale detail are now measured at the scale each body was built to.
changedSTEP Viewer: accurate mass properties, studio lighting, and solid rendering for big assembliesOpen STEP Viewer

A deep pass over the STEP viewer's CAD engine and rendering, driven by a real 252-part industrial assembly. Large assemblies now render solid at every zoom level, read like a proper CAD workstation viewport, and report mass properties you can actually quote from.

Improvements

  • Accurate volume and mass: the Manufacturing panel's mass summary is now within 1% of the reference CAD kernel on complex multi-part assemblies (previously it could run ~20% high when slot-cut drums and multi-hole cone faces meshed incompletely). Cost estimates driven by part mass inherit the same accuracy.
  • Studio lighting: the viewport now uses an image-based studio environment plus a rebalanced light rig, so curvature, flanges, and seated parts read clearly from any angle — no more washed-out flat grey at wide zoom.
  • Feature edges on by default for STEP: CAD files open in shaded-with-edges mode (the familiar workstation look), so rings, bosses, and panel joints stay visible without rotating the model. The Shading picker still switches to plain shaded, wireframe, hidden-line, or x-ray.
  • Complex trimmed surfaces mesh correctly: slot-cut drums, multi-hole cone bowls, knurled cowls, and thin ribbon faces — geometry that previously rendered with missing walls or phantom fill — now match the reference kernel's coverage to within a fraction of a percent.

Bug fixes

  • Fixed large assemblies looking transparent or losing whole parts when zoomed out (a per-part depth-offset bug — visible on any file with dozens of parts).
  • Fixed a vent window on cowl-style parts rendering as sealed shut when it crossed a surface's parametric seam.
  • Fixed watertightness on several classes of curved faces: closed thin bands, abutting-rim cone bowls, and comb-edged slot walls now weld to their neighbours with no cracks.
removed12 more low-fit tools culled in the catalog cleanup

Another round of focused cleanup retired 12 tools that fell outside our file-precision and privacy-sensitive moat. Each was either fully covered by a chat assistant in a couple of prompts, or a niche photo feature that didn't justify a standalone page.

What was removed:

  • Photo niches folded into broader tools: Baby Passport Photo and Passport Photo Maker now redirect to the existing ID Photo Maker, which covers the core passport / ID use case. SVG-to-PNG redirects to the general Image Format Converter.
  • Standalone photo utilities that didn't warrant their own pages: Image-to-Favicon, Photo Collage Maker, Photo Date Stamp.
  • Dev formatters and generators that any chat assistant can produce in a single prompt: SQL Formatter, XML Formatter, Timestamp Converter, robots.txt Generator, sitemap Generator, .htaccess Generator.

All 12 retired URLs return clean redirects (24 in total covering bare and trailing-slash variants) — old bookmarks land on the surviving cousin or the category page. SEO equity is preserved.

removed15 tools culled, text-tools retired, media-tools renamed to video-tools

A focused catalog cull dropped 15 tools and reshaped two categories. The site now ships 65 carefully chosen tools instead of a long tail of AI-trivial utilities.

What was removed:

  • Text utilities that any chat assistant can do in two lines: CSV-to-table and email extractor. The text-tools category itself was retired since these were its last two tools.
  • Audio practice tools: pitch changer, speed changer, trimmer, metronome, and tone generator. These didn't fit the file-aware, formula-precision focus.
  • Minifiers and conversion utilities that AI handles inline: CSS / HTML / JS minifiers and a Markdown-to-HTML converter.
  • Image extras that overlapped poorly with the core image set: border / frame, Instagram grid splitter, watermark image.
  • Cooking outliers: altitude-baking and pan-size converter.

What got renamed:

  • media-tools is now video-tools, with three survivors: Video Compressor, Video Format Converter, and Remove Audio from Video. The audio practice tools that had lived in this category were removed in the same pass.

All retired URLs redirect to homepage or the relevant category page so you'll never hit a 404 from an old bookmark. Categories are now: pdf-tools (33), image-tools (15), dev-tools (10), video-tools (2 after a later cull), cooking-tools (2), security-tools (2), and open-tools.

removedPre-launch tool cull: focused catalogue of 72 tools

Ahead of the public launch we did a sweep against our quality-first philosophy and removed 13 tools that didn't earn their slot. The catalogue dropped from 85 visible tools to 72, with the lineup now sharper and harder to replicate.

Hard-removed (redirected to the closest replacement):

  • QR Code Reader — every phone camera reads QR codes natively now
  • Text to Slug, HTML Entity Encoder, URL Encoder/Decoder, Strip HTML — five-second tasks an AI assistant or DevTools console solves instantly
  • Resize Image and Resize All Platforms — absorbed into the more capable Image Resizer

Soft-archived (URLs still serve, hidden from navigation): Markdown to HTML, Pan Size Converter, CSS/HTML/JS Minifier, Image Border Frame.

Image Resizer absorbed the singletons — it now handles single images, bulk resizing, and social-media presets in one tool with a cleaner description and dropzone copy.

changedBrand redesign — cyan-first, Space Grotesk wordmark, live status favicon

Loft Tools' visual identity has shifted from violet-primary to cyan-primary. The 3D isometric "L" icon is retired. The brand mark is now a cyan-gradient rounded square with a white dot in the upper-right cavity — a single artwork that scales from a 16px favicon all the way up to an iOS home-screen icon without losing legibility. Inside the product, the same mark drives the navbar, every favicon variant (light + dark tab themes), every PWA icon (Android, Apple touch, maskable, Microsoft tile), and every social-share preview.

The wordmark moved from Montserrat 800 ALL-CAPS to Space Grotesk SemiBold lowercase loft. Tighter letterforms, lower visual weight, and a sentence-case feel that pairs with the cleaner mark. Inter (UI) and JetBrains Mono (code labels) stay.

What changed for users

  • New mark in the navbar. Cyan rounded square with a white dot — the same artwork that's now your favicon, your installed-app icon, and your OG card. Click it to go home, same as before.
  • The favicon tells you the tool is working. Drop a file into any compress/convert/redact tool and watch your browser tab — the dot turns green while processing, back to cyan when finished, amber if something needs your input, red on error. The tab title gets a small glyph too (●, ⚠, ✕) so backgrounded tabs are scannable at a glance.
  • Light-mode-aware favicon. If your browser is in light theme, the favicon renders with an ink frame + cyan dot so the dot stays visible. Dark theme renders the inverse. Both swap automatically — no setting to flip.
  • Light-mode toggle in the navbar. Sun/moon icon in the right-side actions. Your choice persists across sessions (localStorage). On first load, we honor your OS's prefers-color-scheme. The toggle smoothly cross-fades surfaces, ink, and accents.
  • Hero rainbow word survives. "Zero Friction" on the homepage still runs the multi-stop gradient. That's the one place violet stays in the brand — a deliberate accent on a single isolated word in a display heading. Everywhere else (borders, focus rings, glows, CTAs, badges, sponsor paths, FAQ accordion, blockquotes) is now cyan.

Where you'll see it

  • Navbar — full state shows the mark; the compact (scrolled) state keeps the mark, drops the rest of the chrome. Both states use the new artwork.
  • Footer + editor mega-drawer — same mark, smaller.
  • OG image — new cyan-gradient OG card with Space Grotesk text and the v2 mark in the corner. Drives every social-share preview when a tool doesn't ship its own per-page OG.
  • Sponsor page — GitHub path keeps its pink heart (that's GitHub Sponsors' color); the rest of the path tints (badge, hero halo, CTA shadow) are now cyan. Stripe path reads as a cyan "pro" route. Buy Me a Coffee stays gold — it's a tier color, not brand.
  • All file-processing tools — primary download buttons are cyan-only (was a violet→cyan gradient). Progress bars, processing rings, completion badges, comparison overlay sliders all rebound to cyan tokens.

Engineering notes (skip if you don't care)

  • Three-tier token architecture preserved (D02-brand.md). Tier 1 raw palette gained a full cyan ramp (50–900). Tier 2 semantic tokens flip cyan-bound. Tier 3 component tokens (buttons, cards, search, status dot, brand mark URLs) inherit. Components reference Tier 2/3 only — never raw hex.
  • Legacy aliases preserved. --accent-violet, --glow-purple, --color-accent-violet (Tailwind utility) still exist but now resolve to cyan. v1 components that referenced those names render correctly under v2 without per-file rewrites.
  • Hero rainbow is now token-driven. --color-hero-accent-rainbow is the single multi-stop gradient definition. .loft-hero__gradient and the featured-page .loft-show__title-accent both pull from it.
  • Status Dot is a first-class primitive. White ring + state-colored fill. --status-dot-frame / --status-dot-{ready,working,attention,error}-fill tokens. Component at src/components/StatusDot.tsx, fully a11y-wired.
  • Favicon state machine ships as setFavicon(state) in src/lib/favicon-state.ts. Inline data-URI SVGs — no network flash on swap. Wired into FileProcessorTemplateV2 so 17 tools (image + PDF + security) inherit the favicon swap automatically. Add to your own tool with a one-line import.
  • Spotlight reveal — new .loft-reveal--anim-spotlight variant adds a 600ms cyan light sweep across result tiles when a job completes. Trigger via useResultReveal({ animation: 'spotlight' }).
  • Orbit-dot spinner — LoftSpinner rewrote from a 12-bar SVG spinner to three cyan dots orbiting with trailing opacity. CSS lives in global.css so any element with .loft-spinner + three <span> children renders one. Three sizes (sm 24px / md 36px / lg 56px).
  • Space Grotesk replaces Montserrat in BaseHead.astro's Google Fonts link. Inter and JetBrains Mono stay. The wordmark SVGs already ship Space Grotesk text rendered to path — no font fetch needed for the mark itself.
  • 74 new brand assets under public/brand/{svg,png,social}/. 39 obsolete flat icons (the 3D isometric "L" ladder) removed.

Known limits

  • Four audit §10 components deferred: PremiumGate, InstallToolButton, RateLimitIndicator, MobileBottomNav. They're designed in the brand kit but not yet built into components. Tracked for a follow-up.
  • loft-wordmark + LoftLockup are exported primitives but unused in the live product right now. The global header is intentionally mark-only per Pattern A. LoftLockup is wired for future surfaces (sponsor splash, email signatures, OG cards that need the full lockup).
  • Light theme is fresh. Tokens are wired and 90% of the surface flips correctly, but if you spot a component that still feels stuck in dark mode (hardcoded dark hex somewhere), file it — there will be polish passes.

The audit, component library, logo-usage rules, surface patterns, and motion specs that drove this redesign all live in .kb/reference/brand/system/. Nothing about file processing changed — your files still never leave the device.

changedPivot follow-up — 8 categories, dropped placeholders, audience trim

Tightened the post-pivot taxonomy. The placeholder categories ai-tools and compare-tools are gone — those tools belong inside live categories instead (Whisper-style transcription lands in Media, json-diff and csv-diff land in Dev, image-diff in Image, and compare-pdf already lives in PDF). The specialty-viewers category was renamed to Open Anything (/tools/open-tools) for clearer brand framing — same DWG / DICOM / IFC / STEP / Visio reader family, sharper name. Old /tools/specialty-viewers/* URLs 301 to the new path automatically.

The final live taxonomy is 8 categories: PDF, Image, Dev, Text, Media, Cooking, Security, plus Open Anything (placeholder until the first viewer ships).

Audience pages were also trimmed. Five audiences (/for/home-diy, /for/makers, /for/family-life, /for/trades, /for/side-hustle) pointed at construction / craft / finance / everyday tools that all went away in last week's cull, so those pages now return 410 Gone. Kitchen and Musicians survived intact and still curate their tool lists.

  • Renamed specialty-viewers → open-tools ("Open Anything") with full 301 redirect coverage
  • Dropped ai-tools and compare-tools placeholder categories — folded into existing live cats
  • Pruned 5 audience pages whose entire tool list was culled in the 2026-05-02 pass
  • Added a roadmap entry tracking the Open Anything viewer family
changedVision pivot — focused tool set

The site dropped 6 categories' worth of single-function calculators and shifted toward tools that compete with paid software, specialty file viewers, and local-AI utilities. About half the tool count is gone. The remaining tools are the ones that actually earn their URL.

  • Removed categories: Construction & Home, Crafts & Hobbies, Everyday Life, Finance & Business, Gardening & Pets, Auto & Vehicle. ~85 commodity calculators retired. Old tool URLs return 410 Gone; old category indexes redirect home.
  • New placeholder categories: Local AI Tools (Whisper transcription, on-device LLM, on-device translate), Specialty File Viewers (DWG / DICOM / IFC / STEP / Visio), Compare & Diff (image-diff, json-diff, csv-diff). Empty for now — first tools coming over the next weeks. The category page tells you when to expect them instead of pretending they exist.
  • Surviving categories keep their full tool set: PDF & Documents, Image Tools, Dev Tools, Text & Writing, Video & Audio, Cooking & Kitchen, Security & Privacy.
  • Why: a 600-tool farm of single-function calculators is what AI assistants replace in a chat. The new direction is tools where local compute is the differentiator — file binaries you can't easily process in a chat, parsers behind paid software, and AI utilities that should never send your data to a cloud API.

The pivot trims what we ship, not the privacy guarantee. Everything still runs in your browser; nothing uploads.

changedStrategic pivot — sharper tools, fewer commodities

Loft Tools just shipped its biggest portfolio reshape since launch. After a brutal-honest competitive audit of every category against AI assistants, mobile OS apps (iOS Photos, CapCut), and entrenched single-purpose incumbents (calculator.net, regex101.com, jwt.io, wheelofnames.com), 64 commodity tools were retired and 19 more soft-archived. Three new categories were created to anchor the new positioning.

What changed:

  • 45 commodity tools archived — finance commodities (tip / percentage / discount / business-card / invoice variants), image AI-adjacent tools (cert / id / meme / collage), text duplicates (base64 / lorem / word-counter), dev brand-incumbent shadows (regex / json / jwt / cron / coolors / diff), and small-batch removals across construction / craft / converter / pdf / cooking. Each lost to a single-purpose competitor or a Google SERP widget that answers in 0.5 seconds.

  • 19 tools soft-archived — entire Garden category (lost to Almanac.com's zip-code data backbone), Cooking category (small, redistributed via /for/kitchen audience), and 5 Everyday tools (coin / dice / RNG / lottery / wheel — Google ships interactive widgets for all of them). Soft-archived means components stay shipped, URLs still work, audience pages can surface them — they just leave primary nav. Reversible.

  • 6 tools recategorized — converter-tools survivors moved to natural homes: knit/crochet/yarn → crafts, lumber-dimensions + wire-gauge → construction, pan-size → cooking. URL redirects preserve SEO.

  • 3 new categories created — Specialty File Viewers for opening DWG / DICOM / IFC / Visio / SPSS files corporate software locks behind $300-30K/yr subscriptions; Phone ↔ Laptop Bridge for HEIC / MOV / video-compress-to-Discord cross-device pain; Privacy Strip for face blur / EXIF strip / PDF metadata strip / password gen. All three categories are placeholder folders with READMEs — first viewers ship in following weeks.

New positioning: Free tools your phone won't, your laptop won't ship, and corporate software wants $300/year for. Two moats both immune to AI commoditization and OS feature creep — gatekept proprietary file formats, and tasks too small to justify installing an app for.

Tool count: 250 → 186 visible (with 19 more soft-archived for revival if needed). Density of high-moat tools rises significantly.

addedApril 2 — 14 new tools and a real audio/video editor

The biggest single-day shipment to date. Seven new local-compute tools, plus a major upgrade pass that turned the audio and video tools into something you can actually edit in.

New tools

  • Diff Checker (dev) — code/text diff with split + unified views, five diff modes (line, word, character, trimmed, sentence), regex-powered filters for ignoring timestamps, version strings, imports, comments, or whitespace-only lines. Keyboard navigation between changes, collapsible unchanged sections.
  • Image to PDF (pdf) — multi-image to PDF with drag-to-reorder, per-image rotation, configurable page size and margins, grid layout (1/2/4/6/9 images per page), and a live PDF preview as you arrange.
  • PDF to Images (image) — convert PDF pages to JPG, PNG, or WebP at any DPI from 72 to 600. Visual page picker, range input, optional grayscale, ZIP download for multiple pages, and per-page file size estimation before you click convert.
  • Extract PDF Images (pdf) — pull out every embedded image from a PDF with auto-detection. Filter by minimum size, deduplicate identical images across pages, see which page each image came from, download individually or as a ZIP.
  • Bulk Image Resize (image) — resize many images at once with six modes (exact dimensions, by width, by height, by percentage, longest edge, or social media preset). 15 built-in presets for Instagram, Facebook, Twitter, YouTube, LinkedIn, TikTok, Pinterest, Discord, and Twitch. Per-image target dimension preview, ZIP download.
  • Screenshot Stitcher (image) — combine multiple screenshots into one tall or wide image. Smart overlap detection automatically trims duplicate status bars and navigation chrome between consecutive captures, so a stitched scroll capture looks seamless.
  • PDF Grayscale (pdf) — convert color PDFs to grayscale with three modes (standard, high-contrast S-curve, print-optimized gamma). Includes an ink cost estimator showing how much CMYK coverage you save and the rough dollar value per page.

Audio and video tools — interactive editing

The seven existing FFmpeg-powered media tools all got a major upgrade. The audio tools now show an interactive waveform you can drag handles on to set trim points; the video tools picked up frame-by-frame keyboard navigation, output format and codec controls, and platform-aware presets.

  • Audio Trimmer: interactive waveform with drag handles, set-to-current playback buttons, keyboard shortcuts (Space, arrow keys for 1s/5s seek)
  • Audio Speed Changer: waveform display, automatic BPM detection, smart presets (half tempo, double tempo, match a target BPM), output duration estimate
  • Audio Pitch Changer: waveform display, circular 12-note ring picker, fine-tune slider (±50 cents)
  • Video to Audio: waveform with trim handles to extract just a section, optional fade in/out
  • Ringtone Maker: waveform with trim handles, tone type selector (Ringtone / Notification / Alarm with platform-specific max durations), step-by-step install guide for iPhone (Finder or GarageBand) and Android
  • Video Trimmer: frame-by-frame keyboard navigation (arrow keys = 1/30s, Shift+arrow = 1s), Space to play/pause
  • Video Format Converter: FPS control (24/30/60), platform compliance checklist for YouTube, Instagram, TikTok, Discord, WhatsApp, and email presets
  • Video to GIF: color count selector (64/128/256), dither toggle, estimated file size before you convert
  • Audio Converter: now batch-processes up to 20 files at once with individual progress and a ZIP download for the whole set

Everything still runs 100% in your browser. Your media files never get uploaded.