[{"data":1,"prerenderedAt":446},["ShallowReactive",2],{"$fi_SA3l8D9e4tuLzFLMXUroEj8Vi4FUp0B2g2TbBke08":3,"post-web-tools-i-actually-use-2026":147},{"site":4,"features":8,"stripe":10,"bridalfile":12,"navigation":13,"branding":124,"footer":127},{"id":5,"name":6,"domain":7},"7578a1b2-a8ec-462f-8980-d46ebefc76a2","Pwa Developer","pwadeveloper.uk",{"products":9,"bookings":9,"event_capacity":9,"ugc":9},false,{"enabled":9,"test_mode":11},true,{"enabled":9},{"footer":14,"header":42,"services":67},{"id":15,"name":16,"items":17},"4c83a83d-7d89-442d-8e4c-717e61d71c19","Footer Navigation",[18,22,26,30,34,38],{"id":19,"url":20,"label":21},"b8c9d0e1-f2a3-4b4c-5d6e-7f8a9b0c1d2e","/about","About",{"id":23,"url":24,"label":25},"c9d0e1f2-a3b4-4c5d-6e7f-8a9b0c1d2e3f","/blog","Blog",{"id":27,"url":28,"label":29},"d0e1f2a3-b4c5-4d6e-7f8a-9b0c1d2e3f4a","/contact","Contact",{"id":31,"url":32,"label":33},"e1f2a3b4-c5d6-4e7f-8a9b-0c1d2e3f4a5b","/websites","Websites",{"id":35,"url":36,"label":37},"d1e2f3a4-1111-4a2b-8c3d-dddd11112222","/services/nuxt","Nuxt",{"id":39,"url":40,"label":41},"d2e3f4a5-2222-4b3c-9d4e-dddd22223333","/services/supabase","Supabase",{"id":43,"name":44,"items":45},"090e7007-6dd0-4416-8ce2-2680c446d2a9","Main Navigation",[46,48,52,56,58,60,62],{"id":47,"url":20,"label":21},"c3d4e5f6-a7b8-4c9d-0e1f-2a3b4c5d6e7f",{"id":49,"url":50,"label":51},"a43446fd-355b-474a-a846-6f02ba7b4f68","/services","Services",{"id":53,"url":54,"label":55},"6b5e66d9-5267-4948-86b9-11ef75fcf821","/how-i-build","How I Build",{"id":57,"url":32,"label":33},"a1b2c3d4-5e6f-4a7b-8c9d-0e1f2a3b4c5d",{"id":59,"url":24,"label":25},"d4e5f6a7-b8c9-4d0e-1f2a-3b4c5d6e7f8a",{"id":61,"url":28,"label":29},"f6a7b8c9-d0e1-4f2a-3b4c-5d6e7f8a9b0c",{"id":63,"url":64,"label":65,"target":66},"e5f6a7b8-c9d0-4e1f-2a3b-4c5d6e7f8a9b","https://www.youtube.com/@anothermagentodev9161","YouTube","_blank",{"id":68,"name":69,"items":70},"9a2b3c4d-9999-4a2b-8c3d-aaaabbbbcccc","Services Menu",[71,77,83,89,95,101,107,113,119],{"id":72,"url":73,"icon":74,"label":75,"description":76},"1a2b3c4d-1111-4a2b-8c3d-111122223333","/services/pwa","fa-solid fa-mobile-screen-button","PWA","Installable, offline-first apps",{"id":78,"url":79,"icon":80,"label":81,"description":82},"2b3c4d5e-2222-4b3c-9d4e-222233334444","/services/wordpress","fa-brands fa-wordpress","WordPress","Themes, plugins, rescue work",{"id":84,"url":85,"icon":86,"label":87,"description":88},"3c4d5e6f-3333-4c4d-8e5f-333344445555","/services/magento","fa-solid fa-cart-shopping","Magento","Ecommerce & platform work",{"id":90,"url":91,"icon":92,"label":93,"description":94},"4d5e6f70-4444-4d5e-9f60-444455556666","/services/vue","fa-brands fa-vuejs","Vue & Nuxt","Reactive frontends, SSR apps",{"id":96,"url":97,"icon":98,"label":99,"description":100},"708192a3-7777-4081-8293-777788889999","/services/headless-cms","fa-solid fa-cube","Headless","Structured content APIs",{"id":102,"url":103,"icon":104,"label":105,"description":106},"8192a3b4-8888-4192-93a4-88889999aaaa","/services/ai-consultancy","fa-solid fa-robot","AI Consultancy","Where AI actually helps",{"id":108,"url":109,"icon":110,"label":111,"description":112},"a1b2c3d4-1234-4a2b-8c3d-aaaa11112222","/services/migrations","fa-solid fa-arrow-right-arrow-left","Migrations","Move platforms, keep your SEO",{"id":114,"url":115,"icon":116,"label":117,"description":118},"b2c3d4e5-2345-4b3c-9d4e-bbbb22223333","/services/technical-seo","fa-solid fa-gauge-high","Technical SEO & Performance","Core Web Vitals & speed",{"id":120,"url":32,"icon":121,"label":122,"description":123},"c3d4e5f6-3456-4c4d-8e5f-cccc33334444","fa-solid fa-globe","Custom Websites","Bespoke sites, not templates",{"logo":125,"logoDark":125,"favicon":125,"tagline":126},null,"WordPress & Web Developer in Hull, East Yorkshire",{"summary":128,"copyright":125,"address":129,"contact":133,"socialLinks":134,"openingHours":146,"logos":125},"Senior freelance web developer in Hull, East Yorkshire. 15+ years building fast, custom websites and web apps in WordPress, Magento, Vue and Nuxt. Work directly with the developer.",{"line1":125,"line2":125,"city":130,"state":131,"postalCode":125,"country":132},"Hull","East Yorkshire","United Kingdom",{"phone":125,"email":125},[135,138,142],{"url":64,"icon":136,"platform":137},"fa-brands fa-youtube","youtube",{"url":139,"icon":140,"platform":141},"https://github.com/adamcjackson1982","fa-brands fa-github","github",{"url":143,"icon":144,"platform":145},"https://www.linkedin.com/in/adamcjackson/","fa-brands fa-linkedin","linkedin",[],{"id":148,"slug":149,"title":150,"excerpt":151,"content":152,"content_format":441,"featured_image":442,"published":11,"published_at":443,"meta_title":150,"meta_description":444,"fields":445},"173426eb-6ce8-46ed-a4b4-396988d02c44","web-tools-i-actually-use-2026","The Web Tools I Actually Use in 2026","The real list, not the aspirational one. What I build client sites with, what I dropped, and why the boring tools are the ones I would fight to keep.",{"type":153,"content":154},"doc",[155,161,165,172,176,180,193,198,202,206,211,215,219,272,284,289,293,305,325,330,334,338,343,392,397,401,413,418,422],{"type":156,"content":157},"paragraph",[158],{"text":159,"type":160},"Every developer who writes one of these posts is really writing an advert for themselves, so let me be upfront: this is a short list, and it gets shorter every year. I am one person in Hull building websites and web apps for small businesses. I cannot afford a tool that needs looking after.","text",{"type":156,"content":162},[163],{"text":164,"type":160},"So here is the actual list. Not the aspirational one.",{"type":166,"attrs":167,"content":169},"heading",{"level":168},2,[170],{"text":171,"type":160},"The editor, and the thing sat next to it",{"type":156,"content":173},[174],{"text":175,"type":160},"VS Code. It has been VS Code for years and I have stopped looking. The interesting change is what is running alongside it.",{"type":156,"content":177},[178],{"text":179,"type":160},"I use Claude Code most days now, in the terminal, on real client work. Not to write the site for me. To do the parts of a build that are repetitive and well-defined: converting a settled design into components, wiring up a form, writing the boring bits of a theme that I have written a hundred times before. I read every line of it. When I have tried to let it make decisions rather than execute them, the result has always cost me more time than it saved.",{"type":156,"content":181},[182,184,191],{"text":183,"type":160},"That distinction is most of what I have learned in the past two years, and I wrote it up properly in ",{"text":185,"type":160,"marks":186},"how I build WordPress sites faster with AI",[187],{"type":188,"attrs":189},"link",{"href":190},"/how-i-build-wordpress-faster-with-ai",{"text":192,"type":160}," if you want the longer version.",{"type":166,"attrs":194,"content":195},{"level":168},[196],{"text":197,"type":160},"Design, before any code exists",{"type":156,"content":199},[200],{"text":201,"type":160},"Figma. Nothing gets built until the design is agreed there, and that rule has saved me more grief than any technical decision I have ever made.",{"type":156,"content":203},[204],{"text":205,"type":160},"A settled design is what makes the rest of this list work. You cannot build fast off a moving target, and you certainly cannot let an AI help if nobody has decided what the page looks like yet. Clients sometimes push to start building early to save time. It never saves time.",{"type":166,"attrs":207,"content":208},{"level":168},[209],{"text":210,"type":160},"The WordPress side",{"type":156,"content":212},[213],{"text":214,"type":160},"Most of my client work is still WordPress, and I build it hand-rolled rather than assembled out of a page builder. A lean custom theme, a small number of plugins I trust, and no kitchen-sink framework loading forty things the site does not use.",{"type":156,"content":216},[217],{"text":218,"type":160},"What that means in practice:",{"type":220,"content":221},"bulletList",[222,234,244,254],{"type":223,"content":224},"listItem",[225],{"type":156,"content":226},[227,232],{"text":228,"type":160,"marks":229},"A custom theme, built for that site. ",[230],{"type":231},"bold",{"text":233,"type":160},"No theme marketplace, no thirty-option customiser panel nobody will ever open.",{"type":223,"content":235},[236],{"type":156,"content":237},[238,242],{"text":239,"type":160,"marks":240},"Advanced Custom Fields for the editing experience. ",[241],{"type":231},{"text":243,"type":160},"So the client edits the things they should edit and nothing they should not.",{"type":223,"content":245},[246],{"type":156,"content":247},[248,252],{"text":249,"type":160,"marks":250},"A short plugin list. ",[251],{"type":231},{"text":253,"type":160},"Every plugin is a dependency, a security surface and a future upgrade problem. I add them reluctantly.",{"type":223,"content":255},[256],{"type":156,"content":257},[258,262,264,270],{"text":259,"type":160,"marks":260},"Real staging, and backups that get restored. ",[261],{"type":231},{"text":263,"type":160},"Covered in ",{"text":265,"type":160,"marks":266},"WordPress backups and staging",[267],{"type":188,"attrs":268},{"href":269},"/wordpress-backups-and-staging",{"text":271,"type":160},", which is the least glamorous post on this site and the one I send people most often.",{"type":156,"content":273},[274,276,282],{"text":275,"type":160},"The page builder question comes up constantly and my answer is not the dogmatic one. There are jobs where a builder is the right call. I went into when in ",{"text":277,"type":160,"marks":278},"when a page builder is genuinely fine",[279],{"type":188,"attrs":280},{"href":281},"/when-a-page-builder-is-genuinely-fine",{"text":283,"type":160},".",{"type":166,"attrs":285,"content":286},{"level":168},[287],{"text":288,"type":160},"The app side",{"type":156,"content":290},[291],{"text":292,"type":160},"When a project is an application rather than a website, it is Nuxt and Supabase.",{"type":156,"content":294},[295,297,303],{"text":296,"type":160},"Nuxt gives me routing, rendering and structure without me inventing any of it, and I reach for it over plain Vue almost every time for reasons I set out in ",{"text":298,"type":160,"marks":299},"why I reach for Nuxt over Vue",[300],{"type":188,"attrs":301},{"href":302},"/why-i-reach-for-nuxt-over-vue",{"text":304,"type":160},". Supabase gives me a real Postgres database with auth and an API on top, which means I am not writing a backend from scratch for a project that does not need one.",{"type":156,"content":306},[307,309,315,317,323],{"text":308,"type":160},"The two get confused a lot, because they turn up in the same sentence so often. They do completely different jobs, and if you are trying to work out which you need, ",{"text":310,"type":160,"marks":311},"Nuxt vs Supabase: what each one does",[312],{"type":188,"attrs":313},{"href":314},"/nuxt-vs-supabase-what-each-one-does",{"text":316,"type":160}," untangles it. I also wrote up the ",{"text":318,"type":160,"marks":319},"mistakes I made learning that stack",[320],{"type":188,"attrs":321},{"href":322},"/nuxt-3-supabase-mistakes-i-made",{"text":324,"type":160},", which is more useful than any tutorial I could write.",{"type":166,"attrs":326,"content":327},{"level":168},[328],{"text":329,"type":160},"Hosting and deploys",{"type":156,"content":331},[332],{"text":333,"type":160},"Vercel for the Nuxt work. Push to a branch, get a preview URL, send it to the client. That preview URL has probably improved my client relationships more than any other single thing on this list, because it turns a conversation about an abstraction into a link somebody can open on their phone.",{"type":156,"content":335},[336],{"text":337,"type":160},"WordPress hosting depends on the client and what they already have. I am not religious about it as long as it does proper backups, has a staging environment, and lets me near the server when something breaks.",{"type":166,"attrs":339,"content":340},{"level":168},[341],{"text":342,"type":160},"The boring ones I would not drop",{"type":220,"content":344},[345,362,372,382],{"type":223,"content":346},[347],{"type":156,"content":348},[349,353,355,361],{"text":350,"type":160,"marks":351},"Lighthouse and PageSpeed Insights. ",[352],{"type":231},{"text":354,"type":160},"Because performance claims should be measured, not asserted. There is a real link between speed and enquiries, which I covered in ",{"text":356,"type":160,"marks":357},"fast websites sell",[358],{"type":188,"attrs":359},{"href":360},"/fast-websites-sell-the-speed-numbers-that-matter",{"text":283,"type":160},{"type":223,"content":363},[364],{"type":156,"content":365},[366,370],{"text":367,"type":160,"marks":368},"Uptime monitoring. ",[369],{"type":231},{"text":371,"type":160},"So I hear a site is down before the client does.",{"type":223,"content":373},[374],{"type":156,"content":375},[376,380],{"text":377,"type":160,"marks":378},"Git, on everything, including the WordPress themes. ",[379],{"type":231},{"text":381,"type":160},"Non-negotiable.",{"type":223,"content":383},[384],{"type":156,"content":385},[386,390],{"text":387,"type":160,"marks":388},"A notes file per project. ",[389],{"type":231},{"text":391,"type":160},"Plain text. What I decided and why. Six months later I never remember, and neither does the client.",{"type":166,"attrs":393,"content":394},{"level":168},[395],{"text":396,"type":160},"What I have dropped",{"type":156,"content":398},[399],{"text":400,"type":160},"Heavyweight starter frameworks. Most CSS frameworks, for smaller sites where the design is bespoke anyway. Any tool whose main pitch is that it saves me typing, because typing has not been the bottleneck for a long time. And anything with a subscription I would struggle to justify to a client if they asked what it was for.",{"type":156,"content":402},[403,405,411],{"text":404,"type":160},"If your project is ecommerce at any real scale, that is not this list. My other site, ",{"text":406,"type":160,"marks":407},"Headless Digital",[408],{"type":188,"attrs":409},{"href":410},"https://headless-digital.com",{"text":412,"type":160},", covers the Magento and headless commerce side, and that is where I would point you.",{"type":166,"attrs":414,"content":415},{"level":168},[416],{"text":417,"type":160},"The tools are not the point",{"type":156,"content":419},[420],{"text":421,"type":160},"None of this makes a site good. A clear design, a client who knows what they want, and somebody who has done it before make a site good. The tools just stop me getting in my own way.",{"type":156,"content":423},[424,426,431,433,439],{"text":425,"type":160},"If you are trying to work out what your project actually needs, I do a free thirty-minute surgery. No pitch, no obligation, just a straight answer about what I would do. ",{"text":427,"type":160,"marks":428},"Book one here",[429],{"type":188,"attrs":430},{"href":28},{"text":432,"type":160},", or read ",{"text":434,"type":160,"marks":435},"what a free thirty-minute surgery with me looks like",[436],{"type":188,"attrs":437},{"href":438},"/what-a-free-30-minute-surgery-with-me-looks-like",{"text":440,"type":160}," first if you want to know what you are walking into.","tiptap","","2026-08-22T08:00:00+00:00","A Hull freelance developer's real 2026 stack: VS Code, Claude Code, Figma, hand-built WordPress, Nuxt and Supabase. What I use, what I dropped, and why.",{},1787990429303]