41554 blogs · [ { "id": "01a08791-e557-7048-9f0c-bafc1ad4562e", "title": "Fix missing ‘Skip to Content’ link in WordPress block themes", "url": "https://jshakespeare.com/fix-missing-skip-to-content-link-wordpress-block-themes/", "published_at": "2025-05-14T05:00:52+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc1b168488", "title": "Making route changes accessible in React with an autofocusing h1", "url": "https://jshakespeare.com/accessible-route-change-react-router-autofocus-heading/", "published_at": "2023-11-04T09:20:52+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc1c06605f", "title": "How to test an error boundary component with React Testing Library", "url": "https://jshakespeare.com/react-error-boundary-testing-rtl/", "published_at": "2023-10-16T12:20:52+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc1c40613e", "title": "How did JavaScript’s console.log get its name?", "url": "https://jshakespeare.com/javascript-console-log-etymology/", "published_at": "2020-12-07T12:20:52+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc1d359886", "title": "Use git hooks and husky to tell your teammates when to run npm install", "url": "https://jshakespeare.com/use-git-hooks-and-husky-to-tell-your-teammates-when-to-run-npm-install/", "published_at": "2020-08-02T12:20:52+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc1dbe8352", "title": "A simple count-up number animation with JavaScript", "url": "https://jshakespeare.com/simple-count-up-number-animation-javascript-react/", "published_at": "2020-04-05T16:00:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc1deeddd2", "title": "Don’t mislabel mailto links", "url": "https://jshakespeare.com/dont-mislabel-mailto-links/", "published_at": "2020-02-22T05:47:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc1ed64c07", "title": "The Meg Ryan effect", "url": "https://jshakespeare.com/the-meg-ryan-effect/", "published_at": "2020-02-04T05:47:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc1f6fa79a", "title": "Finding a voice", "url": "https://jshakespeare.com/finding-a-voice/", "published_at": "2020-01-12T05:47:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc1fbc41b1", "title": "Disney Earth", "url": "https://jshakespeare.com/disney-earth/", "published_at": "2020-01-04T05:47:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc2095cc3c", "title": "Design smells", "url": "https://jshakespeare.com/design-smells/", "published_at": "2019-08-03T05:47:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc213ff03b", "title": "A primer on BAT, the cryptocurrency aiming to fix online advertising", "url": "https://jshakespeare.com/a-primer-on-bat-the-cryptocurrency-aiming-to-fix-online-advertising/", "published_at": "2018-01-03T08:20:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc21acef47", "title": "Why you should keep a diary", "url": "https://jshakespeare.com/why-you-should-keep-a-diary/", "published_at": "2017-12-16T10:56:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc22441824", "title": "Encoding browser-friendly video files with ffmpeg", "url": "https://jshakespeare.com/encoding-browser-friendly-video-files-with-ffmpeg/", "published_at": "2017-12-04T17:17:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc22623512", "title": "How Slack hooks users through artificial urgency", "url": "https://jshakespeare.com/how-slack-hooks-users-through-artificial-urgency/", "published_at": "2017-12-01T10:30:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc22e95916", "title": "Learning curves and user interfaces", "url": "https://jshakespeare.com/learning-curves-and-user-interfaces/", "published_at": "2016-03-14T18:07:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc22fed1f0", "title": "Why good agencies write bad code", "url": "https://jshakespeare.com/why-good-agencies-write-bad-code/", "published_at": "2015-10-04T17:46:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc234b0d7c", "title": "Giving clients 'jailed' SFTP access to their sites", "url": "https://jshakespeare.com/giving-clients-jailed-sftp-access-to-their-sites/", "published_at": "2015-08-09T17:46:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc23a8c1c2", "title": "Sharing Swig templates between Node and Marionette.js", "url": "https://jshakespeare.com/sharing-swig-templates-between-node-and-marionette.js/", "published_at": "2015-01-27T17:46:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc241cad64", "title": "Tasty media queries in Sass", "url": "https://jshakespeare.com/tasty-media-queries-in-sass/", "published_at": "2014-05-29T17:46:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc2494e58c", "title": "Slowing down", "url": "https://jshakespeare.com/slowing-down/", "published_at": "2014-05-26T18:22:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc24d55d80", "title": "Your creations will not outlast you", "url": "https://jshakespeare.com/your-creations-will-not-outlast-you/", "published_at": "2014-04-04T00:00:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc257d83e4", "title": "Code isn't poetry", "url": "https://jshakespeare.com/code-isnt-poetry/", "published_at": "2014-04-02T07:00:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc25b3d004", "title": "Easy Icomoon icons with Sass", "url": "https://jshakespeare.com/easy-icomoon-icons-with-sass/", "published_at": "2014-03-09T13:22:56+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc269567bb", "title": "How to be a terrible writer", "url": "https://jshakespeare.com/how-to-be-a-terrible-writer/", "published_at": "2014-03-02T13:22:56+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc26b1fd6d", "title": "You aren't learning if you aren't doing", "url": "https://jshakespeare.com/you-arent-learning-if-you-arent-doing/", "published_at": "2013-05-20T17:24:56+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc271c1dea", "title": "No comment.", "url": "https://jshakespeare.com/no-comment./", "published_at": "2013-04-11T07:32:47+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc2757baaa", "title": "Stop externalising your life", "url": "https://jshakespeare.com/stop-externalising-your-life/", "published_at": "2013-04-03T16:58:08+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc27d7495f", "title": "Climbing the fig tree", "url": "https://jshakespeare.com/climbing-the-fig-tree/", "published_at": "2013-03-27T21:30:00+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc284917ab", "title": "The dire state of Wordpress", "url": "https://jshakespeare.com/the-dire-state-of-wordpress/", "published_at": "2013-03-19T07:09:40+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc28c2d6ee", "title": "Don't worry that your job is pointless", "url": "https://jshakespeare.com/dont-worry-that-your-job-is-pointless/", "published_at": "2013-03-11T16:11:42+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc28e852fb", "title": "Building for humans is hard", "url": "https://jshakespeare.com/building-for-humans-is-hard/", "published_at": "2013-02-23T11:00:04+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc2983d104", "title": "Self-started projects: invest as much as you can, as early as you can", "url": "https://jshakespeare.com/self-started-projects-invest-as-much-as-you-can-as-early-as-you-can/", "published_at": "2012-12-27T20:03:08+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc2a4eb120", "title": "Product placement is fine (in its place)", "url": "https://jshakespeare.com/product-placement-is-fine-in-its-place/", "published_at": "2012-11-29T10:10:08+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc2a55d59a", "title": "Being a jack-of-all-trades to master one", "url": "https://jshakespeare.com/being-a-jack-of-all-trades-to-master-one/", "published_at": "2012-11-03T11:57:31+00:00" }, { "id": "01a08791-e557-7048-9f0c-bafc2a5be7fd", "title": "Why App.net (unfortunately) won't work", "url": "https://jshakespeare.com/why-app.net-unfortunately-wont-work/", "published_at": "2012-10-22T22:20:52+00:00" } ] posts Claim your blog
Back to jshakespeare.com
Blog · corpus.blog/blogs/jshakespeare.com/posts

jshakespeare.com

jshakespeare.com

2025

2023

2020

2019

2018

2017

2016

2015

2014

2013

2012