Andrew Timberlake @andrewtimberlake.com · 22/09/2025The last jump was from 3m to 1y. Showing up every day for a year is a huge commitment. This app did almost nothing to help me celebrate the success and then I immediately felt like the next 365d were going to be a slog. I’ve stopped. Not because of the app, but it didn’t help. 010
Andrew Timberlake @andrewtimberlake.com · 17/09/2025Reddit is not a terrible place to do business. Good marketing is offering a solution to a problem people have when they need it. When you do that, you can see good results anywhere. 000
Andrew Timberlake @andrewtimberlake.com · 08/09/2025The difference between girls and boys Mom to the girls, “help yourself to vegetables”. The boys get theirs dished. 000
Andrew Timberlake @andrewtimberlake.com · 03/09/2025Been digging through logs and picking up interesting bugs. Watching customers work with your software is a great source of learning. Error logs is another one. 000
Andrew Timberlake @andrewtimberlake.com · 01/09/2025So true “It’s tempting to fear AI slop, because it’s here and it’s going to get worse. But there’s human slop all over the internet, and it’s getting worse as well.” seths.blog/2025/09/wal...seths.blogWalk away or danceAI and LLMs pose a particularly visceral threat to the typing class. Writers, editors, poets, freelancers, marketing copywriters and others are voicing reasonable (and unreasonable) objections to t… 010
Andrew Timberlake @andrewtimberlake.com · 01/09/2025If you want to bleed money, leave a few snapshots on AWS EC2 that you don’t need 000
Andrew Timberlake @andrewtimberlake.com · 28/08/2025There’s nothing quite as frustrating as a test that fails when running the whole suite but passes on its own. 020
Andrew Timberlake @andrewtimberlake.com · 27/08/2025Added configurable spam blocking to Mailcast.io You can now set the score at which to block spam. And you can see what’s being blocked in the logs so you always know what’s happening with every email. 000
Andrew Timberlake @andrewtimberlake.com · 27/08/2025I hate it when I know I’ve definitely solved this problem before, but cannot remember in which project 🤦♂️ 010
Andrew Timberlake @andrewtimberlake.com · 27/08/2025Sometimes you only want validation to be applied if some condition is met. In one of my projects the first workflow step always runs immediately (0 days) and the rest have to be at least 1 day apart (>= 1 day), so I only wanted validation from the second step. #MyElixirStatus 050
Andrew Timberlake @andrewtimberlake.com · 26/08/2025My favourite email reply. Personal reply always. No AI automation 000
Andrew Timberlake @andrewtimberlake.com · 25/08/2025I had an hour and a half video chat with a customer who only bought a $2/m plan on Mailcast, but it was worth it. I watched them struggle. I identified where I had to point out things that I thought were obvious. Today I’m changing a bunch of UI based on that learning. 010
Andrew Timberlake @andrewtimberlake.com · 23/08/2025Nice. That was my first approach, but it didn’t work in a popup menu, because swapping the buttons meant focus was lost causing the menu to close 010
Andrew Timberlake @andrewtimberlake.com · 22/08/2025Confirmable button in #Phoenix #LiveView #ElixirLang Also my first colocated hook which makes sharing something like this super easy. 3241
Andrew Timberlake @andrewtimberlake.com · 08/08/2025Thankfully LiveView now does change tracking on comprehensions from 1.1 000
Andrew Timberlake @andrewtimberlake.com · 08/08/2025Just overhauled Mailcast’s test suite. Lot’s of global state in GenServers. Every test is now async: true and it’s ended up more reliable and twice as fast #MyElixirStatus #ElixirLang 030
Andrew Timberlake @andrewtimberlake.com · 04/08/2025You know you’re in “the zone” when you take a sip of cold coffee 010
Andrew Timberlake @andrewtimberlake.com · 24/06/2025TIL #ElixirLang #MyElixirStatus from: burakaymakci.com/why-did-the... 010
Andrew Timberlake @andrewtimberlake.com · 23/05/2025Abusing LiveView to have events that update data but don’t re-render and abusing LiveComponents to get change tracking on comprehensions #MyElixirStatus #ElixirLang 120
Andrew Timberlake @andrewtimberlake.com · 23/04/2025My very almost six year old to me this morning, “Dad, have you already bought my presents, or do you need to go shopping today?” 010
Andrew Timberlake @andrewtimberlake.com · 17/04/2025Scopes in Phoenix make it much easier to add user specific, global UI elements (like an unread count) #ElixirLang #phoenix 040
Andrew Timberlake @andrewtimberlake.com · 17/04/2025Ah, that one commit that calms everything down 🍬 030
Andrew Timberlake @andrewtimberlake.com · 10/04/2025When you ask for a change to a form and you get an entirely new form layout #VibeCoding 010
Andrew Timberlake @andrewtimberlake.com · 10/04/2025It’s always the assumptions that get you. Don’t assume. Test 010
Reposted by Andrew TimberlakeElixir Radar @elixir-radar.com · 09/04/2025Elixir Radar issue 466 is out! 📣 You can read it here: buff.ly/VkZOk5G This issue comes with content from @gperales.bsky.social @andrewtimberlake.com @lawik.bsky.social @mitchellhanberg.com , Mike Hostetler and Chris McCord. Thank you! #ElixirLang #MyElixirStatusbuff.lyElixir Radar 466 064
Andrew Timberlake @andrewtimberlake.com · 09/04/2025I published an updated blog post on how to use Font Awesome (or any other SVG based icon library) with Phoenix and Tailwind 4 #ElixirLang #Phoenix andrewtimberlake.com/blog/2025/0...andrewtimberlake.comUse Font Awesome icons in Phoenix with Tailwind 4With a few small changes, you can change Phoenix to use Font Awesome or any similar icon library. 1133
Andrew Timberlake @andrewtimberlake.com · 08/04/2025Upward doing live upgrades in action Give it a try at upward.andrewtimberlake.com #ElixirLang #Phoenix #LiveView 1173
Andrew Timberlake @andrewtimberlake.com · 08/04/2025I love how José manages Elixir. He makes you feel great when you contribute, even for small, seemingly insignificant updates. 1334
Andrew Timberlake @andrewtimberlake.com · 07/04/2025Runtime config doesn’t play nice with hot code upgrades. But, I think I have a solution in upward. #ElixirLang 030
Andrew Timberlake @andrewtimberlake.com · 27/03/2025The problem with treating AI like a junior programer is that it’s not going to remember what I “taught” it tomorrow 🤦♂️ 010
Andrew Timberlake @andrewtimberlake.com · 27/03/2025New greenfield project. Don’t even know what to name it yet. Working with Phoenix 1.8.0-dev, Tailwindcss 4, and gonna give DaisyUI a try at least for the initial prototype #ElixirLang 040
Andrew Timberlake @andrewtimberlake.com · 27/03/2025There is often a very simple solution. Sometimes it just takes time for it to surface 000
Andrew Timberlake @andrewtimberlake.com · 27/03/2025Add multiple hooks to an element with Phoenix LiveView I needed to add functionality to an element with an existing hook. I could add concerns to that hook or add a new hook (not possible). Now I have a single hook that delegates to two. #elixirlang andrewtimberlake.com/blog/2025/03...andrewtimberlake.comMultiple hooks per element in Phoenix LiveViewPhoenix LiveView only supports one hook per element. This article shows how to delegate out to other hooks. 092
Andrew Timberlake @andrewtimberlake.com · 27/03/2025That is an overly specific form field. A select list is also an interesting choice of input. How many options does it have? Would Jacob be able to complete the form? 130
Andrew Timberlake @andrewtimberlake.com · 26/03/2025I just rolled back through three patch releases x.y.9 back to x.y.6 on a project and it was seamless. It will always depend on what changes within those releases though. My initial objective is to deal with small changes which is why Upward will only build an appup for a patch release for now. 000
Andrew Timberlake @andrewtimberlake.com · 26/03/2025I hadn’t heard of Bootleg. I used to use distillery before Elixir releases and that’s what inspired this. Bootleg looks like it still uses distillery which is no longer maintained. I actually took the automatic Appup generation from distillery. 000
Andrew Timberlake @andrewtimberlake.com · 26/03/2025I don’t think Bluesky can figure out what “this” is. I keep asking it to “show less like this” but my feed is still full of American politics 000
Andrew Timberlake @andrewtimberlake.com · 26/03/2025CSS reload is actually just about replacing the CSS file in the browser. I lean on the existing static tracking already in LiveView I’m deploying to a VPS using my own shell script 110
Andrew Timberlake @andrewtimberlake.com · 25/03/2025It’s standard Erlang hot upgrades. The channel won’t bounce and can be upgraded (since LV 1.0.6) if you don’t change your assigns or are careful about changes. I’m even playing with hot updates of the generated CSS, like if you add a Tailwind class that wasn’t in your CSS 240
Andrew Timberlake @andrewtimberlake.com · 25/03/2025Yup, I run one project that is call-centre software where they run the app all day, and any deploy until now has had a reconnect banner. Deploy -> support requests go through the roof because they see the banner. 020
Andrew Timberlake @andrewtimberlake.com · 25/03/2025WIP github.com/andrewtimber...github.comGitHub - andrewtimberlake/upward: A library to assist with hot-code upgrade in Elixir releasesA library to assist with hot-code upgrade in Elixir releases - andrewtimberlake/upward 130
Andrew Timberlake @andrewtimberlake.com · 25/03/2025Hot code upgrades working for Phoenix LiveView app Quick updates without WebSocket reconnect #ElixirLang #Phoenix #LiveView 6333