← Home About Archive Photos Replies Also on Micro.blog
  • I knew trimming a bunch of dead code from Little CRM would be a lot, but not 22K+ 😬😵‍💫

    A Github diff summary, showing 599 changed files with 2,594 additions and 22,874 deletions
    → 12:53 PM, Nov 29
  • New open-source PR, this time for Noticed + keyword mailers! github.com/excid3/no…

    → 5:12 PM, Oct 21
  • Shoutouts to the Datadog team for making it remarkably easy to write + submit an integration. Hopefully this will get merged in soon!

    github.com/DataDog/d…

    → 6:52 AM, Oct 14
  • Quick notes: Lies, Damn Lies, and Chrome's Lighthouse tab

    This is a super quick post, as I’m mired in a few projects. But! The web is a living document, and I want to get these thoughts out there; I can always update this later.

    I’ve spent a fair bit of time over the past 3 weeks trying to chase down how to get a good Lighthouse performance score, particularly as I refine Little CRM and hone in my Web Awesome usage. Lighthouse was constantly dropping the score to the ~80s, leading me to:

    • Build a whole static site in 11ty that was just the markup + asset compilation
    • Figure out a Caddy setup that would give me HTTP/2 with full compression locally
    • Burn even more time after that spamming the “analyze page” button.

    Ultimately, the lessons I’ve learned are:

    • The Lighthouse tab is finicky; particularly the Cumulative Layout Shift. The other stuff it checks is good, though!
    • What Lighthouse reports for Simulated Throttling might not actually reflect real-world loading. Switch to DevTools throttling to check those results as well
    • For layout shifting and overall loading details, check the “Performance” tab, it’s much more insightful.
    • Make sure to throttle CPU & Network to get reasonable information when testing locally
    • Building a good Web Awesome bundle (or really, any framework-layer bundle) is really important for first load performance. a Cloak can work, but for slow network connections it can make things unnecessarily worse. General rule for building the Web Awesome bundle: page, callout, card, icon, avatar, divider, tab-group. Then, pick the things you really really want to be available ASAP. But everything else (eg: tooltips) should be autoloaded
    • Break up your applicaton bundles from your framework bundles. Combined with preload directives on Font Awesome’s CDN, that improves caching and load performance thanks to HTTP/2.
    • Most importantly: with a slow network connection, there is always going to be some rearranging until SSR gets to be stable. So, aim for getting content on the page for users ASAP. They already know they’re on a bad network
    → 4:44 PM, Oct 8
  • The work that Marco Roth is doing on the view layer for Ruby is so exciting. We’re running the newly-announced ReActionView in Little CRM; which already fixed a variety of syntax errors in our markup 😅

    → 4:40 PM, Sep 5
  • To quote @kaspth.bsky.social: “LGTM”

    A pull request that has over 9,000 lines added, and over 25,000 lines deleted
    → 2:55 PM, Aug 1
  • With Web Awesome moving towards its release date; I’m finally starting to get a proper design for our apps. The theming is still WIP, but the components are much more cohesive

    → 9:33 AM, Jun 29
  • If you’re gonna be at RailsConf, I’m hosting an unofficial hang before the conference kicks off! lu.ma/railshang…

    → 12:26 PM, Jun 23
  • A quick little update, showing off one of the best tools I’m currently paying for: Kaleidoscope. It’s saved me hours of time tackling merge conflicts, diffing results; and I’m finding new & exciting ways to use it. In this case: applying framework upgrades from one app into another!

    → 8:58 AM, Jun 20
  • The Practical Framework 3.0 (alpha 1)

    These have been a long time in the making; and they’re barely the initial alphas, but the Practical Framework is officially open-sourced.

    They’re 3.0 releases because they’ve gone through 2 internal revisions. Next up is:

    • Updating existing apps to use 3.0
    • Refinements from there
    • Tons of documentation, because the framework takes a very different approach than others on the market

    If you’re curious:

    • The Ruby repo
    • The JS repo
    → 8:18 PM, Jun 2
  • A great read: animationobsessive.substack.com/p/rejecti…

    → 4:19 PM, May 20
  • After 3+ years of work and refining in private repos, I’ve finally published an open-source implementation for client-side error handling that should work for 99% of cases! github.com/practical…

    → 3:51 PM, Apr 23
  • This is still one of the best guides & approaches for progressively enhanced form errors. I’ve been running a version of it for 2 years; and will be open-sourcing that library in the next few weeks

    cloudfour.com/thinks/pr…

    → 11:44 AM, Apr 18
  • Overhauling an existing app's view layer without halting development

    After months of research and development, a new guide about how to build maintainable view layers in Rails (and overhaul an existing UI without stopping feature development) is live.

    thomascannon.me/guides/th…

    This is the largest thing I’ve ever seriously published, clocking in at about 8.2K words, with an open-source snapshot to boot

    After a short break, I’m going to extract the framework-level code into libraries, then start the process of migrating Little CRM 💪

    → 8:10 AM, Apr 8
  • Rails View Layers in 2025

    I’m currently in the middle of re-tackling the view layer for Practical Computer. Now that there are 2 apps + a framework, the complexity is high enough to actually tackle the problem comprehensively

    So, from my view of the Rails View Layer landscape, you have the following paths:

    • continue as-is, as we have for 15 years
    • get partway there with ViewComponent, having to make concessions & hacks. This is a glaring flaw; table-stakes: viewcomponent.org/known_iss…
    • go with Phlex all-in, acting as a clean-room replacement. Basically; nothing aside from Form Builders & explicit helper uses, no ERB files
    • roll something on your own, like Garett proposes in some of his musings: garrettdimon.com/journal/p…

    Am I correct here? Am I missing something?

    → 9:16 AM, Mar 22
  • Sneak peek of a new feature that’s coming soon to Little CRM

    An iOS Lock Screen, with a push notification from Little CRM that says “What’s happened this week?” A dog with a bandana that says “chaotic bisexual” is in the background
    → 10:30 AM, Mar 9
  • Having fun with error messages once again

    A screenshot from a component preview, notably with the following error text when 4 days a week are chosen: "You picked too many days a week; please pick 3 or less. We arenʼt Duolingo here; I donʼt want to nag you every day—no one wants that."
    → 7:57 PM, Mar 5
  • I’m starting to add notifications, reminders, followups, prompts to Little CRM. Let me know your thoughts and what you’d find valuable (and more importantly, what you’d find annoying!)

    Now that I’m in the phase of my hiatus where I’m figuring out the balance of app work + music, updates are back on the menu! 💪

    → 6:45 PM, Feb 20
  • New tool: Mustachio Extism Plugin

    A new mini-tool from the Practical Computer labs: an Extism plugin to process Mustachio templates: github.com/practical…

    Overall, I’m impressed with how Extism is structured. Being able to use WASM to deal with a thorny issue (running Mustachio’s official C# library in a Ruby codebase) with a small, cross-platform binary that can be embedded into the repo itself, dramatically simplifies the problem at hand.

    The goal is to hand this off to Postmark directly, since this gives their entire ecosystem a huge boost in usability.

    → 12:31 PM, Jan 16
  • RSS
  • JSON Feed
  • Micro.blog