<?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: Marouane K</title>
    <description>The latest articles on DEV Community by Marouane K (@marouaneks).</description>
    <link>https://dev.to/marouaneks</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%2F162525%2Fe6b5753c-1cf4-44e3-8af8-1ed46b1add72.jpeg</url>
      <title>DEV Community: Marouane K</title>
      <link>https://dev.to/marouaneks</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/marouaneks"/>
    <language>en</language>
    <item>
      <title>I made an AI yell my workouts at me (Sonic Kinetic)</title>
      <dc:creator>Marouane K</dc:creator>
      <pubDate>Fri, 10 Jul 2026 21:33:27 +0000</pubDate>
      <link>https://dev.to/marouaneks/i-made-an-ai-yell-my-workouts-at-me-sonic-kinetic-4ho2</link>
      <guid>https://dev.to/marouaneks/i-made-an-ai-yell-my-workouts-at-me-sonic-kinetic-4ho2</guid>
      <description>&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;I wanted a workout timer that doesn't just beep at me. So this weekend I built one that writes the workout AND talks me through it, out loud, in a voice that actually sounds like it's yelling at you when things get hard.&lt;/p&gt;

&lt;p&gt;You give it a callsign, how long you've got, what you want to work, and how brutal you want it. It hands that to Gemini, which breaks the whole thing into 30-90 second intervals with a coaching line for each one. Then every one of those lines gets turned into real audio by ElevenLabs before it ever hits your browser. Nothing is pre-recorded, nothing is a fixed track. Ask for a different workout, get a completely different script and a completely different set of audio clips, generated on the spot.&lt;/p&gt;

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

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/wY2_lEdJNcM"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Unedited screen recording, straight off my machine hitting the real APIs, sound included. Compose a routine, it comes back in a couple seconds, pacing curve draws itself as an SVG line, then hitting Start walks through each interval with the active one highlighted in red as it counts down and you actually hear it. The Maximum-intensity segments sound noticeably more unhinged because I turn the ElevenLabs stability knob way down for those specifically.&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://github.com/marwankous/sonic-kinetic" rel="noopener noreferrer"&gt;https://github.com/marwankous/sonic-kinetic&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I built it
&lt;/h2&gt;

&lt;p&gt;Go backend, one endpoint. It takes your workout params, sends a prompt to &lt;code&gt;gemini-3.1-flash-lite&lt;/code&gt; with a JSON schema locked down tight enough that I don't have to think about parsing garbage back out of it, and gets back a full timeline plus a heart-rate pacing curve.&lt;/p&gt;

&lt;p&gt;The part I actually enjoyed was the audio pipeline. Every coaching line in the timeline gets fired off to ElevenLabs at the same time, one goroutine each behind a &lt;code&gt;sync.WaitGroup&lt;/code&gt;, so a routine with a dozen segments doesn't take a dozen times longer than one with a single segment. Whatever comes back gets base64'd straight onto its segment. I also tie the &lt;code&gt;eleven_flash_v2_5&lt;/code&gt; stability setting to the segment's energy level, dropping it to 0.30 for anything marked Maximum, which is a small thing but it's the difference between a calm narrator and something that actually sounds like effort.&lt;/p&gt;

&lt;p&gt;Frontend's Angular, standalone components, styled like a terminal because I like terminals. The pacing curve is just a small pure function mapping numbers to an SVG polyline. Playback is a countdown timer per segment that doesn't care how long the audio clip actually is, it plays once and the timer decides when to move to the next row.&lt;/p&gt;

&lt;p&gt;Two things broke that I didn't expect. &lt;code&gt;gemini-2.5-flash&lt;/code&gt; is apparently dead for new API keys now, so that was a fun 404 to debug at midnight. And ElevenLabs won't let free accounts hit their stock "library" voices over the API anymore, so my first test just kept 402ing until I found a voice from the account's own set that actually worked.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>go</category>
      <category>angular</category>
    </item>
    <item>
      <title>I Built a Publishing Tool Because I Was Too Lazy to Write</title>
      <dc:creator>Marouane K</dc:creator>
      <pubDate>Sun, 07 Jun 2026 17:17:24 +0000</pubDate>
      <link>https://dev.to/marouaneks/i-built-a-publishing-tool-because-i-was-too-lazy-to-write-44b6</link>
      <guid>https://dev.to/marouaneks/i-built-a-publishing-tool-because-i-was-too-lazy-to-write-44b6</guid>
      <description>&lt;p&gt;I wanted to start a blog. I had a niche, I had opinions, and I genuinely wanted to write. But every time I sat down to publish something, I hit the same wall: I had nothing to say today. The blank page won every time.&lt;/p&gt;

&lt;p&gt;The problem wasn't ideas. It was the starting point. Writing from zero is hard. Reacting to something is easy. So I did what any developer does when they don't want to do the actual work: I built a tool to do it.&lt;/p&gt;




&lt;p&gt;The idea: What if, instead of writing from scratch, I could pull articles from feeds I already follow, let AI synthesize them into a draft, then edit that draft until it actually sounds like me?&lt;/p&gt;

&lt;p&gt;Step three is the whole point. I'm not trying to automate my blog. I'm giving myself something to react to instead of a blank page. The AI draft is rough clay. I'm still the one shaping it.&lt;/p&gt;




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

&lt;p&gt;Step 1 — Pick your sources. You connect RSS feeds in your niche. When new articles come in, you browse them and select the ones you want to merge. You can also add saved notes or drop in a URL directly. Any mix of the three works.&lt;/p&gt;

&lt;p&gt;Step 2 — Configure the generation. This is where it gets interesting. You're not just hitting "generate":&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prompt — custom instructions for what angle to take&lt;/li&gt;
&lt;li&gt;Goal — seo, storytelling, technical, or viral. Each one shifts how the AI approaches the piece.&lt;/li&gt;
&lt;li&gt;Heat — precise, normal, or wild. Controls how creative vs. conservative the output is.&lt;/li&gt;
&lt;li&gt;Reference articles — paste in up to 5 of your own past posts. The AI extracts tone samples from them and tries to match your style.&lt;/li&gt;
&lt;li&gt;Language — generates in whatever language you want&lt;/li&gt;
&lt;li&gt;Word count — min and max bounds&lt;/li&gt;
&lt;li&gt;Quality — standard or premium model, depending on how much you care about that particular post&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Step 3 — AI does its job. It first summarizes each source individually, then composes the full post from those summaries. The whole thing streams back in real time; you watch the text appear as it writes. Usually takes 20–40 seconds, depending on length.&lt;/p&gt;

&lt;p&gt;Step 4 — Edit. You land in a full WYSIWYG editor. Auto-saves every 30 seconds. This is the part that actually matters — you read it, fix what's wrong, add your own take, cut the parts that don't sound like you. The AI got you past the blank page. Now you do the actual work.&lt;/p&gt;

&lt;p&gt;Step 5 — Publish. Pick your platform (Ghost, WordPress, Medium, or any custom JSON API), then choose your mode: publish live now, save as a draft on the platform, or schedule for a specific date and time. Set a featured image and URL slug if you want, then send it.&lt;/p&gt;




&lt;p&gt;Did It Work?&lt;/p&gt;

&lt;p&gt;Posts published before Clypify: zero. Posts published after: more than zero, which is an infinite improvement.&lt;/p&gt;

&lt;p&gt;More seriously — having a draft to react to changed everything. Even when I delete half the AI output and rewrite the rest, I'm still faster than starting cold. My problem went from "I have nothing to write" to "this draft has the wrong angle" — which is a real problem I can actually solve.&lt;/p&gt;




&lt;p&gt;The Honest Part&lt;br&gt;
This is a developer solving their own specific problem in the most over-engineered way possible. I built a multi-service platform with a mobile app and a streaming AI pipeline so I could stop staring at a blank page. A normal person would have just started writing.&lt;/p&gt;

&lt;p&gt;But I ship things better when they're projects. So this is what I did. And now it works.&lt;/p&gt;




&lt;p&gt;Clypify is at clypify.com.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>showdev</category>
      <category>writing</category>
    </item>
  </channel>
</rss>
