3 liens privés
If you’re running a Phoenix LiveView application and your iOS Safari users are experiencing frozen pages, slow reconnects, or 10+ second hangs after returning from sleep this article is for you.
I’ve been running a production Phoenix LiveView application. The app worked great on desktop, but iPhone users kept reporting the same thing: the page would freeze or hang for several seconds after switching back from another app or unlocking their phone. Sometimes the page would never recover at all.
Here’s what was actually happening and how I fixed it.
Tidewave
Tidewave is the coding agent for full-stack web app development, deeply integrated with Phoenix, from the database to the UI. See our website for more information.
Phoenix LiveView Calendar with Drag-and-Drop
When you're selling stuff, every click away from your website is a potential lost sale. Customers kept asking us to allow people to buy tickets without leaving their branded site. They loved the service, but wanted to retain brand presence and coherence.
The ask seemed simple enough. Drop a widget on any webpage, show some events, let people check out. But as we dug into it, the technical challenges started stacking up. How do you maintain cart state across page refreshes? How do you track marketing attribution when the purchase happens on someone else's domain? And how do you process payments securely in what is essentially a third party context?
This is the quick post of how we tried a bunch of approaches, hit walls, and eventually landed on Phoenix Channels as our solution.
Asynchronous Tasks and Streaming UIs in Phoenix Liveview
The Top 3 LiveView Form Mistakes (And How to Fix Them)
John Curran •
November 07, 2025
I’ve been writing LiveView since 2020. In that time, I’ve seen the same three form mistakes at multiple companies. Here’s what they are and how to fix them.
-
Slow, laggy forms with scattered logic because form state gets stored in socket assigns and server round-trips get used for dynamic UI (conditional inputs, toggles), instead of keeping that state in hidden form inputs where it belongs.
-
Brittle system where UI and database can’t evolve independently because database schemas get used directly for forms, coupling persistence logic to presentation.
-
Users stuck with valid data but can’t submit because changesets get manually manipulated with Map.put or Map.merge instead of Ecto.Changeset functions, leaving stale errors behind.
The common thread: don’t fight the framework. Keep form state on the client, create embedded schemas for your forms, and use Ecto.Changeset functions to modify changesets.
Introduction
So you want to deploy your Phoenix app. You head to the docs, and in typical Elixir fashion you find a number of thorough and well-written guides. Unfortunately, they're all guides for deploying to cloud PaaS platforms. Well, there is a Releases guide, but it only teaches you how to build a release. Not how to deploy it!
But what if you want to deploy to an actual server? Maybe you want to avoid vendor lock-in, or maybe you just want to manage your own system. You know, like the good old days. This is an opinionated guide for deploying an Elixir/Phoenix app to an actual server. VPS, bare metal - it doesn't matter. Just a server.
Nothing here is novel, but there aren't really any guides that spell it out.
I am going to spell it out.
Generate API Documentation Effortlessly from your Phoenix/Elixir code – Part1