Mobile CSS Micro-Fixes: One-Liners That Make Web Apps Feel Native
A running collection of CSS one-liners that fix the hundred tiny paper cuts making your mobile web app feel 'off' compared to native apps.
Technical notes, project documentation, and lessons learned across software, DIY, writing, and more.
A running collection of CSS one-liners that fix the hundred tiny paper cuts making your mobile web app feel 'off' compared to native apps.
Android fragmentation is real—different phones have wildly different system chrome. Instead of fighting safe-area calculations...
We started with a hamburger menu. Three months later, we ripped it out. Here's the decision framework that made the choice obvious—and might save you the...
Settings is important but shouldn't steal prime thumb-zone real estate. Put a profile avatar in the header—visible on every page...
M3E's 46-study research was about consumer apps. But what about people wearing work gloves, squinting in sunlight, who need to clock in NOW?
SignalR reconnects automatically—until it doesn't. Here's how to build resilient real-time connections with exponential backoff and HTTP polling fallback...
Leaflet.js is the best mapping library on the web. Blazor speaks C#. Making them talk requires a clean interop boundary—here's the pattern that finally made...
What started as 'the pending count resets to zero' turned into a 7+ hour journey through Blazor component lifecycle, INotifyPropertyChanged...
Your error boundary works in Blazor WASM but crashes in MAUI Hybrid with 'WebViewNavigationManager has not been initialized.' Here's why and how to fix it.
Your Blazor WASM app works locally but shows 404s for .wasm files after deployment. Private browsing doesn't help. Different browsers give different results.
Your Blazor app loads the HTML, shows the spinner, then... nothing. The console shows errors about '/0'.
You started a Blazor WebAssembly app and noticed a mysterious debug URL. Then Chrome wanted special flags.
Your Blazor ErrorBoundary catches the error but blocks the user's escape route. They can't navigate away.
You upgraded to Tailwind v4. Your build runs. Your CSS generates. Half your styles are missing. Welcome to the @source directive gotcha.
Your dynamic class names aren't working. The CSS exists in your code but not in your output. Here's why Tailwind's JIT compiler is ignoring you and how to...
Stop thinking about function pointers. Start thinking about bells and notifications. A restaurant analogy that makes C# events actually make sense.