<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Lee Ellam</title>
    <description>The latest articles on DEV Community by Lee Ellam (@leesus).</description>
    <link>https://dev.to/leesus</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3192729%2F8a85ab00-2bdf-4760-9763-fda63e8adefc.png</url>
      <title>DEV Community: Lee Ellam</title>
      <link>https://dev.to/leesus</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/leesus"/>
    <language>en</language>
    <item>
      <title>Postmarks - emailable, searchable link bookmarking</title>
      <dc:creator>Lee Ellam</dc:creator>
      <pubDate>Sat, 24 May 2025 12:35:46 +0000</pubDate>
      <link>https://dev.to/leesus/postmarks-emailable-searchable-link-bookmarking-365o</link>
      <guid>https://dev.to/leesus/postmarks-emailable-searchable-link-bookmarking-365o</guid>
      <description>&lt;p&gt;This is a submission for the &lt;a href="https://dev.to/challenges/postmark"&gt;Postmark Challenge: Inbox Innovators&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;Postmarks (naming things eh...) is a personal link bookmarking service.&lt;/p&gt;

&lt;p&gt;Users interact with the service via email, obviously, and can email a link to be bookmarked, email to list their links, and email a query to search for links via content. Each user get's their own database, courtesy of Cloudflare Durable Objects.&lt;/p&gt;

&lt;p&gt;It's barebones, but it was a fun little project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;Screenshots are below - it's email, so not much to demo. I've redacted the inbound email address to protect my Postmark free account email limit, but if the judges reach out I'll share the email address to interact with the app.&lt;/p&gt;

&lt;p&gt;Email a link:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4hh2b1tigd3rs4l0gxg8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4hh2b1tigd3rs4l0gxg8.jpg" alt="Add a link" width="800" height="746"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Link added reply:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0w7luqo5eh2p15xb9x09.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0w7luqo5eh2p15xb9x09.jpg" alt="Link added" width="800" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Search for a link:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4vhdhgmgpvtaaca31tbs.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4vhdhgmgpvtaaca31tbs.jpg" alt="Search for a link" width="800" height="745"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Search result reply:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgai8hk51ln3gnlugjum7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgai8hk51ln3gnlugjum7.jpg" alt="Search result" width="800" height="321"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Code Repository
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/leesus/postmarks" rel="noopener noreferrer"&gt;https://github.com/leesus/postmarks&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The app makes use of Postmarks Inbound and Transactional streams, to interact with a Cloudflare Worker, backed by Vectorize and Durable Objects. The smarts are provided by Workers AI, via the Vercel AI SDK.&lt;/p&gt;

&lt;p&gt;A full step-by-step tutorial is available on the GitHub repo.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>webdev</category>
      <category>api</category>
      <category>postmarkchallenge</category>
    </item>
  </channel>
</rss>
