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


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I understood the first part where you integrate and liveview with web components, however you lost me on the second part.</p>
<p>If you ditch liveview in favor of graphql and houdini, how is this different from having to maintain 2 separate applications?</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="312708" 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/help-me-choose-between-liveview-and-vue/30001/42">Post #41</a>
	                </div>
	            </div>
              <div id="likers-container-312708" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="312708"
                     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 #41"></div>
  </section>
</div>
    <div class="postbit" id="312741" data-post-id="312741">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>My point is the complexity is about the same using a JS library vs Liveview with the approach I am using.</p>
<p>Design System, Houdini GraphQL on the client, Ash on the backend.</p>
<p>Using Svelte JS with Houdini GraphQL is less friction vs using LiveView because the web component wrappers exist vs having to create my own, but I still have some amount of effort to describe the GraphQL fragments on the client and server, and the counterpoint with LiveView is that I still have to think about routing on the server and mediating between my domain and LiveView, handling events and state.</p>
<p>There is not much separating the two options and it comes down to some other factors:</p>
<ul>
<li>Two languages vs one</li>
<li>Can easily implement PWA with Svelte or React</li>
<li>LiveView connection handling on the browser is flakey. I have concerns with a jarring  LiveView issue “finding the internet” after switching tabs in mobile browsers or open close the device. I’ve seen it on multiple occasions with my own prototypes and on other LiveView sites too. There are persistent GitHub issues that are closed but the issue is not fully resolved.</li>
<li>Higher availability of front end developers for svelte or react vs Elixir Pheonix developers.</li>
<li>Given the Carbon design system and web components I don’t need or want a front end developer “with flair and creativity”.</li>
<li>Avoiding a specific role of front end only developer whilst bootstrapping can allow my team to be more general / backend focused.  Anyone with Elixir experience can be reasonably productive with UX guidelines.</li>
<li>A UX developer will consider usability and UX factors far more than a backend developer who naturally dislikes doing front end work.</li>
<li>If I separate the front end and backend then it is possible to develop features faster. This entails describing the  wireframe/prototype UI using a prototyping tool (eg Storybook and UXPin Merge). Then front end and backend developers can work building out their respective sides, with the backend team focusing first on describing the domain model and GraphQL contract in Ash to get a documented API interface.</li>
</ul>
<p>So its hard to say right this minute where the chips will land. I have a couple of experiments in progress to help me confirm the most productive way forward as it impacts hiring and planning. I have an each way bet in both approaches but right this moment Svelte+Houdini with Ash+Absinthe is looking to be the better choice than LiveView. It may end up that we just use Plug instead of Pheonix as there isn’t much need of Phoenix once it’s GraphQL and some static assets.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="312741" 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/help-me-choose-between-liveview-and-vue/30001/43">Post #42</a>
	                </div>
	            </div>
              <div id="likers-container-312741" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="312741"
                     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 #42"></div>
  </section>
</div>
    <div class="postbit" id="312750" data-post-id="312750">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>Some of the preceding messages sound a bit negative, so I feel like I want to even out the sentiment. We’re pretty happy and productive with LiveView, even without using any component libraries or CSS frameworks. Handling the whole feature from back-end to front-end helps us to keep the user’s needs and the end goal in mind throughout the development process. We avoid any back-and-forth between front-end and back-end developers, which makes it much easier to quickly experiment with different approaches and optimize the feature with our UX designers. We’re usually able to onboard new developers without or with little Elixir or LiveView experience quickly.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="312750" 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/help-me-choose-between-liveview-and-vue/30001/44">Post #43</a>
	                </div>
	            </div>
              <div id="likers-container-312750" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="312750"
                     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 #43"></div>
  </section>
</div>
    <div class="postbit" id="312755" data-post-id="312755">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I also keep reading all over the forums how there’s a huge gap in X, Y and Z with LiveView. I find it hard to reason with it.</p>
<p>With 3 “full stack” developers we’ve built and maintained an app built entirely with LV since v0.1.0. Since then A LOT has happened with the ecosystem (for the greater good) and besides some upgrades being time-consuming, it’s been a great ride.</p>
<p>We own CoreComponents (and a bunch of other component modules) and I don’t see the problem in reading the diff and updating whatever is necessary in our app - it’s not like it requires constant updates as it’s just a headstart for new apps, eventually it’ll be custom enough for the app’s needs. The app went through own-rolled CSS to Bulma and now Tailwind, all went fine.</p>
<p>We have no complaints from clients about the “We’re trying to find the internet” issue (well, we had once for a client that blocked WebSocket connections).</p>
<p>It does have a lot of accessibility features and tweaks. Enough to grant us contacts with schools districts where it’s required (ed-tech field).<br>
If we were to start a new project now, porting most of the components would be easy. So yeah starting a new project won’t give you all the bells and whistles one would want, but also for many apps and POCs you don’t need the full package. By the time you need everything you’d have sorted it out with your team.</p>
<p>There’s tools around that will get you very far beyond the starting skeleton, like PETAL and friends, and if they help throw them some money. Extend where they don’t.</p>
<p>I have past experience with Ember, Elm, React and Vue both with Rails and Phoenix, and I’m very sure we wouldn’t be able to build everything we’ve built with such a small team and keep shipping features while maintaining everything up to date if we were using anything else.</p>
<p>I can’t see the tooling (or the lack of it?) we have right now being a problem or getting in the way of building a successful business/app.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="312755" 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/help-me-choose-between-liveview-and-vue/30001/45">Post #44</a>
	                </div>
	            </div>
              <div id="likers-container-312755" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="312755"
                     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 #44"></div>
  </section>
</div>
    <div class="postbit" id="312759" data-post-id="312759">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>I’ve been following along and trying to refrain from saying anything but I can’t resist at this point.  I think has gone semi-off topic into adoption vs “should I use LiveView or Vue?”</p>
<p>As far as adoption goes, I do think the pre-1.0 label is relevant as it is a marker used by the team for when it’s considered truly “ready”.  The Elixir ecosystem in general seems to favour a slow and steady path to adoption.  This is particularly evident in telling us that we may get types sometime within the next five years but there’s a chance we may not get them at all.  This is in the face of not only a strong desire of a good chunk of the current community asking for it as well as many outsiders claiming this is the one blocker for them even trying the language.  All that to say that while we are certainly missing a state-of-the-art headless UI lib, there is precedent in why one hasn’t been pumped as quickly as possible by the core team.</p>
<p>The other thing at play here is that LiveView is very much a “full stack” developer’s framework (as touched on by <a class="mention" href="/u/shamanime" rel="nofollow">@shamanime</a>).  I’m not certain that it’s ever going to try and be anything else?  I honestly don’t know.  Personally, I have never used a truly headless UI system in my career, though I’ve been sympathetic to <a class="mention" href="/u/adw632" rel="nofollow">@adw632</a>’s desires for one now that I’m working on my first contract since my spaghetti PHP days.  But ya, this has been touched on already but with LiveView there is no “web api” layer between your front and backend (hopefully you have some hard boundary, though, like via contexts) so seeing that as a positive is a big factor in choosing LiveView.</p>
<p>I had a bunch of other stuff but quickly:</p>
<p>I build up my components from <code>CoreComponents</code> and feel no pain but I do think it <em>might</em> be a bit of a mistake for two reasons:  The main one is that many people don’t seem to understand that it’s meant as a jumping-off point that you can edit all you want or throw away entirely.  I don’t have any examples off-hand but it seems to be hard to convince some people of this.  Of course, this means you can’t use the generators though that’s another issue, I’d say.  Secondly, I don’t think it’s great that it so heavily integrates Tailwind and there is a bit more work involved in remove it than simply <code>--no-tailwind</code>.  Now don’t get me wrong, I’m a Greying Beard who’s been <em>enjoying</em> writing CSS since 1998 and the <em>moment</em> I saw 100% ultility classes in action I was like, “I want that!  NOW!”  There is was no period of “you just need to use it to understand it” for this guy!  Seeing was believing!  But I respect choice as well as there are times where Tailwind doesn’t fit the bill.</p>
<p><a class="mention" href="/u/hubertlepicki" rel="nofollow">@hubertlepicki</a> I really like your post and it has a lot of good points.  The one thing about it is that it’s very much from the perspective of someone who already knows JavaScript.  This is somewhat fair since everyone in web development knows JavaScript to some degree, but there is an equally long laundry list of stuff to know in JS land if you want to become proficent that perhaps you take for granted.  For instance I wouldn’t claim that the JS event loop is all that much easier to grasp than message passing when learning from scratch.  “Async by default” is certainly <em>more</em> complicated.  And when it comes errors, no matter how much they’ve improved, JS errors are still horrendous.  No matter how many times I spend a few days working solely in JavaScript, as soon as I go back to any other language and get my first error I get this massive wave of excitement when it actually tells me exactly what’s wrong and exactly where.  Finally, mentioning that you have access to things like GraphQL—but if your app fits LiveView, GraphQL won’t even be in the equation.</p>
<p>Ok whoops, that wasn’t “quickly” at all! / <img src="https://forum.elixirforum.com/images/emoji/apple/soap.png?v=15" title=":soap:" class="emoji" alt=":soap:" loading="lazy" width="20" height="20"> <img src="https://forum.elixirforum.com/images/emoji/apple/package.png?v=15" title=":package:" class="emoji" alt=":package:" 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="312759" 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/help-me-choose-between-liveview-and-vue/30001/46">Post #45</a>
	                </div>
	            </div>
              <div id="likers-container-312759" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="312759"
                     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 #45"></div>
  </section>
</div>
    <div class="postbit" id="312774" data-post-id="312774">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<blockquote>
<p>“Async by default” is certainly <em>more</em> complicated</p>
</blockquote>
<p>Oh yes, that’s correct. I really dislike writing “business logic” in JavaScript for that reason. Anything that involves some sort of I/O becomes pain in the bottom, and unreadable at that as well. It’s been designed to handle clicks in the browser and not complicated business logic, and if you have a look at server code for Node.js or Next.js or otherwise JavaScript web servers it’s some scary stuff to see.</p>
<p>I wouldn’t want to rely on JavaScript with all its flaws not to create bugs, security issues by omission by developers mine or otherwise, and it Elixir is just way more stable language and environment to do so.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="312774" 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/help-me-choose-between-liveview-and-vue/30001/47">Post #46</a>
	                </div>
	            </div>
              <div id="likers-container-312774" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="312774"
                     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 #46"></div>
  </section>
</div>
    <div class="postbit" id="312775" data-post-id="312775">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>From my personal experience, I always found developing with liveview faster, I have been using it for most of the projects I worked at since liveivew 0.1. Even with the lack of a good component system, which for me personally is an annoyance because I hate creating designs like a cavemen in a technology of the past, I found it much more enjoyable and fast in the overall picture.</p>
<p>I think the biggest time killer of frontend applications is having to maintain the communication contract. It does seem that graphql is a popular choice nowadays and more efficient than writing custom http endpoints, however this is still the prominent place where a lot of development time is sunk.</p>
<aside class="quote no-group" data-username="adw632" data-post="43" data-topic="30001">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/a/9d8465/48.png" class="avatar"> adw632:</div>
<blockquote>
<p>Can easily implement PWA with Svelte or React</p>
</blockquote>
</aside>
<p>I think that by the time you will adapt your application to be PWA, you would have long implemented the functionality natively. I would classify this as people claiming that writing JS on both frontend and backend requires a unified knowledge set, when in reality you have 2 separate runtimes with different constrains and capabilities.</p>
<aside class="quote no-group" data-username="adw632" data-post="43" data-topic="30001">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/a/9d8465/48.png" class="avatar"> adw632:</div>
<blockquote>
<p>LiveView connection handling on the browser is flakey. I have concerns with a jarring LiveView issue “finding the internet” after switching tabs in mobile browsers or open close the device. I’ve seen it on multiple occasions with my own prototypes and on other LiveView sites too. There are persistent GitHub issues that are closed but the issue is not fully resolved.</p>
</blockquote>
</aside>
<p>I don’t think this should be a concern worth thinking over. The same could happen with a front-end, where you will timeout a request and place the application in an unknown state or crash it entirely, at least with liveview you have fault tolerance in this case.</p>
<aside class="quote no-group" data-username="adw632" data-post="43" data-topic="30001">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/a/9d8465/48.png" class="avatar"> adw632:</div>
<blockquote>
<p>Higher availability of front end developers for svelte or react vs Elixir Pheonix developers.</p>
</blockquote>
</aside>
<p>Indeed, however the other reality is that finding a few great elixir developers will allow you to replace an army of JS developers. I never worked in teams with a big number of developers, however I think that small focused teams always outperform big teams in terms of performance and quality.</p>
<aside class="quote no-group" data-username="adw632" data-post="43" data-topic="30001">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/a/9d8465/48.png" class="avatar"> adw632:</div>
<blockquote>
<p>Avoiding a specific role of front end only developer whilst bootstrapping can allow my team to be more general / backend focused. Anyone with Elixir experience can be reasonably productive with UX guidelines.</p>
</blockquote>
</aside>
<p>This is a great reason. Developers that are invested fully into the product, will also start to have insights and make correct abstraction and performance decisions, creating a great product is a team game.</p>
<aside class="quote no-group" data-username="adw632" data-post="43" data-topic="30001">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/a/9d8465/48.png" class="avatar"> adw632:</div>
<blockquote>
<p>If I separate the front end and backend then it is possible to develop features faster. This entails describing the wireframe/prototype UI using a prototyping tool (eg Storybook and UXPin Merge). Then front end and backend developers can work building out their respective sides, with the backend team focusing first on describing the domain model and GraphQL contract in Ash to get a documented API interface.</p>
</blockquote>
</aside>
<p>I find this argument strange. Can’t you hire someone specializing in frontend development and have him build those things on server-side? I mean he has access to <code>heex</code> templates (that are not much different from what front-end frameworks use), css and js. Make him build everything as components with a good API and there you have it, he writes minimal elixir and you have your divison of responsibilities.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="312775" 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/help-me-choose-between-liveview-and-vue/30001/48">Post #47</a>
	                </div>
	            </div>
              <div id="likers-container-312775" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="312775"
                     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 #47"></div>
  </section>
</div>
    <div class="postbit" id="312787" data-post-id="312787">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<p>All your points resonate with me very much.  It’s just at the end you threw out a pretty big “can’t you just” <img src="https://forum.elixirforum.com/images/emoji/apple/wink.png?v=15" title=":wink:" class="emoji" alt=":wink:" loading="lazy" width="20" height="20">  I think finding a <em>good</em> frontend developer who is willing to have a hole on their resume missing some front-end JS framework would be pretty tough.  Not impossible, but pretty tough!  I could be wrong (in fact I hope I’m wrong).</p>
<p>I will also say that if you want a PWA <em>web</em> app—ie, you know many of your users will have JS turned off and won’t have a native version—LiveView is certainly not the way.  Rails’ Turbo is actually really good for this.  Remix does this, I believe, but then as <a class="mention" href="/u/hubertlepicki" rel="nofollow">@hubertlepicki</a> mentioned, you now have your business logic in JavaScript.</p>
<p>But ya, the whole reason I’ve taken interest in this thread is that I’ve been feeling the pain of not having a headless UI.  I’m eager to bring <a href="https://hex.pm/packages/doggo" rel="nofollow">Doggo</a> into my next personal project.  Unfortunately, I don’t have time to incorporate into my current one.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="312787" 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/help-me-choose-between-liveview-and-vue/30001/49">Post #48</a>
	                </div>
	            </div>
              <div id="likers-container-312787" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="312787"
                     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 #48"></div>
  </section>
</div>
    <div class="postbit" id="312797" data-post-id="312797">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="sodapopcan" data-post="49" data-topic="30001">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sodapopcan/48/34668_2.png" class="avatar"> sodapopcan:</div>
<blockquote>
<p>But ya, the whole reason I’ve taken interest in this thread is that I’ve been feeling the pain of not having a headless UI. I’m eager to bring <a href="https://hex.pm/packages/doggo" rel="nofollow">Doggo </a> into my next personal project. Unfortunately, I don’t have time to incorporate into my current one.</p>
</blockquote>
</aside>
<p>I really think Doggo will be the start of good things for the LiveView ecosystem.</p>
<aside class="quote no-group" data-username="D4no0" data-post="48" data-topic="30001">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/d4no0/48/33624_2.png" class="avatar"> D4no0:</div>
<blockquote>
<p>I find this argument strange. Can’t you hire someone specializing in frontend development and have him build those things on server-side? I mean he has access to <code>heex</code> templates (that are not much different from what front-end frameworks use), css and js. Make him build everything as components with a good API and there you have it, he writes minimal elixir and you have your divison of responsibilities.</p>
</blockquote>
</aside>
<p>Similar to <a class="mention" href="/u/sodapopcan" rel="nofollow">@sodapopcan</a>, if I hire a front end developer, it would be because they are experienced and efficient in the front end framework I would be using. It’s not my preferred option and as I stated previously a backend developer is far more useful. Liveview is the solution which avoids the front end JS tar pit and is why I have been experimenting with web components and design systems as a way forward.</p>
<aside class="quote no-group" data-username="hubertlepicki" data-post="47" data-topic="30001">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/hubertlepicki/48/6822_2.png" class="avatar"> hubertlepicki:</div>
<blockquote>
<p>I wouldn’t want to rely on JavaScript with all its flaws not to create bugs, security issues by omission by developers mine or otherwise, and it Elixir is just way more stable language and environment to do so.</p>
</blockquote>
</aside>
<p>Believe me when I say I agree whole heartedly, I’ve never wanted to be in JS or TS land. I chose Elixir because the paradigm is very safe and side effect free.</p>
<aside class="quote no-group" data-username="shamanime" data-post="45" data-topic="30001">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/shamanime/48/32728_2.png" class="avatar"> shamanime:</div>
<blockquote>
<p>There’s tools around that will get you very far beyond the starting skeleton, like PETAL and friends, and if they help throw them some money. Extend where they don’t.</p>
</blockquote>
</aside>
<p>Yeah I already looked at the options and accessibility and keyboard navigation was not where it needed to be.</p>
<aside class="quote no-group" data-username="woylie" data-post="44" data-topic="30001">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/woylie/48/38856_2.png" class="avatar"> woylie:</div>
<blockquote>
<p>We avoid any back-and-forth between front-end and back-end developers, which makes it much easier to quickly experiment with different approaches and optimize the feature with our UX designers.</p>
</blockquote>
</aside>
<p>Yes this is the benefit of the server rendered approach and cutting out the middle layers.</p>
<p>Depending what the experiments are, prototyping tools can also save development resources whilst the designers play what if</p>
<p>I’ve also worked on larger projects and teams where you did need multiple front end teams and a backend team. This was because there were native clients in the mix as well as web so it made sense to expose an API on the server only. Fortunately that’s not my use case currently.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="312797" 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/help-me-choose-between-liveview-and-vue/30001/50">Post #49</a>
	                </div>
	            </div>
              <div id="likers-container-312797" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="312797"
                     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 #49"></div>
  </section>
</div>
    <div class="postbit" id="312804" data-post-id="312804">
  <section>
    <div class="post-wrap">


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

	        <div class="thread-main">
	            <div class="post-body" data-turbo="false">
								<aside class="quote no-group" data-username="sodapopcan" data-post="49" data-topic="30001">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/user_avatar/forum.elixirforum.com/sodapopcan/48/34668_2.png" class="avatar"> sodapopcan:</div>
<blockquote>
<p>I think finding a <em>good</em> frontend developer who is willing to have a hole on their resume missing some front-end JS framework would be pretty tough. Not impossible, but pretty tough! I could be wrong (in fact I hope I’m wrong).</p>
</blockquote>
</aside>
<p>I guess you are right in the current reality, which is sad, the resume matters more than the actual work that was done and the quality of it.</p>
<aside class="quote no-group" data-username="adw632" data-post="50" data-topic="30001">
<div class="title">
<div class="quote-controls"></div>
<img alt="" width="24" height="24" src="https://forum.elixirforum.com/letter_avatar_proxy/v4/letter/a/9d8465/48.png" class="avatar"> adw632:</div>
<blockquote>
<p>It’s not my preferred option and as I stated previously a backend developer is far more useful. Liveview is the solution which avoids the front end JS tar pit and is why I have been experimenting with web components and design systems as a way forward.</p>
</blockquote>
</aside>
<p>I agree, at least when starting the risk should be minimized. No matter the final decision, I hope that everything will work out for you, as technology choice is only a small part of what lies ahead when starting something from scratch, nonetheless very crucial.</p> 
	            </div>

	            <div class="base-line">
	                <div class="thread-counters">
	                    <span class="thread-count count-likes js-likers-trigger" title="Likes" data-post-id="312804" 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/help-me-choose-between-liveview-and-vue/30001/51">Post #50</a>
	                </div>
	            </div>
              <div id="likers-container-312804" 
                   class="likers-container"
                   data-first-post="false"
                   data-batch-url="/posts/batch_likers">
                   <div class="likers-placeholder" 
                     data-likers-post-id="312804"
                     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 #50"></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/30001/load_more?page=6">Load more posts (11 remaining)</a>
</div></template></turbo-stream>