<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Drafting on Raven</title><link>https://raven.nopejs.me/docs/drafting/</link><description>Recent content in Drafting on Raven</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://raven.nopejs.me/docs/drafting/index.xml" rel="self" type="application/rss+xml"/><item><title>Resume parsing</title><link>https://raven.nopejs.me/docs/drafting/resume/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://raven.nopejs.me/docs/drafting/resume/</guid><description>&lt;h1 id="resume-parsing">
 Resume parsing
 &lt;a class="anchor" href="#resume-parsing">#&lt;/a>
&lt;/h1>
&lt;p>Raven parses your resume from &lt;code>config/profile.yml&lt;/code> → &lt;code>resume.path&lt;/code> and caches structured bullets and skills.&lt;/p>
&lt;h2 id="supported-formats">
 Supported formats
 &lt;a class="anchor" href="#supported-formats">#&lt;/a>
&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Format&lt;/th>
 &lt;th>Notes&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>.md&lt;/code>&lt;/td>
 &lt;td>&lt;strong>Best&lt;/strong> — use &lt;code>## Experience&lt;/code> with &lt;code>-&lt;/code> bullet lines&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>.txt&lt;/code>&lt;/td>
 &lt;td>Bullet lines + optional &lt;code>Skills:&lt;/code> line&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>.pdf&lt;/code>&lt;/td>
 &lt;td>Requires &lt;code>pdf-parse&lt;/code> (installed via &lt;code>raven setup&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="markdown-structure">
 Markdown structure
 &lt;a class="anchor" href="#markdown-structure">#&lt;/a>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-markdown" data-lang="markdown">&lt;span style="display:flex;">&lt;span># Your Name
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">## Experience
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">### Company A — Role Title
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">-&lt;/span> Built X using Y, achieving Z
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#66d9ef">-&lt;/span> Led migration of ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">### Company B — Role Title
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>&lt;span style="color:#66d9ef">-&lt;/span> Shipped feature that ...
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">## Skills
&lt;/span>&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>&lt;span style="color:#75715e">&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>JavaScript, TypeScript, Node.js, React, PostgreSQL
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="parsing-rules">
 Parsing rules
 &lt;a class="anchor" href="#parsing-rules">#&lt;/a>
&lt;/h3>
&lt;ul>
&lt;li>Sections detected by &lt;code>## Heading&lt;/code> (H2)&lt;/li>
&lt;li>Bullets under &lt;code>## Experience&lt;/code> (including &lt;code>###&lt;/code> subheadings) are extracted&lt;/li>
&lt;li>Skills from &lt;code>## Skills&lt;/code> section or comma-separated line&lt;/li>
&lt;li>&lt;code>highlights&lt;/code> and &lt;code>skills&lt;/code> in &lt;code>profile.yml&lt;/code> override parser output when set&lt;/li>
&lt;/ul>
&lt;h2 id="cache">
 Cache
 &lt;a class="anchor" href="#cache">#&lt;/a>
&lt;/h2>
&lt;p>Parsed output is cached at &lt;code>data/cache/resume-parsed.json&lt;/code> for speed.&lt;/p></description></item><item><title>JD tailoring</title><link>https://raven.nopejs.me/docs/drafting/tailoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://raven.nopejs.me/docs/drafting/tailoring/</guid><description>&lt;h1 id="job-description-tailoring">
 Job description tailoring
 &lt;a class="anchor" href="#job-description-tailoring">#&lt;/a>
&lt;/h1>
&lt;p>For each job, Raven extracts keywords from the title and matches your resume bullets to produce tailored application content.&lt;/p>
&lt;h2 id="output-columns">
 Output columns
 &lt;a class="anchor" href="#output-columns">#&lt;/a>
&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Column&lt;/th>
 &lt;th>Meaning&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>jd_keywords&lt;/code>&lt;/td>
 &lt;td>Terms extracted from job title (e.g. &lt;code>backend&lt;/code>, &lt;code>python&lt;/code>, &lt;code>remote&lt;/code>)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>action_words&lt;/code>&lt;/td>
 &lt;td>Suggested verbs for this role type&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>tailored_bullets&lt;/code>&lt;/td>
 &lt;td>Top resume bullets ranked by relevance to the JD&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;h2 id="how-matching-works">
 How matching works
 &lt;a class="anchor" href="#how-matching-works">#&lt;/a>
&lt;/h2>
&lt;ol>
&lt;li>&lt;strong>Keyword extraction&lt;/strong> — splits title on common separators, filters stop words&lt;/li>
&lt;li>&lt;strong>Bullet scoring&lt;/strong> — each resume bullet scored by keyword overlap with title&lt;/li>
&lt;li>&lt;strong>Action words&lt;/strong> — role-type heuristics (backend → &amp;ldquo;architected&amp;rdquo;, &amp;ldquo;scaled&amp;rdquo;; ML → &amp;ldquo;trained&amp;rdquo;, &amp;ldquo;deployed&amp;rdquo;)&lt;/li>
&lt;li>&lt;strong>Top N&lt;/strong> — &lt;code>resume.max_bullets&lt;/code> from profile (default 5)&lt;/li>
&lt;/ol>
&lt;h2 id="example">
 Example
 &lt;a class="anchor" href="#example">#&lt;/a>
&lt;/h2>
&lt;p>Job title: &lt;strong>Senior Backend Engineer — Node.js&lt;/strong>&lt;/p></description></item><item><title>ATS form guides</title><link>https://raven.nopejs.me/docs/drafting/form-guides/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://raven.nopejs.me/docs/drafting/form-guides/</guid><description>&lt;h1 id="ats-form-guides">
 ATS form guides
 &lt;a class="anchor" href="#ats-form-guides">#&lt;/a>
&lt;/h1>
&lt;p>When a job&amp;rsquo;s apply URL points to an ATS (Greenhouse, Lever, Ashby, Workday, etc.), Raven generates a &lt;strong>form application guide&lt;/strong> instead of an email.&lt;/p>
&lt;h2 id="application-types">
 Application types
 &lt;a class="anchor" href="#application-types">#&lt;/a>
&lt;/h2>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Type&lt;/th>
 &lt;th>Detected when&lt;/th>
 &lt;th>Raven output&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;code>email&lt;/code>&lt;/td>
 &lt;td>Direct email outreach possible&lt;/td>
 &lt;td>Subject + body&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;code>form&lt;/code>&lt;/td>
 &lt;td>Apply URL on known ATS domain&lt;/td>
 &lt;td>Step-by-step &lt;code>form_steps&lt;/code>&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Form rows are &lt;strong>not&lt;/strong> sent via &lt;code>raven send&lt;/code>. Open the markdown review or CSV &lt;code>form_steps&lt;/code> column and follow the guide in your browser.&lt;/p></description></item><item><title>Gemini plugin</title><link>https://raven.nopejs.me/docs/drafting/gemini/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://raven.nopejs.me/docs/drafting/gemini/</guid><description>&lt;h1 id="gemini-draft-plugin">
 Gemini draft plugin
 &lt;a class="anchor" href="#gemini-draft-plugin">#&lt;/a>
&lt;/h1>
&lt;p>Optional AI polish for &lt;strong>email&lt;/strong> drafts via Google&amp;rsquo;s Gemini API.&lt;/p>
&lt;h2 id="setup">
 Setup
 &lt;a class="anchor" href="#setup">#&lt;/a>
&lt;/h2>
&lt;ol>
&lt;li>Get an API key from &lt;a href="https://aistudio.google.com/apikey">Google AI Studio&lt;/a>&lt;/li>
&lt;li>Add to &lt;code>.env&lt;/code>:&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>GEMINI_API_KEY&lt;span style="color:#f92672">=&lt;/span>your_key_here
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;ol start="3">
&lt;li>Enable in profile (optional):&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-yaml" data-lang="yaml">&lt;span style="display:flex;">&lt;span>&lt;span style="color:#f92672">draft&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">gemini&lt;/span>:
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">enabled&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">model&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;gemini-2.0-flash&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="usage">
 Usage
 &lt;a class="anchor" href="#usage">#&lt;/a>
&lt;/h2>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>raven draft --input data/jobs.json --gemini --max &lt;span style="color:#ae81ff">10&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Or one-shot discover + draft:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-bash" data-lang="bash">&lt;span style="display:flex;">&lt;span>raven draft --q &lt;span style="color:#e6db74">&amp;#34;backend engineer&amp;#34;&lt;/span> --gemini --max &lt;span style="color:#ae81ff">5&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="what-gemini-does">
 What Gemini does
 &lt;a class="anchor" href="#what-gemini-does">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>Rewrites email subject and body for clarity and tone&lt;/li>
&lt;li>Preserves factual content from your resume bullets&lt;/li>
&lt;li>Does &lt;strong>not&lt;/strong> fabricate experience — works from parsed resume + JD keywords&lt;/li>
&lt;/ul>
&lt;h2 id="what-gemini-does-not-do">
 What Gemini does not do
 &lt;a class="anchor" href="#what-gemini-does-not-do">#&lt;/a>
&lt;/h2>
&lt;ul>
&lt;li>Form application guides (ATS rows stay template-based)&lt;/li>
&lt;li>Verify email addresses&lt;/li>
&lt;li>Auto-send — you must review and run &lt;code>raven send&lt;/code> yourself&lt;/li>
&lt;/ul>
&lt;h2 id="disclaimer">
 Disclaimer
 &lt;a class="anchor" href="#disclaimer">#&lt;/a>
&lt;/h2>
&lt;p>Every draft includes:&lt;/p></description></item></channel></rss>