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


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="aesmail" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/aesmail/120/32118_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  aesmail
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>A demo is up at <a href="https://kaffy.gigalixirapp.com/admin" rel="noopener nofollow ugc">https://kaffy.gigalixirapp.com/admin</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="175105" data-batch-url="/posts/batch_likers">
                        6
                      </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/kaffy-a-quick-and-flexible-admin-interface-for-phoenix-applications/31355/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-175105" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="175105"
                     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="175235" data-post-id="175235">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="aesmail" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/aesmail/120/32118_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  aesmail
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h3><a name="p-175235-v040-2020-05-13-1" class="anchor" href="#p-175235-v040-2020-05-13-1" aria-label="Heading link" rel="nofollow"></a>v0.4.0 (2020-05-13)</h3>
<ul>
<li>[breaking] pass  <code>conn</code>  struct to all callback functions.</li>
<li>[feature] introducing <a href="https://github.com/aesmail/kaffy#custom-actions" rel="noopener nofollow ugc">custom actions</a> for single resources.</li>
<li>[enhancement] fix typo in the resource form (thanks <a class="mention" href="/u/axelclark" rel="nofollow">@axelclark</a>).</li>
</ul>
<h3><a name="p-175235-custom-actions-2" class="anchor" href="#p-175235-custom-actions-2" aria-label="Heading link" rel="nofollow"></a>Custom Actions</h3>
<p>Kaffy supports performing custom actions on single resources by defining the <code>resource_actions/1</code> function.</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule MyApp.Blog.ProductAdmin
  def resource_actions(_conn) do
    [
      publish: %{name: "Publish this product", action: fn _c, p -&gt; restock(p) end},
      soldout: %{name: "Sold out!", action: fn _c, p -&gt; soldout(p) end}
    ]
  end

  defp restock(product) do
    update_product(product, %{"status" =&gt; "available"})
  end

  defp soldout(product) do
    case product.id == 3 do
      true -&gt;
        {:error, product, "This product should never be sold out!"}

      false -&gt;
        update_product(product, %{"status" =&gt; "soldout"})
    end
  end
</code></pre>
<p>Result</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/3X/d/8/d8ab5ccc990c3ededc6feef89a592211c2564760.png" data-download-href="https://forum.elixirforum.com/uploads/default/d8ab5ccc990c3ededc6feef89a592211c2564760" title="resource_actions" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/original/3X/d/8/d8ab5ccc990c3ededc6feef89a592211c2564760.png" alt="resource_actions" data-base62-sha1="uUKh7e1dZh3hS1weqTB0iy1ttXW" width="575" height="218"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename">resource_actions</span><span class="informations">575×218 12.8 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p>
<p><code>resource_actions/1</code> takes a <code>conn</code> and must return a keyword list.<br>
The keys must be atoms defining the unqiue action “keys”.<br>
The values are maps providing a human-friendly <code>:name</code> and an <code>:action</code> that is an anonymous function with arity 2 that takes a <code>conn</code> and the record.</p>
<p>Actions must return one of the following:</p>
<ul>
<li><code>{:ok, record}</code> indicating the action was performed successfully.</li>
<li><code>{:error, changeset}</code> indicating there was a validation error.</li>
<li><code>{:error, record, custom_error}</code> to communicate a custom error message to the user where custom_error is a string.</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="175235" 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/kaffy-a-quick-and-flexible-admin-interface-for-phoenix-applications/31355/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-175235" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="175235"
                     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="175238" data-post-id="175238">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks for making this, I’ve been missing the power of Django admin in Phoenix, and Kaffy looks like it just might fill that gap!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="175238" data-batch-url="/posts/batch_likers">
                        3
                      </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/kaffy-a-quick-and-flexible-admin-interface-for-phoenix-applications/31355/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-175238" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="175238"
                     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="175472" data-post-id="175472">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="aesmail" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/aesmail/120/32118_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  aesmail
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I really hope you’ll find it useful. Thank you for giving it a shot.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="175472" 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/kaffy-a-quick-and-flexible-admin-interface-for-phoenix-applications/31355/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-175472" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="175472"
                     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="175473" data-post-id="175473">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="aesmail" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/aesmail/120/32118_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  aesmail
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h3><a name="p-175473-v041-2020-05-14-1" class="anchor" href="#p-175473-v041-2020-05-14-1" aria-label="Heading link" rel="nofollow"></a>v0.4.1 (2020-05-14)</h3>
<ul>
<li>[feature] add custom field filters.</li>
<li>[bugfix] sometimes if <code>index/1</code> is not defined in the admin module, the index page is empty.</li>
</ul>
<h3><a name="p-175473-custom-filters-2" class="anchor" href="#p-175473-custom-filters-2" aria-label="Heading link" rel="nofollow"></a>Custom filters</h3>
<p>You can also provide some basic column-based filtration by providing the <code>:filters</code> option:</p>
<pre data-code-wrap="elixir"><code class="lang-elixir">defmodule MyApp.Products.ProductAdmin do
  def index(_) do
    [
      title: nil,
      category_id: %{
        value: fn p -&gt; get_category!(p.category_id).name end,
        filters: Enum.map(list_categories(), fn c -&gt; {c.name, c.id} end)
      },
      price: %{value: fn p -&gt; Decimal.to_string(p.price) end},
      quantity: nil,
      status: %{
        name: "Is it available?",
        value: fn p -&gt; available?(p) end,
        filters: [{"Available", "available"}, {"Sold out", "soldout"}]
      },
      views: nil
    ]
  end
end
</code></pre>
<p><code>:filters</code> must be a list of tuples where the first element is a human-frieldy string and the second element is the actual field value used to filter the records.</p>
<p>Result</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/3X/4/a/4a60dd1d5fd971c75e4bd32f68d4dadc65f0b29e.png" data-download-href="https://forum.elixirforum.com/uploads/default/4a60dd1d5fd971c75e4bd32f68d4dadc65f0b29e" title="product_filters" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/3X/4/a/4a60dd1d5fd971c75e4bd32f68d4dadc65f0b29e_2_690x398.png" alt="product_filters" data-base62-sha1="aBYRt3eqMt1lJsavaBK1FFgVtym" width="690" height="398" srcset="https://forum.elixirforum.com/uploads/default/optimized/3X/4/a/4a60dd1d5fd971c75e4bd32f68d4dadc65f0b29e_2_690x398.png, https://forum.elixirforum.com/uploads/default/original/3X/4/a/4a60dd1d5fd971c75e4bd32f68d4dadc65f0b29e.png 1.5x, https://forum.elixirforum.com/uploads/default/original/3X/4/a/4a60dd1d5fd971c75e4bd32f68d4dadc65f0b29e.png 2x" data-dominant-color="F7F8FA"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename">product_filters</span><span class="informations">881×509 54.8 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="175473" data-batch-url="/posts/batch_likers">
                        3
                      </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/kaffy-a-quick-and-flexible-admin-interface-for-phoenix-applications/31355/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-175473" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="175473"
                     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="175596" data-post-id="175596">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Amazing work <img src="https://forum.elixirforum.com/images/emoji/apple/muscle.png?v=15" title=":muscle:" class="emoji" alt=":muscle:" loading="lazy" width="20" height="20"><br>
Also a big fan of Django-admin here, we definitely need something like it for Phoenix!</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="175596" 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/kaffy-a-quick-and-flexible-admin-interface-for-phoenix-applications/31355/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-175596" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="175596"
                     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="175704" data-post-id="175704">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="aesmail" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/aesmail/120/32118_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  aesmail
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’m very pleased to announce kaffy <strong>v0.5.0</strong> with dashboard widgets.</p>
<p>This was the biggest missing thing on my todo list. I’m not 100% done with it. This is hopefully the tip of the iceberg.</p>
<p>Thanks to everyone who provided comments, suggestions, and/or PRs.</p>
<p>As always, your feedback is highly appreciated.</p>
<p>Check the <a href="https://github.com/aesmail/kaffy#dashboard-page" rel="noopener nofollow ugc">dashboard page section</a>.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/3X/7/d/7dc0c40b24d8dd84204e9c6ea90397c09213090d.png" data-download-href="https://forum.elixirforum.com/uploads/default/7dc0c40b24d8dd84204e9c6ea90397c09213090d" title="dashboard_page" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/3X/7/d/7dc0c40b24d8dd84204e9c6ea90397c09213090d_2_690x494.png" alt="dashboard_page" data-base62-sha1="hWsGjYOiQdDGAazJ9LduV096WTP" width="690" height="494" srcset="https://forum.elixirforum.com/uploads/default/optimized/3X/7/d/7dc0c40b24d8dd84204e9c6ea90397c09213090d_2_690x494.png, https://forum.elixirforum.com/uploads/default/original/3X/7/d/7dc0c40b24d8dd84204e9c6ea90397c09213090d.png 1.5x, https://forum.elixirforum.com/uploads/default/original/3X/7/d/7dc0c40b24d8dd84204e9c6ea90397c09213090d.png 2x" data-dominant-color="F6F6F9"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename">dashboard_page</span><span class="informations">967×693 62 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="175704" data-batch-url="/posts/batch_likers">
                        9
                      </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/kaffy-a-quick-and-flexible-admin-interface-for-phoenix-applications/31355/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-175704" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="175704"
                     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="175911" data-post-id="175911">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="aesmail" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/aesmail/120/32118_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  aesmail
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<h3><a name="p-175911-v060-2020-05-18-demohttpskaffygigalixirappcomadmin-and-githubhttpsgithubcomaesmailkaffy-1" class="anchor" href="#p-175911-v060-2020-05-18-demohttpskaffygigalixirappcomadmin-and-githubhttpsgithubcomaesmailkaffy-1" aria-label="Heading link" rel="nofollow"></a>v0.6.0 (2020-05-18) (<a href="https://kaffy.gigalixirapp.com/admin/" rel="noopener nofollow ugc">demo</a> and <a href="https://github.com/aesmail/kaffy" rel="noopener nofollow ugc">github</a>)</h3>
<h6><a name="p-175911-incompatible-with-v05x-2" class="anchor" href="#p-175911-incompatible-with-v05x-2" aria-label="Heading link" rel="nofollow"></a>incompatible with v0.5.x</h6>
<ul>
<li>[feature] support custom actions for a group of selected resources in index page.</li>
<li>[enhancement] <strong>breaking change</strong> - always include the <code>:kaffy_browser</code> pipeline to display templates correctly. Please check the minimum configurations section in the README for more information on how to upgrade.</li>
<li>[bugfix] resource index page table was displayed incorrectly when using a custom pipeline.</li>
<li>[bugfix] all side menu resources are shown by default including sections that are not currently active.</li>
<li>[bugfix] side menu does not scroll when there are too many contexts/schemas.</li>
<li>[bugfix] side menu items all popup at the same time when viewed on small screens.</li>
<li>[misc] added a demo link to the hex package page.</li>
</ul>
<h3><a name="p-175911-v051-2020-05-17-3" class="anchor" href="#p-175911-v051-2020-05-17-3" aria-label="Heading link" rel="nofollow"></a>v0.5.1 (2020-05-17)</h3>
<h6><a name="p-175911-compatible-with-v050-4" class="anchor" href="#p-175911-compatible-with-v050-4" aria-label="Heading link" rel="nofollow"></a>compatible with v0.5.0</h6>
<ul>
<li>[enhancement] add a rich text editor option for form fields (<code>type: :richtext</code>).</li>
<li>[bugfix] dashboard widgets were displayed improperly on small screens.</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="175911" data-batch-url="/posts/batch_likers">
                        5
                      </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/kaffy-a-quick-and-flexible-admin-interface-for-phoenix-applications/31355/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-175911" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="175911"
                     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="176497" data-post-id="176497">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Gonna give this a shot, next time i need a administrator panel!</p>
<p>Thank you for your work, we really needed this <a class="mention" href="/u/aesmail" rel="nofollow">@aesmail</a>. <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="176497" 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/kaffy-a-quick-and-flexible-admin-interface-for-phoenix-applications/31355/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-176497" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="176497"
                     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>
    <div class="postbit" id="176500" data-post-id="176500">
  <section>
    <div class="post-wrap">


					<div class="post-header">
		        <div class="user-avatar">
		          <img alt="aesmail" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/aesmail/120/32118_2.png" width="120" height="120" />
		        </div>
					
						<div class="user-details">
		          <div class="user-name">
		            <h3>
                  aesmail
                    <span class="op-star" title="Thread Starter">
                      <img alt="OP" class="op-star-icon" src="/assets/thread-icons/thread-icon-thread-starter-df91e872.png" />
                    </span>
                  </h3>
		          </div>
						
						</div>
					
					</div>

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Just released <strong>v0.7.0</strong>. The main feature in this release is scheduled tasks.</p>
<p>Check out the <a href="https://kaffy.gigalixirapp.com/admin/tasks" rel="noopener nofollow ugc">demo</a> and the <a href="https://github.com/aesmail/kaffy#scheduled-tasks" rel="noopener nofollow ugc">README</a> section.</p>
<p></p><div class="lightbox-wrapper"><a class="lightbox" href="https://forum.elixirforum.com/uploads/default/original/3X/d/d/dd4c1337307d6b8a8bfcbf963e024d27d0357fd4.png" data-download-href="https://forum.elixirforum.com/uploads/default/dd4c1337307d6b8a8bfcbf963e024d27d0357fd4" title="simple_scheduled_tasks" rel="nofollow"><img src="https://forum.elixirforum.com/uploads/default/optimized/3X/d/d/dd4c1337307d6b8a8bfcbf963e024d27d0357fd4_2_690x228.png" alt="simple_scheduled_tasks" data-base62-sha1="vzGvGq3FuSAclGoRKBuE3H8cTHe" width="690" height="228" srcset="https://forum.elixirforum.com/uploads/default/optimized/3X/d/d/dd4c1337307d6b8a8bfcbf963e024d27d0357fd4_2_690x228.png, https://forum.elixirforum.com/uploads/default/optimized/3X/d/d/dd4c1337307d6b8a8bfcbf963e024d27d0357fd4_2_1035x342.png 1.5x, https://forum.elixirforum.com/uploads/default/original/3X/d/d/dd4c1337307d6b8a8bfcbf963e024d27d0357fd4.png 2x" data-dominant-color="D7DAF1"><div class="meta"><svg class="fa d-icon d-icon-far-image svg-icon" aria-hidden="true"><use href="#far-image"></use></svg><span class="filename">simple_scheduled_tasks</span><span class="informations">1200×398 51.8 KB</span><svg class="fa d-icon d-icon-discourse-expand svg-icon" aria-hidden="true"><use href="#discourse-expand"></use></svg></div></a></div><p></p>
<pre data-code-wrap="elixir"><code class="lang-elixir">def scheduled_tasks(_) do
  [
    %{
      name: "Cache Product Count",
      initial_value: 0,
      every: 300,
      action: fn _v -&gt;
        count = Bakery.Products.count_products()
        {:ok, count}
      end
    },
    %{
      name: "Delete Fake Products",
      every: 60,
      initial_value: nil,
      action: fn _ -&gt;
        Bakery.Products.delete_fake_products()
        {:ok, nil}
      end
    }
  ]
end
</code></pre> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="176500" data-batch-url="/posts/batch_likers">
                        9
                      </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/kaffy-a-quick-and-flexible-admin-interface-for-phoenix-applications/31355/22">Post #21</a>
	                </div>
	            </div>
              <div id="likers-container-176500" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="176500"
                     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 #21"></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/31355/load_more?page=3">Load more posts (77 remaining)</a>
</div></template></turbo-stream>