<?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: Nijeesh .N.J</title>
    <description>The latest articles on DEV Community by Nijeesh .N.J (@nijeesh_nj_01378962f208).</description>
    <link>https://dev.to/nijeesh_nj_01378962f208</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1930224%2F3c8e81a2-2ca6-4e50-a953-c640be3f3472.jpg</url>
      <title>DEV Community: Nijeesh .N.J</title>
      <link>https://dev.to/nijeesh_nj_01378962f208</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nijeesh_nj_01378962f208"/>
    <language>en</language>
    <item>
      <title>waifu ♡ — She Greets You, Vibes With You, and Says Bye When You Leave</title>
      <dc:creator>Nijeesh .N.J</dc:creator>
      <pubDate>Sun, 12 Jul 2026 07:04:03 +0000</pubDate>
      <link>https://dev.to/nijeesh_nj_01378962f208/waifu-she-greets-you-vibes-with-you-and-says-bye-when-you-leave-3lje</link>
      <guid>https://dev.to/nijeesh_nj_01378962f208/waifu-she-greets-you-vibes-with-you-and-says-bye-when-you-leave-3lje</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/weekend-2026-07-09"&gt;Weekend Challenge: Passion Edition&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;waifu&lt;/strong&gt; — a flirty voice companion that wraps around &lt;a href="https://claude.com/claude-code" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt; in your terminal.&lt;/p&gt;

&lt;p&gt;Type &lt;code&gt;waifu claude&lt;/code&gt; instead of &lt;code&gt;claude&lt;/code&gt;, and she greets you out loud before handing control to a normal Claude Code session, then says goodbye when you exit. Get bored mid-session? &lt;code&gt;waifu vibeme&lt;/code&gt; composes and plays an original instrumental track on the spot — lofi, synthwave, jazz, whatever mood you ask for.&lt;/p&gt;

&lt;p&gt;The goal was simple: take the CLI tool I already live in all day and give it a little personality, without getting in the way of actual work. No dashboards, no wrapper UI to learn — just her voice layered on top of the tool you already use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;waifu claude              &lt;span class="c"&gt;# greets you → runs Claude Code → says bye&lt;/span&gt;
waifu claude &lt;span class="nt"&gt;--vibeme&lt;/span&gt;     &lt;span class="c"&gt;# …with a background score looping while you code&lt;/span&gt;
waifu vibeme lofi rain piano
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

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

&lt;p&gt;Install and try it yourself — it's a real CLI, not a hosted demo:&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; https://github.com/codebyNJ/waifu/releases/latest/download/waifu-cli.tgz
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ELEVENLABS_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-key   &lt;span class="c"&gt;# free tier works&lt;/span&gt;
waifu setup &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; waifu claude
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvmly9bhxy8u5wpts09nl.png" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvmly9bhxy8u5wpts09nl.png" alt=" " width="800" height="295"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/codebyNJ" rel="noopener noreferrer"&gt;
        codebyNJ
      &lt;/a&gt; / &lt;a href="https://github.com/codebyNJ/waifu" rel="noopener noreferrer"&gt;
        waifu
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A flirty voice companion wrapped around Claude Code, powered by the ElevenLabs API.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;waifu ♡&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a href="https://github.com/codebyNJ/waifu/releases" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/5d71184c6eecfbc37ee724e639dc724ce0735a3a38b430eaa9f88eef02547d81/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f762f72656c656173652f636f646562794e4a2f7761696675" alt="release"&gt;&lt;/a&gt;
&lt;a href="https://github.com/codebyNJ/waifu/actions/workflows/release.yml" rel="noopener noreferrer"&gt;&lt;img src="https://github.com/codebyNJ/waifu/actions/workflows/release.yml/badge.svg" alt="release workflow"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A flirty voice companion wrapped around &lt;a href="https://claude.com/claude-code" rel="nofollow noopener noreferrer"&gt;Claude Code&lt;/a&gt;, powered by the &lt;a href="https://elevenlabs.io" rel="nofollow noopener noreferrer"&gt;ElevenLabs&lt;/a&gt; API.&lt;/p&gt;
&lt;p&gt;She greets you (sweetly, or… not so sweetly) when you start coding, says goodbye when you leave, and composes instrumental background scores when you're bored.&lt;/p&gt;
&lt;div class="snippet-clipboard-content notranslate position-relative overflow-auto"&gt;&lt;pre class="notranslate"&gt;&lt;code&gt;waifu claude          # she greets you → Claude Code runs → she says bye
waifu vibeme          # she composes an instrumental vibe &amp;amp; plays it
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Install&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Every push to &lt;code&gt;main&lt;/code&gt; publishes a fresh &lt;a href="https://github.com/codebyNJ/waifu/releases" rel="noopener noreferrer"&gt;GitHub Release&lt;/a&gt; with a ready-to-install tarball, so anyone can grab the latest:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install -g https://github.com/codebyNJ/waifu/releases/latest/download/waifu-cli.tgz&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Or install straight from source:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install -g codebyNJ/waifu   &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; npm builds it for you via the prepare script&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Bring your own key&lt;/h3&gt;
&lt;/div&gt;
&lt;p&gt;Nothing secret ships in the package — you supply your &lt;strong&gt;own&lt;/strong&gt; &lt;a href="https://elevenlabs.io" rel="nofollow noopener noreferrer"&gt;ElevenLabs API key&lt;/a&gt; (the free tier works):&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;&lt;span class="pl-k"&gt;export&lt;/span&gt; ELEVENLABS_API_KEY=your-key   &lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; add to your shell profile to persist&lt;/span&gt;
&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; …or keep it in a .env file in&lt;/span&gt;&lt;/pre&gt;…
&lt;/div&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/codebyNJ/waifu" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


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

&lt;p&gt;It's a small, dependency-free TypeScript CLI — no Express, no framework, just Node 22's built-in &lt;code&gt;fetch&lt;/code&gt; and &lt;code&gt;.env&lt;/code&gt; loading. A few decisions mattered more than the rest:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Voice, not just TTS.&lt;/strong&gt; My first pass used ElevenLabs' &lt;code&gt;eleven_multilingual_v2&lt;/code&gt; model, and the result was technically speech but emotionally dead — every line read in the same flat tone regardless of what it said. I switched to &lt;strong&gt;&lt;code&gt;eleven_v3&lt;/code&gt;&lt;/strong&gt;, which reads inline audio tags like &lt;code&gt;[whispers]&lt;/code&gt;, &lt;code&gt;[giggles]&lt;/code&gt;, and &lt;code&gt;[sighs]&lt;/code&gt; embedded directly in the text and performs them. Every one of her lines is hand-tagged and scaled by a &lt;code&gt;spice&lt;/code&gt; setting (&lt;code&gt;mild&lt;/code&gt; → &lt;code&gt;flirty&lt;/code&gt; → &lt;code&gt;spicy&lt;/code&gt;), so the same greeting can be sweet or unmistakably flirtatious depending on your mood. Tags are stripped before anything hits the screen or an older model, so they never leak out as literal text.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Instrumental companionship.&lt;/strong&gt; &lt;code&gt;vibeme&lt;/code&gt; calls ElevenLabs' Music API with a mood prompt — lofi, synthwave, ambient — and plays the result with a tiny animated terminal equalizer. On accounts without Music API access it falls back automatically to the sound-generation endpoint, so the feature degrades gracefully instead of failing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero-friction distribution.&lt;/strong&gt; A GitHub Actions workflow stamps a new version and cuts a GitHub Release with an installable tarball on every push to &lt;code&gt;main&lt;/code&gt; — anyone can &lt;code&gt;npm install -g&lt;/code&gt; the latest release URL directly, no npm registry account required. Nothing secret ships in the package; everyone brings their own ElevenLabs key at runtime, with a friendly first-run message if it's missing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Respecting the terminal.&lt;/strong&gt; Spoken lines are cached by content hash, so repeated greetings cost zero API credits. &lt;code&gt;Ctrl+C&lt;/code&gt; is passed straight through to Claude Code during a session instead of being swallowed by the wrapper. &lt;code&gt;--mute&lt;/code&gt; (or &lt;code&gt;WAIFU_MUTE=1&lt;/code&gt;) turns it all off instantly for quiet environments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;Best Use of ElevenLabs&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>ai</category>
      <category>cli</category>
    </item>
  </channel>
</rss>
