41554 blogs · [ { "id": "01a087dc-80e9-73d2-bcd3-807e89a914cf", "title": "Turning a Product Into a Platform", "url": "https://schof.co/turning-a-product-into-a-platform/", "published_at": "2026-08-11T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e89f39e9c", "title": "Why the Same Test on Paper or Digitally Leads to Different Scores", "url": "https://schof.co/why-the-same-test-on-paper-or-digitally-leads-to-different-scores/", "published_at": "2026-08-04T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e89faf701", "title": "Notify on New React App Version Available", "url": "https://schof.co/notify-on-new-react-app-version-available/", "published_at": "2026-05-30T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e8afa54be", "title": "Using Worker Threads in Node.js", "url": "https://schof.co/using-worker-threads-in-nodejs/", "published_at": "2026-02-15T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e8b2b69b0", "title": "Focussing on Longevity", "url": "https://schof.co/focussing-on-longevity/", "published_at": "2026-02-03T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e8bb1cf18", "title": "Conditionally Loading Native Modules in Expo", "url": "https://schof.co/conditionally-loading-native-modules-in-expo/", "published_at": "2026-02-02T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e8bda2a44", "title": "A Short Introduction to QTI", "url": "https://schof.co/introduction-to-qti/", "published_at": "2026-01-05T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e8c2fdff9", "title": "Reviewing the Year's Daily Notes", "url": "https://schof.co/reviewing-the-years-daily-notes/", "published_at": "2026-01-01T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e8d02094f", "title": "Implementing the Repository Model with DynamoDB and Turbine", "url": "https://schof.co/implementing-the-repository-model-with-dynamodb-and-turbine/", "published_at": "2025-12-17T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e8dbce066", "title": "Copy Rich Text to the Clipboard in JavaScript", "url": "https://schof.co/copy-rich-text-to-the-clipboard-in-javascript/", "published_at": "2025-11-21T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e8e43b49b", "title": "Premature Abstraction of Entity Names", "url": "https://schof.co/premature-abstraction-of-entity-names/", "published_at": "2025-11-09T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e8e805ba2", "title": "Building a Custom Rate Limiter for Hono", "url": "https://schof.co/building-a-custom-rate-limiter-for-hono/", "published_at": "2025-11-02T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e8f677128", "title": "A Story of a Story of Recursion", "url": "https://schof.co/a-story-of-a-story-of-recursion/", "published_at": "2025-08-23T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e8f71e553", "title": "Creating Modern Wordpress Themes", "url": "https://schof.co/creating-modern-wordpress-themes/", "published_at": "2025-08-19T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e8fd0861a", "title": "Building AI Workflows Using Alfred", "url": "https://schof.co/building-ai-workflows-using-alfred/", "published_at": "2025-08-10T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e8febc6bb", "title": "Building a Plugin System for a React App", "url": "https://schof.co/building-a-plugin-system-for-a-react-app/", "published_at": "2025-07-30T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9096bfc2", "title": "Changing My Mind on Tech Monopolies", "url": "https://schof.co/changing-my-mind-on-tech-monopolies/", "published_at": "2025-07-27T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e91840bbe", "title": "Force Multipliers Versus Form Factors", "url": "https://schof.co/force-multipliers-versus-form-factors/", "published_at": "2025-06-20T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9244c64b", "title": "Using Gemini in My Todo Flow", "url": "https://schof.co/using-gemini-in-my-todo-flow/", "published_at": "2025-06-17T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9274ea98", "title": "Rendering a PDF Page to a JPEG in Node.js", "url": "https://schof.co/rendering-a-pdf-page-to-a-jpeg-in-nodejs/", "published_at": "2025-06-06T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9311de09", "title": "Integrating Safe Exam Browser", "url": "https://schof.co/integrating-safe-exam-browser/", "published_at": "2025-06-01T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9340d548", "title": "You Don't Need Everything in One Place", "url": "https://schof.co/you-dont-need-everything-in-one-place/", "published_at": "2025-05-31T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e93aa4cd0", "title": "Keeping Your Environments Distinct with Separate Favicons", "url": "https://schof.co/keeping-your-environments-distinct-with-separate-favicons/", "published_at": "2025-05-26T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e93f71185", "title": "Staying in Control Using Remote Config", "url": "https://schof.co/staying-in-control-using-remote-config/", "published_at": "2025-05-25T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e94d0568d", "title": "Norms and Rules in Online Communities", "url": "https://schof.co/norms-and-rules-in-online-communities/", "published_at": "2025-05-18T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e95ba4c9b", "title": "Building Dynamic GraphQL Queries in Flexible Feed", "url": "https://schof.co/building-dynamic-graphql-queries-in-flexible-feed/", "published_at": "2025-05-16T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e95dad1ed", "title": "Using AI in GitHub Pull Requests", "url": "https://schof.co/using-ai-in-github-pull-requests/", "published_at": "2025-05-16T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e969de8ec", "title": "Musing on Writing", "url": "https://schof.co/musing-on-writing/", "published_at": "2025-04-24T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e96bc8782", "title": "TraceStack: Building an Open-Source Serverless Observability Tool", "url": "https://schof.co/tracestack-open-source-observability/", "published_at": "2025-03-29T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9770be17", "title": "AI Concepts for Developers", "url": "https://schof.co/ai-concepts-for-developers/", "published_at": "2025-02-01T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e97bf6ea1", "title": "Lazy Loading Routes with Vite and React Router v7", "url": "https://schof.co/lazy-loading-routes-with-vite-and-react-router-v7/", "published_at": "2025-01-19T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e984a8f41", "title": "Setting Up Syntax Highlighting in HubSpot CMS", "url": "https://schof.co/setting-up-syntax-highlighting-in-hubspot-cms/", "published_at": "2024-09-21T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e989757d6", "title": "Building an Interactive Markdown Textarea", "url": "https://schof.co/building-an-interactive-markdown-textarea/", "published_at": "2024-06-29T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e98f86962", "title": "Creating Awesome Embeddable Scripts", "url": "https://schof.co/creating-awesome-embeddable-scripts/", "published_at": "2024-06-23T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e99b72f41", "title": "Switching My Blog to Zola", "url": "https://schof.co/switching-my-blog-to-zola/", "published_at": "2024-06-08T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9a20e4f0", "title": "Building Composable React Components", "url": "https://schof.co/building-composable-react-components/", "published_at": "2024-05-26T12:14:30+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9a3d02ca", "title": "Pro Software for the iPad", "url": "https://schof.co/pro-software-for-the-ipad/", "published_at": "2024-05-26T10:47:42+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9ae66407", "title": "Writing JSDoc for React Components", "url": "https://schof.co/writing-jsdoc-for-react-components/", "published_at": "2024-05-22T09:02:14+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9b46e40c", "title": "Tags - From UX to Implementation", "url": "https://schof.co/tags-ux-to-implementation/", "published_at": "2024-05-20T06:54:47+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9bbf29ba", "title": "My Second Day on the California Zephyr", "url": "https://schof.co/california-zephyr-2/", "published_at": "2024-04-23T15:01:49+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9c463dd5", "title": "My First Day on the California Zephyr", "url": "https://schof.co/california-zephyr/", "published_at": "2024-04-22T20:20:50+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9c611680", "title": "Upgrading Your AWS Lambdas to Node 20", "url": "https://schof.co/upgrading-your-aws-lambdas-to-node-20/", "published_at": "2024-02-19T10:50:24+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9c733549", "title": "Showing a Manage Subscriptions Button in React Native", "url": "https://schof.co/showing-a-manage-subscriptions-button-in-react-native/", "published_at": "2023-12-29T12:46:45+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9ca1310f", "title": "Launching Flexible Feed", "url": "https://schof.co/launching-flexible-feed/", "published_at": "2023-12-20T16:30:48+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9d8f14d1", "title": "A Mental Framework for Debugging", "url": "https://schof.co/a-mental-framework-for-debugging/", "published_at": "2023-12-11T18:47:19+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9db8e565", "title": "Building a Serverless Search Engine Using Fuse.js", "url": "https://schof.co/building-a-serverless-search-engine-using-fusejs/", "published_at": "2023-12-03T11:23:53+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9e3ed6cc", "title": "About Me", "url": "https://schof.co/about/", "published_at": "2023-12-03T00:00:00+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9f24149a", "title": "Going back to Obsidian", "url": "https://schof.co/going-back-to-obsidian/", "published_at": "2023-12-02T19:40:26+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9f438ea1", "title": "Advent of Code 2023", "url": "https://schof.co/advent-of-code-2023/", "published_at": "2023-12-02T19:22:28+00:00" }, { "id": "01a087dc-80e9-73d2-bcd3-807e9f7732ba", "title": "The iPad as a Platform", "url": "https://schof.co/the-ipad-as-a-platform/", "published_at": "2023-11-27T19:56:48+00:00" } ] posts Claim your blog
Back to Thomas Schoffelen
Blog · corpus.blog/blogs/schof.co/posts

Thomas Schoffelen

schof.co

2026

2025

2024

2023