41554 blogs · [ { "id": "01a08794-92fe-721c-bb18-aa02bc288cf1", "title": "with_options is some nice syntax sugar in Rails", "url": "https://keithschacht.com/2026/Mar/11/with_options-is-some-nice-syntax-sugar-in-rails/#atom-everything", "published_at": "2026-03-11T01:14:25+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d5934bbb3239", "title": "Oat is a Minimal UI library", "url": "https://keithschacht.com/2026/Feb/20/minimal-ui-library/#atom-everything", "published_at": "2026-02-20T13:24:33+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d5934c10b2f4", "title": "Remember Clippy: Screen-aware voice AI in the browser", "url": "https://keithschacht.com/2026/Feb/12/remember-clippy-screen-aware-voice-ai-in-the-browser/#atom-everything", "published_at": "2026-02-12T21:31:05+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d5934c113416", "title": "Task Master: Voice-first todo list that updates live as you talk", "url": "https://keithschacht.com/2025/Dec/27/voice-first-todo-list-that-updates-live-as-you-talk/#atom-everything", "published_at": "2025-12-27T15:34:46+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d5934cebf35b", "title": "Tests within a ruby's class", "url": "https://keithschacht.com/2025/Dec/8/tests-within-a-rubys-class/#atom-everything", "published_at": "2025-12-08T14:02:38+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d5934d315af7", "title": "Check for test coverage", "url": "https://keithschacht.com/2025/Dec/8/check-for-test-coverage/#atom-everything", "published_at": "2025-12-08T14:01:46+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d5934d627684", "title": "Modern CSS techniques", "url": "https://keithschacht.com/2025/Dec/6/modern-css-techniques/#atom-everything", "published_at": "2025-12-06T22:07:12+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d5934e4f743c", "title": "Useful patterns in Fizzy", "url": "https://keithschacht.com/2025/Dec/6/useful-patterns-in-fizzy/#atom-everything", "published_at": "2025-12-06T22:00:43+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d5934ee393d8", "title": "Rails Notes", "url": "https://keithschacht.com/2025/Jul/3/rails-notes/#atom-everything", "published_at": "2025-07-03T14:39:25+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d5934f5c1d14", "title": "Methods on associations", "url": "https://keithschacht.com/2025/Jul/3/methods-on-associations/#atom-everything", "published_at": "2025-07-03T14:35:43+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d5934fcfd50d", "title": "SuperClaude [on Rails]", "url": "https://keithschacht.com/2025/Jul/3/superclaude-on-rails/#atom-everything", "published_at": "2025-07-03T14:30:46+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d5934ff3e437", "title": "Async meetings", "url": "https://keithschacht.com/2025/Jun/14/async-meetings/#atom-everything", "published_at": "2025-06-14T19:02:13+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d59350b87a35", "title": "Setting up Android phone to work with Apple Watch and iMessage", "url": "https://keithschacht.com/2025/Jun/11/setting-up-android-phone-to-work-with-apple-watch-and-imessage/#atom-everything", "published_at": "2025-06-11T16:53:36+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d59350e8c3b8", "title": "Web Components Tutorial", "url": "https://keithschacht.com/2025/May/17/web-components-tutorial/#atom-everything", "published_at": "2025-05-17T20:23:22+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d59351890ccb", "title": "with_defaults is a better named alias", "url": "https://keithschacht.com/2025/Apr/28/with_defaults-is-a-better-named-alias/#atom-everything", "published_at": "2025-04-28T15:36:38+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d5935260a71d", "title": "Bundler can be configured to auto install", "url": "https://keithschacht.com/2025/Apr/28/bundler-can-be-configured-to-auto-install/#atom-everything", "published_at": "2025-04-28T15:35:23+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d59352c36f11", "title": "React in Rails is gaining momentum with Inertia", "url": "https://keithschacht.com/2025/Apr/14/react-in-rails-is-gaining-momentum-with-inertia/#atom-everything", "published_at": "2025-04-14T23:44:45+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d59352f3c5ab", "title": "Query optimization in rails", "url": "https://keithschacht.com/2025/Apr/14/query-optimization-in-rails/#atom-everything", "published_at": "2025-04-14T23:06:49+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d59353980d9b", "title": "A clever CSS-only hack for blurry placeholder images", "url": "https://keithschacht.com/2025/Apr/6/a-clever-css-only-hack-for-blurry-placeholder-images/#atom-everything", "published_at": "2025-04-06T22:18:45+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d5935438d1a2", "title": "How to import any JS library without a build system", "url": "https://keithschacht.com/2025/Mar/31/how-to-import-any-js-library-without-a-build-system/#atom-everything", "published_at": "2025-03-31T20:12:27+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d59355010d8c", "title": "Updating a rails view component with hotwire", "url": "https://keithschacht.com/2025/Mar/4/updating-a-rails-view-component-with-hotwire/#atom-everything", "published_at": "2025-03-04T14:39:20+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d593553d90f8", "title": "Ruby's clamp method reduces conditionals", "url": "https://keithschacht.com/2025/Feb/24/rubys-clamp-method-reduces-conditionals/#atom-everything", "published_at": "2025-02-24T15:19:46+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d5935554574b", "title": "Regex within string square brackets", "url": "https://keithschacht.com/2025/Feb/24/regex-within-string-square-brackets/#atom-everything", "published_at": "2025-02-24T15:16:30+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d593559706cf", "title": "Elegant solution to versioning an API", "url": "https://keithschacht.com/2025/Feb/24/elegant-solution-to-versioning-an-api/#atom-everything", "published_at": "2025-02-24T15:13:14+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d59355f8c3ef", "title": "A programmable wireless eink display", "url": "https://keithschacht.com/2025/Feb/24/a-programmable-wireless-eink-display/#atom-everything", "published_at": "2025-02-24T15:00:32+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d59356a0fa14", "title": "Dynamic routing to a controller's action", "url": "https://keithschacht.com/2025/Feb/24/dynamic-routing-to-a-controllers-action/#atom-everything", "published_at": "2025-02-24T14:49:37+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d59357725581", "title": "Quoting Dario’s interview with Lex Friedman", "url": "https://keithschacht.com/2025/Feb/9/dario-on-agi/#atom-everything", "published_at": "2025-02-09T22:34:27+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d593581df058", "title": "Campsite Rails codebase", "url": "https://keithschacht.com/2025/Jan/20/campsite-rails-codebase/#atom-everything", "published_at": "2025-01-20T22:38:01+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d593589de2c1", "title": "Avo - Rails Admin", "url": "https://keithschacht.com/2025/Jan/20/avo-rails-admin/#atom-everything", "published_at": "2025-01-20T22:36:05+00:00" }, { "id": "01a08794-92ff-7074-a3eb-d593590387e5", "title": "YouTube: Death Spiral of Army Ants", "url": "https://keithschacht.com/2025/Jan/7/youtube-death-spiral-of-army-ants/#atom-everything", "published_at": "2025-01-07T19:15:54+00:00" } ] posts Claim your blog
Back to keithschacht.com
Blog · corpus.blog/blogs/keithschacht.com/posts

keithschacht.com

keithschacht.com

2026

2025