41554 blogs · [ { "id": "01a07df1-626b-72b0-8bb8-61a336568a14", "title": "Build a Self-Updating LLM Knowledge Base", "url": "https://bholmes.dev/blog/llm-knowledge-bases/", "published_at": "2026-07-06T12:00:00+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a33686c4b0", "title": "Hubble Note", "url": "https://bholmes.dev/blog/hubble-note/", "published_at": "2025-09-22T02:21:57+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a336cdcb02", "title": "Response to DHH on the gift of open source", "url": "https://bholmes.dev/blog/open-source-gift-exchange/", "published_at": "2025-07-20T21:13:41+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a3370d3630", "title": "The python environment setup cheatsheet", "url": "https://bholmes.dev/blog/simple-python-env-setup/", "published_at": "2024-09-01T22:02:02+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a337d22455", "title": "Building serverless applications with Fauna + GraphQL", "url": "https://bholmes.dev/blog/serverless-apps-fauna-gql-astro/", "published_at": "2022-03-24T22:48:29+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a338b70638", "title": "Understanding single page apps & client-side routing", "url": "https://bholmes.dev/blog/spas-clientside-routing/", "published_at": "2021-07-06T20:01:36+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a339506784", "title": "Grabbing subsets of JS object properties with... GraphQL?", "url": "https://bholmes.dev/blog/query-json-objects-graphql/", "published_at": "2021-06-07T20:01:36+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a33a201151", "title": "Sexy, accessible show-hide animations in any web framework", "url": "https://bholmes.dev/blog/accessible-show-hide-animations/", "published_at": "2021-05-24T20:01:36+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a33ab766a3", "title": "Want CSS variables in media query declarations? Try this!", "url": "https://bholmes.dev/blog/alternative-to-css-variable-media-queries/", "published_at": "2021-05-12T14:01:23+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a33b290219", "title": "Picture perfect image optimization for any web framework", "url": "https://bholmes.dev/blog/picture-perfect-image-optimization/", "published_at": "2021-05-04T20:01:36+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a33b36f3ae", "title": "How ES Modules have redefined web development", "url": "https://bholmes.dev/blog/how-es-modules-have-redefined-web-development/", "published_at": "2021-03-31T20:01:36+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a33c08fdff", "title": "4 Git shortcuts that define my workflow", "url": "https://bholmes.dev/blog/4-git-shortcuts-that-define-my-workflow/", "published_at": "2021-02-18T23:38:56+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a33cc94c17", "title": "4 Conference talks that changed my perspective as a web dev", "url": "https://bholmes.dev/blog/conference-talks-that-changed-my-perspective-as-a-web-dev/", "published_at": "2021-02-10T21:44:22+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a33cf4ef5f", "title": "Another way to understand JavaScript's array.reduce", "url": "https://bholmes.dev/blog/another-way-to-understand-array-reduce/", "published_at": "2021-02-05T16:26:05+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a33d0503d5", "title": "A shiny-on-hover effect that follows your mouse (CSS) ✨", "url": "https://bholmes.dev/blog/a-shiny-on-hover-effect-that-follows-your-mouse-css/", "published_at": "2021-01-28T17:40:13+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a33d816394", "title": "Mocking browser APIs in Jest (localStorage, fetch and more!)", "url": "https://bholmes.dev/blog/mocking-browser-apis-fetch-localstorage-dates-the-easy-way-with-jest/", "published_at": "2021-01-19T22:48:29+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a33d9fd238", "title": "Leaving Notion to build a second brain in VS Code", "url": "https://bholmes.dev/blog/giving-up-on-notion-to-build-a-second-brain/", "published_at": "2021-01-11T22:34:17+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a33e4ef8fb", "title": "The web dev tools that helped me get s*** done in 2020", "url": "https://bholmes.dev/blog/the-web-dev-tools-that-helped-me-get-s-done-in-2020/", "published_at": "2021-01-04T16:33:47+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a33edc59b6", "title": "NextJS, Contentful CMS, GraphQL, oh my!", "url": "https://bholmes.dev/blog/nextjs-contentful-cms-graphql-oh-my/", "published_at": "2020-11-04T22:42:55+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a33f622d4b", "title": "Understanding the spectrum of CSS frameworks", "url": "https://bholmes.dev/blog/understanding-the-spectrum-of-css-frameworks/", "published_at": "2020-10-21T22:44:21+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a33f68d543", "title": "Building a sexy, mobile-ready navbar in any web framework", "url": "https://bholmes.dev/blog/building-a-sexy-mobile-ready-navbar-in-any-web-framework/", "published_at": "2020-10-06T22:44:09+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a33f9e7c69", "title": "Writing a state machine in one line with TypeScript", "url": "https://bholmes.dev/blog/writing-a-state-machine-in-one-line-with-typescript/", "published_at": "2020-09-02T15:35:45+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a3409ad64c", "title": "Before building your next static site with React, consider this", "url": "https://bholmes.dev/blog/before-building-your-next-static-site-with-react-consider-this/", "published_at": "2020-07-07T13:48:25+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a34121fcb8", "title": "Use flexbox? Here's when CSS Grid is better", "url": "https://bholmes.dev/blog/flexbox-diehards-here-s-some-concrete-examples-of-when-css-grid-is-just-better/", "published_at": "2020-05-26T16:34:01+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a34201dafc", "title": "How you can (sort of) write SASS @mixins in plain CSS", "url": "https://bholmes.dev/blog/how-you-can-sort-of-write-sass-mixins-in-plain-css/", "published_at": "2020-05-08T22:13:48+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a342c235a6", "title": "The power of SvelteJS: building an animated image carousel in", "url": "https://bholmes.dev/blog/making-an-animated-image-carousel-the-easy-way-with-svelte/", "published_at": "2020-04-07T20:01:36+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a343441c84", "title": "The web dev tools that helped me get s*** done in 2019", "url": "https://bholmes.dev/blog/the-web-dev-tools-that-helped-me-get-s-done-in-2019-plus-a-thank-you/", "published_at": "2020-01-03T20:13:06+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a343ef0683", "title": "HTML5 tags - how do they work, and which ones should I use?", "url": "https://bholmes.dev/blog/html5-tags-how-do-they-work-and-which-ones-should-i-use/", "published_at": "2019-12-02T23:01:19+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a344141eab", "title": "What I learned planning and building an MVP as a frontend dev at Peloton", "url": "https://bholmes.dev/blog/what-i-learned-planning-and-building-an-mvp-as-a-frontend-dev-at-peloton/", "published_at": "2019-09-03T14:57:01+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a3447444d6", "title": "Using Typescript string enums? Consider string literals!", "url": "https://bholmes.dev/blog/using-enums-with-string-values-in-typescript-consider-string-literals-instead/", "published_at": "2019-07-29T14:39:03+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a3452291ce", "title": "How to revert your git commits without panicking", "url": "https://bholmes.dev/blog/how-to-revert-your-git-commits-without-panicking/", "published_at": "2019-06-13T02:23:26+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a34603dd5e", "title": "How using CSS variables helped me cut down on JavaScript", "url": "https://bholmes.dev/blog/how-using-css-variables-cut-down-on-my-javascript/", "published_at": "2019-05-31T03:37:13+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a346ea94f8", "title": "Git + GitHub Best Practices for Teams (Opinionated)", "url": "https://bholmes.dev/blog/git-github-best-practices-for-teams-opinionated/", "published_at": "2019-05-16T19:50:13+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a347b0d22f", "title": "Let CSS frameworks empower you, not control you", "url": "https://bholmes.dev/blog/let-css-frameworks-empower-you-not-control-you/", "published_at": "2019-04-29T14:54:27+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a3481774a5", "title": "A neat DIY solution to animating on scroll (for any framework)", "url": "https://bholmes.dev/blog/a-neat-diy-solution-to-animating-on-scroll-for-any-framework/", "published_at": "2019-04-09T15:46:47+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a34885250e", "title": "Why SvelteJS may be the best framework for new web devs", "url": "https://bholmes.dev/blog/why-sveltejs-may-be-the-best-framework-for-new-web-devs/", "published_at": "2019-03-19T22:03:49+00:00" }, { "id": "01a07df1-626b-72b0-8bb8-61a349843418", "title": "Why I'm using Surge and not GitHub Pages", "url": "https://bholmes.dev/blog/why-im-using-surge-and-not-github-pages/", "published_at": "2019-03-06T22:40:16+00:00" } ] posts Claim your blog
Back to Ben Holmes
Blog · corpus.blog/blogs/bholmes.dev/posts

Ben Holmes

bholmes.dev

2026

2025

2024

2022

2021

2020

2019