<?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: sahaabhishek</title>
    <description>The latest articles on DEV Community by sahaabhishek (@sahaabhishek).</description>
    <link>https://dev.to/sahaabhishek</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%2F371706%2Fac4282b8-44bb-4b8b-928f-0757e702ee30.jpeg</url>
      <title>DEV Community: sahaabhishek</title>
      <link>https://dev.to/sahaabhishek</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sahaabhishek"/>
    <language>en</language>
    <item>
      <title>Local dashboard for monitoring AI agent sessions — no cloud, no account</title>
      <dc:creator>sahaabhishek</dc:creator>
      <pubDate>Sat, 16 May 2026 23:23:44 +0000</pubDate>
      <link>https://dev.to/sahaabhishek/local-dashboard-for-monitoring-ai-agent-sessions-no-cloud-no-account-5276</link>
      <guid>https://dev.to/sahaabhishek/local-dashboard-for-monitoring-ai-agent-sessions-no-cloud-no-account-5276</guid>
      <description>&lt;p&gt;I've been running multiple AI coding agents in parallel — Claude Code sessions, sub-agents spawned mid-task, OpenCode running alongside — and I couldn't keep track of any of it.&lt;/p&gt;

&lt;p&gt;So I built CrewView: a local dashboard that gives you a real-time view of every AI agent session running on your machine.&lt;/p&gt;

&lt;p&gt;Here's what it does:&lt;/p&gt;

&lt;p&gt;→ Sessions list — every conversation, with status, duration, and a prompt preview&lt;br&gt;
→ Kanban board — split across Running / Needs Approval / Needs Input&lt;br&gt;
→ Live view — agent cards updating in real time, with sub-agents shown nested under their parent&lt;br&gt;
→ Sub-agent tracking — when Claude Code spawns a Task agent, it appears as a child session&lt;br&gt;
→ Workflow builder — define multi-step agent pipelines and trigger scheduled runs&lt;br&gt;
→ Multi-source — Claude Code (reads local JSONL files) and OpenCode (HTTP API) at the same time&lt;/p&gt;

&lt;p&gt;The entire thing is a single Go binary with the React dashboard embedded inside. Install with one command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;curl -fsSL https://raw.githubusercontent.com/ovsec/crewview/main/install.sh | sh&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;No Docker, no cloud account, no telemetry you didn't opt into. All data stays in a local SQLite file.&lt;/p&gt;

&lt;p&gt;It's MIT licensed and on GitHub: &lt;a href="https://github.com/ovsec/crewview" rel="noopener noreferrer"&gt;github.com/ovsec/crewview&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're spending serious time with AI coding agents, I'd love to hear what visibility you wish you had. Happy to add it.&lt;/p&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.amazonaws.com%2Fuploads%2Farticles%2Ffet0prkakltmtk2610fm.gif" 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.amazonaws.com%2Fuploads%2Farticles%2Ffet0prkakltmtk2610fm.gif" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&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.amazonaws.com%2Fuploads%2Farticles%2F2k3cwudewv3kr0lq215s.gif" 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.amazonaws.com%2Fuploads%2Farticles%2F2k3cwudewv3kr0lq215s.gif" alt=" " width="760" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  AI #DeveloperTools #OpenSource #ClaudeCode #AIAgents
&lt;/h1&gt;

</description>
      <category>ai</category>
      <category>devtool</category>
      <category>agents</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Meet httpOwl: Run HTTP Requests From Any Webpage</title>
      <dc:creator>sahaabhishek</dc:creator>
      <pubDate>Wed, 13 May 2026 13:01:26 +0000</pubDate>
      <link>https://dev.to/sahaabhishek/meet-httpowl-run-http-requests-from-any-webpage-4od3</link>
      <guid>https://dev.to/sahaabhishek/meet-httpowl-run-http-requests-from-any-webpage-4od3</guid>
      <description>&lt;p&gt;If you use httpYac or the IntelliJ &lt;code&gt;.http&lt;/code&gt; format, you've probably run into this situation: someone shares a request example in a GitHub issue, a wiki page, or a PR description. To test it, you copy-paste into cURL or open your IDE.&lt;/p&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.amazonaws.com%2Fuploads%2Farticles%2Fhiyhkg9gvelb1i9un0ty.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.amazonaws.com%2Fuploads%2Farticles%2Fhiyhkg9gvelb1i9un0ty.png" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;httpOwl&lt;/strong&gt; eliminates that step. It's a browser extension that detects httpYac-format request blocks on any webpage and lets you run them inline.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open any page containing &lt;code&gt;.http&lt;/code&gt; format blocks — GitHub blob views, Confluence docs, internal wikis, raw files&lt;/li&gt;
&lt;li&gt;httpOwl auto-detects them and places small pill buttons next to each request&lt;/li&gt;
&lt;li&gt;Click → the request fires through the extension's service worker (no CORS issues)&lt;/li&gt;
&lt;li&gt;Results appear inline: status code, response time, assertion pass/fail&lt;/li&gt;
&lt;li&gt;Click again to open a detail overlay with full request/response headers and body&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto-detection&lt;/strong&gt; — parses &lt;code&gt;###&lt;/code&gt;-separated blocks from &lt;code&gt;&amp;lt;pre&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;code&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;textarea&amp;gt;&lt;/code&gt; elements&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heading+code strategy&lt;/strong&gt; — handles Confluence/wikis where &lt;code&gt;###&lt;/code&gt; renders as HTML headings&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inline pill buttons&lt;/strong&gt; — subtle glass UI with states: idle, running, success, error&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assertion engine&lt;/strong&gt; — evaluates &lt;code&gt;??&lt;/code&gt; lines client-side: &lt;code&gt;status == 200&lt;/code&gt;, &lt;code&gt;body.items isArray&lt;/code&gt;, &lt;code&gt;header content-type includes json&lt;/code&gt;, duration checks, regex, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Detail overlay&lt;/strong&gt; — full request/response with JSON pretty-printing and copy-as-cURL&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Side panel&lt;/strong&gt; — request list with HTTP method filtering, multi-select run, environment variables&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTML report&lt;/strong&gt; — download a self-contained dark-themed report after running requests&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CORS bypass&lt;/strong&gt; — fetches originate from the extension, not the page&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Variable system
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight conf"&gt;&lt;code&gt;&lt;span class="c"&gt;# $shared
&lt;/span&gt;&lt;span class="n"&gt;API_KEY&lt;/span&gt;=&lt;span class="n"&gt;abc123&lt;/span&gt;
&lt;span class="n"&gt;BASE_URL&lt;/span&gt;=&lt;span class="n"&gt;https&lt;/span&gt;://&lt;span class="n"&gt;api&lt;/span&gt;.&lt;span class="n"&gt;example&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;

&lt;span class="c"&gt;# dev
&lt;/span&gt;&lt;span class="n"&gt;BASE_URL&lt;/span&gt;=&lt;span class="n"&gt;https&lt;/span&gt;://&lt;span class="n"&gt;dev&lt;/span&gt;.&lt;span class="n"&gt;api&lt;/span&gt;.&lt;span class="n"&gt;example&lt;/span&gt;.&lt;span class="n"&gt;com&lt;/span&gt;
&lt;span class="n"&gt;TOKEN&lt;/span&gt;=&lt;span class="n"&gt;dev&lt;/span&gt;-&lt;span class="n"&gt;token&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Variables with &lt;code&gt;{{KEY}}&lt;/code&gt; syntax are substituted in URL, headers, and body. Requests with unresolved variables are visibly muted and disabled until you define them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Technical stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Manifest V3&lt;/li&gt;
&lt;li&gt;TypeScript + Vite&lt;/li&gt;
&lt;li&gt;Playwright for screenshot/icon generation&lt;/li&gt;
&lt;li&gt;Shadow DOM for UI isolation&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Open source
&lt;/h3&gt;

&lt;p&gt;MIT licensed. Contributions welcome.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Chrome Web Store:&lt;/strong&gt; (Edge support coming soon)&lt;br&gt;
&lt;a href="https://chromewebstore.google.com/detail/niljpjochkdmfhbkbieapgmaclnifiop" rel="noopener noreferrer"&gt;httpOwl Extension&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/ovsec/httpyac-browser" rel="noopener noreferrer"&gt;https://github.com/ovsec/httpyac-browser&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;httpYac:&lt;/strong&gt; &lt;a href="https://httpyac.github.io" rel="noopener noreferrer"&gt;https://httpyac.github.io&lt;/a&gt;&lt;/p&gt;

</description>
      <category>httpyac</category>
      <category>devtool</category>
      <category>apitest</category>
    </item>
    <item>
      <title>I built a resume compiler in Go — write YAML, get every format</title>
      <dc:creator>sahaabhishek</dc:creator>
      <pubDate>Mon, 27 Apr 2026 21:34:48 +0000</pubDate>
      <link>https://dev.to/sahaabhishek/i-built-a-resume-compiler-in-go-write-yaml-get-every-format-elo</link>
      <guid>https://dev.to/sahaabhishek/i-built-a-resume-compiler-in-go-write-yaml-get-every-format-elo</guid>
      <description>&lt;p&gt;I got tired of fighting Word docs and Canva templates every time I updated my resume.&lt;/p&gt;

&lt;p&gt;Your resume is structured data. A name, jobs, dates, skills. Once I realized that, I stopped treating it like a document and started treating it like a data model with renderers. That's &lt;strong&gt;resumelang&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;Write one &lt;code&gt;resume.yml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# yaml-language-server: $schema=https://resumelang.dev/schema/v1.json&lt;/span&gt;
&lt;span class="na"&gt;resumelang&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;

&lt;span class="na"&gt;meta&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sap&lt;/span&gt;          &lt;span class="c1"&gt;# 13 built-in themes&lt;/span&gt;
  &lt;span class="na"&gt;language&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;en&lt;/span&gt;
  &lt;span class="na"&gt;page_size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;a4&lt;/span&gt;
  &lt;span class="na"&gt;sections&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;summary&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;experience&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;skills&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;education&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;projects&lt;/span&gt;

&lt;span class="na"&gt;person&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;     &lt;span class="s"&gt;Jane Doe&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;    &lt;span class="s"&gt;Senior Software Engineer&lt;/span&gt;
  &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;    &lt;span class="s"&gt;jane@example.com&lt;/span&gt;
  &lt;span class="na"&gt;github&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;   &lt;span class="s"&gt;janedoe&lt;/span&gt;
  &lt;span class="na"&gt;linkedin&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;janedoe&lt;/span&gt;

&lt;span class="na"&gt;summary&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
  &lt;span class="s"&gt;Experienced engineer with 8 years building distributed systems.&lt;/span&gt;

&lt;span class="na"&gt;experience&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;company&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;  &lt;span class="s"&gt;Acme Corp&lt;/span&gt;
    &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;     &lt;span class="s"&gt;Lead Engineer&lt;/span&gt;
    &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;    &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;2021"&lt;/span&gt;
    &lt;span class="na"&gt;end&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;      &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;"&lt;/span&gt;
    &lt;span class="na"&gt;highlights&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Scaled API to 10M requests/day&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Reduced CI deploy time by 60%&lt;/span&gt;
    &lt;span class="na"&gt;tags&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Go&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;Kubernetes&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;Postgres&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;skills&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Languages&lt;/span&gt;
    &lt;span class="na"&gt;skills&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Go&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;TypeScript&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;Python&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;Rust&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;resumelang build resume.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dist/
├── resume.html   # themed, print-ready
├── resume.json   # JSON Resume schema
├── resume.md     # GitHub-flavored markdown
└── resume.txt    # ATS-safe plain text
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The theme system
&lt;/h3&gt;

&lt;p&gt;13 built-in themes: SAP, Vercel, Linear, Aurora, Material, Brutalist, Terminal, Editorial, Dossier, Academic, Finance, Timeline, Minimal.&lt;/p&gt;

&lt;p&gt;Switch with one line:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;meta&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;theme&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;vercel&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your content doesn't move. Only the rendering changes.&lt;/p&gt;

&lt;p&gt;Each theme is a folder with a validated &lt;code&gt;theme.yml&lt;/code&gt; spec:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aurora&lt;/span&gt;
&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;1.0.0&lt;/span&gt;
&lt;span class="na"&gt;author&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ovsec&lt;/span&gt;

&lt;span class="na"&gt;supports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;layouts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;timeline&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;grid&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;blocks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;bullets&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;tags&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;tokens&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;colors&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;accent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;#6366f1"&lt;/span&gt;
  &lt;span class="na"&gt;spacing&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;section_gap&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;24&lt;/span&gt;
  &lt;span class="na"&gt;typography&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;heading_weight&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;600&lt;/span&gt;
    &lt;span class="na"&gt;body_size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;14&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The compiler validates every theme at load time against the spec. Missing template → build error. Unknown component → warning. This means community themes that pass &lt;code&gt;resumelang theme validate&lt;/code&gt; are guaranteed to render correctly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Go
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Single binary, zero runtime dependencies&lt;/li&gt;
&lt;li&gt;Same binary serves the web editor, runs the CLI, and powers the GitHub Action&lt;/li&gt;
&lt;li&gt;Cross-compiles to Linux/macOS/Windows without Docker&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;go install github.com/ovsec/resumelang@latest&lt;/code&gt; and you're done&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  The web editor
&lt;/h3&gt;

&lt;p&gt;The editor is Go Fiber + HTMX + CodeMirror 5. No React, no build step.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Edit YAML on the left, live preview on the right&lt;/li&gt;
&lt;li&gt;Theme gallery rendered server-side via HTMX lazy loading&lt;/li&gt;
&lt;li&gt;Share modal with gzip-encoded URLs and AES-GCM password encryption&lt;/li&gt;
&lt;li&gt;Decryption happens entirely in the browser — server never sees resume content&lt;/li&gt;
&lt;li&gt;Sign in with GitHub or LinkedIn to save resumes to a dashboard&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  GitHub Actions path
&lt;/h3&gt;

&lt;p&gt;Drop this into &lt;code&gt;.github/workflows/resume.yml&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;resume.yml"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;publish&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/setup-go@v5&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;go-version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1.22"&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;go install github.com/ovsec/resumelang@latest&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;resumelang build resume.yml --out dist&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/upload-pages-artifact@v3&lt;/span&gt;
        &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{&lt;/span&gt; &lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;dist&lt;/span&gt; &lt;span class="pi"&gt;}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/deploy-pages@v4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Push &lt;code&gt;resume.yml&lt;/code&gt;, get a live GitHub Pages site. Every change is a commit. &lt;code&gt;git diff&lt;/code&gt; shows exactly what changed.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's on the roadmap
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Native PDF export (Puppeteer server-side)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;resumelang lint&lt;/code&gt; — ATS keyword score, date-gap detection&lt;/li&gt;
&lt;li&gt;LinkedIn import (&lt;code&gt;resumelang import linkedin export.zip&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;AI tailoring — paste a JD, rewrite highlights to match (Pro)&lt;/li&gt;
&lt;li&gt;Link analytics — see when recruiters open your resume (Pro)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Contribute
&lt;/h3&gt;

&lt;p&gt;The theme ecosystem is community-driven. If you have design opinions, the spec is documented at &lt;a href="https://docs.resumelang.dev/themes" rel="noopener noreferrer"&gt;docs.resumelang.dev/themes&lt;/a&gt;. Submit a theme, open an issue, or just star the repo.&lt;/p&gt;

&lt;p&gt;🔗 &lt;a href="https://resumelang.dev" rel="noopener noreferrer"&gt;resumelang.dev&lt;/a&gt;&lt;br&gt;
📖 &lt;a href="https://docs.resumelang.dev" rel="noopener noreferrer"&gt;docs.resumelang.dev&lt;/a&gt;&lt;br&gt;
⭐ &lt;a href="https://github.com/ovsec/resumelang" rel="noopener noreferrer"&gt;github.com/ovsec/resumelang&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What would you want from a YAML-first resume tool? Drop it in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>opensource</category>
      <category>career</category>
      <category>resume</category>
    </item>
  </channel>
</rss>
