<turbo-stream action="append" target="posts_list"><template>    <div class="postbit" id="378396" data-post-id="378396">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="djcoin" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/djcoin/120/35025_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  djcoin
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks for your answers. Hm ok, so from what I understand, you are storing details in the URL (by replacing it) when a navigation event occurs. But can’t you just update the URL as it goes? I guess that with your technic you can’t use normal link again because you need to prepend a custom action?</p>
<p>Do you happen to know if by default liveview restore the form with the focus and the position on screen?</p>
<p>It’s funny because there is a discussion happening right now on a subject that seems related: <a href="https://forum.elixirforum.com/t/add-params-opt-to-js-patch-and-js-navigate-and-opt-to-merge-phx-value/69743" class="inline-onebox" rel="nofollow">Add `:params` opt to JS.patch and JS.navigate, and opt to merge `phx-value-*`</a></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="378396" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/choosing-phoenix-liveview-the-difficulties-deciding-between-phoenix-liveview-and-traditional-frontend-frameworks/73352/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-378396" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="378396"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #11"></div>
  </section>
</div>
    <div class="postbit" id="378407" data-post-id="378407">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="DaAnalyst" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  DaAnalyst
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="djcoin" data-post="12" data-topic="73352">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/djcoin/48/35025_2.png" class="avatar"> djcoin:</div>
<blockquote>
<p>But can’t you just update the URL as it goes?</p>
</blockquote>
</aside>
<p>Not sure what you mean by this. The url path is constructed as soon as all the params are known (btw, we don’t pass just the coordinates, there’s some other app specific stuff, but that’s out of this scope).</p>
<aside class="quote no-group" data-username="djcoin" data-post="12" data-topic="73352">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/djcoin/48/35025_2.png" class="avatar"> djcoin:</div>
<blockquote>
<p>I guess that with your technic you can’t use normal link again because you need to prepend a custom action?</p>
</blockquote>
</aside>
<p>You could use a string (the event name) for input but then you would still need to wrap it into a <code>%JS{}</code> so the dispatch can take place in the same turn and before the push/navigate.</p>
<aside class="quote no-group" data-username="djcoin" data-post="12" data-topic="73352">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/djcoin/48/35025_2.png" class="avatar"> djcoin:</div>
<blockquote>
<p>Do you happen to know if by default liveview restore the form with the focus and the position on screen?</p>
</blockquote>
</aside>
<p>For what I know (paid attention to) LiveView “only” restores the form client side input values.</p>
<aside class="quote no-group quote-modified" data-username="djcoin" data-post="12" data-topic="73352">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/djcoin/48/35025_2.png" class="avatar"> djcoin:</div>
<blockquote>
<p>It’s funny because there is a discussion happening right now on a subject that seems related: <a href="https://forum.elixirforum.com/t/add-params-opt-to-js-patch-and-js-navigate-and-opt-to-merge-phx-value/69743" rel="nofollow">Add `:params` opt to JS.patch and JS.navigate, and opt to merge `phx-value-*</a></p>
</blockquote>
</aside>
<p>As far as I can tell from the suggestion, it’s about constructing the target path from the params available in the template so it’s clearer what’s going on and I support it, but having this “back/refresh” functionality is more complex than that. There’s also the resolution part the url params get interpreted and acted upon (like <code>el.scrollIntoView</code> stuff).</p>
<p>I agree it’d be nice if the whole pattern was generalized and built into LiveView. However, it’s not as straight forward as it may seem because there are parts that may differ from app to app depending on the requirements.</p>
<p>For instance, in our case we don’t simply append the additional (“coordinate”) params to the url, but we encode them first into a single one. It’s not for some security reason (there was no such requirement), but I wanted to make sure it’s either valid as a whole or invalid (without adding yet another checksum param, for there are length constraints there, especially if you account for the default config limitations of Kubernetes and such). Someone else might have opted for storing them server-side completely (like in a GenServer or ETS or even a frontend DB), while only appending a single id if the requirement was to hide the inner doings completely, and so on.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="378407" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/choosing-phoenix-liveview-the-difficulties-deciding-between-phoenix-liveview-and-traditional-frontend-frameworks/73352/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-378407" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="378407"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #12"></div>
  </section>
</div>
    <div class="postbit" id="378410" data-post-id="378410">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="GrammAcc" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/GrammAcc/120/40380_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  GrammAcc
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Is that 100 lines for just one liveview, or 100 lines for the whole project? Genuinely asking since I don’t have a lot of experience with liveview yet (though it’s my favorite stack so far).</p>
<p>My understanding is that liveview needs a lot of deps and config and boilerplate code in a bunch of different files. It’s definitely more concise than a barebones framework like Quart, but if we talking about project files like pyproject.toml or requirements.txt, then the mix.exs + config.ex + runtime.ex would probably be longer in a typical project.</p>
<p>This is an interesting idea for a code golf project though. I threw a few hours at it and was able to get a simple chat server with password auth, CSRF, encrypted sessions, and all the other essentials working in a single file with less than 1000 lines. Formatted to 80 columns with documentation and whitespace still included. Jinja template takes up about 450 lines, and I also have all of the deps and the venv setup and everything in the same script. I’ll probably actually try to golf it this weekend and see how many lines it would really take to run something on that stack. Never actually looked at that super objectively before. <img src="https://forum.elixirforum.com/images/emoji/apple/slight_smile.png?v=15" title=":slight_smile:" class="emoji" alt=":slight_smile:" loading="lazy" width="20" height="20"></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="378410" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/choosing-phoenix-liveview-the-difficulties-deciding-between-phoenix-liveview-and-traditional-frontend-frameworks/73352/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-378410" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="378410"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #13"></div>
  </section>
</div>
    <div class="postbit" id="378411" data-post-id="378411">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="djcoin" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/djcoin/120/35025_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  djcoin
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group quote-modified" data-username="DaAnalyst" data-post="13" data-topic="73352">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/d/278dde/48.png" class="avatar"> DaAnalyst:</div>
<blockquote>
<aside class="quote no-group" data-username="djcoin" data-post="12" data-topic="73352">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/djcoin/48/35025_2.png" class="avatar"> djcoin:</div>
<blockquote>
<p>But can’t you just update the URL as it goes?</p>
</blockquote>
</aside>
<p>Not sure what you mean by this. The url path is constructed as soon as all the params are known (btw, we don’t pass just the coordinates, there’s some other app specific stuff, but that’s out of this scope).</p>
</blockquote>
</aside>
<p>Sorry I will try to be more clear, I was referring to the replace-state logic. To me it seems this dispatch could be skipped (as you are replacing with the known current state so you can go back obviously) if it was applied each time there was a change in the current page. But I reckon that it could be less flexible (and also a bad practice if you have to change the URL every time there is a scroll).</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="378411" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/choosing-phoenix-liveview-the-difficulties-deciding-between-phoenix-liveview-and-traditional-frontend-frameworks/73352/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-378411" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="378411"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #14"></div>
  </section>
</div>
    <div class="postbit" id="378414" data-post-id="378414">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="FlyingNoodle" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/FlyingNoodle/120/32593_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  FlyingNoodle
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Check here: <a href="https://github.com/wojtekmach/mix_install_examples/blob/main/phoenix_live_view.exs" class="inline-onebox" rel="noopener nofollow ugc">mix_install_examples/phoenix_live_view.exs at main · wojtekmach/mix_install_examples · GitHub</a></p>
<p>Its actually 83 lines.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="378414" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/choosing-phoenix-liveview-the-difficulties-deciding-between-phoenix-liveview-and-traditional-frontend-frameworks/73352/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-378414" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="378414"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #15"></div>
  </section>
</div>
    <div class="postbit" id="378415" data-post-id="378415">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="GrammAcc" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/GrammAcc/120/40380_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  GrammAcc
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>IIUC from the posts so far, I think the dispatch <a class="mention" href="/u/daanalyst" rel="nofollow">@DaAnalyst</a> is talking about is used to update the query params in a URL that is already stored in the browser’s history via the History api before the URL gets updated due to user navigation. (see: <a href="https://developer.mozilla.org/en-US/docs/Web/API/History/replaceState" class="inline-onebox" rel="noopener nofollow ugc">History: replaceState() method - Web APIs | MDN</a> ). By modifying the current history entry’s URL with the scroll position before the user navigates away or experiences a crash, you would be able to restore the exact state of the UI with the back button.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="378415" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/choosing-phoenix-liveview-the-difficulties-deciding-between-phoenix-liveview-and-traditional-frontend-frameworks/73352/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-378415" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="378415"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #16"></div>
  </section>
</div>
    <div class="postbit" id="378416" data-post-id="378416">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="GrammAcc" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/GrammAcc/120/40380_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  GrammAcc
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Nice! No database makes sense. I wonder how much it would take to add a db to that example? The 1000-line Python example I’m working on has a sqlite db with 4 tables in the schema and also a basic pubsub implementation, but I had to write all that stuff myself since Quart doesn’t provide those things out of the box like Phoenix. I did cheat a bit and used a database library that I wrote which has reduces the boilerplate from SQLAlchemy though. I think I’ll try to do the same in LiveView if I find some time for it. I’ve never code golfed before. It’s pretty fun!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="378416" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/choosing-phoenix-liveview-the-difficulties-deciding-between-phoenix-liveview-and-traditional-frontend-frameworks/73352/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-378416" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="378416"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #17"></div>
  </section>
</div>
    <div class="postbit" id="378417" data-post-id="378417">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="DaAnalyst" src="/assets/icons/user-9f439610.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  DaAnalyst
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="djcoin" data-post="15" data-topic="73352">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/djcoin/48/35025_2.png" class="avatar"> djcoin:</div>
<blockquote>
<p>But I reckon that it could be less flexible (and also a bad practice if you have to change the URL every time there is a scroll).</p>
</blockquote>
</aside>
<p>Yes, that too is a part of what may differ from app to app. In our application we decided it was “enough” to do it on clicking the link leading to another page/context, like for example, having a list of people and clicking on one to see their page. So, to us the link is dependent on where you click (on which item in the stream) so we can then scroll that item into view when returning back.</p>
<p>We do not track the scroll position or anything of the kind because the underlying stream resource may may change in the meantime like with new items being added or the old ones removed rendering last saved scroll position obsolete.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="378417" data-batch-url="/posts/batch_likers">
                        2
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/choosing-phoenix-liveview-the-difficulties-deciding-between-phoenix-liveview-and-traditional-frontend-frameworks/73352/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-378417" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="378417"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #18"></div>
  </section>
</div>
    <div class="postbit" id="378472" data-post-id="378472">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="steffend" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/steffend/120/20548_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  steffend
                  </h3>
		          </div>
						
			          <div class="user-title">
									<span>Phoenix Core Team</span>
			          </div>
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="garrison" data-post="6" data-topic="73352">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/g/3bc359/48.png" class="avatar"> garrison:</div>
<blockquote>
<p>My understanding is that there is no reconnection behavior at all and you simply get a new process.</p>
</blockquote>
</aside>
<p>If you use long polling I believe if you reconnect fast enough the existing process will be reused. The window for that is 10 seconds by default. Though I never tested that in practice.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="378472" data-batch-url="/posts/batch_likers">
                        1
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/choosing-phoenix-liveview-the-difficulties-deciding-between-phoenix-liveview-and-traditional-frontend-frameworks/73352/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-378472" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="378472"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #19"></div>
  </section>
</div>
    <div class="postbit" id="378698" data-post-id="378698">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="cjbottaro" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/cjbottaro/120/1469_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  cjbottaro
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>What is a complex frontend (rhetorical, I know the article gave examples)? In my opinion, web apps like Airbnb, Uber Eats, Toast Takeout, Instacart could all be <em>very easily</em> implemented in LiveView. Btw, I use all those apps frequently and they are buggy messes, especially Airbnb and Instacart.</p>
<p>As for websocket disconnections, the framework gives you tools to handle them, but I think they could give us more or even automate it. On my product, I simply serialize <em>all my assigns</em> onto a form. If there is sensitive state, I encrypt. Then on reconnect, the form is submitted and the assigns are rehydrated. I think this can be built into the framework.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="378698" data-batch-url="/posts/batch_likers">
                        0
                      </span>
                      <!-- <span class="thread-count js-solved-indicator" title="Marked as solution"></span> -->
	                </div>
	                <div class="go-to-post">
	                  <a title="Go to post" alt="Go to post" href="https://forum.elixirforum.com/t/choosing-phoenix-liveview-the-difficulties-deciding-between-phoenix-liveview-and-traditional-frontend-frameworks/73352/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-378698" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="378698"
                     data-batch-url="/posts/batch_likers">
                  <div class="post-likers"></div>
                </div>
              </div>
	        </div>
			

    </div>

    <div class="triangle-top-right type-standard-post cat-standard-post" title="Post #20"></div>
  </section>
</div>
</template></turbo-stream><turbo-stream action="replace" target="load-more-container"><template><div id="load-more-container" class="load-more-container">
    <a class="load-more-button" data-turbo-stream="true" href="/topics/73352/load_more?page=3">Load more posts (1 remaining)</a>
</div></template></turbo-stream>