Free In-Depth Course on Phoenix LiveView

“LiveView brings the heat without any of the burn,” is such an excellent quote.

Thanks, glad you’re enjoying it! I appreciate your continued interest in the course.

I’m aiming to release a new video every couple weeks or so at a sustainable pace. Some examples are more involved than others. Also, each video includes notes and exercises which add to the effort.

Basically, I’m just trying to do my best work on each example and as they’re done I’ll release them. :slight_smile:


Thanks! It was fun coming up with that line.

1 Like

Great, thank you. I just bought your other Elixir course partially to thank for this free one :+1:


Thank you! That’s very thoughtful. We appreciate the support. I hope you enjoy the Elixir course. :grinning:

1 Like

This course is really well done. Just watched video 16 (real-time updates) and it cleared so much up for me. Thanks!

I’m not really liking this approach, because you just made your liveview responsible for the validation knowledge. I would move it out to a separated module.

defmodule PorchLight do

  def up(brightness) do
    # your case statement. Or multiple up functions with pattern match.
    # returns updated brightness


In the LiveView you just have:

def handle_event("up", _unsigned_params, socket) do
   {:noreply, update(socket, :brightness, &PorchLight.up/1)}

You can also make the PorchLight a struct with more complex structure. Anyway, the point is that now you can use this module anywhere, regardless if you are rendring with LiveView, just HTML, JSON or whatever. It can also be tested better in isolation because the function is pure.


In general, I agree that it’s better to put the porch light behavior in a separate module independent of LiveView. However, since this is the very first example in the course, we wanted to keep it really simple and focused in one file without any indirection.

You’ll find that in subsequent videos we’re careful to extract this type of logic into separate modules. And as we get into using Ecto, we rely heavily on Phoenix context modules as a boundary layer.

Oh, I didn’t mean it as a critique of the course. To teach LiveView it is a perfect implementation. I’m a big fan actually, currently on lesson 11. Huge thanks! :heart:

My comment was only in context of how to improve the particular code snippet.

Thank you for those LiveView video tutorials. Those are truly amazing.

One remark: one thing lacking are the dates of the release of each video. Because I can’t know at which pace those are released (i.e. I don’t even know when was the last video released, which makes it hard to take a guess on the next video release).

Thanks for your kind words!

You make a good point. We released the first 7 videos in late April, and then generally released a new video every couple weeks. But you would only know that if you were on the mailing list where we sent updates. So going forward I’ll be mindful to give better indications on the course page.

Thanks for the feedback!



I noticed something weird in page_live.ex.

In the handle_event for “suggest”, there is the following return line:

{:noreply, assign(socket, results: search(query), query: query)}

But I can even type “hello” for :query, like so:

{:noreply, assign(socket, results: search(query), query: "hello")}

And the input field won’t change its text even though its value should come from assigns :query:

<input type="text" name="q" value="<%= @query %>" placeholder="Live dependency search" list="results" autocomplete="off"/>

I could not find a way to programmatically change the input field’s text.

There’s something I miss there…

Print screen:

This is the value of @query: "<%= @query %>"<br>
<input type="text" name="q" value="<%= @query %>" placeholder="Live dependency search" list="results" autocomplete="off"/>


EDIT: not being able to edit while the text input has focus seems normal:

For any given input with focus, LiveView will never overwrite the input’s current value, even if it deviates from the server’s rendered updates.

I actually wonder then if we really need that state :query, I don’t see what it’s for.

The page_live.ex file and its corresponding template file are generated by the generator when you use the --live option. It’s not something we wrote in the course, so I’m not very familiar with it. I see your point. Not sure exactly why it was implemented that way.

:rocket: Today we opened early access to the Pro Package of our Phoenix LiveView course! So now you can get the course in two flavors…

The Starter Package

Wondering what LiveView is all about? Want to cut through the hype and see real-life examples of what it can do?

The Starter Package is where you should, well, start! We’re offering it as a 100% free community resource with no strings attached. It’s our gift to the community.

You get 18 videos and 25 exercises showing you exactly how to start using LiveView to build rich, real-time user experiences with server-rendered HTML.

The Pro Package

Curious what other problems LiveView can help you solve? Considering using it on your project?

The Pro Package picks up where the Starter Package leaves off and gives you more LiveView examples you can slip right into your application.

As of today, with early access you get 18 more videos and 19 more exercises in 5 new, in-depth sections:

  • Extracting Components

  • Testing (8 videos!)

  • Authentication (5 videos)

  • Authenticating LiveViews

  • Triggering Controller Actions

And that’s just the beginning: more pro-level content is on the way!

By purchasing this upgrade at the special early access price, you can dive into the Pro Package today and get a steady diet of new sections until we’ve finished the course.

If just one video or example saves you an hour of time, it’s worth it! We’ve done all the work and research for you. :nerd_face:

Also, by upgrading to the Pro Package you’ll allow us to continue offering the Starter Package as a free community resource. You’ll also help make this a sustainable endeavor for the two of us because, as we all know, LiveView will change. Your support will allow us to offer free updates to this course as necessary. :pray:

Many thanks for your support!


Thanks Mike.

Im about half way through the free offering, and that’s been enough to sell me on the Pro upgrade, plus every other course you have got.

I can highly recommend it - the pitch is just about right for experienced devs that are fresh to Elixir / Phoenix, and the exersizes push you just the right amount.

Its always hard to spend your own money on courses just for you … and in 90% of cases I’d recommend the “just write your own app from scratch, and learn by running into your own walls” … but I would make an exception in this case.

Personal projects + Youtube + forums is usually > paid courseware.

The PragmaticStudio courses are just right, and after doing the free LV course, I can easily see the value in upgrading to Pro and doing the other bundle as well. Its literally going to save you months of self learning the hard way, and set you up with the perfect set of VSCode snippets and libs too.

Looking forward to more courses that might cover :

  • ecto in detail
  • Deep dive through OTP. Would really like to see how to build your own tools to run basic things like top and debugging / tracing / profiling / patching code on production servers.
  • how to run multiple unrelated projects on a single BEAM install (because Im cheap and like to have a small number of cloud instances to run multiple small apps for small customers :slight_smile: )

Hey, thanks a bunch Steve! It’s always our goal to save folks time and headaches when learning new stuff. :smiley:

Hi @mikeclark !

After all these changes to the LiveView in version 0.16 and 0.17, is there any planning to update examples in your course?

I’d also like an official answer on this, but note that the code download does include a LiveView 0.16 final version, and the notes that follow each video do explain how to upgrade the just-seen 0.15 code to work with 0.16.

Right now, I would only wholeheartedly recommend the course to those upgrading a 0.15 LiveView app for whom those upgrade instructions have some practical use, since LV 0.17 does seems such a big step forward.


Yes, we plan to release an update to the course in early 2022. It’ll be a free update for everyone who already owns the course.

In the meantime, I think there’s still a ton of value in the course. The majority of the course isn’t affected by the 0.17 changes. And once you know the LiveView fundamentals, migrating from 0.16 to 0.17 isn’t a big deal.


That’s a very good news. Thank you @mikeclark! :slight_smile: