<?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: Stas Baleskov</title>
    <description>The latest articles on DEV Community by Stas Baleskov (@stas_baleskov).</description>
    <link>https://dev.to/stas_baleskov</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%2F3786773%2F76b81084-496b-4b1c-aef8-2bad2878df3a.png</url>
      <title>DEV Community: Stas Baleskov</title>
      <link>https://dev.to/stas_baleskov</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/stas_baleskov"/>
    <language>en</language>
    <item>
      <title>I Built an Automated Call-to-Tasks Pipeline with Claude Code, Whisper, and CalDAV</title>
      <dc:creator>Stas Baleskov</dc:creator>
      <pubDate>Fri, 13 Mar 2026 09:30:58 +0000</pubDate>
      <link>https://dev.to/stas_baleskov/i-built-an-automated-call-to-tasks-pipeline-with-claude-code-whisper-and-caldav-53n</link>
      <guid>https://dev.to/stas_baleskov/i-built-an-automated-call-to-tasks-pipeline-with-claude-code-whisper-and-caldav-53n</guid>
      <description>&lt;p&gt;I'm a PM who codes his own automation. Three weeks ago I picked up Cursor + Claude Code and built a pipeline that processes all my work calls — from raw audio to organized tasks in a project tracker. Zero manual work after setup.&lt;/p&gt;

&lt;p&gt;Here's the architecture, the decisions, and the gotchas.&lt;/p&gt;

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

&lt;p&gt;After every work call, I used to spend 30-40 minutes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reviewing key moments&lt;/li&gt;
&lt;li&gt;Writing notes&lt;/li&gt;
&lt;li&gt;Creating tasks in the tracker&lt;/li&gt;
&lt;li&gt;Assigning them to the right projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Multiply by 3-5 calls per day. That's 2-3 hours of pure overhead. Every single day.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Krisp (audio recording)
    │
    ▼
Download script (Krisp API)
    │
    ▼
CalDAV → Yandex Calendar → File rename
    │
    ▼
Whisper medium (local) → Transcription
    │
    ▼
LLM → Action item extraction
    │
    ▼
┌───┴───────────────────────┐
▼                           ▼
Obsidian (inbox)  ◄─────►  YouTrack (tasks)
                  bidirectional
                  sync
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Runs daily at 11:00 PM via cron. Results ready by morning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Recording with Krisp
&lt;/h2&gt;

&lt;p&gt;Krisp runs in the background on all calls. Nothing fancy here — it just records.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The annoying part:&lt;/strong&gt; Krisp names files like &lt;code&gt;Arc — Meeting — 2026-02-20&lt;/code&gt;. I use Arc browser, so every single file starts with "Arc." Good luck searching through 50 of those.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Download from Krisp
&lt;/h2&gt;

&lt;p&gt;A script pulls audio files from Krisp. Side benefit: I can skip Krisp's Advanced tier since Claude handles the transcription and summarization that Advanced would give me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Calendar-Based Rename (CalDAV)
&lt;/h2&gt;

&lt;p&gt;This is the step that makes everything else work. Without meaningful file names, the rest of the pipeline is flying blind.&lt;/p&gt;

&lt;p&gt;All work calls live in Yandex Calendar (our corporate platform). The script:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Extracts the timestamp from the Krisp recording ID. Krisp uses UUIDv7 — first 12 hex characters encode Unix time in milliseconds. Reliable date+time source right there.&lt;/li&gt;
&lt;li&gt;Queries Yandex Calendar via CalDAV to find the matching event.&lt;/li&gt;
&lt;li&gt;Renames the file to &lt;code&gt;[YYYY-MM-DD] [meeting name from calendar]&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every recording gets a searchable, meaningful name tied to the actual meeting. Simple but critical.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Local Whisper Transcription
&lt;/h2&gt;

&lt;p&gt;Whisper medium model, running locally. Why medium:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Good enough for Russian&lt;/li&gt;
&lt;li&gt;Reasonably fast&lt;/li&gt;
&lt;li&gt;Way better than Krisp's built-in Russian transcription (which is, to put it politely, not great)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Output: Markdown file with the full text.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Action Item Extraction
&lt;/h2&gt;

&lt;p&gt;An LLM processes the transcript and pulls out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Specific tasks discussed&lt;/li&gt;
&lt;li&gt;Who's responsible (when mentioned)&lt;/li&gt;
&lt;li&gt;Which project the task belongs to&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Structured list of action items, ready for the tracker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Obsidian + YouTrack Sync
&lt;/h2&gt;

&lt;p&gt;Action items land in my Obsidian inbox. Obsidian is connected to the same workspace as Cursor, so everything stays in sync.&lt;/p&gt;

&lt;p&gt;From Obsidian, tasks go to YouTrack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each action item becomes a subtask under the corresponding project&lt;/li&gt;
&lt;li&gt;Mark done in Obsidian → closes in YouTrack&lt;/li&gt;
&lt;li&gt;Comment in Obsidian → duplicates to YouTrack&lt;/li&gt;
&lt;li&gt;Bidirectional: changes in either system propagate to the other&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Daily Run
&lt;/h2&gt;

&lt;p&gt;Everything fires at 11:00 PM via cron:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download new recordings from Krisp&lt;/li&gt;
&lt;li&gt;Rename using calendar lookup&lt;/li&gt;
&lt;li&gt;Transcribe with Whisper&lt;/li&gt;
&lt;li&gt;Extract action items&lt;/li&gt;
&lt;li&gt;Sync inbox with YouTrack (new → create, completed → close)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By morning, yesterday's calls are processed and organized. I just open my inbox and start working.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd Do Differently
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Start with the rename step.&lt;/strong&gt; I initially tried processing files with Krisp's original names. Completely useless — you can't figure out project context from "Arc — Meeting." The calendar lookup should've been the very first thing I built.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OCR for PDFs from day one.&lt;/strong&gt; I also built a monthly research pipeline (PDF digests → analysis). The PDF-to-text conversion without OCR was garbage. Adding OCR was the turning point. Should've done it immediately instead of wasting time on bad data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond Calls: Monthly Research Pipeline
&lt;/h2&gt;

&lt;p&gt;Separately, I built an automated monthly market research system for mobile games and gamification:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PDF digests from a Telegram channel + internal chat → OCR → Markdown&lt;/li&gt;
&lt;li&gt;LLM analysis using a 4-document methodology I wrote (research instructions, process, validated source registry by region, aggregation rules)&lt;/li&gt;
&lt;li&gt;Sources validated per region, including dedicated China coverage (sparse public data, separate source verification needed)&lt;/li&gt;
&lt;li&gt;Auto-generates on the 1st of each month&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same principle: define the methodology clearly, automate the execution, review the output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Post-call work&lt;/td&gt;
&lt;td&gt;30-40 min/call&lt;/td&gt;
&lt;td&gt;0 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monthly research&lt;/td&gt;
&lt;td&gt;2-3 full days&lt;/td&gt;
&lt;td&gt;Auto-generated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backlog tasks&lt;/td&gt;
&lt;td&gt;Stuck for weeks&lt;/td&gt;
&lt;td&gt;Hours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall routine&lt;/td&gt;
&lt;td&gt;Baseline&lt;/td&gt;
&lt;td&gt;~5x reduction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;ul&gt;
&lt;li&gt;Auto-generating pre-sale presentation drafts (training Claude on company patterns)&lt;/li&gt;
&lt;li&gt;Short presentations from monthly research reports&lt;/li&gt;
&lt;li&gt;Introductory course for people who want to start with AI agents but don't know where to begin&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If you've built similar personal automation pipelines — what's your architecture? What works, what breaks? Curious to compare notes.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>productivity</category>
      <category>python</category>
    </item>
    <item>
      <title>I Built an Automated Call-to-Tasks Pipeline with Claude Code, Whisper, and CalDAV</title>
      <dc:creator>Stas Baleskov</dc:creator>
      <pubDate>Fri, 06 Mar 2026 12:05:03 +0000</pubDate>
      <link>https://dev.to/stas_baleskov/i-built-an-automated-call-to-tasks-pipeline-with-claude-code-whisper-and-caldav-5b6e</link>
      <guid>https://dev.to/stas_baleskov/i-built-an-automated-call-to-tasks-pipeline-with-claude-code-whisper-and-caldav-5b6e</guid>
      <description>&lt;p&gt;I'm a PM who codes his own automation. Three weeks ago I picked up Cursor + Claude Code and built a pipeline that processes all my work calls — from raw audio to organized tasks in a project tracker. Zero manual work after setup.&lt;/p&gt;

&lt;p&gt;Here's the architecture, the decisions, and the gotchas.&lt;/p&gt;

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

&lt;p&gt;After every work call, I used to spend 30-40 minutes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reviewing key moments&lt;/li&gt;
&lt;li&gt;Writing notes&lt;/li&gt;
&lt;li&gt;Creating tasks in the tracker&lt;/li&gt;
&lt;li&gt;Assigning them to the right projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Multiply by 3-5 calls per day. That's 2-3 hours of pure overhead. Every single day.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Krisp (audio recording)
    │
    ▼
Download script (Krisp API)
    │
    ▼
CalDAV → Yandex Calendar → File rename
    │
    ▼
Whisper medium (local) → Transcription
    │
    ▼
LLM → Action item extraction
    │
    ▼
┌───┴───────────────────────┐
▼                           ▼
Obsidian (inbox)  ◄─────►  YouTrack (tasks)
                  bidirectional
                  sync
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Runs daily at 11:00 PM via cron. Results ready by morning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Recording with Krisp
&lt;/h2&gt;

&lt;p&gt;Krisp runs in the background on all calls. Nothing fancy here — it just records.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The annoying part:&lt;/strong&gt; Krisp names files like &lt;code&gt;Arc — Meeting — 2026-02-20&lt;/code&gt;. I use Arc browser, so every single file starts with "Arc." Good luck searching through 50 of those.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Download from Krisp
&lt;/h2&gt;

&lt;p&gt;A script pulls audio files from Krisp. Side benefit: I can skip Krisp's Advanced tier since Claude handles the transcription and summarization that Advanced would give me.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Calendar-Based Rename (CalDAV)
&lt;/h2&gt;

&lt;p&gt;This is the step that makes everything else work. Without meaningful file names, the rest of the pipeline is flying blind.&lt;/p&gt;

&lt;p&gt;All work calls live in Yandex Calendar (our corporate platform). The script:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Extracts the timestamp from the Krisp recording ID. Krisp uses UUIDv7 — first 12 hex characters encode Unix time in milliseconds. Reliable date+time source right there.&lt;/li&gt;
&lt;li&gt;Queries Yandex Calendar via CalDAV to find the matching event.&lt;/li&gt;
&lt;li&gt;Renames the file to &lt;code&gt;[YYYY-MM-DD] [meeting name from calendar]&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Every recording gets a searchable, meaningful name tied to the actual meeting. Simple but critical.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Local Whisper Transcription
&lt;/h2&gt;

&lt;p&gt;Whisper medium model, running locally. Why medium:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Good enough for Russian&lt;/li&gt;
&lt;li&gt;Reasonably fast&lt;/li&gt;
&lt;li&gt;Way better than Krisp's built-in Russian transcription (which is, to put it politely, not great)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Output: Markdown file with the full text.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Action Item Extraction
&lt;/h2&gt;

&lt;p&gt;An LLM processes the transcript and pulls out:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Specific tasks discussed&lt;/li&gt;
&lt;li&gt;Who's responsible (when mentioned)&lt;/li&gt;
&lt;li&gt;Which project the task belongs to&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Structured list of action items, ready for the tracker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Obsidian + YouTrack Sync
&lt;/h2&gt;

&lt;p&gt;Action items land in my Obsidian inbox. Obsidian is connected to the same workspace as Cursor, so everything stays in sync.&lt;/p&gt;

&lt;p&gt;From Obsidian, tasks go to YouTrack:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each action item becomes a subtask under the corresponding project&lt;/li&gt;
&lt;li&gt;Mark done in Obsidian → closes in YouTrack&lt;/li&gt;
&lt;li&gt;Comment in Obsidian → duplicates to YouTrack&lt;/li&gt;
&lt;li&gt;Bidirectional: changes in either system propagate to the other&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Daily Run
&lt;/h2&gt;

&lt;p&gt;Everything fires at 11:00 PM via cron:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Download new recordings from Krisp&lt;/li&gt;
&lt;li&gt;Rename using calendar lookup&lt;/li&gt;
&lt;li&gt;Transcribe with Whisper&lt;/li&gt;
&lt;li&gt;Extract action items&lt;/li&gt;
&lt;li&gt;Sync inbox with YouTrack (new → create, completed → close)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By morning, yesterday's calls are processed and organized. I just open my inbox and start working.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd Do Differently
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Start with the rename step.&lt;/strong&gt; I initially tried processing files with Krisp's original names. Completely useless — you can't figure out project context from "Arc — Meeting." The calendar lookup should've been the very first thing I built.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OCR for PDFs from day one.&lt;/strong&gt; I also built a monthly research pipeline (PDF digests → analysis). The PDF-to-text conversion without OCR was garbage. Adding OCR was the turning point. Should've done it immediately instead of wasting time on bad data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond Calls: Monthly Research Pipeline
&lt;/h2&gt;

&lt;p&gt;Separately, I built an automated monthly market research system for mobile games and gamification:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PDF digests from a Telegram channel + internal chat → OCR → Markdown&lt;/li&gt;
&lt;li&gt;LLM analysis using a 4-document methodology I wrote (research instructions, process, validated source registry by region, aggregation rules)&lt;/li&gt;
&lt;li&gt;Sources validated per region, including dedicated China coverage (sparse public data, separate source verification needed)&lt;/li&gt;
&lt;li&gt;Auto-generates on the 1st of each month&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same principle: define the methodology clearly, automate the execution, review the output.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;After&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Post-call work&lt;/td&gt;
&lt;td&gt;30-40 min/call&lt;/td&gt;
&lt;td&gt;0 min&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Monthly research&lt;/td&gt;
&lt;td&gt;2-3 full days&lt;/td&gt;
&lt;td&gt;Auto-generated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Backlog tasks&lt;/td&gt;
&lt;td&gt;Stuck for weeks&lt;/td&gt;
&lt;td&gt;Hours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Overall routine&lt;/td&gt;
&lt;td&gt;Baseline&lt;/td&gt;
&lt;td&gt;~5x reduction&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

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

&lt;ul&gt;
&lt;li&gt;Auto-generating pre-sale presentation drafts (training Claude on company patterns)&lt;/li&gt;
&lt;li&gt;Short presentations from monthly research reports&lt;/li&gt;
&lt;li&gt;Introductory course for people who want to start with AI agents but don't know where to begin&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If you've built similar personal automation pipelines — what's your architecture? What works, what breaks? Curious to compare notes.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>productivity</category>
      <category>python</category>
    </item>
  </channel>
</rss>
