<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>J()s≡ph W()rksh()p</title><link>https://jsphwrkshp.com/</link><description>Recent content on J()s≡ph W()rksh()p</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Wed, 15 Apr 2026 22:23:07 -0400</lastBuildDate><atom:link href="https://jsphwrkshp.com/index.xml" rel="self" type="application/rss+xml"/><item><title>SEO and LLM Discoverability for Phoenix Web Apps</title><link>https://jsphwrkshp.com/posts/seo-and-llm-discoverability-for-phoenix-web-apps/</link><pubDate>Wed, 15 Apr 2026 22:23:07 -0400</pubDate><guid>https://jsphwrkshp.com/posts/seo-and-llm-discoverability-for-phoenix-web-apps/</guid><description>&lt;h1 id="how-i-set-up-seo-and-llm-discoverability-for-my-phoenix-app"&gt;How I set up SEO and LLM discoverability for my Phoenix app&lt;/h1&gt;
&lt;p&gt;I recently shipped the discoverability layer for &lt;a href="https://wishlistpalace.com"&gt;Wish List Palace&lt;/a&gt;,
a free wish list app for coordinating family gift giving.
This post covers everything I put in place: standard search engine SEO, structured data,
and the newer &lt;code&gt;llms.txt&lt;/code&gt; standard for getting picked up by AI tools and training crawlers.
I hope people stumble upon this site. People who for whatever reason have a need for it, but I also
definitely didn&amp;rsquo;t want to buy ads or try to exploit SEO. The wishlist app space is already super
crowded so I don&amp;rsquo;t think any of those strategies would help much but making it easier for crawlers
and LLMs to understand what the app is and what it does was the goal.&lt;/p&gt;</description></item><item><title>Github Actions for Phoenix App Deployment to Hetzner</title><link>https://jsphwrkshp.com/posts/github-actions-for-phoenix-app-deployment-to-hetzner/</link><pubDate>Fri, 10 Apr 2026 23:21:17 -0400</pubDate><guid>https://jsphwrkshp.com/posts/github-actions-for-phoenix-app-deployment-to-hetzner/</guid><description>&lt;p&gt;Recently I started hosting &lt;a href="https://wishlistpalace.com/"&gt;wishlist palace&lt;/a&gt; on a Hetzner CX23 VPS
(that has 4 GB of ram and 2 vcpu). At work usually I package software into a container
before deploying it. One of the reasons I chose Elixir and Phoenix as the tech stack
for wishlist palace is that I wanted to try out &lt;code&gt;mix&lt;/code&gt; releases which prepare binaries.&lt;/p&gt;
&lt;h2 id="os-and-chip-architecture"&gt;OS and chip architecture&lt;/h2&gt;
&lt;p&gt;Originally I was just going to compile on my local machine (A thinkpad T480) and upload
to the server. But this didn&amp;rsquo;t work because the VPS I had provisioned was running ubuntu
24.04 LTS and my local machine is on EndevousOS (a flavor of Arch by-the-way). So rather
than local build and push, I opted to get claude to build a series of github actions that
would build on a worker that was running ubuntu. This had the added benefit of basically
completely setting up a basic CI loop so that when a release is cut we build a new binary
and deploy it on the server.&lt;/p&gt;</description></item><item><title>How to Protect Your New Vps</title><link>https://jsphwrkshp.com/posts/how-to-protect-your-new-vps/</link><pubDate>Fri, 03 Apr 2026 23:43:51 -0400</pubDate><guid>https://jsphwrkshp.com/posts/how-to-protect-your-new-vps/</guid><description>&lt;p&gt;I was very intimitaded about using a VPS outside a VPC my web apps. I had never used
a stand alone VPS without some kind of walled garden around it.
At work everything is usually behind a VPC. And I have always worked with awesome
security people to double check things! I don&amp;rsquo;t
have to worry so much about bots or people constantly trying to exploit my service (of course
we follow guidence from our excellent security colleagues). But when you turn on your new VPS
it immediately can be discovered and bots will immediately try to exploit vulnerabilities.&lt;/p&gt;</description></item><item><title>How to Use Augmented Coding to Build a Web App</title><link>https://jsphwrkshp.com/posts/how-to-use-augmented-coding-to-build-a-web-app/</link><pubDate>Sun, 29 Mar 2026 12:31:49 -0400</pubDate><guid>https://jsphwrkshp.com/posts/how-to-use-augmented-coding-to-build-a-web-app/</guid><description>&lt;p&gt;I recently launched &lt;a href="https://wishlistpalace.com"&gt;wishlist palace&lt;/a&gt; which is a web app to help share
information with friends and family about birthday lists and christmas lists. This app is my first
exploration into using Augemented coding (which is a term I prefer over vibe coding).&lt;/p&gt;
&lt;p&gt;When I first heard of vibe coding, I wasn&amp;rsquo;t particularly interested in engaging with it as a mode of
production I use myself. I enjoy the problem solving aspect of software engineering and at face
value much of that process falls into the lap of the LLM when doing vibe coding. And it&amp;rsquo;s not only the
solution of the problem at hand that is of interest to me but directly engaging and phrasing that problem
in the formalisms of programming languages scartches an itch in the same way I image poets feel when they
want to express themselves in poetry. The trouble with
the situation we (as tech folk) are in now is that the terms (like vibe and augmented coding) are highly overloaded
and are used to described vastly
different development cycles from the one shot prompt of 100 words attempting to get a polished app
to the very detailed prompt to obtain the 10 line fix you requested in a few hundred words.&lt;/p&gt;</description></item><item><title>Setting up a hugo static site hosted with Porkbun</title><link>https://jsphwrkshp.com/posts/how-to-host-static-sites-on-porkbun/</link><pubDate>Mon, 23 Mar 2026 22:24:03 -0400</pubDate><guid>https://jsphwrkshp.com/posts/how-to-host-static-sites-on-porkbun/</guid><description>&lt;h2 id="content-generation"&gt;Content generation&lt;/h2&gt;
&lt;p&gt;This is a static site generated with &lt;a href="https://gohugo.io/getting-started/quick-start/"&gt;hugo&lt;/a&gt; with the
PaperMod theme. I wanted an easy to use static site generator. I considered &lt;a href="https://jekyllrb.com/"&gt;Jekyll&lt;/a&gt;
and believe it to be a good choice for static sites. There seemed to be slightly more themes I liked with
hugo so I went with that. That&amp;rsquo;s a pretty superficial choice but I also don&amp;rsquo;t plan on hacking on the
site generation itself so I was agnostic to the Go versus Ruby choice.&lt;/p&gt;</description></item><item><title>Subscribe</title><link>https://jsphwrkshp.com/subscribe/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://jsphwrkshp.com/subscribe/</guid><description>&lt;p&gt;Subscribe to get new posts delivered straight to your inbox.&lt;/p&gt;
&lt;div class="subscribe-form"&gt;
&lt;p class="subscribe-label"&gt;→ get posts in your inbox&lt;/p&gt;
&lt;form
action="https://buttondown.com/api/emails/embed-subscribe/jsph"
method="post"
class="embeddable-buttondown-form"
&gt;
&lt;div class="subscribe-row"&gt;
&lt;label for="bd-email" class="subscribe-sr-label"&gt;Enter your email&lt;/label&gt;
&lt;input
type="email"
name="email"
id="bd-email"
class="subscribe-input"
placeholder="you@example.com"
required
/&gt;
&lt;input type="submit" value="subscribe" class="subscribe-btn" /&gt;
&lt;/div&gt;
&lt;p class="subscribe-hint"&gt;
no spam &amp;mdash; unsubscribe anytime. &amp;nbsp;
&lt;a href="https://buttondown.com/refer/jsph" target="_blank" rel="noopener"&gt;powered by buttondown.&lt;/a&gt;
&lt;/p&gt;
&lt;/form&gt;
&lt;/div&gt;</description></item></channel></rss>