Good Enough

Home Lab Blog Contact

  • 2026
  • Jan 12 Introducing Letterbird 2.0
  • Jan 9 How We Configure Our Rails Local CI
  • 2025
  • Nov 24 Good Enough Is Reorganizing
  • Nov 2 We’re Shutting Down Yay.Boo and Ponder
  • Oct 13 TIL: Rails, CloundFront CDN, and imgproxy
  • Apr 29 Prettier Email Headers
  • Apr 27 How LRUG uses Jelly to remove confusion and simplify organisation
  • Apr 23 You Need Customers to Succeed in Small Business
  • Apr 21 James is Good Enough
  • Apr 14 Barry is Good Enough
  • Jan 16 There’s no “A” or “I” in “Jelly”
  • Jan 15 TIL: Tiptap Excerpt Extension with Rails
  • 2024
  • Dec 3 You Complete Me
  • Nov 12 Jelly was #1 on Hacker News
  • Nov 11 TIL: Fixing Broken Social Share Images in Twitter/X
  • Sep 8 TIL: Overriding Permalink Generation in FriendlyId
  • Jul 10 Say hello to Jelly: the simplest way to jam on email as a team
  • May 15 TIL: Fixing Broken Action Text Images in Atom Feeds
  • Apr 17 Grassroots
  • Feb 29 Let’s talk about conversations
  • Feb 22 TIL: Easily Support Gravatars in Rails
  • Feb 12 How We Built Unique Social Preview Images for Pika
  • Jan 30 Pika: Start Your Happy Blog
  • 2023
  • Nov 14 TIL: Listen for JavaScript events only once!
  • Nov 12 Why We’re Writing Blog Software
  • Nov 2 Lettini is Good Enough
  • Oct 17 Good Enough Marketing: The Preparation
  • Oct 16 Adding Social Preview Images To Our 11ty Blog
  • Sep 27 How We Made A Good Enough Zine
  • Sep 26 TIL: Tapback Keyboard Shortcuts
  • Sep 25 TIL: Use touch-action: manipulation; to avoid double-tap-to-zoom
  • Aug 30 Thoughts On Thoughts
  • Aug 22 Bad Ideas Are Fun
  • Aug 17 The Space Between Us
  • Aug 14 Having Trouble Getting Started? Pair Up!
  • Aug 10 Fixing Things
  • Aug 7 TIL: Rails has_one Nested Attributes Tweaking
  • Aug 3 TIL: System Colors are supported in CSS, but they’re unreliable
  • Aug 2 TIL: Turbo Stream and personalised content
  • Jul 31 TIL: Blocking Password App Autocomplete on Form Fields
  • Jul 31 Yes, Facebook Is Terrible, but Also…
  • Jul 13 TIL: Managing Raspberry Pi software with a bit less pain
  • Jul 5 Cool Songs Don’t Die
  • Jun 29 How We Built Quack (Beta)
  • Jun 28 Why We Built Quack (Beta)
  • Jun 21 That time Marvel secretly endorsed my podcast with “the greatest comic book cover of all time”
  • Jun 20 Our Favorite Video Games Right Now
  • Jun 19 Cosmic Maelstrom
  • Jun 15 TIL: Don’t forget your Web Manifest file
  • Jun 15 Cool URLs Don’t Die
  • Jun 4 TIL: Deploying a Sinatra app to Render.com
  • May 31 My Tears of the Kingdom Addiction
  • May 31 Beware of Free Software
  • May 30 TIL: Turbo Stream broadcasting needs default_url_options to be set
  • May 25 The Element of Surprise
  • May 16 Strong Prototypes, Weakly Held
  • May 11 Our ChatGPT Mission Statement
  • Apr 24 Actual Customer Support Is Remarkable
  • Apr 3 PEOs are Good Enough (for us)
  • Mar 14 TIL: Use randomness to prevent email trimming
  • Mar 14 Asking the Right Question
  • Feb 28 Good Enough, A Serious Business
  • Feb 22 TIL: Merge nested attributes in Rails permit params
  • Feb 14 TIL: JavaScript Turbo Stream Requests
  • Feb 9 All About CSS: Alphabetize, Normalize, and Dark-mode-itize
  • Feb 7 TIL: Rails Testing
  • Feb 6 TIL: Victory Symbol
  • Feb 6 TIL: Turbo Frames

Subscribe via RSS

  • Bluesky

  • Mastodon

  • Newsletter

  • Policies

  • Status

© 2026 We Are Good Enough LLC


PIKA