|
6 | 6 | </description> |
7 | 7 | <link>https://stacktoheap.com/</link> |
8 | 8 | <atom:link href="https://stacktoheap.com/feed.xml" rel="self" type="application/rss+xml"/> |
9 | | - <pubDate>Fri, 06 Sep 2024 18:31:22 +0100</pubDate> |
10 | | - <lastBuildDate>Fri, 06 Sep 2024 18:31:22 +0100</lastBuildDate> |
| 9 | + <pubDate>Fri, 06 Sep 2024 18:36:23 +0100</pubDate> |
| 10 | + <lastBuildDate>Fri, 06 Sep 2024 18:36:23 +0100</lastBuildDate> |
11 | 11 | <generator>Jekyll v3.9.5</generator> |
12 | 12 |
|
13 | 13 | <item> |
14 | 14 | <title>Thoughts on FastHTML</title> |
15 | | - <description><p>I’ve been working on building a chat application that required complex visualizations and interactions. Initially, I decided to try out FastHTML for this project.</p> |
| 15 | + <description><p><img src="https://stacktoheap.com/images/fasthtml.jpg" width="686px" height="386px" /></p> |
| 16 | + |
| 17 | +<p>I’ve been working on building a chat application that required complex visualizations and interactions. Initially, I decided to try out FastHTML for this project.</p> |
16 | 18 |
|
17 | 19 | <p>FastHTML, combined with htmx, seemed like a promising stack, especially with its modern approach to handling dynamic web content. However, after spending considerable time with it, I found myself at a crossroads.</p> |
18 | 20 |
|
|
32 | 34 |
|
33 | 35 | <p>Another factor that contributed to my decision was the way views are written in FastHTML—using Python. Initially, I found this approach intriguing; it’s not every day you get to write your front-end code in Python without any Javascript or Typescript. But as the project grew, it became tedious. The novelty wore off, and I realized that separating concerns with a JavaScript-based front-end made more sense for the complexity I was dealing with.</p> |
34 | 36 |
|
| 37 | +<div class="language-python highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">Body</span><span class="p">(</span> |
| 38 | + |
| 39 | + <span class="n">Div</span><span class="p">(</span> |
| 40 | + <span class="n">Div</span><span class="p">(</span> |
| 41 | + <span class="n">H1</span><span class="p">(</span><span class="s">'Chat Bot'</span><span class="p">),</span> |
| 42 | + <span class="n">Div</span><span class="p">(</span><span class="o">*</span><span class="p">[</span><span class="n">ChatMessage</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> <span class="k">for</span> <span class="n">msg</span> <span class="ow">in</span> <span class="n">messages</span><span class="p">],</span> <span class="nb">id</span><span class="o">=</span><span class="s">"chatlist"</span><span class="p">,</span> <span class="n">cls</span><span class="o">=</span><span class="s">"chat-box h-[85vh] overflow-y-auto"</span><span class="p">),</span> |
| 43 | + <span class="n">Form</span><span class="p">(</span><span class="n">Group</span><span class="p">(</span><span class="n">ChatInput</span><span class="p">(),</span> <span class="n">Button</span><span class="p">(</span><span class="s">"Send"</span><span class="p">,</span> <span class="n">cls</span><span class="o">=</span><span class="s">"btn btn-primary"</span><span class="p">)),</span> |
| 44 | + <span class="n">hx_post</span><span class="o">=</span><span class="s">"/"</span><span class="p">,</span> <span class="n">hx_target</span><span class="o">=</span><span class="s">"#chatlist"</span><span class="p">,</span> <span class="n">hx_swap</span><span class="o">=</span><span class="s">"beforeend"</span><span class="p">,</span> |
| 45 | + <span class="n">cls</span><span class="o">=</span><span class="s">""</span><span class="p">,</span> |
| 46 | + <span class="p">),</span> |
| 47 | + <span class="n">cls</span> <span class="o">=</span> <span class="s">"pt-4 pl-4"</span> |
| 48 | + <span class="p">),</span> |
| 49 | + |
| 50 | + <span class="n">Div</span><span class="p">(</span> |
| 51 | + <span class="n">Div</span><span class="p">(</span> |
| 52 | + <span class="n">A</span><span class="p">(</span><span class="s">"Agent DAG"</span><span class="p">,</span> <span class="n">role</span><span class="o">=</span><span class="s">"tab"</span><span class="p">,</span> <span class="n">cls</span><span class="o">=</span><span class="s">"tab tab-active"</span><span class="p">),</span> |
| 53 | + <span class="n">A</span><span class="p">(</span><span class="s">"Agent Conversaion"</span><span class="p">,</span> <span class="n">role</span><span class="o">=</span><span class="s">"tab"</span><span class="p">,</span> <span class="n">cls</span><span class="o">=</span><span class="s">"tab"</span><span class="p">),</span> |
| 54 | + <span class="n">A</span><span class="p">(</span><span class="s">"LLM Traces"</span><span class="p">,</span> <span class="n">role</span><span class="o">=</span><span class="s">"tab"</span><span class="p">,</span> <span class="n">cls</span><span class="o">=</span><span class="s">"tab"</span><span class="p">),</span> |
| 55 | + <span class="n">role</span><span class="o">=</span><span class="s">"tablist"</span><span class="p">,</span> <span class="n">cls</span><span class="o">=</span><span class="s">"tabs tabs-boxed"</span> |
| 56 | + <span class="p">),</span> |
| 57 | + <span class="n">Div</span><span class="p">(</span> |
| 58 | + <span class="n">Div</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="s">"agentdag"</span><span class="p">),</span> |
| 59 | + <span class="n">cls</span> <span class="o">=</span> <span class="s">"p-4"</span> |
| 60 | + <span class="p">),</span> |
| 61 | + <span class="n">cls</span> <span class="o">=</span> <span class="s">"p-4"</span><span class="p">),</span> |
| 62 | + <span class="n">cls</span> <span class="o">=</span> <span class="s">"grid grid-cols-2 divide-x divide-primary"</span> |
| 63 | + <span class="p">),</span> |
| 64 | + <span class="n">cls</span> <span class="o">=</span> <span class="s">""</span> |
| 65 | + <span class="p">)</span> |
| 66 | +</code></pre></div></div> |
| 67 | + |
35 | 68 | <h2 id="transitioning-to-svelte">Transitioning to Svelte</h2> |
36 | 69 |
|
37 | 70 | <p>After wrestling with FastHTML for a while, I decided it was time to pivot. Svelte had been on my radar for quite some time, and the features provided by SvelteFlow (a framework visualizing flows with drag and drop nodes) were exactly what I needed for my project.</p> |
|
0 commit comments