<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Schalk Neethling - Open Web, Open Source, and Web Accessibility</title><description>My thoughts, ideas, experiences, and ramblings about code, life, and the open web</description><link>https://schalkneethling.com/</link><language>en-us</language><item><title>Branded Types in TypeScript: Making the Compiler Care About Meaning</title><link>https://schalkneethling.com/posts/branded-types-in-typescript/</link><guid isPermaLink="true">https://schalkneethling.com/posts/branded-types-in-typescript/</guid><description>TypeScript&apos;s structural typing means two types with the same shape are interchangeable, but sometimes this is not what you want. Branded types fix that by adding a phantom property the compiler tracks, but that vanishes at runtime. 👻</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate></item><item><title>Announcing the CSS Property Type Validator Extension for VSCode</title><link>https://schalkneethling.com/posts/announcing-the-css-property-type-validator-vscode-extension/</link><guid isPermaLink="true">https://schalkneethling.com/posts/announcing-the-css-property-type-validator-vscode-extension/</guid><description>A new editor extension that validates your CSS @property registrations and catches incompatible var() usage as you type.</description><pubDate>Thu, 07 May 2026 00:00:00 GMT</pubDate></item><item><title>The First Real Autoresearch Run Was Expensive, Messy, and Extremely Useful</title><link>https://schalkneethling.com/posts/the-first-real-autoresearch-run-was-expensive-messy-and-extremely-useful/</link><guid isPermaLink="true">https://schalkneethling.com/posts/the-first-real-autoresearch-run-was-expensive-messy-and-extremely-useful/</guid><description>I pointed the skills autoresearch harness at a real frontend security project. It cost roughly four dollars, failed before completing a full improvement loop, and taught me more than any of the earlier test runs combined.</description><pubDate>Tue, 05 May 2026 00:00:00 GMT</pubDate></item><item><title>Refined Plan Mode: Reviewing AI Coding Plans Like Pull Requests</title><link>https://schalkneethling.com/posts/refined-plan-mode-reviewing-ai-coding-plans-like-pull-requests/</link><guid isPermaLink="true">https://schalkneethling.com/posts/refined-plan-mode-reviewing-ai-coding-plans-like-pull-requests/</guid><description>A small local web app for reviewing AI-generated coding plans with inline comments, anchored feedback, and structured JSON output, bringing the pull request review experience to plan mode.</description><pubDate>Mon, 27 Apr 2026 00:00:00 GMT</pubDate></item><item><title>CSS Property Type Validator Is Getting Much Closer to Real-World CSS Workflows</title><link>https://schalkneethling.com/posts/css-property-type-validator-is-getting-much-closer-to-real-world-css-workflows/</link><guid isPermaLink="true">https://schalkneethling.com/posts/css-property-type-validator-is-getting-much-closer-to-real-world-css-workflows/</guid><description>An update on the CSS Property Type Validator, focusing on recent improvements that make it better suited to practical, real-world CSS development workflows.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Targeting SVG Images with CSS Attribute Selectors and filter: invert()</title><link>https://schalkneethling.com/posts/targeting-svg-images-with-css-attribute-selectors-and-filter-invert/</link><guid isPermaLink="true">https://schalkneethling.com/posts/targeting-svg-images-with-css-attribute-selectors-and-filter-invert/</guid><description>When you cannot inline an SVG or use it as a mask-image, a combination of the ends-with attribute selector and filter: invert() offers a clean, CSS-only solution for adapting icon colours across themes.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Building a 3D Climate News Globe with HTML in Canvas and Three.js</title><link>https://schalkneethling.com/posts/building-a-3d-climate-news-globe-with-html-in-canvas-and-three-js/</link><guid isPermaLink="true">https://schalkneethling.com/posts/building-a-3d-climate-news-globe-with-html-in-canvas-and-three-js/</guid><description>A deep dive into Blue Earth, an experiment that plots positive climate news stories on a rotating 3D globe using the HTML in Canvas API, Three.js, and a build-time pipeline powered by Claude and Geoapify.</description><pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Introducing masonry-gridlanes-wc: A Native-First Masonry Web Component</title><link>https://schalkneethling.com/posts/introducing-masonry-gridlanes-wc-a-native-first-masonry-web-component/</link><guid isPermaLink="true">https://schalkneethling.com/posts/introducing-masonry-gridlanes-wc-a-native-first-masonry-web-component/</guid><description>A light-DOM custom element for CSS masonry layouts that uses display: grid-lanes when available and falls back to a spec-aligned JavaScript placement engine. Version 0.1.0 is ready for real projects.</description><pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate></item><item><title>CSS Property Type Validator: Assignment-Site Validation</title><link>https://schalkneethling.com/posts/css-property-type-validator-assignment-site-validation/</link><guid isPermaLink="true">https://schalkneethling.com/posts/css-property-type-validator-assignment-site-validation/</guid><description>The CSS property type validator now catches type mismatches at the point of assignment, not just at var() usage.</description><pubDate>Mon, 13 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Pushing to GitHub and Codeberg Simultaneously with Git</title><link>https://schalkneethling.com/posts/pushing-to-github-and-codeberg-simultaneously-with-git/</link><guid isPermaLink="true">https://schalkneethling.com/posts/pushing-to-github-and-codeberg-simultaneously-with-git/</guid><description>Learn how to configure Git to push your code to both GitHub and Codeberg with a single command, including SSH key setup and a handy shell alias for branch-specific control.</description><pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate></item><item><title>TypeScript 6.0 and CSS Side-Effect Imports: What Changed and How to Fix It</title><link>https://schalkneethling.com/posts/typescript-6-0-and-css-side-effect-imports-what-changed-and-how-to-fix-it/</link><guid isPermaLink="true">https://schalkneethling.com/posts/typescript-6-0-and-css-side-effect-imports-what-changed-and-how-to-fix-it/</guid><description>TypeScript 6.0 enables noUncheckedSideEffectImports by default, which causes a TS2882 error for CSS side-effect imports like import &apos;./style.css&apos;. Here is what changed, why, and how to fix it.</description><pubDate>Sat, 11 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Panozoom: The Accidental Web App</title><link>https://schalkneethling.com/posts/panozoom-the-accidental-web-app/</link><guid isPermaLink="true">https://schalkneethling.com/posts/panozoom-the-accidental-web-app/</guid><description>What started as a question about a free macOS image viewer turned into a deep dive into pan and zoom math, pointer events, WheelEvent quirks, and a TypeScript web component. Here is everything we learned along the way.</description><pubDate>Fri, 10 Apr 2026 00:00:00 GMT</pubDate></item><item><title>The Process of Shipping The CSS Media Pseudo Classes Polyfill</title><link>https://schalkneethling.com/posts/the-process-of-shipping-the-css-media-pseudo-classes-polyfill/</link><guid isPermaLink="true">https://schalkneethling.com/posts/the-process-of-shipping-the-css-media-pseudo-classes-polyfill/</guid><description>The CSS Media Pseudo Classes Polyfill is now available on npm. This post covers what shipped, what I learned about the CSSOM and unsupported CSS, how you can try it, and what comes next.</description><pubDate>Tue, 07 Apr 2026 00:00:00 GMT</pubDate></item><item><title>CSS @property Deserves Better Tooling — So I Am Building a Validator</title><link>https://schalkneethling.com/posts/css-property-deserves-better-tooling-so-i-am-building-a-validator/</link><guid isPermaLink="true">https://schalkneethling.com/posts/css-property-deserves-better-tooling-so-i-am-building-a-validator/</guid><description>CSS @property gives authors a type contract for custom properties, but no tooling enforces it at the consumption site. CSS Property Type Validator is an attempt to close this gap.</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Aligning Variable Content Across Columns. It Seems Impossible Until You Discover Subgrid</title><link>https://schalkneethling.com/posts/aligning-variable-content-across-columns-it-seems-impossible-until-you-discover-subgrid/</link><guid isPermaLink="true">https://schalkneethling.com/posts/aligning-variable-content-across-columns-it-seems-impossible-until-you-discover-subgrid/</guid><description>A layout that seems impossible; aligning titles and dividers across sibling cards regardless of content length. No JavaScript, no table layouts, just CSS subgrid.</description><pubDate>Wed, 01 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Semantic HTML Just Might Make Your CSS Less Fragile</title><link>https://schalkneethling.com/posts/semantic-html-just-might-make-your-css-less-fragile/</link><guid isPermaLink="true">https://schalkneethling.com/posts/semantic-html-just-might-make-your-css-less-fragile/</guid><description>A real-world exploration of how choosing the right HTML elements for interview transcripts solves both semantic and styling challenges in one cascading swoop.</description><pubDate>Mon, 30 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Cutting Across The What And The How: What Building A Polyfill Is Teaching Me About Web Standards</title><link>https://schalkneethling.com/posts/cutting-across-the-what-and-the-how-what-building-a-polyfill-is-teaching-me-about-web-standards/</link><guid isPermaLink="true">https://schalkneethling.com/posts/cutting-across-the-what-and-the-how-what-building-a-polyfill-is-teaching-me-about-web-standards/</guid><description>What happens when you try to implement two seemingly straightforward CSS features as a JavaScript polyfill? You discover that specifications are simple because they made hard decisions, and the complexity does not disappear; it just moves.</description><pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Comparing Sets in JavaScript With difference() and symmetricDifference()</title><link>https://schalkneethling.com/posts/comparing-sets-in-javascript-with-difference-and-symmetricdifference/</link><guid isPermaLink="true">https://schalkneethling.com/posts/comparing-sets-in-javascript-with-difference-and-symmetricdifference/</guid><description>How the new Set methods difference() and symmetricDifference() can replace verbose Set comparisons with clear, expressive code.</description><pubDate>Mon, 23 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Timelapse: A PWA - Putting Cursor&apos;s Composer 2 To The Test</title><link>https://schalkneethling.com/posts/timelapse-a-pwa-putting-cursors-composer-2-to-the-test/</link><guid isPermaLink="true">https://schalkneethling.com/posts/timelapse-a-pwa-putting-cursors-composer-2-to-the-test/</guid><description>Timelapse is a progressive web app (PWA) with acollection of widgets that shows how much time has elapsed in the day, week, month, quarter, and year. Widgets and timezone are configurable.</description><pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Auto-Improving an Agent Skill: Applying Karpathy&apos;s Autoresearch Pattern to Semantic HTML</title><link>https://schalkneethling.com/posts/auto-improving-an-agent-skill-applying-karpathy-s-autoresearch-pattern-to-semantic-html/</link><guid isPermaLink="true">https://schalkneethling.com/posts/auto-improving-an-agent-skill-applying-karpathy-s-autoresearch-pattern-to-semantic-html/</guid><description>How I built an eval-judge-improve loop to autonomously refine a semantic HTML agent skill, taking it from 2.46 to 2.89 out of 3.0 across four iterations and what I learned about the limits of automated improvement.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Accessible Text Colour with the CSS contrast-color() Function</title><link>https://schalkneethling.com/posts/accessible-text-colour-with-the-css-contrast-color-function/</link><guid isPermaLink="true">https://schalkneethling.com/posts/accessible-text-colour-with-the-css-contrast-color-function/</guid><description>The CSS contrast-color() function lets the browser pick the most readable text colour for any background. Here is what it does, how it works, and why it matters for accessibility and the web.</description><pubDate>Mon, 16 Mar 2026 00:00:00 GMT</pubDate></item><item><title>The Prompt is the Product: Writing Effective Prompts for AI Coding Agents</title><link>https://schalkneethling.com/posts/the-prompt-is-the-product-writing-effective-prompts-for-ai-coding-agents/</link><guid isPermaLink="true">https://schalkneethling.com/posts/the-prompt-is-the-product-writing-effective-prompts-for-ai-coding-agents/</guid><description>How I structure prompts for AI coding agents to get considered implementation plans instead of premature code.</description><pubDate>Wed, 11 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Freeze Your Object Constants for Better Type Inference</title><link>https://schalkneethling.com/posts/freeze-your-object-constants-for-better-type-inference/</link><guid isPermaLink="true">https://schalkneethling.com/posts/freeze-your-object-constants-for-better-type-inference/</guid><description>How combining JSDoc annotations with Object.freeze gives you literal type inference, runtime immutability, and better IDE support for JavaScript constant objects.</description><pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Stop Storing Secrets on Disk — Replace Your .env With Varlock and 1Password</title><link>https://schalkneethling.com/posts/stop-storing-secrets-on-disk-replace-your-env-with-varlock-and-1password/</link><guid isPermaLink="true">https://schalkneethling.com/posts/stop-storing-secrets-on-disk-replace-your-env-with-varlock-and-1password/</guid><description>How I replaced my local .env file with Varlock and 1Password, gaining type safety, validation, secret scanning, and a single source of truth for environment variables.</description><pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Cleaner Temp Directory Cleanup in Node.js With mkdtempDisposable</title><link>https://schalkneethling.com/posts/cleaner-temp-directory-cleanup-in-nodejs-tests-with-mkdtempdisposable/</link><guid isPermaLink="true">https://schalkneethling.com/posts/cleaner-temp-directory-cleanup-in-nodejs-tests-with-mkdtempdisposable/</guid><description>Working with temporary directories in Node.js just became cleaner and more intentional with mkdtempDisposable and explicit resource management.</description><pubDate>Sun, 08 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Writing Cross-Platform Hooks for AI Coding Agents</title><link>https://schalkneethling.com/posts/writing-cross-platform-hooks-for-ai-coding-agents/</link><guid isPermaLink="true">https://schalkneethling.com/posts/writing-cross-platform-hooks-for-ai-coding-agents/</guid><description>How to write a single hook script that works across Claude Code and Cursor, giving you deterministic control over agent behaviour when it matters most.</description><pubDate>Thu, 05 Mar 2026 00:00:00 GMT</pubDate></item><item><title>AI Gave Me Working Code. Questioning It Gave Me Better Code.</title><link>https://schalkneethling.com/posts/ai-gave-me-working-code-questioning-it-gave-me-better-code/</link><guid isPermaLink="true">https://schalkneethling.com/posts/ai-gave-me-working-code-questioning-it-gave-me-better-code/</guid><description>Working code isn&apos;t understood code. When AI-generated code feels hard to parse, that&apos;s a signal to ask questions, and sometimes, the answer leads to something better.</description><pubDate>Tue, 03 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Three Reasons Your scroll-snap Container May Be Overflowing on Mobile</title><link>https://schalkneethling.com/posts/three-reasons-your-scroll-snap-container-may-be-overflowing-on-mobile/</link><guid isPermaLink="true">https://schalkneethling.com/posts/three-reasons-your-scroll-snap-container-may-be-overflowing-on-mobile/</guid><description>Take a fieldset, pour some radio buttons and visually hidden labels into it, wrap it in scroll-snap, and you have a clean, semantic horizontal scroller on mobile. What could go wrong? Well... there is nuance we need to talk about.</description><pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Git: Recovering When You Branched From the Wrong Branch</title><link>https://schalkneethling.com/posts/git-recovering-when-you-branched-from-the-wrong-branch/</link><guid isPermaLink="true">https://schalkneethling.com/posts/git-recovering-when-you-branched-from-the-wrong-branch/</guid><description>A practical walkthrough for when you realise your feature branch was created from the wrong base, covering git log, merge parents, cherry-pick, and bypassing commit hooks.</description><pubDate>Thu, 26 Feb 2026 00:00:00 GMT</pubDate></item><item><title>CSS Anchor Positioning: Scoping, Implicit Anchors, and Conditional Hiding</title><link>https://schalkneethling.com/posts/css-anchor-positioning-scoping-implicit-anchors-and-conditional-hiding/</link><guid isPermaLink="true">https://schalkneethling.com/posts/css-anchor-positioning-scoping-implicit-anchors-and-conditional-hiding/</guid><description>Manage anchor relationships with anchor-scope, leverage the Popover API&apos;s implicit anchors, and hide positioned elements gracefully with position-visibility.</description><pubDate>Sat, 21 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Mocking Browser Image Loading in Vitest: Property Descriptors, Prototypes, and WeakMap</title><link>https://schalkneethling.com/posts/mocking-browser-image-loading-in-vitest-property-descriptors-prototypes-and-weakmap/</link><guid isPermaLink="true">https://schalkneethling.com/posts/mocking-browser-image-loading-in-vitest-property-descriptors-prototypes-and-weakmap/</guid><description>A deep dive into the JavaScript concepts behind mocking HTMLImageElement behaviour in Vitest, including Object.defineProperty, Object.getOwnPropertyDescriptor, prototype manipulation, and WeakMap for per-instance state tracking.</description><pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Part 3: Running an AI Agent Implementation Planning Session</title><link>https://schalkneethling.com/posts/part-3-running-an-ai-agent-implementation-planning-session/</link><guid isPermaLink="true">https://schalkneethling.com/posts/part-3-running-an-ai-agent-implementation-planning-session/</guid><description>How to structure an AI agent session with sequential tasks, review checkpoints, and explicit deliverables—turning a handoff document into actionable state machines, gap reports, and implementation plans.</description><pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Part 2: Organising Reference Materials for AI Agent Sessions</title><link>https://schalkneethling.com/posts/part-2-organising-reference-materials-for-ai-agent-sessions/</link><guid isPermaLink="true">https://schalkneethling.com/posts/part-2-organising-reference-materials-for-ai-agent-sessions/</guid><description>How to structure a self-contained folder of specifications, screenshots, and Figma links that an AI agent can reference throughout an implementation planning session.</description><pubDate>Sat, 14 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Part 1: Structuring Feature Specifications for AI Agents</title><link>https://schalkneethling.com/posts/structuring-feature-specifications-for-ai-agents/</link><guid isPermaLink="true">https://schalkneethling.com/posts/structuring-feature-specifications-for-ai-agents/</guid><description>How to structure a handoff document that enables AI agents to perform gap analysis and implementation planning—with traceable acceptance criteria, UI state inventories, and explicit business logic.</description><pubDate>Fri, 13 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Safely Selecting Elements with Special Characters Using CSS.escape()</title><link>https://schalkneethling.com/posts/safely-selecting-elements-with-special-characters-using-css-escape/</link><guid isPermaLink="true">https://schalkneethling.com/posts/safely-selecting-elements-with-special-characters-using-css-escape/</guid><description>Learn how to safely select DOM elements with special characters in their IDs or classes using CSS.escape() to avoid selector parsing errors.</description><pubDate>Tue, 10 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Dynamically enable and disable map scroll wheel zoom with Leaflet.js</title><link>https://schalkneethling.com/posts/dynamically-enable-and-disable-map-scroll-wheel-zoom-with-leaflet-js/</link><guid isPermaLink="true">https://schalkneethling.com/posts/dynamically-enable-and-disable-map-scroll-wheel-zoom-with-leaflet-js/</guid><description>Learn how to programmatically require the presence of a modifier key to enable scroll wheel zoom support in Leaflet maps.</description><pubDate>Sat, 07 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Using TypeScript Triple-Slash Directives with JSDoc</title><link>https://schalkneethling.com/posts/triple-slash-reference-directives-in-jsdoc/</link><guid isPermaLink="true">https://schalkneethling.com/posts/triple-slash-reference-directives-in-jsdoc/</guid><description>How to use TypeScript’s triple-slash reference directives to load type definitions when type-checking JavaScript with JSDoc.</description><pubDate>Thu, 05 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Simplify Command-Line Argument Parsing with Node.js util.parseArgs()</title><link>https://schalkneethling.com/posts/simplify-command-line-argument-parsing-with-nodejs-util-parseargs/</link><guid isPermaLink="true">https://schalkneethling.com/posts/simplify-command-line-argument-parsing-with-nodejs-util-parseargs/</guid><description>Learn how to use Node.js util.parseArgs() to simplify command-line argument parsing in your Node.js CLI utilities.</description><pubDate>Wed, 04 Feb 2026 00:00:00 GMT</pubDate></item><item><title>Fast Mocked Responses in Playwright Getting You Down? Deferred Promises to the Rescue</title><link>https://schalkneethling.com/posts/fast-mocked-responses-in-playwright-getting-you-down-deferred-promises-to-the-rescue/</link><guid isPermaLink="true">https://schalkneethling.com/posts/fast-mocked-responses-in-playwright-getting-you-down-deferred-promises-to-the-rescue/</guid><description>How to use deferred promises to control mock response timing in Playwright tests and avoid race conditions with instant responses.</description><pubDate>Fri, 30 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Preventing Common Issues When Working with AI-Generated Code</title><link>https://schalkneethling.com/posts/preventing-common-issues-when-working-with-ai-generated-code/</link><guid isPermaLink="true">https://schalkneethling.com/posts/preventing-common-issues-when-working-with-ai-generated-code/</guid><description>AI coding agents have made me significantly more productive as an engineer, but they have a systematic problem: as context fills, they drift from explicit guidance and violate documented patterns. This examines AI limitations and the workflow adaptations that help while labs address the underlying issues.</description><pubDate>Wed, 28 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Type Safety and Runtime Validation in JavaScript with Zod and JSDoc</title><link>https://schalkneethling.com/posts/type-safety-and-runtime-validation-in-javascript-with-zod-and-jsdoc/</link><guid isPermaLink="true">https://schalkneethling.com/posts/type-safety-and-runtime-validation-in-javascript-with-zod-and-jsdoc/</guid><description>Combining Zod&apos;s runtime validation with JSDoc&apos;s type annotations to achieve type safety in JavaScript without TypeScript.</description><pubDate>Mon, 26 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Exporting Algolia Indices to JSON: Skip the Custom Scripts</title><link>https://schalkneethling.com/posts/exporting-algolia-indices-to-json-skip-the-custom-scripts/</link><guid isPermaLink="true">https://schalkneethling.com/posts/exporting-algolia-indices-to-json-skip-the-custom-scripts/</guid><description>Export your Algolia search indices to JSON without building custom export scripts using the Algolia CLI.</description><pubDate>Fri, 23 Jan 2026 00:00:00 GMT</pubDate></item><item><title>CSS Anchor Positioning Fallbacks: What to Do When Things Don&apos;t Fit</title><link>https://schalkneethling.com/posts/css-anchor-positioning-fallbacks-what-to-do-when-things-dont-fit/</link><guid isPermaLink="true">https://schalkneethling.com/posts/css-anchor-positioning-fallbacks-what-to-do-when-things-dont-fit/</guid><description>Build resilient anchor-positioned layouts that adapt when space runs out.</description><pubDate>Thu, 22 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Code Reviewing AI-Generated JavaScript: What I Found</title><link>https://schalkneethling.com/posts/code-reviewing-ai-generated-javascript-what-i-found/</link><guid isPermaLink="true">https://schalkneethling.com/posts/code-reviewing-ai-generated-javascript-what-i-found/</guid><description>What I learned reviewing AI-generated JavaScript: real-world issues, code review tips, and ways to ensure robust, production-ready code.</description><pubDate>Mon, 19 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Style Details Content with ::details-content</title><link>https://schalkneethling.com/posts/style-details-content-with-details-content/</link><guid isPermaLink="true">https://schalkneethling.com/posts/style-details-content-with-details-content/</guid><description>Learn how to use the new CSS ::details-content pseudo-element to style the content area of HTML details elements with greater control and flexibility.</description><pubDate>Sun, 18 Jan 2026 00:00:00 GMT</pubDate></item><item><title>What AI Agents Get Wrong About VRT, And How to Fix It</title><link>https://schalkneethling.com/posts/what-ai-agents-get-wrong-about-vrt-and-how-to-fix-it/</link><guid isPermaLink="true">https://schalkneethling.com/posts/what-ai-agents-get-wrong-about-vrt-and-how-to-fix-it/</guid><description>Exploring common misconceptions AI agents have about Visual Regression Testing and practical solutions to address them.</description><pubDate>Wed, 14 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Precise Positioning with CSS Anchor Functions: anchor(), anchor-center, and anchor-size()</title><link>https://schalkneethling.com/posts/precise-positioning-with-css-anchor-functions-anchor-anchor-center-and-anchor-size/</link><guid isPermaLink="true">https://schalkneethling.com/posts/precise-positioning-with-css-anchor-functions-anchor-anchor-center-and-anchor-size/</guid><description>Take your anchor positioning beyond the grid with functions that give you pixel-level control over placement and sizing.</description><pubDate>Fri, 02 Jan 2026 00:00:00 GMT</pubDate></item><item><title>Getting Started with CSS Anchor Positioning: anchor-name, position-anchor, and position-area</title><link>https://schalkneethling.com/posts/getting-started-with-css-anchor-positioning-anchor-name-position-anchor-and-position-area/</link><guid isPermaLink="true">https://schalkneethling.com/posts/getting-started-with-css-anchor-positioning-anchor-name-position-anchor-and-position-area/</guid><description>Discover how CSS anchor positioning brings native support for positioning elements relative to each other — no JavaScript required.</description><pubDate>Wed, 31 Dec 2025 00:00:00 GMT</pubDate></item><item><title>Opening and Closing Dialogs Without JavaScript Using HTML Invoker Commands</title><link>https://schalkneethling.com/posts/opening-and-closing-dialogs-without-javascript-using-html-invoker-commands/</link><guid isPermaLink="true">https://schalkneethling.com/posts/opening-and-closing-dialogs-without-javascript-using-html-invoker-commands/</guid><description>Learn how to use HTML invoker commands to open and close dialogs without writing any JavaScript.</description><pubDate>Mon, 29 Dec 2025 00:00:00 GMT</pubDate></item><item><title>What if...</title><link>https://schalkneethling.com/posts/what-if/</link><guid isPermaLink="true">https://schalkneethling.com/posts/what-if/</guid><description>What if we embraced authenticity, take creative risks, and live deliberately without fear of judgment - a reflection on finding freedom through self-acceptance in both personal and technical pursuits.</description><pubDate>Sun, 16 Mar 2025 00:00:00 GMT</pubDate></item><item><title>CSS Transforms and the Matrix</title><link>https://schalkneethling.com/posts/css-transforms-and-the-matrix/</link><guid isPermaLink="true">https://schalkneethling.com/posts/css-transforms-and-the-matrix/</guid><description>A deep dive into the CSS transform matrix, how it relates to the individual CSS transform properties, a look at the hidden powers of the function forms, and a dragon or two.</description><pubDate>Fri, 21 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Part Six: Building a Profile Page with HTML and CSS: A form, A Dialog, and Netlify</title><link>https://schalkneethling.com/posts/build-a-profile-page-html-css-part6-dialog-form-netlify/</link><guid isPermaLink="true">https://schalkneethling.com/posts/build-a-profile-page-html-css-part6-dialog-form-netlify/</guid><description>In this part, we will add a form to our profile page, use a dialog to display our form, deploy our page using Netlify, and set up Netlify to handle form submissions.</description><pubDate>Mon, 17 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Curiosity, Collaboration, and Innovation At Any Scale</title><link>https://schalkneethling.com/posts/curiosity-collaboration-and-innovation-at-any-scale/</link><guid isPermaLink="true">https://schalkneethling.com/posts/curiosity-collaboration-and-innovation-at-any-scale/</guid><description>Harness the power of open source and an innovative culture to drive creativity and collaboration within your team—inspired by Mozilla, GitHub, OddBird, Igalia, and Factorial.</description><pubDate>Thu, 13 Feb 2025 00:00:00 GMT</pubDate></item><item><title>Part Five: Building a Profile Page with HTML and CSS: Responsive, Favicon, Open Graph</title><link>https://schalkneethling.com/posts/build-a-profile-page-html-css-part5-final-page/</link><guid isPermaLink="true">https://schalkneethling.com/posts/build-a-profile-page-html-css-part5-final-page/</guid><description>In part five of the series, we will complete our layout, add a favicon, and set up Open Graph meta tags for social sharing.</description><pubDate>Fri, 07 Feb 2025 00:00:00 GMT</pubDate></item><item><title>What is WCAG? - A Brief Overview</title><link>https://schalkneethling.com/posts/what-is-wcag/</link><guid isPermaLink="true">https://schalkneethling.com/posts/what-is-wcag/</guid><description>Learn about WCAG (Web Content Accessibility Guidelines), including WCAG 2.2 principles, conformance levels, and upcoming WCAG 3 changes, plus insights on accessibility certification value.</description><pubDate>Thu, 06 Feb 2025 00:00:00 GMT</pubDate></item><item><title>The HTML Dialog Element: A Native Solution for Accessible Modal Interactions</title><link>https://schalkneethling.com/posts/html-dialog-native-solution-for-accessible-modal-interactions/</link><guid isPermaLink="true">https://schalkneethling.com/posts/html-dialog-native-solution-for-accessible-modal-interactions/</guid><description>Learn how to use the HTML dialog element to create accessible modal dialogs for your web sites and applications.</description><pubDate>Tue, 04 Feb 2025 00:00:00 GMT</pubDate></item><item><title>My Journey to the International Association of Accessibility Professionals (IAAP) Web Accessibility Specialist (WAS) Certification</title><link>https://schalkneethling.com/posts/the-journey-to-iaap-was/</link><guid isPermaLink="true">https://schalkneethling.com/posts/the-journey-to-iaap-was/</guid><description>Join me on my journey as I prepare for the IAAP Web Accessibility Specialist (WAS) certification, sharing weekly insights, resources, and study plans.</description><pubDate>Wed, 29 Jan 2025 00:00:00 GMT</pubDate></item><item><title>Part Four: Building a Profile Page with HTML and CSS: Refactor, Custom Properties, LinkTree</title><link>https://schalkneethling.com/posts/build-a-profile-page-html-css-part4-refactor-linktree/</link><guid isPermaLink="true">https://schalkneethling.com/posts/build-a-profile-page-html-css-part4-refactor-linktree/</guid><description>In part four of the series, we will do some refactoring of our CSS so that we take advantage of CSS custom properties. We will also complete the mobile layout by adding the LinkTree component to our page.</description><pubDate>Fri, 24 Jan 2025 00:00:00 GMT</pubDate></item><item><title>Understanding local() in @font-face: A Deep Dive</title><link>https://schalkneethling.com/posts/understanding-local-in-at-font-face-a-deep-dive/</link><guid isPermaLink="true">https://schalkneethling.com/posts/understanding-local-in-at-font-face-a-deep-dive/</guid><description>Learn how to build a responsive profile page with modern typography, media queries, and CSS Grid. Part three of our hands-on web development tutorial series.</description><pubDate>Wed, 22 Jan 2025 00:00:00 GMT</pubDate></item><item><title>Part Three: Building a Profile Page with HTML and CSS: Typography And Getting Responsive</title><link>https://schalkneethling.com/posts/build-a-profile-page-html-css-part3-wrap-up/</link><guid isPermaLink="true">https://schalkneethling.com/posts/build-a-profile-page-html-css-part3-wrap-up/</guid><description>Learn how to build a responsive profile page with modern typography, media queries, and CSS Grid. Part three of our hands-on web development tutorial series.</description><pubDate>Sun, 19 Jan 2025 00:00:00 GMT</pubDate></item><item><title>The Hidden Costs of Creativity in Tech: A Personal Reflection</title><link>https://schalkneethling.com/posts/the-hidden-costs-of-creativity-in-tech-a-personal-reflection/</link><guid isPermaLink="true">https://schalkneethling.com/posts/the-hidden-costs-of-creativity-in-tech-a-personal-reflection/</guid><description>The financial pressures of modern life can make it hard to justify creative pursuits that don&apos;t promise immediate returns. This post explores the hidden costs of creativity in tech and society and the value of creative work beyond monetary gain.</description><pubDate>Sun, 12 Jan 2025 00:00:00 GMT</pubDate></item><item><title>Part Two: Building a Profile Page with HTML and CSS: Implementation</title><link>https://schalkneethling.com/posts/build-a-profile-page-html-css-part2-impl/</link><guid isPermaLink="true">https://schalkneethling.com/posts/build-a-profile-page-html-css-part2-impl/</guid><description>In this post we will start implementing the design by working through some of the issues, learning more about Git and GitHub, get set up for development, create our first visual component, and learn about performance, CSS, and modern image formats.</description><pubDate>Tue, 07 Jan 2025 00:00:00 GMT</pubDate></item><item><title>Part One: Building a Profile Page with HTML and CSS: Planning</title><link>https://schalkneethling.com/posts/build-a-profile-page-html-css-planning/</link><guid isPermaLink="true">https://schalkneethling.com/posts/build-a-profile-page-html-css-planning/</guid><description>In this part of the series we will break down the design into components using Atomic Design, set up our repository on GitHub, and create the issues we will need to work on.</description><pubDate>Fri, 03 Jan 2025 00:00:00 GMT</pubDate></item><item><title>Introducing Project Calavera: Your Universal Project Configuration Assistant</title><link>https://schalkneethling.com/posts/introducing-project-calavera-your-universal-project-configuration-assistant/</link><guid isPermaLink="true">https://schalkneethling.com/posts/introducing-project-calavera-your-universal-project-configuration-assistant/</guid><description>Meet Project Calavera, a new open-source CLI tool that makes project configuration setup a breeze, especially for developers working outside the familiar framework ecosystems.</description><pubDate>Mon, 30 Dec 2024 00:00:00 GMT</pubDate></item><item><title>Using npm link for Local Package Development</title><link>https://schalkneethling.com/posts/using-npm-link-for-local-package-development/</link><guid isPermaLink="true">https://schalkneethling.com/posts/using-npm-link-for-local-package-development/</guid><description>Learn how to use npm link to test your NPM packages locally before publishing to the registry. With some common troubleshooting tips and best practices.</description><pubDate>Sun, 29 Dec 2024 00:00:00 GMT</pubDate></item><item><title>Exploring the Role of AI in Self-Reflection and Emotional Growth</title><link>https://schalkneethling.com/posts/exploring-the-role-of-ai-in-self-reflection-and-emotional-growth/</link><guid isPermaLink="true">https://schalkneethling.com/posts/exploring-the-role-of-ai-in-self-reflection-and-emotional-growth/</guid><description>This personal reflection explores how AI chatbots can support emotional growth and self-discovery, offering insights on using AI as a thoughtful companion while acknowledging its limitations compared to human connection and professional therapy.</description><pubDate>Sat, 28 Dec 2024 00:00:00 GMT</pubDate></item><item><title>Announcing Minimalist: A Minimal Modern CSS Library for Most Web Projects</title><link>https://schalkneethling.com/posts/announcing-minimalist-modern-css-library-for-most-web-projects/</link><guid isPermaLink="true">https://schalkneethling.com/posts/announcing-minimalist-modern-css-library-for-most-web-projects/</guid><description>Introducing Minimalist, a modern, lightweight, and customizable CSS library designed to provide a solid foundation for styling websites and web applications. Learn about its key features, technical details, and how you can get involved.</description><pubDate>Tue, 24 Dec 2024 00:00:00 GMT</pubDate></item><item><title>CSS translate, scale, and rotate have a new home and it’s splendid! Come on in.</title><link>https://schalkneethling.com/posts/css-translate-scale-rotate-have-a-new-home/</link><guid isPermaLink="true">https://schalkneethling.com/posts/css-translate-scale-rotate-have-a-new-home/</guid><description>Unlock simpler web development with CSS&apos;s new individual transform properties—cleaner syntax, more intuitive styling, and delightful animations.</description><pubDate>Tue, 17 Dec 2024 00:00:00 GMT</pubDate></item><item><title>Raise The Red Flag Early: The Power of Explicit Return Types in TypeScript</title><link>https://schalkneethling.com/posts/the-benefits-of-typing-function-return-values/</link><guid isPermaLink="true">https://schalkneethling.com/posts/the-benefits-of-typing-function-return-values/</guid><description>Learn how explicit return types in TypeScript can help you catch potential bugs early, improve code reliability, and create more predictable and maintainable TypeScript applications.</description><pubDate>Tue, 10 Dec 2024 00:00:00 GMT</pubDate></item><item><title>Watched It - The Good, The Bad, and The Web Components - Zach Leatherman</title><link>https://schalkneethling.com/posts/watched-it-the-good-the-bad-web-components/</link><guid isPermaLink="true">https://schalkneethling.com/posts/watched-it-the-good-the-bad-web-components/</guid><description>My takeaways from Zach Leatherman&apos;s talk on web components at the 2023 JSHeroes conference.</description><pubDate>Wed, 31 Jul 2024 00:00:00 GMT</pubDate></item><item><title>When Claude does not get your git</title><link>https://schalkneethling.com/posts/when-claude-does-not-get-your-git/</link><guid isPermaLink="true">https://schalkneethling.com/posts/when-claude-does-not-get-your-git/</guid><description>Why you should be careful copying and pasting proposed solutions from LLMs.</description><pubDate>Mon, 08 Jul 2024 00:00:00 GMT</pubDate></item><item><title>What we lose at the gates</title><link>https://schalkneethling.com/posts/what-we-lose-at-the-gates/</link><guid isPermaLink="true">https://schalkneethling.com/posts/what-we-lose-at-the-gates/</guid><description>Perhaps it is the social bubble I find myself in, but it seems there is a lot of talk about gatekeeping happening at the moment. While the bubble metaphor does not quite work for what will follow, I do not have a better one, so humor me.</description><pubDate>Thu, 25 Apr 2024 00:00:00 GMT</pubDate></item><item><title>How do you use git rebase? Let&apos;s go through one use case</title><link>https://schalkneethling.com/posts/how-do-you-use-git-rebase-lets-go-through-one-use-case/</link><guid isPermaLink="true">https://schalkneethling.com/posts/how-do-you-use-git-rebase-lets-go-through-one-use-case/</guid><description>Git rebase is a powerful tool that allows developers to reorganize and clean up their commit history, such as by squashing or fixup-ing multiple commits into a single commit, which can be useful when submitting pull requests.</description><pubDate>Tue, 23 Apr 2024 00:00:00 GMT</pubDate></item><item><title>10 Top accessibility errors and how to avoid and fix them</title><link>https://schalkneethling.com/posts/10-top-accessibility-errors-and-how-to-avoid-and-fix-them/</link><guid isPermaLink="true">https://schalkneethling.com/posts/10-top-accessibility-errors-and-how-to-avoid-and-fix-them/</guid><description>In late December of 2023, TPGi posted its list of the top accessibility errors found through its ARC automation tools in 2023. In this post I explain these errors and offer a solution.</description><pubDate>Mon, 15 Apr 2024 00:00:00 GMT</pubDate></item><item><title>Number and Currency Formatting in JavaScript using Intl.NumberFormat</title><link>https://schalkneethling.com/posts/number-and-currency-formatting-in-javascript-using-intl-numberformat/</link><guid isPermaLink="true">https://schalkneethling.com/posts/number-and-currency-formatting-in-javascript-using-intl-numberformat/</guid><description>While this post does not by any means aim to cover all the amazing things you can do with Intl.NumberFormat, I do cover two very common use cases you may have faced when formatting numbers in JavaScript.</description><pubDate>Thu, 04 Apr 2024 00:00:00 GMT</pubDate></item><item><title>21 Pieces Of Unsolicited Advice For Junior Web Developers</title><link>https://schalkneethling.com/posts/21-pieces-of-unsolicited-advice-for-junior-web-developers/</link><guid isPermaLink="true">https://schalkneethling.com/posts/21-pieces-of-unsolicited-advice-for-junior-web-developers/</guid><description>In this post, I share 21 pieces of unsolicited advice for junior web developers. I emphasize the challenges of learning web development, encourage collaboration, and highlight the importance of web accessibility. Additionally, I discuss bootcamps, university degrees, and the value of learning to code.</description><pubDate>Wed, 03 Apr 2024 00:00:00 GMT</pubDate></item><item><title>Why I Care Deeply About Web Accessibility And You Should Too</title><link>https://schalkneethling.com/posts/why-i-care-deeply-about-web-accessibility-and-you-should-too/</link><guid isPermaLink="true">https://schalkneethling.com/posts/why-i-care-deeply-about-web-accessibility-and-you-should-too/</guid><description>In this post, I discuss why I care deeply about web accessibility, emphasizing its importance in ensuring equal access for people with disabilities and removing barriers to interaction with websites and applications.</description><pubDate>Sun, 31 Mar 2024 00:00:00 GMT</pubDate></item><item><title>Why Do I Love Open Source?</title><link>https://schalkneethling.com/posts/why-do-i-love-open-source/</link><guid isPermaLink="true">https://schalkneethling.com/posts/why-do-i-love-open-source/</guid><description>In this post I share how open source empowers me as a developer, fosters community collaboration, and provides a platform for making a meaningful impact. Being part of the open source community is the best way for anyone new to the technology industry to gain experience and contribute to cool projects.</description><pubDate>Fri, 29 Mar 2024 00:00:00 GMT</pubDate></item><item><title>Qilin: A Starter Project Template For Every Open Source Project</title><link>https://schalkneethling.com/posts/qilin-a-starter-project-template-for-every-open-source-project/</link><guid isPermaLink="true">https://schalkneethling.com/posts/qilin-a-starter-project-template-for-every-open-source-project/</guid><description>Sensible defaults for your Open Source project and community.</description><pubDate>Mon, 25 Mar 2024 00:00:00 GMT</pubDate></item><item><title>To Polyfill Or Not To Polyfill.io</title><link>https://schalkneethling.com/posts/to-polyfill-or-not-to-polyfill-io/</link><guid isPermaLink="true">https://schalkneethling.com/posts/to-polyfill-or-not-to-polyfill-io/</guid><description>The topic of Polyfill.io and its sale came across my radar about a week ago when Tobie Langel shared a link to LinkedIn on the OpenJS Foundation Slack.</description><pubDate>Wed, 06 Mar 2024 00:00:00 GMT</pubDate></item><item><title>Typed Objects in v-for - Vue3 with TypeScript</title><link>https://schalkneethling.com/posts/typed-objects-in-v-for-vue3-typescript/</link><guid isPermaLink="true">https://schalkneethling.com/posts/typed-objects-in-v-for-vue3-typescript/</guid><description>How do I handle type inference challenges with v-for in Vue 3 templates using TypeScript? Let&apos;s find out more.</description><pubDate>Sun, 03 Mar 2024 00:00:00 GMT</pubDate></item><item><title>Installing Nodejs across platforms and managing versions</title><link>https://schalkneethling.com/posts/installing-node-and-managing-versions/</link><guid isPermaLink="true">https://schalkneethling.com/posts/installing-node-and-managing-versions/</guid><description>A quick post on best practices when installing Nodejs on different platforms and managing multiple versions.</description><pubDate>Wed, 01 Feb 2023 00:00:00 GMT</pubDate></item><item><title>Merging a repository into an existing repository without losing commit history</title><link>https://schalkneethling.com/posts/merging-a-repository-into-existing-repo-keeping-history/</link><guid isPermaLink="true">https://schalkneethling.com/posts/merging-a-repository-into-existing-repo-keeping-history/</guid><description>How do I merge one repository into another without losing commit history? This is a quick guide on how to do this.</description><pubDate>Wed, 01 Feb 2023 00:00:00 GMT</pubDate></item><item><title>Publishing a simple CLI tool on NPM</title><link>https://schalkneethling.com/posts/publishing-simple-cli-tool-npm/</link><guid isPermaLink="true">https://schalkneethling.com/posts/publishing-simple-cli-tool-npm/</guid><description>A step by step guide to publishing a simple CLI tool to the NPM registry.</description><pubDate>Sun, 01 Jan 2023 00:00:00 GMT</pubDate></item><item><title>Starting a Vue Project with Vite</title><link>https://schalkneethling.com/posts/starting-a-vue-project-with-vite/</link><guid isPermaLink="true">https://schalkneethling.com/posts/starting-a-vue-project-with-vite/</guid><description>This post will look at starting a new Vue project using the Vite toolchain.</description><pubDate>Thu, 01 Sep 2022 00:00:00 GMT</pubDate></item><item><title>Using EventEmitter in Node.js</title><link>https://schalkneethling.com/posts/using-event-emitter-in-nodejs/</link><guid isPermaLink="true">https://schalkneethling.com/posts/using-event-emitter-in-nodejs/</guid><description>Using the Nodejs EventEmitter with GitHub webhooks</description><pubDate>Mon, 01 Aug 2022 00:00:00 GMT</pubDate></item><item><title>Cancelling asynchronous operations with AbortController</title><link>https://schalkneethling.com/posts/cancelling-asynchronous-operations-with-abortcontroller/</link><guid isPermaLink="true">https://schalkneethling.com/posts/cancelling-asynchronous-operations-with-abortcontroller/</guid><description>How to cancel asynchronous operations with the AbortController API.</description><pubDate>Fri, 01 Jul 2022 00:00:00 GMT</pubDate></item><item><title>Filter by size of Array - MongoDB Compass</title><link>https://schalkneethling.com/posts/filter-by-size-of-array-mongodb-compass/</link><guid isPermaLink="true">https://schalkneethling.com/posts/filter-by-size-of-array-mongodb-compass/</guid><description>Learn how to filter documents in a MongoDB collection by the size of an array field.</description><pubDate>Fri, 01 Jul 2022 00:00:00 GMT</pubDate></item><item><title>Flexsearch tokenizers - Learning through writing tests</title><link>https://schalkneethling.com/posts/flexsearch-tokenizers-learning-through-writing-tests/</link><guid isPermaLink="true">https://schalkneethling.com/posts/flexsearch-tokenizers-learning-through-writing-tests/</guid><description>An introduction to Flexsearch and its tokenizers through writing and interpreting tests.</description><pubDate>Fri, 01 Jul 2022 00:00:00 GMT</pubDate></item><item><title>How Playwright Can Help You Write Better Tests by Separating Test and Production Data</title><link>https://schalkneethling.com/posts/how-playwright-can-help-you-write-better-tests-by-separating-test-and-production-data/</link><guid isPermaLink="true">https://schalkneethling.com/posts/how-playwright-can-help-you-write-better-tests-by-separating-test-and-production-data/</guid><description>When running your Playwright tests, how do you load a different set of data based on the current execution environment?</description><pubDate>Fri, 01 Jul 2022 00:00:00 GMT</pubDate></item><item><title>Why are my table rows rendered outside the table? DOM template parsing caveats in Vuejs</title><link>https://schalkneethling.com/posts/why-are-my-table-rows-rendered-outside-the-table-vuejs/</link><guid isPermaLink="true">https://schalkneethling.com/posts/why-are-my-table-rows-rendered-outside-the-table-vuejs/</guid><description>Usng the special Vuejs is attribute to fix common DOM parsing caveats.</description><pubDate>Fri, 01 Jul 2022 00:00:00 GMT</pubDate></item><item><title>Switching from babel-eslint to @babel-eslint</title><link>https://schalkneethling.com/posts/switching-from-babel-eslint-to-babel-eslint/</link><guid isPermaLink="true">https://schalkneethling.com/posts/switching-from-babel-eslint-to-babel-eslint/</guid><description>There are a couple of steps to take when switching from the older babel-eslint to the newer @babel-eslint. No worries, I&apos;ll show you how.</description><pubDate>Wed, 01 Jun 2022 00:00:00 GMT</pubDate></item><item><title>Matrix Strategy - Improving a project’s CI pipeline</title><link>https://schalkneethling.com/posts/improving-project-ci-github-actions/</link><guid isPermaLink="true">https://schalkneethling.com/posts/improving-project-ci-github-actions/</guid><description>Let’s work through the process of improving a basic GitHub Action CI workflow to cover multiple Node.js versions and operating systems.</description><pubDate>Fri, 01 Apr 2022 00:00:00 GMT</pubDate></item><item><title>Styling the CodeMirror 5 cursor for light and dark modes</title><link>https://schalkneethling.com/posts/styling-codemirror-cursor-light-and-dark/</link><guid isPermaLink="true">https://schalkneethling.com/posts/styling-codemirror-cursor-light-and-dark/</guid><description>How do you style the cursor in CodeMirror 5? Also, how can you do this for light and dark themes? Let&apos;s take a look.</description><pubDate>Fri, 01 Apr 2022 00:00:00 GMT</pubDate></item><item><title>Reconsidering double equals in JavaScript</title><link>https://schalkneethling.com/posts/reconsidering-double-equals-in-javascript/</link><guid isPermaLink="true">https://schalkneethling.com/posts/reconsidering-double-equals-in-javascript/</guid><description>Could it be that the == operator in JavaScript had a bad rap and it’s time to reconsider it?</description><pubDate>Sat, 01 Jan 2022 00:00:00 GMT</pubDate></item><item><title>HacktoberFest ~ Signup and get your Git on</title><link>https://schalkneethling.com/posts/hacktoberfest-signup-and-get-your-git-on/</link><guid isPermaLink="true">https://schalkneethling.com/posts/hacktoberfest-signup-and-get-your-git-on/</guid><description>It’s October, which means pumpkins, candy, costumes, and Hacktoberfest. If you are completely new to open source and contributing on Github, but want to join in the fun, read on.</description><pubDate>Fri, 01 Oct 2021 00:00:00 GMT</pubDate></item><item><title>Progressive Web Apps (PWA) in 2021</title><link>https://schalkneethling.com/posts/pwa-in-2021/</link><guid isPermaLink="true">https://schalkneethling.com/posts/pwa-in-2021/</guid><description>Some thoughts on the current state and challenges with regards to building a PWA in 2021.</description><pubDate>Thu, 01 Jul 2021 00:00:00 GMT</pubDate></item><item><title>Living and Making Peace with Anxiety - A personal journey</title><link>https://schalkneethling.com/posts/living-and-making-peace-with-anxiety-a-personal-journey/</link><guid isPermaLink="true">https://schalkneethling.com/posts/living-and-making-peace-with-anxiety-a-personal-journey/</guid><description>Ok so, this is very different from what I usually post. It is also, hands down, the hardest post I have ever written. But, there is no point in keeping this to myself. No achievement is unlocked by suffering in silence. No medal for pretending everything is A-OK.</description><pubDate>Sun, 02 Jun 2019 00:00:00 GMT</pubDate></item></channel></rss>