<!doctype html>
<html lang="en" style="color-scheme: dark">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">

  <title>José Ustra</title>
  <meta name="description" content="Elixir, LiveView, and the tools I keep coming back to.">

  <link rel="stylesheet" href="https://joseustra.com/main.css">

  
    <link rel="icon" type="image/x-icon" href="/img/favicon.ico">
  
  

  <link rel="alternate" type="application/atom+xml" title="José Ustra" href="https://joseustra.com/atom.xml">

  
    <meta name="robots" content="index, follow">
  

  
  <meta property="og:title" content="José Ustra">
  <meta property="og:description" content="Elixir, LiveView, and the tools I keep coming back to.">
  <meta property="og:type" content="website">
  <meta property="og:site_name" content="José Ustra">
  
  <meta property="og:url" content="https://joseustra.com/">
  
    <meta property="og:image" content="https://joseustra.com/img/social_card.png">
    <meta name="twitter:image" content="https://joseustra.com/img/social_card.png">
    <meta name="twitter:card" content="summary_large_image">
  

  <script src="https://stts.thesidejourney.com/api/script.js" data-site-id="1" defer></script>
</head>
<body>

<div class="shell">

  <header class="top">
  <div class="row">
    <a href="https://joseustra.com" class="brand">
      <b>José Ustra</b><span class="sep">—</span><span class="tag">writing &amp; projects</span>
    </a>
    <nav class="primary" aria-label="Primary">
      <a href="https://joseustra.com" aria-current="page">Home</a>
      <a href="https://joseustra.com/blog">Blog</a>
      <a href="https://joseustra.com/projects">Projects</a>
      <a href="https://joseustra.com/about">About</a>
    </nav>
  </div>
</header>


  <main>
    





<section class="hero">
  
    <div class="eyebrow">Notes from a software developer</div>
  
  <h1>I write about <em>Elixir</em>, LiveView, and the tools I keep coming back to.</h1>
  
    <p class="lede">Mostly Elixir. Sometimes Neovim. Occasionally Livebook. Always specific — short posts about a thing that surprised me, and what I did about it.
</p>
  
</section>

<div class="section-head">
  <h2>Latest writing</h2>
  <div class="meta">5 of 6</div>
</div>

<ol class="posts">
  
    <li class="featured">
      <article class="post-row">
  <time class="post-date" datetime="2023-09-13">Sep 13, 2023</time>
  <div class="post-body">
    
      <span class="cat">liveview</span>
    
    <h3><a href="https://joseustra.com/blog/handle-liveview-streams-empty-state-with-tailwind-css/">Handle LiveView Streams empty state with Tailwind CSS</a></h3>
    
  </div>
</article>

    </li>
  
    <li>
      <article class="post-row">
  <time class="post-date" datetime="2023-07-14">Jul 14, 2023</time>
  <div class="post-body">
    
      <span class="cat">elixir</span>
    
    <h3><a href="https://joseustra.com/blog/automatically-run-tests-on-livebook-with-desktop-notifications/">Automatically run tests on Livebook with desktop notifications</a></h3>
    
  </div>
</article>

    </li>
  
    <li>
      <article class="post-row">
  <time class="post-date" datetime="2023-06-27">Jun 27, 2023</time>
  <div class="post-body">
    
      <span class="cat">elixir</span>
    
    <h3><a href="https://joseustra.com/blog/elixir-thin-back-arrow/">Elixir thin back arrow &lt;-</a></h3>
    
  </div>
</article>

    </li>
  
    <li>
      <article class="post-row">
  <time class="post-date" datetime="2023-06-22">Jun 22, 2023</time>
  <div class="post-body">
    
      <span class="cat">elixir</span>
    
    <h3><a href="https://joseustra.com/blog/factories-with-exmachina-avoid-duplicated-records/">Factories with ExMachina - Avoid duplicated records</a></h3>
    
  </div>
</article>

    </li>
  
    <li>
      <article class="post-row">
  <time class="post-date" datetime="2023-05-05">May 5, 2023</time>
  <div class="post-body">
    
      <span class="cat">elixir</span>
    
    <h3><a href="https://joseustra.com/blog/reply-vs-noreply-liveview-handle-event/">When return {:reply, :map, socket} on a LiveView handle_event/3?</a></h3>
    
  </div>
</article>

    </li>
  
</ol>

<p class="view-all"><a href="https://joseustra.com/blog">Read the full archive →</a></p>

  </main>

  <footer class="bottom">
  <nav>
    <a href="https://joseustra.com/blog">Blog</a>
    <a href="https://joseustra.com/projects">Projects</a>
    <a href="https://joseustra.com/about">About</a>
    <a href="https://joseustra.com/atom.xml">RSS</a>
  </nav>
  <div class="right">© 2026 José Ustra</div>
</footer>


</div>

</body>
</html>
