41554 blogs · [ { "id": "01a0878c-e12c-73f4-ae67-c44507fdf299", "title": "Fonts that apparently help you read faster", "url": "https://jenchan.biz/blog/fonts-for-reading-faster/", "published_at": "2026-06-29T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c4450897acde", "title": "My Pet NAS", "url": "https://jenchan.biz/blog/my-pet-nas/", "published_at": "2026-03-19T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c44508f9869f", "title": "The Great Home Network Upgrade", "url": "https://jenchan.biz/blog/the-great-home-network-upgrade/", "published_at": "2026-03-18T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c445090c8038", "title": "Recovering from accidentally deleting my main user on NixOS", "url": "https://jenchan.biz/blog/that-time-i-locked-myself-out-of-nix/", "published_at": "2025-12-20T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c44509489f63", "title": "Installing Lazyvim and Oh-My-Zsh on NixOS without Home Manager or flakes", "url": "https://jenchan.biz/blog/installing-lazyvim-on-nixos/", "published_at": "2025-10-17T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c44509dadfb4", "title": "Building a vanilla Node CLI for bootstrapping projects with Cursor rules", "url": "https://jenchan.biz/blog/building-a-vanilla-node-cli/", "published_at": "2025-10-01T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c4450a7779a6", "title": "Recovering webmentions from the Fediverse after migrating to Cloudflare", "url": "https://jenchan.biz/blog/recovering-webmentions-after-migrating-to-cloudflare/", "published_at": "2025-09-23T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c4450af9513c", "title": "Who Moved My Cookies? Of Cookies On Subdomains", "url": "https://jenchan.biz/blog/who-moved-my-cookies/", "published_at": "2025-07-09T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c4450bdc341f", "title": "Block AI Crawlers, Save Tears: Ditching Vercel for Cloudflare Pages", "url": "https://jenchan.biz/blog/blocking-ai-crawlers/", "published_at": "2025-07-03T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c4450c6f698c", "title": "Agentic AI Workflow Woes: Cursor Edition", "url": "https://jenchan.biz/blog/agentic-ai-workflow-woes/", "published_at": "2025-04-27T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c4450c815ae0", "title": "The Thankless Complexity of Custom Form Validations", "url": "https://jenchan.biz/blog/the-thankless-complexity-of-custom-form-validations/", "published_at": "2025-03-29T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c4450d306675", "title": "A Mid-career Retrospective of Stores for State Management", "url": "https://jenchan.biz/blog/a-mid-career-retrospective-of-stores-for-state-management/", "published_at": "2024-11-24T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c4450e25703c", "title": "The Dual Nature of Seniority in Software Development", "url": "https://jenchan.biz/blog/the-dual-nature-of-seniority/", "published_at": "2024-07-09T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c4450e9211b3", "title": "🛑 Stop resizing your browser: improve testing for responsiveness", "url": "https://jenchan.biz/blog/stop-resizing-your-browser-improve-responsive-testing/", "published_at": "2024-05-19T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c4450ea9c610", "title": "Error monitoring and bug triage: Whose job is it?", "url": "https://jenchan.biz/blog/error-monitoring-and-bug-triage/", "published_at": "2024-03-02T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c4450eb54ac8", "title": "Dissecting the hell that is Jest setup with ESM and Typescript", "url": "https://jenchan.biz/blog/dissecting-the-hell-jest-setup-esm-typescript-setup/", "published_at": "2023-12-31T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c4450f62f24c", "title": "Crossing the senior chasm", "url": "https://jenchan.biz/blog/crossing-the-senior-chasm/", "published_at": "2023-10-26T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c4451051789c", "title": "Bug Triage", "url": "https://jenchan.biz/blog/bug-triage/", "published_at": "2023-06-04T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c44510917de3", "title": "Closing, Cloning, or Disabling the Shadow DOM", "url": "https://jenchan.biz/blog/closing-cloning-or-disabling-shadow-DOM/", "published_at": "2023-01-28T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c44511783f7a", "title": "Maintaining a Healthy-Enough Mindset through Uncertainty", "url": "https://jenchan.biz/blog/maintaining-a-healthy-enough-mindset-through-uncertainty/", "published_at": "2022-12-03T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c44511c842b1", "title": "Build Time, Runtime, Execution time... What \"time\" is it in Javascript?", "url": "https://jenchan.biz/blog/what-time-is-it-in-javascript/", "published_at": "2022-11-23T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c44512081ad5", "title": "Git Rebase for Preventing Merge Commits", "url": "https://jenchan.biz/blog/git-rebase-for-preventing-merge-commits/", "published_at": "2022-10-30T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c44512e239d7", "title": "Things Strong Developers Do That Drive Their Team Crazy", "url": "https://jenchan.biz/blog/things-strong-developers-do-that-drive-their-team-crazy/", "published_at": "2022-10-27T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c445137d5799", "title": "Ask Good Questions; Get Unblocked Faster", "url": "https://jenchan.biz/blog/ask-good-questions-get-unblocked-faster/", "published_at": "2022-09-06T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c44513973142", "title": "On Levelling Up", "url": "https://jenchan.biz/blog/on-levelling-up/", "published_at": "2022-03-06T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c44513f4c52e", "title": "Unit Testing Components in Storybook", "url": "https://jenchan.biz/blog/unit-testing-components-in-storybook/", "published_at": "2021-09-22T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c44514cb75f2", "title": "Storybook and Chromatic for Visual Regression Testing", "url": "https://jenchan.biz/blog/storybook-and-chromatic-for-visual-regression-testing/", "published_at": "2021-09-20T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c44514efb854", "title": "How good am I? Reflections on 5th year designer-developer doldrums", "url": "https://jenchan.biz/blog/how-good-am-i/", "published_at": "2021-03-05T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c445159677fa", "title": "Differential Loading for Legacy Browser Support in Angular 9", "url": "https://jenchan.biz/blog/differential-loading-for-legacy-browser-support-in-angular9/", "published_at": "2020-07-21T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c445161d385c", "title": "A Stab at Performance Testing with Intersection Observer and Scroll events", "url": "https://jenchan.biz/blog/a-stab-at-performance-testing-with-intersection-observer/", "published_at": "2020-06-29T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c44516c21c41", "title": "On Being Wrong", "url": "https://jenchan.biz/blog/on-being-wrong/", "published_at": "2020-05-09T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c4451799317c", "title": "Running IE 11 with VirtualBox on Mac", "url": "https://jenchan.biz/blog/running-ie11-on-virtualbox-on-mac/", "published_at": "2020-05-06T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c44517c7eb1c", "title": "Challenge: Cross-browser testing for IE11 and IE Edge on Mac for free", "url": "https://jenchan.biz/blog/cross-browser-testing-ie11-edge-for-free/", "published_at": "2020-04-28T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c445181e89a9", "title": "What is helpful, if you want to help", "url": "https://jenchan.biz/blog/what-is-helpful-if-you-want-to-help/", "published_at": "2020-03-08T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c44518af8de2", "title": "Removing Accidentally Committed Files From Remote History", "url": "https://jenchan.biz/blog/removing-accidentally-committed-files-from-remote-history/", "published_at": "2020-02-19T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c44518d9c8db", "title": "How To Plan Scalable CSS for Large Projects?", "url": "https://jenchan.biz/blog/how-to-plan-scalable-css-for-large-projects/", "published_at": "2020-02-10T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c44519c5eb54", "title": "First Impressions: learning Angular after React/Redux", "url": "https://jenchan.biz/blog/first-impressions-learning-angular-after-react-redux/", "published_at": "2019-12-17T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c4451aa95f5c", "title": "How I Approach Whiteboard Interviews", "url": "https://jenchan.biz/blog/how-i-approach-whiteboarding/", "published_at": "2019-11-30T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c4451b233cbc", "title": "A laundry list of things I never heard of from bootcamp", "url": "https://jenchan.biz/blog/a-laundry-list-of-things-i-never-heard-from-bootcamp/", "published_at": "2019-05-02T00:00:00+00:00" }, { "id": "01a0878c-e12c-73f4-ae67-c4451b999aa9", "title": "Watching the future of coding accelerate into a simulated black hole", "url": "https://jenchan.biz/blog/watching-the-future-of-code-accelerate-into-a-black-hole/", "published_at": "2019-03-09T00:00:00+00:00" }, { "id": "01a0878c-e12d-7176-a30b-580dad771b05", "title": "What I Learned From Trying To Be a Team Player For 2 Years", "url": "https://jenchan.biz/blog/what-i-learned-from-trying-to-be-a-team-player-for-2-years/", "published_at": "2019-02-26T00:00:00+00:00" }, { "id": "01a0878c-e12d-7176-a30b-580dae738df5", "title": "Hastily Deploying a Node App on NearlyFreeSpeech.net (Mac OS)", "url": "https://jenchan.biz/blog/hastily-deploying-a-node-app-on-nearlyfreespeechnet/", "published_at": "2018-10-17T00:00:00+00:00" }, { "id": "01a0878c-e12d-7176-a30b-580daf6fbb48", "title": "What I learned from only using Select in PostgreSQL", "url": "https://jenchan.biz/blog/what-i-learned-from-only-using-select-in-psql/", "published_at": "2018-04-09T00:00:00+00:00" }, { "id": "01a0878c-e12d-7176-a30b-580db06074b0", "title": "What I Learned From Not Planning A Web App (from start to finish)", "url": "https://jenchan.biz/blog/what-i-learned-from-not-planning-a-web-app-from-start-to-finish/", "published_at": "2017-12-12T00:00:00+00:00" }, { "id": "01a0878c-e12d-7176-a30b-580db10540e7", "title": "A no-fail workflow for starting a Mongo App", "url": "https://jenchan.biz/blog/nofail-workflow-mongo/", "published_at": "2017-10-17T00:00:00+00:00" }, { "id": "01a0878c-e12d-7176-a30b-580db1bf2563", "title": "Adapting Greensock (GSAP) SVGs for Firefox", "url": "https://jenchan.biz/blog/adapting-greensock-svgs-for-firefox/", "published_at": "2017-09-06T00:00:00+00:00" }, { "id": "01a0878c-e12d-7176-a30b-580db23d7f3f", "title": "Last Day on Termination Notice", "url": "https://jenchan.biz/blog/last-day-on-termination-notice/", "published_at": "2017-08-14T00:00:00+00:00" }, { "id": "01a0878c-e12d-7176-a30b-580db2d23b19", "title": "Junior Dev Interview Questions", "url": "https://jenchan.biz/blog/junior-dev-interview-questions/", "published_at": "2017-08-08T00:00:00+00:00" }, { "id": "01a0878c-e12d-7176-a30b-580db3d08cfc", "title": "Fixing emails for Outlook 2007, 2013, 2016", "url": "https://jenchan.biz/blog/fixing-emails-for-outlook-2007-2013-2016/", "published_at": "2017-06-17T00:00:00+00:00" } ] posts Claim your blog
Back to jenchan.biz
Blog · corpus.blog/blogs/jenchan.biz/posts

jenchan.biz

jenchan.biz

2026

2025

2024

2023

2022

2021

2020

2019

2018

2017