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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks <a class="mention" href="/u/tbobbe" rel="nofollow">@Tbobbe</a>. (after noticing I skipped ‘try this’ in chapter 2) I did the same as you, and was tempted to skip the Mailer as well. Turns out to be a bit “now draw the rest of the owl” for me. I thought I’d use an AWS dev account I already had set up for Simple Email Service. On the phoenix side I needed to add some config, install another dependency (<code>gen_smtp</code>) and read some forum threads of other people who struggled with swoosh. It is almost working after a few hours (no more compiler errors etc after everything is in the right place) but no mails coming out yet.</p>
<p>As often with configuration - it is just a few lines, but they need to be the right few ones. Turns out by default, in ‘dev’ you can see the mails that would go out under <code>/dev/mailbox</code> that might be enough for this exercise.</p>
<p>On the other hand, I’d like to get a taste for how observable this combination (Swoosh and SES) would be in production. So this exercise gives me a bit of a feel for that.</p>
<p><a href="https://hexdocs.pm/swoosh/Swoosh.Adapters.AmazonSES.html" class="inline-onebox" rel="noopener nofollow ugc">Swoosh.Adapters.AmazonSES — Swoosh v1.26.2</a> is not bad - keep in mind that it does not mention switching the local mailbox for an actual mailer. Otherwise you’ll get an error about <code>false/post/4</code> is undefined. <a href="https://forum.elixirforum.com/t/issues-sending-emails-with-swoosh/44707/5" class="inline-onebox" rel="nofollow">Issues Sending Emails with Swoosh - #5 by ScriptyScott</a> explains this. I used ‘Finch’ instead of ‘Hackney’ - I don’t know the differences between the two and Finch was already included in my install.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="308339" 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/programming-phoenix-liveview-book-club/55604/52">Post #51</a>
	                </div>
	            </div>
              <div id="likers-container-308339" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="308339"
                     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 #51"></div>
  </section>
</div>
    <div class="postbit" id="308377" data-post-id="308377">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Code on Page # 137 doesn’t result in the screenshot on page # 138.</p>
<p>(Beta 10, PDF).</p>
<p>Fails to compile, with error <code>** (Key Error) key :form not found in: %{...</code></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="308377" 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/programming-phoenix-liveview-book-club/55604/53">Post #52</a>
	                </div>
	            </div>
              <div id="likers-container-308377" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="308377"
                     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 #52"></div>
  </section>
</div>
    <div class="postbit" id="308407" data-post-id="308407">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I managed to get the mail sent in the end. For anyone else who stumbles on this:</p>
<p>I needed to add  <code>put_provider_option(:security_token, &lt;temporary token&gt;</code> at the end of the <code>new()</code> call in <code>deliver</code>. <code>aws sts get-session-token</code> generates a temporary access key, secret and token.</p>
<p>To get there, I added some error logging (the generated code silently swallows the <code>:error</code> response of  <code>Mailer.deliver</code> it gets passed on but does not seem to be logged at the top level.<br>
AWS SES returned this error:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">%{
  code: "InvalidClientTokenId",
  message: "The security token included in the request is invalid."
}
</code></pre>
<p>There was no security token, so yes, that was invalid.</p>
<p>I also added an IO.Inspect to see what mail was generated. I tried to make my own <code>new</code>, in Pento.Mailer but the provider_options remained empty.</p>
<p>What did I learn?</p>
<ul>
<li>I am glad I did this early. There are a few things to think about</li>
<li>The lack of error logging here raises questions about how to make a Phoenix LiveView app observable in production (I am likely to make mistakes and want to get quick feedback on those..).</li>
<li>Swoosh produces  logs repeating the content of the message at least 5 times (this can be addressed by changing the logging level apparently, so won’t affect production). Not sure why it isn’t one time.</li>
<li>SMTP with SES is a good idea in theory, as you can (found this on another thread) create an IAM role with username and password that only can only send mails. But failed with the same invalid token warning.</li>
<li>I guess that means for me, for production I would need the more complicated <a href="https://hexdocs.pm/swoosh/Swoosh.Adapters.ExAwsAmazonSES.html" rel="noopener nofollow ugc"><code>Swoosh.Adapters.ExAwsAmazonSES</code></a> adapter to fetch credentials on-demand.</li>
</ul> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="308407" 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/programming-phoenix-liveview-book-club/55604/54">Post #53</a>
	                </div>
	            </div>
              <div id="likers-container-308407" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="308407"
                     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 #53"></div>
  </section>
</div>
    <div class="postbit" id="308438" data-post-id="308438">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>So I’m sharing the final solution as a way of paying it forward, I wouldn’t have gotten this far without several blog- and forum posts, stack overflow and the ExAwsAmazonSES documentation (Read carefully, Everything is in there. I’m not sure why the AmazonSES documentation refers to using ExAwsAmazonSES if you have <code>ex_aws</code> already configured. I may be missing something, but ExAwsAmazonSES seems to be the better option).<br>
I ended up with <code>ex_aws</code> in the end, so I don’t have to generate the security token by hand. It uses <code>AWS_PROFILE</code>, and loads the associatd key and secret as well. It will use <code>aws sts</code> and do the key rotation. No credentials in the production code or configuration code.</p>
<h2><a name="p-308438-dependencies-used-1" class="anchor" href="#p-308438-dependencies-used-1" aria-label="Heading link" rel="nofollow"></a>Dependencies used</h2>
<pre data-code-wrap="elixir"><code class="lang-elixir">      {:ex_aws, "~&gt; 2.1"},
      {:ex_aws_sts, "~&gt; 2.1"},
      {:configparser_ex, "~&gt; 4.0"},
      {:hackney, "~&gt; 1.9"},
      {:swoosh, "~&gt; 1.14.1"},
      {:gen_smtp, "~&gt; 1.2.0"},
</code></pre>
<h2><a name="p-308438-config-for-ex_aws-and-exawsamazonses-in-runtimeexs-2" class="anchor" href="#p-308438-config-for-ex_aws-and-exawsamazonses-in-runtimeexs-2" aria-label="Heading link" rel="nofollow"></a>Config for ex_aws and ExAwsAmazonSES in <code>runtime.exs</code></h2>
<p>I Found the idea to do this in <code>runtime.exs</code> in a suggestion. I might put the code in ~dev.exs~ again. I probably need to find an explanation of what to put where (<code>dev.exs</code>, <code>config.exs</code>, <code>runtime.exs</code> etc) I was following someone elses’ example and it seems to work for me. For production I’d probably use environment variables for the key and the secret, after creating a narrow IAM user that only has the permissions the app needs. So this will need some more factoring out.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir"> if config_env() == :prod or config_env() == :dev do
    IO.puts("Configuring AWS credentials")
    config :ex_aws,
      # Below works if you export AWS_PROFILE (specified by :awscli)
      access_key_id: [{:system, "AWS_ACCESS_KEY_ID"}, {:awscli, :system, 30}, :instance_role],
      secret_access_key: [{:system, "AWS_SECRET_ACCESS_KEY"}, {:awscli, :system, 30}, :instance_role],
      region: "eu-west-2" # London. fill in your own region here. 

    IO.puts("Configuring ExAwsAmazonSEs Mailer. config_env: #{config_env()}")
    config :pento, Pento.Mailer,
            adapter: Swoosh.Adapters.ExAwsAmazonSES

    config :swoosh, :api_client, Swoosh.ApiClient.Hackney
  else
    IO.puts("Not Configuring AWS credentials and mailer. config_env: #{config_env()}")
  end
</code></pre>
<p>Feedback most welcome. I’m glad it finally works and hope I can save someone some time in the future.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="308438" 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/programming-phoenix-liveview-book-club/55604/55">Post #54</a>
	                </div>
	            </div>
              <div id="likers-container-308438" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="308438"
                     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 #54"></div>
  </section>
</div>
    <div class="postbit" id="308452" data-post-id="308452">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Did anyone make the username editable? <a class="mention" href="/u/tbobbe" rel="nofollow">@Tbobbe</a> indicated that it might be much work. I’d hope not, as editing is something that Phoenix LiveView should make easy. The username has to be unique, but so is the e-mail address, so there is prior art in the generated auth code. Any thoughts?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="308452" 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/programming-phoenix-liveview-book-club/55604/56">Post #55</a>
	                </div>
	            </div>
              <div id="likers-container-308452" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="308452"
                     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 #55"></div>
  </section>
</div>
    <div class="postbit" id="308477" data-post-id="308477">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Yes, I did! It was actually not too much work after I gave it another look. <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="308477" 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/programming-phoenix-liveview-book-club/55604/57">Post #56</a>
	                </div>
	            </div>
              <div id="likers-container-308477" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="308477"
                     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 #56"></div>
  </section>
</div>
    <div class="postbit" id="309215" data-post-id="309215">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I did too, not too hard indeed. I followed some existing traces in the code (changing e-mail and password, with some tests) and decided to do a bit less than those. Adopting a test or two and copy-paste-modifying the UI was fairly straightforward indeed.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="309215" 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/programming-phoenix-liveview-book-club/55604/58">Post #57</a>
	                </div>
	            </div>
              <div id="likers-container-309215" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="309215"
                     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 #57"></div>
  </section>
</div>
    <div class="postbit" id="309216" data-post-id="309216">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Chapter three was uneventful - fewer exercises than chapter 2. On to chapter 4. I found reading “Elixir in Action” in parallel helps. It took me a while to wrap my reading around how pattern matching on return values works.<br>
I read through some of the next chapters in Programming Phoenix LiveView again, reading becomes easier. I quite liked the explanation (in context of use) of schemaless changesets.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="309216" 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/programming-phoenix-liveview-book-club/55604/59">Post #58</a>
	                </div>
	            </div>
              <div id="likers-container-309216" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="309216"
                     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 #58"></div>
  </section>
</div>
    <div class="postbit" id="312665" data-post-id="312665">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Chapter 4 was fairly straightforward, including the ‘your turn’ section. It helped that I changed ‘product’ show and edit away from modals, just to see if it would work. It seems redirects make it easier to add new products from other pages (not that I need it here, but would need if I were to rewrite an app in Phoenix).</p>
<p>In order to make the tests pass for the ‘create a FAQ’ assignment in ‘Your turn’ I needed to add <code>:register_and_login_users</code> to setup for ‘Show’ and ‘Index’ in the generated tests, analogous to tests for Products.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">    setup [:create_faq, :register_and_log_in_users]
</code></pre>
<p>Is anyone else working through the book at the moment? (mostly done chapter 5 as well, the Your Turn section there is more involved, but quite useful).</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="312665" 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/programming-phoenix-liveview-book-club/55604/60">Post #59</a>
	                </div>
	            </div>
              <div id="likers-container-312665" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="312665"
                     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 #59"></div>
  </section>
</div>
    <div class="postbit" id="312696" data-post-id="312696">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>After chapter 5 things are starting to gel. I’m now finding the ‘principle of least surprise’ applies:</p>
<ul>
<li>"Hmm, I don’t like that validation error message. What if I add another parameter <code>message: "my user friendly message</code>? And it worked.</li>
<li>File upload functionality had some of the File API that looks a lot like Ruby’s, so again principle of least surprise</li>
<li>I can now work test-first more often. Tests for the Search page context were straight forward. Thanks to this forum I found the <code>errors_on</code> function in <code>DataCase</code> to write more readable and precise tests for error messages.</li>
<li>DRYing the validation for a 7 digit SKU was easy (extract function in  <code>Product</code> and reuse that in <code>ProductSearch</code>.)</li>
</ul>
<p>I skipped the image upload error handling exercise in <code>Your Turn</code> for now. I don’t need image uploads any time soon. It was fun to do the exercise in the chapter, as it gives more of a feel for handling state and working with files. Also, I want to skip ahead. I want to extract duplicate HTML in the search page. I copied the HTML from <code>products/show</code> and it looks like I need a function component for that, which is covered in the next chapter. Onward! <img src="https://forum.elixirforum.com/images/emoji/apple/grinning.png?v=15" title=":grinning:" class="emoji" alt=":grinning:" 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="312696" 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/programming-phoenix-liveview-book-club/55604/61">Post #60</a>
	                </div>
	            </div>
              <div id="likers-container-312696" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="312696"
                     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 #60"></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/55604/load_more?page=7">Load more posts (11 remaining)</a>
</div></template></turbo-stream>