41554 blogs · [ { "id": "01a087dc-5693-71ea-bad3-57fb9465e9b8", "title": "Introducing WebDev Bench: A Coding-Agent Benchmark Judged on Web Platform Standards", "url": "https://schalkneethling.com/posts/introducing-webdev-bench/", "published_at": "2026-09-08T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb9517c4de", "title": "Figure, video, figcaption, and accessibility", "url": "https://schalkneethling.com/posts/figure-figcaption-video-and-accessibility/", "published_at": "2026-08-26T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb95e415f4", "title": "An MCP server for Ephemeral Pages", "url": "https://schalkneethling.com/posts/ephemeral-pages-mcp/", "published_at": "2026-08-24T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb95f13229", "title": "Introducing Ephemeral Pages Action v1", "url": "https://schalkneethling.com/posts/introducing-ephemeral-pages-action-v1/", "published_at": "2026-08-10T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb965b76b8", "title": "The release process is part of the product", "url": "https://schalkneethling.com/posts/the-release-process-is-part-of-the-product/", "published_at": "2026-08-04T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb96dcb1b9", "title": "Do We No Longer Care About the Code?", "url": "https://schalkneethling.com/posts/do-we-no-longer-care-about-the-code/", "published_at": "2026-07-28T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb97aede1a", "title": "image-orientation: How CSS Solved the EXIF Rotation Problem", "url": "https://schalkneethling.com/posts/image-orientation-how-css-solved-the-exif-rotation-problem/", "published_at": "2026-07-13T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb97e221d1", "title": "Throwing Confetti with CSS Random", "url": "https://schalkneethling.com/posts/throwing-confetti-with-css-random/", "published_at": "2026-07-13T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb98d1a3e4", "title": "Instantly Get Feature Specific Baseline Component Embed Code", "url": "https://schalkneethling.com/posts/get-baseline/", "published_at": "2026-07-07T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb998da6ba", "title": "Because I Want It to Exist", "url": "https://schalkneethling.com/posts/because-i-want-it-to-exist/", "published_at": "2026-07-05T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb9a0e658e", "title": "You Might Not Need chalk Anymore", "url": "https://schalkneethling.com/posts/you-might-not-need-chalk-anymore/", "published_at": "2026-07-02T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb9adb218b", "title": "Unicode character class escapes. A Hidden JavaScript Superpower", "url": "https://schalkneethling.com/posts/unicode-character-class-escapes-a-javascript-hidden-superpower/", "published_at": "2026-07-01T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb9b62b6e3", "title": "Contributing a Calavera integration", "url": "https://schalkneethling.com/posts/contributing-a-calavera-integration/", "published_at": "2026-06-30T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb9be351bc", "title": "How To Think About Unit Tests, With Vitest", "url": "https://schalkneethling.com/posts/the-basics-of-unit-testing-with-vitest/", "published_at": "2026-06-21T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb9c8222ff", "title": "css-expect: browser-backed unit tests for CSS custom functions", "url": "https://schalkneethling.com/posts/introducing-css-expect-unit-testing-css-functions-in-the-browser/", "published_at": "2026-06-12T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb9cb8cd55", "title": "@function — Native Custom Functions in CSS", "url": "https://schalkneethling.com/posts/css-at-function-native-functions-in-css/", "published_at": "2026-06-08T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb9cff04c5", "title": "Lowering the Barrier to CSS @property Adoption", "url": "https://schalkneethling.com/posts/lowering-the-barrier-to-css-atproperty-adoption/", "published_at": "2026-06-01T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb9d6615cc", "title": "Introducing the CSS Property Type Validator Stylelint Plugin", "url": "https://schalkneethling.com/posts/introducing-the-css-property-type-validator-stylelint-plugin/", "published_at": "2026-05-29T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb9dc80263", "title": "Live Page Content Updates with Supabase Realtime and Web Sockets", "url": "https://schalkneethling.com/posts/live-page-content-updates-with-supabase-realtime-and-web-sockets/", "published_at": "2026-05-28T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb9e1b9613", "title": "Announcing Axe Aggregate Reporter: run, report, view, and share a11y results", "url": "https://schalkneethling.com/posts/announcing-axe-aggregate-reporter-run-report-view-share-playwright-a11y-results/", "published_at": "2026-05-25T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb9e5250b5", "title": "The Security of Ephemeral Pages", "url": "https://schalkneethling.com/posts/the-security-of-ephemeral-pages/", "published_at": "2026-05-15T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fb9f364820", "title": "The day CSS made me learn algebra again, and I liked it", "url": "https://schalkneethling.com/posts/the-day-css-made-me-learn-algebra-and-i-liked-it/", "published_at": "2026-05-12T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fba0272893", "title": "Branded Types in TypeScript: Making the Compiler Care About Meaning", "url": "https://schalkneethling.com/posts/branded-types-in-typescript/", "published_at": "2026-05-10T00:00:00+00:00" }, { "id": "01a087dc-5693-71ea-bad3-57fba10b369b", "title": "Announcing the CSS Property Type Validator Extension for VSCode", "url": "https://schalkneethling.com/posts/announcing-the-css-property-type-validator-vscode-extension/", "published_at": "2026-05-07T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb48025bbb21", "title": "The First Real Autoresearch Run Was Expensive, Messy, and Extremely Useful", "url": "https://schalkneethling.com/posts/the-first-real-autoresearch-run-was-expensive-messy-and-extremely-useful/", "published_at": "2026-05-05T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb48033b8540", "title": "Refined Plan Mode: Reviewing AI Coding Plans Like Pull Requests", "url": "https://schalkneethling.com/posts/refined-plan-mode-reviewing-ai-coding-plans-like-pull-requests/", "published_at": "2026-04-27T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4803f54fb3", "title": "CSS Property Type Validator Is Getting Much Closer to Real-World CSS Workflows", "url": "https://schalkneethling.com/posts/css-property-type-validator-is-getting-much-closer-to-real-world-css-workflows/", "published_at": "2026-04-22T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4804c4e3bf", "title": "Targeting SVG Images with CSS Attribute Selectors and filter: invert()", "url": "https://schalkneethling.com/posts/targeting-svg-images-with-css-attribute-selectors-and-filter-invert/", "published_at": "2026-04-22T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb48052f6cd7", "title": "Building a 3D Climate News Globe with HTML in Canvas and Three.js", "url": "https://schalkneethling.com/posts/building-a-3d-climate-news-globe-with-html-in-canvas-and-three-js/", "published_at": "2026-04-20T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb480575d6b7", "title": "Introducing masonry-gridlanes-wc: A Native-First Masonry Web Component", "url": "https://schalkneethling.com/posts/introducing-masonry-gridlanes-wc-a-native-first-masonry-web-component/", "published_at": "2026-04-14T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb480640475f", "title": "CSS Property Type Validator: Assignment-Site Validation", "url": "https://schalkneethling.com/posts/css-property-type-validator-assignment-site-validation/", "published_at": "2026-04-13T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4806a43e9f", "title": "Pushing to GitHub and Codeberg Simultaneously with Git", "url": "https://schalkneethling.com/posts/pushing-to-github-and-codeberg-simultaneously-with-git/", "published_at": "2026-04-12T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4806e03a7c", "title": "TypeScript 6.0 and CSS Side-Effect Imports: What Changed and How to Fix It", "url": "https://schalkneethling.com/posts/typescript-6-0-and-css-side-effect-imports-what-changed-and-how-to-fix-it/", "published_at": "2026-04-11T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4807654cf1", "title": "Panozoom: The Accidental Web App", "url": "https://schalkneethling.com/posts/panozoom-the-accidental-web-app/", "published_at": "2026-04-10T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb480783f972", "title": "The Process of Shipping The CSS Media Pseudo Classes Polyfill", "url": "https://schalkneethling.com/posts/the-process-of-shipping-the-css-media-pseudo-classes-polyfill/", "published_at": "2026-04-07T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4807cc96bf", "title": "CSS @property Deserves Better Tooling — So I Am Building a Validator", "url": "https://schalkneethling.com/posts/css-property-deserves-better-tooling-so-i-am-building-a-validator/", "published_at": "2026-04-02T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb48084262a5", "title": "Aligning Variable Content Across Columns. It Seems Impossible Until You Discover Subgrid", "url": "https://schalkneethling.com/posts/aligning-variable-content-across-columns-it-seems-impossible-until-you-discover-subgrid/", "published_at": "2026-04-01T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb48091ebf06", "title": "Semantic HTML Just Might Make Your CSS Less Fragile", "url": "https://schalkneethling.com/posts/semantic-html-just-might-make-your-css-less-fragile/", "published_at": "2026-03-30T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4809d9d1cc", "title": "The What And The How: What Building A Polyfill Is Teaching Me About Web Standards", "url": "https://schalkneethling.com/posts/cutting-across-the-what-and-the-how-what-building-a-polyfill-is-teaching-me-about-web-standards/", "published_at": "2026-03-26T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4809de2607", "title": "Comparing Sets in JavaScript With difference() and symmetricDifference()", "url": "https://schalkneethling.com/posts/comparing-sets-in-javascript-with-difference-and-symmetricdifference/", "published_at": "2026-03-23T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb480a810c88", "title": "Timelapse: A PWA - Putting Cursor's Composer 2 To The Test", "url": "https://schalkneethling.com/posts/timelapse-a-pwa-putting-cursors-composer-2-to-the-test/", "published_at": "2026-03-22T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb480b3958ac", "title": "Auto-Improving an Agent Skill: Applying Karpathy's Autoresearch Pattern to Semantic HTML", "url": "https://schalkneethling.com/posts/auto-improving-an-agent-skill-applying-karpathy-s-autoresearch-pattern-to-semantic-html/", "published_at": "2026-03-20T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb480b7cf75f", "title": "Accessible Text Colour with the CSS contrast-color() Function", "url": "https://schalkneethling.com/posts/accessible-text-colour-with-the-css-contrast-color-function/", "published_at": "2026-03-16T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb480c2d5191", "title": "The Prompt is the Product: Writing Effective Prompts for AI Coding Agents", "url": "https://schalkneethling.com/posts/the-prompt-is-the-product-writing-effective-prompts-for-ai-coding-agents/", "published_at": "2026-03-11T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb480cba30df", "title": "Freeze Your Object Constants for Better Type Inference", "url": "https://schalkneethling.com/posts/freeze-your-object-constants-for-better-type-inference/", "published_at": "2026-03-10T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb480d4a9501", "title": "Stop Storing Secrets on Disk — Replace Your .env With Varlock and 1Password", "url": "https://schalkneethling.com/posts/stop-storing-secrets-on-disk-replace-your-env-with-varlock-and-1password/", "published_at": "2026-03-09T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb480e3de701", "title": "Cleaner Temp Directory Cleanup in Node.js With mkdtempDisposable", "url": "https://schalkneethling.com/posts/cleaner-temp-directory-cleanup-in-nodejs-tests-with-mkdtempdisposable/", "published_at": "2026-03-08T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb480e5563ba", "title": "Writing Cross-Platform Hooks for AI Coding Agents", "url": "https://schalkneethling.com/posts/writing-cross-platform-hooks-for-ai-coding-agents/", "published_at": "2026-03-05T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb480f4cbcce", "title": "AI Gave Me Working Code. Questioning It Gave Me Better Code.", "url": "https://schalkneethling.com/posts/ai-gave-me-working-code-questioning-it-gave-me-better-code/", "published_at": "2026-03-03T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481007e97f", "title": "Three Reasons Your scroll-snap Container May Be Overflowing on Mobile", "url": "https://schalkneethling.com/posts/three-reasons-your-scroll-snap-container-may-be-overflowing-on-mobile/", "published_at": "2026-02-27T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb48101e110e", "title": "Git: Recovering When You Branched From the Wrong Branch", "url": "https://schalkneethling.com/posts/git-recovering-when-you-branched-from-the-wrong-branch/", "published_at": "2026-02-26T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4810ca2c80", "title": "CSS Anchor Positioning: Scoping, Implicit Anchors, and Conditional Hiding", "url": "https://schalkneethling.com/posts/css-anchor-positioning-scoping-implicit-anchors-and-conditional-hiding/", "published_at": "2026-02-21T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4811001504", "title": "Mocking Browser Image Loading in Vitest: Property Descriptors, Prototypes, and WeakMap", "url": "https://schalkneethling.com/posts/mocking-browser-image-loading-in-vitest-property-descriptors-prototypes-and-weakmap/", "published_at": "2026-02-20T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481153b90c", "title": "Part 3: Running an AI Agent Implementation Planning Session", "url": "https://schalkneethling.com/posts/part-3-running-an-ai-agent-implementation-planning-session/", "published_at": "2026-02-15T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4811db70e9", "title": "Part 2: Organising Reference Materials for AI Agent Sessions", "url": "https://schalkneethling.com/posts/part-2-organising-reference-materials-for-ai-agent-sessions/", "published_at": "2026-02-14T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4811fc452f", "title": "Part 1: Structuring Feature Specifications for AI Agents", "url": "https://schalkneethling.com/posts/structuring-feature-specifications-for-ai-agents/", "published_at": "2026-02-13T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481220d1c8", "title": "Safely Selecting Elements with Special Characters Using CSS.escape()", "url": "https://schalkneethling.com/posts/safely-selecting-elements-with-special-characters-using-css-escape/", "published_at": "2026-02-10T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4812e925d2", "title": "Dynamically enable and disable map scroll wheel zoom with Leaflet.js", "url": "https://schalkneethling.com/posts/dynamically-enable-and-disable-map-scroll-wheel-zoom-with-leaflet-js/", "published_at": "2026-02-07T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481341deae", "title": "Using TypeScript Triple-Slash Directives with JSDoc", "url": "https://schalkneethling.com/posts/triple-slash-reference-directives-in-jsdoc/", "published_at": "2026-02-05T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4813eac534", "title": "Simplify Command-Line Argument Parsing with Node.js util.parseArgs()", "url": "https://schalkneethling.com/posts/simplify-command-line-argument-parsing-with-nodejs-util-parseargs/", "published_at": "2026-02-04T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb48146c8407", "title": "Fast Mocked Responses in Playwright Getting You Down? Deferred Promises to the Rescue", "url": "https://schalkneethling.com/posts/fast-mocked-responses-in-playwright-getting-you-down-deferred-promises-to-the-rescue/", "published_at": "2026-01-30T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb48148da3db", "title": "Preventing Common Issues When Working with AI-Generated Code", "url": "https://schalkneethling.com/posts/preventing-common-issues-when-working-with-ai-generated-code/", "published_at": "2026-01-28T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4815710425", "title": "Type Safety and Runtime Validation in JavaScript with Zod and JSDoc", "url": "https://schalkneethling.com/posts/type-safety-and-runtime-validation-in-javascript-with-zod-and-jsdoc/", "published_at": "2026-01-26T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb48163d562a", "title": "Exporting Algolia Indices to JSON: Skip the Custom Scripts", "url": "https://schalkneethling.com/posts/exporting-algolia-indices-to-json-skip-the-custom-scripts/", "published_at": "2026-01-23T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4816d85b74", "title": "CSS Anchor Positioning Fallbacks: What to Do When Things Don't Fit", "url": "https://schalkneethling.com/posts/css-anchor-positioning-fallbacks-what-to-do-when-things-dont-fit/", "published_at": "2026-01-22T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4817038fcc", "title": "Code Reviewing AI-Generated JavaScript: What I Found", "url": "https://schalkneethling.com/posts/code-reviewing-ai-generated-javascript-what-i-found/", "published_at": "2026-01-19T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4817be5e69", "title": "Style Details Content with ::details-content", "url": "https://schalkneethling.com/posts/style-details-content-with-details-content/", "published_at": "2026-01-18T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4817f213ce", "title": "What AI Agents Get Wrong About VRT, And How to Fix It", "url": "https://schalkneethling.com/posts/what-ai-agents-get-wrong-about-vrt-and-how-to-fix-it/", "published_at": "2026-01-14T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb48180bbd52", "title": "Precise Positioning with CSS Anchor Functions: anchor(), anchor-center, and anchor-size()", "url": "https://schalkneethling.com/posts/precise-positioning-with-css-anchor-functions-anchor-anchor-center-and-anchor-size/", "published_at": "2026-01-02T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4818260e89", "title": "Getting Started with CSS Anchor Positioning: anchor-name, position-anchor, and position-area", "url": "https://schalkneethling.com/posts/getting-started-with-css-anchor-positioning-anchor-name-position-anchor-and-position-area/", "published_at": "2025-12-31T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481835974e", "title": "Opening and Closing Dialogs Without JavaScript Using HTML Invoker Commands", "url": "https://schalkneethling.com/posts/opening-and-closing-dialogs-without-javascript-using-html-invoker-commands/", "published_at": "2025-12-29T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4818b7c197", "title": "What if...", "url": "https://schalkneethling.com/posts/what-if/", "published_at": "2025-03-16T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4818cc4c8a", "title": "CSS Transforms and the Matrix", "url": "https://schalkneethling.com/posts/css-transforms-and-the-matrix/", "published_at": "2025-02-21T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4818ce6d36", "title": "Building a Profile Page with HTML and CSS: A form, A Dialog, and Netlify", "url": "https://schalkneethling.com/posts/build-a-profile-page-html-css-part6-dialog-form-netlify/", "published_at": "2025-02-17T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481926bfac", "title": "Curiosity, Collaboration, and Innovation At Any Scale", "url": "https://schalkneethling.com/posts/curiosity-collaboration-and-innovation-at-any-scale/", "published_at": "2025-02-13T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481954d16a", "title": "Building a Profile Page with HTML and CSS: Responsive, Favicon, Open Graph", "url": "https://schalkneethling.com/posts/build-a-profile-page-html-css-part5-final-page/", "published_at": "2025-02-07T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb48196a9c62", "title": "What is WCAG? - A Brief Overview", "url": "https://schalkneethling.com/posts/what-is-wcag/", "published_at": "2025-02-06T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481a083363", "title": "The HTML Dialog Element: A Native Solution for Accessible Modal Interactions", "url": "https://schalkneethling.com/posts/html-dialog-native-solution-for-accessible-modal-interactions/", "published_at": "2025-02-04T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481a23a0dc", "title": "My Journey to the International Association of Accessibility Professionals (IAAP) Web Accessibility Specialist (WAS) Certification", "url": "https://schalkneethling.com/posts/the-journey-to-iaap-was/", "published_at": "2025-01-29T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481a2a9d6d", "title": "Building a Profile Page with HTML and CSS: Refactor, Custom Properties, LinkTree", "url": "https://schalkneethling.com/posts/build-a-profile-page-html-css-part4-refactor-linktree/", "published_at": "2025-01-24T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481a4908b0", "title": "Understanding local() in @font-face: A Deep Dive", "url": "https://schalkneethling.com/posts/understanding-local-in-at-font-face-a-deep-dive/", "published_at": "2025-01-22T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481a9d3dd2", "title": "Building a Profile Page with HTML and CSS: Typography And Getting Responsive", "url": "https://schalkneethling.com/posts/build-a-profile-page-html-css-part3-wrap-up/", "published_at": "2025-01-19T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481b967f92", "title": "The Hidden Costs of Creativity in Tech: A Personal Reflection", "url": "https://schalkneethling.com/posts/the-hidden-costs-of-creativity-in-tech-a-personal-reflection/", "published_at": "2025-01-12T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481ba97210", "title": "Building a Profile Page with HTML and CSS: Implementation", "url": "https://schalkneethling.com/posts/build-a-profile-page-html-css-part2-impl/", "published_at": "2025-01-07T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481c187cec", "title": "Building a Profile Page with HTML and CSS: Planning", "url": "https://schalkneethling.com/posts/build-a-profile-page-html-css-planning/", "published_at": "2025-01-03T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481c586c5e", "title": "Introducing Project Calavera: Your Universal Project Configuration Assistant", "url": "https://schalkneethling.com/posts/introducing-project-calavera-your-universal-project-configuration-assistant/", "published_at": "2024-12-30T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481d407309", "title": "Using npm link for Local Package Development", "url": "https://schalkneethling.com/posts/using-npm-link-for-local-package-development/", "published_at": "2024-12-29T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481e0c9620", "title": "Exploring the Role of AI in Self-Reflection and Emotional Growth", "url": "https://schalkneethling.com/posts/exploring-the-role-of-ai-in-self-reflection-and-emotional-growth/", "published_at": "2024-12-28T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481f040dd6", "title": "Announcing Minimalist: A Minimal Modern CSS Library for Most Web Projects", "url": "https://schalkneethling.com/posts/announcing-minimalist-modern-css-library-for-most-web-projects/", "published_at": "2024-12-24T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb481fc4e3b0", "title": "CSS translate, scale, and rotate have a new home and it’s splendid! Come on in.", "url": "https://schalkneethling.com/posts/css-translate-scale-rotate-have-a-new-home/", "published_at": "2024-12-17T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb482013b74e", "title": "Raise The Red Flag Early: The Power of Explicit Return Types in TypeScript", "url": "https://schalkneethling.com/posts/the-benefits-of-typing-function-return-values/", "published_at": "2024-12-10T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4820bb6fd7", "title": "Watched It - The Good, The Bad, and The Web Components - Zach Leatherman", "url": "https://schalkneethling.com/posts/watched-it-the-good-the-bad-web-components/", "published_at": "2024-07-31T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4821a91729", "title": "When Claude does not get your git", "url": "https://schalkneethling.com/posts/when-claude-does-not-get-your-git/", "published_at": "2024-07-08T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb482228e8aa", "title": "What we lose at the gates", "url": "https://schalkneethling.com/posts/what-we-lose-at-the-gates/", "published_at": "2024-04-25T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4822ead926", "title": "How do you use git rebase? Let's go through one use case", "url": "https://schalkneethling.com/posts/how-do-you-use-git-rebase-lets-go-through-one-use-case/", "published_at": "2024-04-23T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb482388d6c2", "title": "10 Top accessibility errors and how to avoid and fix them", "url": "https://schalkneethling.com/posts/10-top-accessibility-errors-and-how-to-avoid-and-fix-them/", "published_at": "2024-04-15T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4823c5d45b", "title": "Number and Currency Formatting in JavaScript using Intl.NumberFormat", "url": "https://schalkneethling.com/posts/number-and-currency-formatting-in-javascript-using-intl-numberformat/", "published_at": "2024-04-04T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb482410f7f2", "title": "21 Pieces Of Unsolicited Advice For Junior Web Developers", "url": "https://schalkneethling.com/posts/21-pieces-of-unsolicited-advice-for-junior-web-developers/", "published_at": "2024-04-03T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb482504a65a", "title": "Why I Care Deeply About Web Accessibility And You Should Too", "url": "https://schalkneethling.com/posts/why-i-care-deeply-about-web-accessibility-and-you-should-too/", "published_at": "2024-03-31T00:00:00+00:00" }, { "id": "01a087dc-5694-7181-956b-fb4825ffe286", "title": "Why Do I Love Open Source?", "url": "https://schalkneethling.com/posts/why-do-i-love-open-source/", "published_at": "2024-03-29T00:00:00+00:00" } ] posts Claim your blog
Back to schalkneethling.com
Blog · corpus.blog/blogs/schalkneethling.com/posts

schalkneethling.com

schalkneethling.com

2026

2025

2024