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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>For the past two years, I’ve been using Phoenix headless, with GraphQL as a go-between with Nuxt.js (Vue). We use it for Edgewise (<a href="https://edgewiserealty.com" rel="noopener nofollow ugc">https://edgewiserealty.com</a>). I’ve used it on other projects as well. The Phoenix backend and Nuxt presentation layer are deployed separately via Kubernetes (different resource requirements), with assets (JS, CSS, etc.) hosted in a CDN. IMO, this is the “best” stack I’ve come across (all things considered).</p>
<p>I am very optimistic about LiveView and it has a ton of potential, but I think the dev experience of LiveView still has a long way to go before it can go up against something as mature as Vue.js.  For instance, I was initially skeptical about Vue’s Single File Components, but I don’t think I can go back now. Side note, I’ve actually spent some time getting LiveView to populate Nuxt pages, which keeps the SFC capability with route splitting JS and CSS. I even called it “Phoenuxt” <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>
<p>It’s still early for LiveView, but I think these more advanced front-end concepts are going to be necessary for LiveView to go beyond the “look what I did without JS” demos. If I get some spare time, I’d like to actually create a “single file component” for LiveView, where the “template” portion is EEX. So there’d actually be 4 sections (EEX template, Elixir code, Vue JS script, style). But I digress…</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="143347" data-batch-url="/posts/batch_likers">
                        4
                      </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/which-ui-framework-you-prefer-to-use-along-with-phoenix-api-back-end/25334/12">Post #11</a>
	                </div>
	            </div>
              <div id="likers-container-143347" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="143347"
                     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="143348" data-post-id="143348">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I agree with the sentiment here and have to say that I think vue is a great technology even for smaller things is usually my default chioce now.</p>
<p>Im curious about your use of graphql here, do you find it more overhead to write than just exposing rest services? Also internally are you still writing rest services and then a further gql layer or does your gql resolvers/mutators directly expose/mutate directly?</p>
<p>Finally, are you using vuex to interact with gql and if so how are you finding it?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="143348" 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/which-ui-framework-you-prefer-to-use-along-with-phoenix-api-back-end/25334/13">Post #12</a>
	                </div>
	            </div>
              <div id="likers-container-143348" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="143348"
                     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="143350" data-post-id="143350">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I don’t find GQL to be too much overhead. Plus, I think it’s more than worth it. I’ve lost count on how many “REST” APIs I’ve seen that couldn’t even follow basic <code>collection/resource</code> noun conventions and odd ways of handling authentication (basic, query params, <code>x-something</code>, <code>Bearer</code>, etc). Also, it’s essentially self-documenting via introspection, and you never have to worry about sending too little or bloating the response, or dealing with Swagger / OpenAPI / Postman collections. I usually pair it with Guardian, with a set of plugs that handle the initial header / JWT / resource / blacklist logic. I think the biggest concern is that you could accidentally allow someone to backdoor their way to sensitive information through a maze of querying.  Something to watch out for, I suppose. Apollo has been doing some really interesting things with caching and tracing as well.</p>
<p>I initially offered both REST and GraphQL simultaneously, with the REST API sitting on top of the GraphQL layer.  So a REST call for <code>/users/1</code> would internally call a GQL query, which would then tap into Ecto. GraphQL acts as the “view” for your REST API; which allows your REST logic to be quite thin. It’s not really too much trouble to offer both if your REST API is built on top of your GraphQL API.</p>
<p>Yes, I use vuex. I’m always looking for better ways to do it, but I almost always interact with any API (whether it’s Apollo, Axios, etc.) via the Vuex store actions. That piece is relatively constant. The piece that I go back and forth on, is whether or not to store the state in Vuex or within the components and let the data cascade.</p>
<p>In the former, the stores are loosely tied to a URL struture. So I might have a store called <code>product</code> which has a <code>get</code> action. When someone navigates to the <code>/products/1</code> page, the <code>get</code> action is called and populates the state with that product’s data.  The components within the page tend to make use of <code>mapState</code> and computed properties quite a bit. When the user navigates away, the page component is responsible for “resetting” the store’s state (usually on <code>beforeDestroy</code>).</p>
<p>In the latter, I treat the store like an Elixir module, and essentially ignore the state functionality. The stores are not tied to URLs, and since there is no state, you don’t have to worry about resetting it.  So I might have a <code>product</code> store, with  <code>get</code>, <code>all</code>, <code>update</code>, actions.  They don’t commit, they simply return the data. Whatever component made the API call is responsible for passing the data down to the child components; which I presume makes fans of dependency injection warm and fuzzy. In that model, you could make the argument that you don’t even <em>need</em> Vuex anymore, but I’d disagree because I still use the root store for session data. I also find that I have way more props on components than I’d like, and sometimes they’re there just as a pass-through to a child component! The elder components end up passing the kitchen sink down just incase a great-great-great grandchild component might need it.</p>
<p>In my opinion, they both have their merits, and I honestly go back and forth between which I prefer. I think Evan would say the latter was for smaller apps, and the former was for bigger apps. There’s a lot of gray area in there though…</p>
<p>Hope that helps.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="143350" 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/which-ui-framework-you-prefer-to-use-along-with-phoenix-api-back-end/25334/14">Post #13</a>
	                </div>
	            </div>
              <div id="likers-container-143350" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="143350"
                     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="143351" data-post-id="143351">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Thanks for the interesting response I have many similar feelings to you on all this.</p>
<p>I quite like the idea of having a store per “page” with state that lasts as long as the components is mounted but I also understand the uneasiness of putting this in the vuex state in the first place.</p>
<p>Are you making several smaller gql queries for different parts of data in your “page”? Do you still have done kind of loading/loaded/failed indicators in your pages and how do you identify these from a gql queries?</p>
<p>I assume that you also have some date that you keep more long lived that ‘page’ components lifecycle like auth tokens, notifications counter and reference data etc? Are these always pulled from separate queries or somehow parts of your responses are designated to end up in these longer lived state buckets?</p>
<p>Regarding your prop data propogation, I am always unsure about this too. I feel like if the data is present in the store then am I just passing props down to dumb containers for the sake of it.</p>
<p>I completely agree with this in theory so to try and make components as decoupled as possible, but that chain of prop passing never gives me a good feeling if I’m going further than one level down.</p>
<aside class="quote no-group" data-username="bjunc" data-post="14" data-topic="25334">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/bjunc/48/16781_2.png" class="avatar"> bjunc:</div>
<blockquote>
<p>So a REST call for <code>/users/1</code> would internally call a GQL query, which would then tap into Ecto</p>
</blockquote>
</aside>
<p>Ok that’s interesting because I was more thinking along the lines of a gql resolvers querying a rest endpoint that would retrieve the data and not the reverse.</p>
<p>In some ways does this not remove the benefit of gql as you have a flexible query that is now hidden behind a ridgid resource?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="143351" 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/which-ui-framework-you-prefer-to-use-along-with-phoenix-api-back-end/25334/15">Post #14</a>
	                </div>
	            </div>
              <div id="likers-container-143351" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="143351"
                     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="143352" data-post-id="143352">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Phoenix and Vue are the “magic stack” for me. Ever since I started using them together two years ago, I haven’t looked back.</p>
<p>For reference, I also dabbled in React for a while, but didn’t find it nearly as “natural” as Vue. IMO it abstracts away too much, and its source code was kind of a mess at the time I read it. I also don’t like that JSX is its go-to default and everything else is kind of a second thought.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="143352" 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/which-ui-framework-you-prefer-to-use-along-with-phoenix-api-back-end/25334/16">Post #15</a>
	                </div>
	            </div>
              <div id="likers-container-143352" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="143352"
                     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="143487" data-post-id="143487">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="chrisjowen" data-post="15" data-topic="25334">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/chrisjowen/48/13126_2.png" class="avatar"> chrisjowen:</div>
<blockquote>
<p>Are you making several smaller gql queries for different parts of data in your “page”?</p>
</blockquote>
</aside>
<p>Yes. The main page data is fetched server-side for SEO. On mount in the browser, additional below-the-fold content is fetched; which is sometimes handled by the parent, and sometimes delegated to the child components. You need to find the balance on page load performance and SEO. Additionally, you can use <code>IntersectionObserver</code> to fetch content only as the user is about to scroll that section into view.</p>
<aside class="quote no-group" data-username="chrisjowen" data-post="15" data-topic="25334">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/chrisjowen/48/13126_2.png" class="avatar"> chrisjowen:</div>
<blockquote>
<p>Do you still have done kind of loading/loaded/failed indicators in your pages and how do you identify these from a gql queries?</p>
</blockquote>
</aside>
<p>Yes. For cascading parent/child/grandchild components, it’s easy enough to have a <code>loading: true</code> data prop by default in the parent, and then set <code>loading: false</code> when the data is returned from the store action. It can get a little more tricky if a sibling component wants to know the loading status (eg. a dashboard where multiple panels are displaying the same data differently).  Still doable, and I can share how I do it, if you like.</p>
<aside class="quote no-group" data-username="chrisjowen" data-post="15" data-topic="25334">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/chrisjowen/48/13126_2.png" class="avatar"> chrisjowen:</div>
<blockquote>
<p>I assume that you also have some date that you keep more long lived that ‘page’ components lifecycle like auth tokens, notifications counter and reference data etc?</p>
</blockquote>
</aside>
<p>Yes, the session data (user info), and extracted cookie / localStorage data is kept in the root store, as well as actions for logging in, etc.. I almost always wrap cookie and localStorage get/set in actions / mutations.</p>
<aside class="quote no-group" data-username="chrisjowen" data-post="15" data-topic="25334">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/chrisjowen/48/13126_2.png" class="avatar"> chrisjowen:</div>
<blockquote>
<p>Are these always pulled from separate queries or somehow parts of your responses are designated to end up in these longer lived state buckets?</p>
</blockquote>
</aside>
<p>It’s case by case – but as a general rule – things like application settings and user profile data are all stored in the root store. I usually have a root getter called <code>isGranted</code> that I can use for client-side permissions.</p>
<aside class="quote no-group" data-username="chrisjowen" data-post="15" data-topic="25334">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/chrisjowen/48/13126_2.png" class="avatar"> chrisjowen:</div>
<blockquote>
<p>Ok that’s interesting because I was more thinking along the lines of a gql resolvers querying a rest endpoint that would retrieve the data and not the reverse.</p>
</blockquote>
</aside>
<p>You’d run into trouble pretty quick. GQL is “declarative”, which means the user might query a field that your REST API wouldn’t have returned. So you can wrap your GraphQL in REST, but you really can’t wrap your REST in GraphQL.</p>
<aside class="quote no-group" data-username="chrisjowen" data-post="15" data-topic="25334">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/chrisjowen/48/13126_2.png" class="avatar"> chrisjowen:</div>
<blockquote>
<p>In some ways does this not remove the benefit of gql as you have a flexible query that is now hidden behind a ridgid resource?</p>
</blockquote>
</aside>
<p>Yes, and that’s one of the many reasons why GraphQL is superior to REST – in my opinion. REST is rigid by comparison. Sophisticated REST APIs like Stripe use <code>expand</code> query params to tell the endpoint to include nested data, but that can only get you so far.</p>
<p>So to offer REST on top of GraphQL, you’re doing it not because it offers more functionality, but rather maintaining legacy API endpoints as you move from REST to GraphQL, or simply providing developer options. Not everyone is comfortable yet with GraphQL.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="143487" 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/which-ui-framework-you-prefer-to-use-along-with-phoenix-api-back-end/25334/17">Post #16</a>
	                </div>
	            </div>
              <div id="likers-container-143487" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="143487"
                     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="143609" data-post-id="143609">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Just because I didn’t see it mentioned yet, I have to say I love Elm on the front-end, with phoenix on the back-end. I love the type safety and other guarantees Elm gives that a JS or even Typescript framework can’t, and once you’re familiar enough with it, it is a joy to work with.<br>
It seems less mentioned around here than it used to be, but Elm still has a great committed community around it.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="143609" 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/which-ui-framework-you-prefer-to-use-along-with-phoenix-api-back-end/25334/18">Post #17</a>
	                </div>
	            </div>
              <div id="likers-container-143609" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="143609"
                     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="143634" data-post-id="143634">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="colinbankier" data-post="18" data-topic="25334">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/colinbankier/48/2405_2.png" class="avatar"> colinbankier:</div>
<blockquote>
<p>love the type safety and other guarantees Elm</p>
</blockquote>
</aside>
<p>I have seen this statement posted a few times on this forum,  which makes me ponder due to Elixir lack of type checking. Do you find the lack of type checking is less of an issue with Elixir compared to JS (maybe due to its functional nature or immutability ) ?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="143634" 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/which-ui-framework-you-prefer-to-use-along-with-phoenix-api-back-end/25334/19">Post #18</a>
	                </div>
	            </div>
              <div id="likers-container-143634" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="143634"
                     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="143721" data-post-id="143721">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Vue.js+Vue Router+Vuex with <a href="https://buefy.org/" rel="noopener nofollow ugc">Buefy</a> (a pretty cool Bulma-based UI component library).</p>
<p>I am curious about <a href="https://svelte.dev/" rel="noopener nofollow ugc">Svelte</a>, is anyone here using it for some relatively complex front-end?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="143721" 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/which-ui-framework-you-prefer-to-use-along-with-phoenix-api-back-end/25334/20">Post #19</a>
	                </div>
	            </div>
              <div id="likers-container-143721" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="143721"
                     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="143727" data-post-id="143727">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I have really enjoyed using <a href="https://materializecss.com/" rel="noopener nofollow ugc">Materialize</a>. Used it most recently for <a href="https://slickb.it" rel="noopener nofollow ugc">one of my projects</a> if you want to take a look.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="143727" 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/which-ui-framework-you-prefer-to-use-along-with-phoenix-api-back-end/25334/21">Post #20</a>
	                </div>
	            </div>
              <div id="likers-container-143727" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="143727"
                     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/25334/load_more?page=3">Load more posts (6 remaining)</a>
</div></template></turbo-stream>