Notes
A collection of notes, blogposts and TIL (Today I Learned) type of posts. Some long, some not so long.
- Import Props Types from a Svelte 5 Component in JSDoc
- Refreshed neo:lights:out My game neo:lights:out has gotten a little face-lift.
- Define the Theme Color for Safari 26 With theme_color unshipped, what are our options to control the background color of Safari 26 browser UI?
- Style sticky elements when they are stuck It is now possible to detect if a position: sticky element is stuck with CSS.
- Import Types from other modules in JSDoc Forget @typedef for existing types, use @import instead.
- Editing my Astro site with Astro Editor Better editing experience for astro sites
- Run code for incoming emails with Cloudflare Email Workers
2025
- PWA install experience is top-notch (on desktop) …when using Chromium-browsers…on Mac OS.
- Prevent virtual keyboard overlaying content with the Interactive Widget meta tag Control how the layout adapts when the virtual keyboard is shown.
- Talk: Svelte at Geizhals (@ Svelte Vienna) My talk at the Svelte Vienna meetup on 23rd of June 2025
- How to deploy Fusion RSS Reader on Coolify
- Add Forgejo custom Gitlens Remote in VS Code How to link Forgejo web interface to VS Code as a Gitlens remote
- Add Space to MacOS dock Organize MacOS dock with spaces
2024
- Svelte 5 Props @typedef with restProps How to combine restProps with a typed Props object
- Inspired by Good Enough A breath of fresh air in a world of VC-funded website-lookalikes.
- The single most effective Cypress trick to improve accessibility Find and fix accessibility issues while writing Cypress tests.
- Easy screen orientation management with the ScreenOrientation API No more matchMedia to check screen orientation
- Create a bruno collection from an Open API document Using an intermediate Postman collection, we can create a bruno collection based on an Open API document
- Multiple popovers with Popover API use popover=manual to show multiple popovers at a time
- Quickly serve a html document via https
- Automatic resizing of textareas and inputs using CSS field-sizing: content lands in Chrome 123
- Export JSDoc Types from Svelte 4 Components How to export/import JSDoc @typedef definitions in Svelte
- CSS media query to check for JavaScript support Use CSS to conditional styles depending if JavaScript is enabled
2023
- Pitch black darkness and the degradation of end user experience
- Svelte Tricks Collection A collection of tricks and niceties you might find useful when working with Svelte.
- Form with multiple submit buttons How to handle HTML Forms with multiple submits
- Editing Database in VS Code via SQLTools Plugin Stay in the editor while working on your database.
- CSS Background Position Offsets Improved positioning of CSS background images
- Submit forms in dialogs using method=dialog
- npm: only install production dependencies Faster npm ci installs
2022
- Sort strings/numbers while respecting special characters using localeCompare
- <template> element ... for dynamic content
2021
- Cypress Testing Library Custom Error Message How to reduce logging noise when using Cypress Testing Library
- Group all DOM elements by font-size Debug the distribution of font-size of DOM elements on the page
- Mock navigator.share For testing in non-secure environments
- Import and Export a JS Module in one line export { namedImport } from './path/to/module';
- Was the page navigated to using back or forward button? using PerformanceNavigationTiming.type
2020
- Detect if the tab is hidden or visible using document.hidden
- Make an element stick to top and bottom! Useful CSS to make an element stick to the top and bottom of a scroll container!
2019
- Trigger download of remote images with Next.js When the `download` attribute on an HTML anchor is not enough. Also: how to zip on the fly with Next.js API routes.
- How to add a Leaflet map to a Gatsby site Let's fix `window is not defined`