<?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: Gustavo Decker Zambrano</title>
    <description>The latest articles on DEV Community by Gustavo Decker Zambrano (@gustavdz).</description>
    <link>https://dev.to/gustavdz</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%2F846416%2F44b303e7-7069-4fd6-a7dd-d44678e99aa9.png</url>
      <title>DEV Community: Gustavo Decker Zambrano</title>
      <link>https://dev.to/gustavdz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gustavdz"/>
    <language>en</language>
    <item>
      <title>I Built a Terminal Tool That Sends Daily Love Messages via WhatsApp — and Made It Open Source</title>
      <dc:creator>Gustavo Decker Zambrano</dc:creator>
      <pubDate>Fri, 05 Jun 2026 21:59:36 +0000</pubDate>
      <link>https://dev.to/gustavdz/i-built-a-terminal-tool-that-sends-daily-love-messages-via-whatsapp-and-made-it-open-source-5gfc</link>
      <guid>https://dev.to/gustavdz/i-built-a-terminal-tool-that-sends-daily-love-messages-via-whatsapp-and-made-it-open-source-5gfc</guid>
      <description>&lt;p&gt;&lt;em&gt;What started as a small personal automation became my first open source project. Here's how it works and why I built it.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Read it in &lt;a href="https://medium.com/@gustavdz/i-built-a-terminal-tool-that-sends-daily-love-messages-via-whatsapp-and-made-it-open-source-3ecbba8c3a8e" rel="noopener noreferrer"&gt;Medium&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There's a specific kind of guilt that comes from forgetting to check in on the people you care about. Not because you don't care — you do — but because life gets in the way. Work, notifications, context-switching. Days slip by.&lt;/p&gt;

&lt;p&gt;I wanted to fix that for myself. What I didn't expect was to end up building something other people might want too.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;I have someone in my life I want to send a heartfelt message to every single day. Not a generic "good morning ☀️" copy-paste — something that actually feels personal and intentional. But writing a fresh, meaningful message every day is harder than it sounds when you're half-awake and already behind on your morning.&lt;/p&gt;

&lt;p&gt;The obvious solution: automate it. The less obvious part: make it feel human.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter Waify
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/Deckasoft/waify" rel="noopener noreferrer"&gt;&lt;strong&gt;Waify&lt;/strong&gt;&lt;/a&gt; is a CLI tool that runs in your terminal and sends a daily AI-generated message to someone you care about via WhatsApp. You configure it once, and it takes care of the rest — every morning, at the time you choose, a thoughtful message lands in their chat.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @deckasoft/waify
waify setup   &lt;span class="c"&gt;# guided wizard: QR scan, AI setup, schedule&lt;/span&gt;
waify send    &lt;span class="c"&gt;# send your first message&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Three commands to get started.&lt;/p&gt;

&lt;h2&gt;
  
  
  How It Actually Works
&lt;/h2&gt;

&lt;p&gt;Under the hood, Waify combines two pieces:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Gemini&lt;/strong&gt; generates the message. You give it a custom system prompt and optional few-shot examples that capture your voice and relationship. The AI uses those to produce something that sounds like &lt;em&gt;you&lt;/em&gt;, not like a chatbot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenWA&lt;/strong&gt; handles the WhatsApp delivery. It's a self-hosted WhatsApp API server that runs locally in Docker — so your WhatsApp session and messages never leave your machine. You scan a QR code once during setup, and OpenWA keeps the session alive.&lt;/p&gt;

&lt;p&gt;A scheduling container (Ofelia) fires the sender at whatever cron schedule you configure — daily, weekdays only, weekends, or a custom pattern.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Setup Flow
&lt;/h3&gt;

&lt;p&gt;Running &lt;code&gt;waify setup&lt;/code&gt; walks you through everything interactively:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Starts the Docker services (OpenWA + scheduler)&lt;/li&gt;
&lt;li&gt;Opens a QR code for you to scan with WhatsApp&lt;/li&gt;
&lt;li&gt;Asks for your Gemini API key (free tier works fine)&lt;/li&gt;
&lt;li&gt;Lets you set the recipient, language, time, and frequency&lt;/li&gt;
&lt;li&gt;Generates all the config files and builds the sender image&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After that, &lt;code&gt;waify tui&lt;/code&gt; opens a terminal UI where you can browse message history, tweak settings, edit your AI prompt, and manage the schedule — all without touching config files.&lt;/p&gt;

&lt;h2&gt;
  
  
  Customizing the Tone
&lt;/h2&gt;

&lt;p&gt;The part I'm most happy with is the prompt system. Waify stores your AI instructions in &lt;code&gt;~/.config/waify/prompt.json&lt;/code&gt;, and you can shape it however you want:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;waify prompt edit              &lt;span class="c"&gt;# opens in $EDITOR&lt;/span&gt;
waify prompt add-example &lt;span class="s2"&gt;"Good morning! Hope your presentation goes well today 💪"&lt;/span&gt;
waify preview &lt;span class="nt"&gt;-n&lt;/span&gt; 3             &lt;span class="c"&gt;# see 3 message candidates without sending&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The few-shot examples are the real magic. Feed it messages that capture your actual tone — casual, warm, poetic, whatever — and the AI learns to match it. You can even pick the language the messages are generated in.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Open Source?
&lt;/h2&gt;

&lt;p&gt;Honestly? Because I wanted feedback.&lt;/p&gt;

&lt;p&gt;This is my first open source project. I built it for myself, got it working, and then thought: &lt;em&gt;other people probably have someone they want to reach out to every day too&lt;/em&gt;. The tool is useful, but I'm sure there are rough edges I can't see from the inside.&lt;/p&gt;

&lt;p&gt;So I published it under MIT. The code is on &lt;a href="https://github.com/Deckasoft/waify" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, the package is on &lt;a href="https://www.npmjs.com/package/@deckasoft/waify" rel="noopener noreferrer"&gt;npm&lt;/a&gt;, and anyone is welcome to use it, break it, and tell me what's wrong with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Coming
&lt;/h2&gt;

&lt;p&gt;The roadmap has a few things I already want to build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-recipient support&lt;/strong&gt; — the data model already supports arrays, it's just capped at 1 for now&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More AI providers&lt;/strong&gt; — OpenAI, Anthropic, Ollama via a pluggable &lt;code&gt;AIProvider&lt;/code&gt; interface&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More transport adapters&lt;/strong&gt; — Telegram and SMS are the obvious next targets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If any of those sound interesting to you — or if you have a completely different idea — I'd love to hear it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;Prerequisites: Docker, Node.js 22+, and a free &lt;a href="https://aistudio.google.com/apikey" rel="noopener noreferrer"&gt;Gemini API key&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @deckasoft/waify
waify setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The project is at &lt;strong&gt;&lt;a href="https://github.com/Deckasoft/waify" rel="noopener noreferrer"&gt;github.com/Deckasoft/waify&lt;/a&gt;&lt;/strong&gt;. Stars, issues, and PRs are all welcome. So is feedback in the comments here — this is the first time I'm putting something I built out into the world, and I'm genuinely curious what people think.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built with TypeScript, Node.js, Google Gemini, OpenWA, and Docker. MIT licensed.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>typescript</category>
      <category>cli</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
