<?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: Orlando Ascanio </title>
    <description>The latest articles on DEV Community by Orlando Ascanio  (@gojer16).</description>
    <link>https://dev.to/gojer16</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%2F2111749%2F5657552f-d2ff-49ef-9396-6d3b22606084.jpeg</url>
      <title>DEV Community: Orlando Ascanio </title>
      <link>https://dev.to/gojer16</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/gojer16"/>
    <language>en</language>
    <item>
      <title>Prompt Caching: A Friendly Guide to Saving Money and Time in AI Applications</title>
      <dc:creator>Orlando Ascanio </dc:creator>
      <pubDate>Sat, 21 Mar 2026 04:12:30 +0000</pubDate>
      <link>https://dev.to/gojer16/prompt-caching-a-friendly-guide-to-saving-money-and-time-in-ai-applications-2fk5</link>
      <guid>https://dev.to/gojer16/prompt-caching-a-friendly-guide-to-saving-money-and-time-in-ai-applications-2fk5</guid>
      <description>&lt;p&gt;If you've been working with AI applications lately, you might have heard about "prompt caching." Sounds technical, But stick with me. I'm going to explain it in a way that's easy to understand, even if you're just starting out.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's This Prompt Caching Thing?
&lt;/h2&gt;

&lt;p&gt;Let's start with a simple analogy. Imagine you're in a classroom learning math. When you learn how to multiply 7 x 8, the teacher doesn't make you relearn it every single time you need to do that calculation. You remember it, and you use it whenever needed. That's kind of like caching!&lt;/p&gt;

&lt;p&gt;In AI terms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A prompt&lt;/strong&gt; is what you send to the AI (like a question or instruction)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Caching&lt;/strong&gt; means saving something so you don't have to create it again&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So prompt caching is simply: when you send the SAME question or instruction to the AI over and over, instead of processing it fresh every time, the AI remembers it and uses the cached version. Much faster and cheaper! &lt;/p&gt;

&lt;h2&gt;
  
  
  Why Should You Care?
&lt;/h2&gt;

&lt;p&gt;Okay, let's talk about the real benefits:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. &lt;strong&gt;Save Money 💰&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Here's the thing: AI services charge you based on what they process. If you're sending the same system instruction over and over (like "You are a helpful assistant who explains things clearly"), you're paying for it each time. With caching, you pay once, and the AI remembers it. I've seen companies save HUGE amounts, like 70-90% on some costs!&lt;/p&gt;

&lt;h3&gt;
  
  
  2. &lt;strong&gt;Faster Responses ⚡&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When the AI doesn't have to re-read and re-process the same prompt, replies come back faster. This matters a lot if you're building apps where users are waiting for responses. Nobody likes waiting!&lt;/p&gt;

&lt;h3&gt;
  
  
  3. &lt;strong&gt;More Consistent Results 🎯&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When the AI uses a cached version of your prompt, it's more likely to give you consistent answers. This is important if you need reliable outputs for your application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which Apps Benefit Most?
&lt;/h2&gt;

&lt;p&gt;Not every app needs prompt caching. Let me break down which ones really shine with this technique:&lt;/p&gt;

&lt;h3&gt;
  
  
  ✅ &lt;strong&gt;Customer Support Chatbots&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;These chatbots often use the same base instructions (like "Be friendly, helpful, and stay professional"). Caching this setup means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster responses for customers&lt;/li&gt;
&lt;li&gt;Lower costs when you're handling hundreds of conversations&lt;/li&gt;
&lt;li&gt;Same polite tone, every time&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ &lt;strong&gt;Content Generation Tools&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Think of tools that write blog posts, social media captions, or product descriptions. They usually start with instructions like "Write in a helpful tone, include examples, keep it under 200 words." Cache those, and you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Get faster content&lt;/li&gt;
&lt;li&gt;Save money as you generate more pieces&lt;/li&gt;
&lt;li&gt;Maintain consistent style across all outputs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ &lt;strong&gt;Multi-step AI Workflows&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If you're building an app where the AI does several steps (like researching, then writing, then editing), the setup prompts for each step can be cached. This makes the whole workflow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster end-to-end&lt;/li&gt;
&lt;li&gt;More cost-effective&lt;/li&gt;
&lt;li&gt;Easier to debug&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ✅ &lt;strong&gt;Educational Apps &amp;amp; Tutors&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;AI tutors that explain concepts, check homework, or provide feedback all use similar base instructions. Caching means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quicker answers for students&lt;/li&gt;
&lt;li&gt;Lower costs as you serve more learners&lt;/li&gt;
&lt;li&gt;Consistent teaching style&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  ❌ &lt;strong&gt;Where It Might NOT Help&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Some applications don't benefit as much:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apps where every prompt is completely unique (though these are rare)&lt;/li&gt;
&lt;li&gt;One-off use cases where you only make a few requests&lt;/li&gt;
&lt;li&gt;Situations where prompts need to change every single time&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to Use It (Without Getting Lost in the Tech)
&lt;/h2&gt;

&lt;p&gt;Good news: you don't need to be a coding wizard to use prompt caching! Most AI platforms now make this easy:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Use the same prompt structure&lt;/strong&gt; for similar tasks&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep your system instructions consistent&lt;/strong&gt; (don't change the basic setup every time)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leverage built-in caching features:&lt;/strong&gt; many platforms now have this as a toggle or automatic feature&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The key is planning ahead. When designing your AI app, think: "What parts of my prompts stay the same?" Those are your caching opportunities!&lt;/p&gt;

&lt;h2&gt;
  
  
  A Quick Example
&lt;/h2&gt;

&lt;p&gt;Let's say you're building an AI app that generates product descriptions for an e-commerce site:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Without caching:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every product: "You are an e-commerce copywriter. Write engaging product descriptions. Keep it under 150 words. Include features and benefits." (pay for this each time!)&lt;/li&gt;
&lt;li&gt;Plus the actual product details&lt;/li&gt;
&lt;li&gt;Result: Expensive, slower&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;With caching:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cache the instruction: "You are an e-commerce copywriter. Write engaging product descriptions. Keep it under 150 words. Include features and benefits." (pay once!)&lt;/li&gt;
&lt;li&gt;Plus the actual product details for each unique item&lt;/li&gt;
&lt;li&gt;Result: Cheaper, faster, same quality! 🚀&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;Ready to try prompt caching? Here's a simple checklist:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Review your current prompts:&lt;/strong&gt; What repeats the most?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Identify patterns:&lt;/strong&gt;  Look for instructions that stay the same&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check your AI provider's docs:&lt;/strong&gt; Most now support caching (or will soon)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start small&lt;/strong&gt; – Cache one or two prompts first and see the difference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Monitor your results:&lt;/strong&gt; Track costs and speed improvements&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Prompt caching isn't some super advanced technique reserved for AI gurus. It's just smart optimization, like turning off lights when you leave a room. You wouldn't leave them on, right? 🤷‍♀️&lt;/p&gt;

&lt;p&gt;Whether you're building a simple chatbot or a complex AI application, if you're sending similar prompts repeatedly, prompt caching can save you money and make your app faster. And that's something everyone can benefit from!&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What do you think?&lt;/strong&gt; Are you using prompt caching in your projects? Have you noticed a difference? Drop a comment below, I'd love to hear about your experiences! 👇&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>programming</category>
      <category>learning</category>
    </item>
    <item>
      <title>I built a Pi extension that logs every coding session.</title>
      <dc:creator>Orlando Ascanio </dc:creator>
      <pubDate>Thu, 19 Mar 2026 23:36:37 +0000</pubDate>
      <link>https://dev.to/gojer16/i-built-a-pi-extension-that-logs-every-coding-session-508p</link>
      <guid>https://dev.to/gojer16/i-built-a-pi-extension-that-logs-every-coding-session-508p</guid>
      <description>&lt;p&gt;Every session with an AI coding assistant ends the same way for me. I close the terminal and lose the decisions.&lt;/p&gt;

&lt;p&gt;Not the code, that's in git. The &lt;em&gt;decisions&lt;/em&gt;. Why I went with approach A over B. What tradeoffs I accepted. What I left open for next time.&lt;/p&gt;

&lt;p&gt;So I built a Pi extension that fixes this. Here's how it works, and how I solved the only hard part.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Pi is
&lt;/h3&gt;

&lt;p&gt;Pi is an agentic coding assistant, think Claude Code or Codex but open and extensible. It runs in your terminal, has access to your filesystem and bash, and supports TypeScript extensions that hook into its full lifecycle.&lt;/p&gt;

&lt;h3&gt;
  
  
  The naive approach (and why it fails)
&lt;/h3&gt;

&lt;p&gt;The obvious solution: at session end, grab the conversation and summarize it.&lt;/p&gt;

&lt;p&gt;Problem: session context is massive. Tool outputs alone can be thousands of tokens. Feeding that to an LLM is expensive, slow, and produces bloated summaries.&lt;/p&gt;

&lt;h3&gt;
  
  
  The actual solution: bounded extraction
&lt;/h3&gt;

&lt;p&gt;Instead of feeding the whole session, extract only three things:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// User prompts — what was asked (capped at 300 chars each)&lt;/span&gt;
&lt;span class="c1"&gt;// Tool names — what was touched (bash, edit, read, grep...)&lt;/span&gt;
&lt;span class="c1"&gt;// Last assistant message — what was concluded (capped at 300 chars)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Tool output blobs are skipped entirely. The extract stays small regardless of session length.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;extractSessionData&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;ExtensionContext&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;entries&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessionManager&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getBranch&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userPrompts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;toolsUsed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nb"&gt;Set&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="kd"&gt;let&lt;/span&gt; &lt;span class="nx"&gt;lastAssistantText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;entry&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;message&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;msg&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;entry&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isArray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
            &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;?.&lt;/span&gt;&lt;span class="nf"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;??&lt;/span&gt; &lt;span class="dl"&gt;""&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;userPrompts&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;role&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;assistant&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;Array&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;isArray&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tool_use&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forEach&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;toolsUsed&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;));&lt;/span&gt;

      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;msg&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;any&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

      &lt;span class="c1"&gt;// Keep overwriting — we want only the last one&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;lastAssistantText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;slice&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

  &lt;span class="c1"&gt;// ... build extract string&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The LLM call
&lt;/h3&gt;

&lt;p&gt;Separate Haiku-or-equivalent call. Never touches the main session context.&lt;/p&gt;

&lt;p&gt;I'm using Mistral Small via OpenRouter — ~$0.00039 per call, 350 max output tokens.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;res&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;https://openrouter.ai/api/v1/chat/completions&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;method&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;POST&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="na"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Authorization&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;`Bearer &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;OPENROUTER_API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Content-Type&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;application/json&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="na"&gt;model&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;mistralai/mistral-small-3.2-24b&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;max_tokens&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;350&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;system&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;TIGHT_STRUCTURED_PROMPT&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;role&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;user&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;extract&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="p"&gt;],&lt;/span&gt;
  &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The system prompt forces structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;**Accomplished:** concrete bullets
**Touched:** files and tools
**Decisions:** architectural choices
**Open:** unresolved items
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  The output
&lt;/h3&gt;

&lt;p&gt;After a Stride (macOS app) session:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## unnamed — 02:19 PM&lt;/span&gt;

&lt;span class="gs"&gt;**Accomplished:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Created 4 new homepage widget components
&lt;span class="p"&gt;-&lt;/span&gt; Modified CurrentSessionView.swift to integrate bento-grid layout
&lt;span class="p"&gt;-&lt;/span&gt; Restructured homepage from single-column to two-column bento-grid

&lt;span class="gs"&gt;**Touched:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; CurrentSessionView.swift (restructured layout)
&lt;span class="p"&gt;-&lt;/span&gt; TodaySummaryWidget.swift (new)
&lt;span class="p"&gt;-&lt;/span&gt; HabitSummaryWidget.swift (new)
&lt;span class="p"&gt;-&lt;/span&gt; bash, edit, grep (analysis tools)

&lt;span class="gs"&gt;**Decisions:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; Adopted bento-grid layout for better information density
&lt;span class="p"&gt;-&lt;/span&gt; Maintained ambient background branding for consistency

&lt;span class="gs"&gt;**Open:**&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; MCP module compilation issues (pre-existing, unrelated)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cp &lt;/span&gt;session-log.ts ~/.pi/agent/extensions/session-log.ts
&lt;span class="c"&gt;# then /reload inside Pi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/log&lt;/code&gt; — generate and save&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/log show&lt;/code&gt; — open today's file in your default editor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Full source: shittycodingagent.ai&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>ai</category>
      <category>devtools</category>
      <category>typescript</category>
    </item>
    <item>
      <title>Weekly Reflection + Weekly Log polish in Stride</title>
      <dc:creator>Orlando Ascanio </dc:creator>
      <pubDate>Thu, 05 Mar 2026 03:53:03 +0000</pubDate>
      <link>https://dev.to/gojer16/weekly-reflection-weekly-log-polish-in-stride-no0</link>
      <guid>https://dev.to/gojer16/weekly-reflection-weekly-log-polish-in-stride-no0</guid>
      <description>&lt;p&gt;Shipped a polish/reliability pass tonight on two features that users touch often.&lt;/p&gt;

&lt;p&gt;1 Weekly Reflection&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduced a compact layout&lt;/li&gt;
&lt;li&gt;Improved KPI hierarchy for faster scanning&lt;/li&gt;
&lt;li&gt;Reworked no-data states for clarity&lt;/li&gt;
&lt;li&gt;Reduced visual noise and improved readability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2) Weekly Log&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improved save-flow reliability with stricter DB write validation&lt;/li&gt;
&lt;li&gt;Removed first-launch sample-data inserts (no demo data pollution)&lt;/li&gt;
&lt;li&gt;Fixed day-boundary handling for date queries&lt;/li&gt;
&lt;li&gt;Fixed deterministic ordering for category suggestions&lt;/li&gt;
&lt;li&gt;Polished the entry modal and improved week-cell responsiveness&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not a flashy release, but the UX feels noticeably better, and the data path is much more trustworthy.&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%2Fathkrm1frmf8vkz76bbg.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%2Fathkrm1frmf8vkz76bbg.png" alt="StrideApp - Weekly Log" width="800" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>swift</category>
      <category>buildinpublic</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Weekly Reflection + Weekly Log polish in Stride</title>
      <dc:creator>Orlando Ascanio </dc:creator>
      <pubDate>Thu, 05 Mar 2026 03:53:03 +0000</pubDate>
      <link>https://dev.to/gojer16/weekly-reflection-weekly-log-polish-in-stride-2fg2</link>
      <guid>https://dev.to/gojer16/weekly-reflection-weekly-log-polish-in-stride-2fg2</guid>
      <description>&lt;p&gt;Shipped a polish/reliability pass tonight on two features that users touch often.&lt;/p&gt;

&lt;p&gt;1 Weekly Reflection&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introduced a compact layout&lt;/li&gt;
&lt;li&gt;Improved KPI hierarchy for faster scanning&lt;/li&gt;
&lt;li&gt;Reworked no-data states for clarity&lt;/li&gt;
&lt;li&gt;Reduced visual noise and improved readability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2) Weekly Log&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improved save-flow reliability with stricter DB write validation&lt;/li&gt;
&lt;li&gt;Removed first-launch sample-data inserts (no demo data pollution)&lt;/li&gt;
&lt;li&gt;Fixed day-boundary handling for date queries&lt;/li&gt;
&lt;li&gt;Fixed deterministic ordering for category suggestions&lt;/li&gt;
&lt;li&gt;Polished the entry modal and improved week-cell responsiveness&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not a flashy release, but the UX feels noticeably better, and the data path is much more trustworthy.&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%2Fathkrm1frmf8vkz76bbg.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%2Fathkrm1frmf8vkz76bbg.png" alt="StrideApp - Weekly Log" width="800" height="523"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>swift</category>
      <category>buildinpublic</category>
      <category>showdev</category>
    </item>
    <item>
      <title>My 2026 MCP Stack</title>
      <dc:creator>Orlando Ascanio </dc:creator>
      <pubDate>Fri, 27 Feb 2026 20:08:54 +0000</pubDate>
      <link>https://dev.to/gojer16/my-2026-mcp-stack-59gk</link>
      <guid>https://dev.to/gojer16/my-2026-mcp-stack-59gk</guid>
      <description>&lt;h2&gt;
  
  
  My 2026 MCP Stack
&lt;/h2&gt;

&lt;p&gt;Here’s what I’m using in 2026 to build, ship, and iterate.&lt;/p&gt;




&lt;h2&gt;
  
  
  Core Engineering &amp;amp; Infrastructure
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Google Cloud MCP&lt;/strong&gt; – cloud services and infrastructure access
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL MCP&lt;/strong&gt; – direct database interaction
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stripe MCP&lt;/strong&gt; – payments and billing workflows
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zapier MCP&lt;/strong&gt; – automation between tools
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Product &amp;amp; Monitoring
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;PostHog MCP&lt;/strong&gt; – product analytics
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sentry MCP&lt;/strong&gt; – error tracking
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chrome DevTools MCP&lt;/strong&gt; – browser inspection and performance
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Playwright MCP&lt;/strong&gt; – automated testing
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Knowledge, Research &amp;amp; Search
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Notion MCP&lt;/strong&gt; – structured knowledge access
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exa MCP&lt;/strong&gt; – connects AI assistants to Exa’s web and code search (open-source)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Perplexity MCP&lt;/strong&gt; – research augmentation
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context7 MCP&lt;/strong&gt; – structured context retrieval
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Workflow &amp;amp; Collaboration
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Linear / Jira MCP&lt;/strong&gt; – task and project management
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Excalidraw MCP&lt;/strong&gt; – diagrams and system sketches
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Canva MCP&lt;/strong&gt; – quick design workflows
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;What MCPs are you using right now? Anything I should test next?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>coding</category>
    </item>
    <item>
      <title>This article gives a clear test to tell whether you’re shipping “distribution” (wrappers/clones) vs “capability” (new primitives). Includes actionable heuristics for AI builders (evals, reliability, orchestration).</title>
      <dc:creator>Orlando Ascanio </dc:creator>
      <pubDate>Thu, 26 Feb 2026 13:59:05 +0000</pubDate>
      <link>https://dev.to/gojer16/this-article-gives-a-clear-test-to-tell-whether-youre-shipping-distribution-wrappersclones-vs-49gf</link>
      <guid>https://dev.to/gojer16/this-article-gives-a-clear-test-to-tell-whether-youre-shipping-distribution-wrappersclones-vs-49gf</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/gojer16" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F2111749%2F5657552f-d2ff-49ef-9396-6d3b22606084.jpeg" alt="gojer16"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/gojer16/horizontal-vs-vertical-progress-why-scaling-what-works-isnt-enough-1hbf" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Horizontal vs Vertical Progress: Why Scaling What Works Isn’t Enough&lt;/h2&gt;
      &lt;h3&gt;Orlando Ascanio  ・ Feb 26&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#ai&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#startup&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#product&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#software&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>startup</category>
      <category>product</category>
      <category>software</category>
    </item>
    <item>
      <title>Horizontal vs Vertical Progress: Why Scaling What Works Isn’t Enough</title>
      <dc:creator>Orlando Ascanio </dc:creator>
      <pubDate>Thu, 26 Feb 2026 13:54:55 +0000</pubDate>
      <link>https://dev.to/gojer16/horizontal-vs-vertical-progress-why-scaling-what-works-isnt-enough-1hbf</link>
      <guid>https://dev.to/gojer16/horizontal-vs-vertical-progress-why-scaling-what-works-isnt-enough-1hbf</guid>
      <description>&lt;h1&gt;
  
  
  We often confuse scale with progress.
&lt;/h1&gt;

&lt;p&gt;Scale is expanding what already works: more markets, more distribution, more copies.&lt;br&gt;&lt;br&gt;
Progress is increasing what's possible.&lt;/p&gt;

&lt;p&gt;A useful lens is to separate progress into two modes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Horizontal progress:&lt;/strong&gt; copying a proven system and spreading it wider.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertical progress:&lt;/strong&gt; creating something fundamentally new, new capabilities, new primitives, new leverage.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Horizontal progress distributes value. Vertical progress creates new categories of value.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Ceiling of Replication
&lt;/h2&gt;

&lt;p&gt;At a macro level, horizontal progress resembles what globalization does: taking systems that work in one place and deploying them elsewhere. That pattern has generated massive wealth.&lt;/p&gt;

&lt;p&gt;But replication has a ceiling. Distribution scales benefits &lt;em&gt;and&lt;/em&gt; costs. If the base system is inefficient, wasting energy, attention, capital, or operational complexity, scaling it multiplies the waste. You get more output, but also more strain.&lt;/p&gt;

&lt;p&gt;Vertical progress is what raises that ceiling.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Illusion of Automatic Progress
&lt;/h2&gt;

&lt;p&gt;There's a quiet assumption many of us inherit: &lt;em&gt;"the future gets better by default."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The 20th century makes that belief feel true. But its prosperity came from breakthroughs that changed society's input/output ratio:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;electricity
&lt;/li&gt;
&lt;li&gt;computing
&lt;/li&gt;
&lt;li&gt;aviation
&lt;/li&gt;
&lt;li&gt;antibiotics and modern medicine
&lt;/li&gt;
&lt;li&gt;networks and the internet
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These weren't better copies. They were new primitives. Replication helped distribute the gains, but the gains themselves originated with the invention.&lt;/p&gt;

&lt;h2&gt;
  
  
  What This Means for Builders (Especially in AI)
&lt;/h2&gt;

&lt;p&gt;In software, horizontal progress often looks like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;another CRUD SaaS with slightly better UX
&lt;/li&gt;
&lt;li&gt;"AI wrappers" with thin differentiation
&lt;/li&gt;
&lt;li&gt;niche clones of existing startups
&lt;/li&gt;
&lt;li&gt;the same workflow repackaged for a new audience
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These products can be useful and profitable. But they usually don't create new capabilities, only new distribution.&lt;/p&gt;

&lt;p&gt;Vertical progress looks like work that changes what's feasible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;new architectures and abstractions that simplify whole classes of problems
&lt;/li&gt;
&lt;li&gt;infrastructure layers that make systems meaningfully more reliable, secure, or efficient
&lt;/li&gt;
&lt;li&gt;tools that make complex workflows predictable and debuggable
&lt;/li&gt;
&lt;li&gt;primitives that turn demos into dependable systems
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In AI, vertical progress shows up less in prettier dashboards and more in hard engineering:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;evaluation systems (measuring quality beyond vibes)
&lt;/li&gt;
&lt;li&gt;reliability engineering (handling failures, drift, uncertainty)
&lt;/li&gt;
&lt;li&gt;cost/performance orchestration (routing, caching, model choice)
&lt;/li&gt;
&lt;li&gt;memory and state that's inspectable and controllable
&lt;/li&gt;
&lt;li&gt;tooling that makes "intelligence" more programmable
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A lot of today's AI products are horizontal progress at API speed. That's not an insult, it's a phase. The enduring leverage comes from the vertical layer: the primitives that make AI systems reliable at scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  Constraints Are the Point
&lt;/h2&gt;

&lt;p&gt;Replication assumes we can scale indefinitely. In practice, we hit constraints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;energy and compute
&lt;/li&gt;
&lt;li&gt;attention and cognitive bandwidth
&lt;/li&gt;
&lt;li&gt;capital efficiency
&lt;/li&gt;
&lt;li&gt;infrastructure and operational complexity
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you scale an inefficient system, you scale the inefficiency.&lt;/p&gt;

&lt;p&gt;Technology, when it's truly vertical, does the opposite: it increases output per unit of input. It bends constraints instead of multiplying them.&lt;/p&gt;

&lt;h2&gt;
  
  
  A Practical Test: Horizontal or Vertical?
&lt;/h2&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If competitors copy your UI in a weekend, do you still have an advantage?
&lt;/li&gt;
&lt;li&gt;Are you building a new capability, or just new packaging?
&lt;/li&gt;
&lt;li&gt;Does your product get structurally better via feedback loops/evals, or is it static?
&lt;/li&gt;
&lt;li&gt;Are you reducing a fundamental constraint (time, cost, error rate), or just moving it around?
&lt;/li&gt;
&lt;li&gt;Can you explain differentiation without mentioning your niche?
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the answers point mainly to "distribution" and "packaging," you're playing a horizontal game. That's fine, just be honest about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Builder's Responsibility
&lt;/h2&gt;

&lt;p&gt;Horizontal progress distributes gains. Vertical progress creates them.&lt;/p&gt;

&lt;p&gt;Both matter. But only one raises the ceiling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are you building that moves things forward, not just outward?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>startup</category>
      <category>product</category>
      <category>software</category>
    </item>
    <item>
      <title>I built Elevare because I kept drowning in tasks, even though I knew most of them didn’t matter. So, I asked: what if an AI could coach me to focus on just one thing, the ONE Thing that matters most?</title>
      <dc:creator>Orlando Ascanio </dc:creator>
      <pubDate>Mon, 22 Sep 2025 03:50:42 +0000</pubDate>
      <link>https://dev.to/gojer16/i-built-elevare-because-i-kept-drowning-in-tasks-even-though-i-knew-most-of-them-didnt-matter-3j7</link>
      <guid>https://dev.to/gojer16/i-built-elevare-because-i-kept-drowning-in-tasks-even-though-i-knew-most-of-them-didnt-matter-3j7</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/gojer16/elevare-building-an-ai-assistant-that-helps-you-focus-on-your-one-thing-5dbk" class="crayons-story__hidden-navigation-link"&gt;Elevare: Building an AI Assistant That Helps You Focus on Your ONE Thing&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/gojer16" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F2111749%2F5657552f-d2ff-49ef-9396-6d3b22606084.jpeg" alt="gojer16 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/gojer16" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Orlando Ascanio 
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Orlando Ascanio 
                
              
              &lt;div id="story-author-preview-content-2859938" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/gojer16" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F2111749%2F5657552f-d2ff-49ef-9396-6d3b22606084.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Orlando Ascanio &lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/gojer16/elevare-building-an-ai-assistant-that-helps-you-focus-on-your-one-thing-5dbk" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 22 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/gojer16/elevare-building-an-ai-assistant-that-helps-you-focus-on-your-one-thing-5dbk" id="article-link-2859938"&gt;
          Elevare: Building an AI Assistant That Helps You Focus on Your ONE Thing
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/typescript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;typescript&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/learning"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;learning&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/gojer16/elevare-building-an-ai-assistant-that-helps-you-focus-on-your-one-thing-5dbk#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            1 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>productivity</category>
      <category>typescript</category>
      <category>learning</category>
    </item>
    <item>
      <title>Elevare: Building an AI Assistant That Helps You Focus on Your ONE Thing</title>
      <dc:creator>Orlando Ascanio </dc:creator>
      <pubDate>Mon, 22 Sep 2025 03:49:53 +0000</pubDate>
      <link>https://dev.to/gojer16/elevare-building-an-ai-assistant-that-helps-you-focus-on-your-one-thing-5dbk</link>
      <guid>https://dev.to/gojer16/elevare-building-an-ai-assistant-that-helps-you-focus-on-your-one-thing-5dbk</guid>
      <description>&lt;p&gt;We live in an age of endless to-dos, but most of them don’t matter. Productivity isn’t about doing more, it’s about doing what matters most.&lt;/p&gt;

&lt;p&gt;That’s the philosophy behind Elevare, a project I’ve been building.&lt;/p&gt;

&lt;h2&gt;
  
  
  ✨ What is Elevare AI?
&lt;/h2&gt;

&lt;p&gt;Elevare is an AI-powered productivity coach (Gemini + LangChain) that helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;🎯 &lt;strong&gt;Task Suggestion Mode&lt;/strong&gt;: When you have tasks, it picks the ONE with the biggest leverage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🧭 &lt;strong&gt;Exploration Mode&lt;/strong&gt;: When you feel lost, it asks clarifying questions and brainstorms possible ONE Things.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🧠 &lt;strong&gt;Psychological Layer&lt;/strong&gt;: Uses reflection prompts, progressive narrowing, and identity-based framing to make the next action stick.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🔧 Under the Hood
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TypeScript&lt;/strong&gt; + &lt;strong&gt;Express&lt;/strong&gt; backend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemini API&lt;/strong&gt; (via &lt;strong&gt;LangChain&lt;/strong&gt;) for &lt;strong&gt;AI&lt;/strong&gt; reasoning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SQLite&lt;/strong&gt; for persistence (feedback storage, session context).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean architecture:&lt;/strong&gt; prompt service, heuristic service, feedback service.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🧩 Why This Matters
&lt;/h2&gt;

&lt;p&gt;Most apps drown you in todos. &lt;strong&gt;Elevare&lt;/strong&gt; helps you cut through noise, reduce decision fatigue, and build momentum, one domino at a time.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Success is not about doing everything right, but about doing the right thing."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Demo:&lt;/strong&gt; &lt;a href="https://elevare-ai-assistant-demo.vercel.app" rel="noopener noreferrer"&gt;https://elevare-ai-assistant-demo.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’d love feedback, ideas, and collaborators. If you’ve ever felt overwhelmed by tasks and wished for a coach, not just a checklist, Elevare is for you.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>typescript</category>
      <category>learning</category>
    </item>
    <item>
      <title>I just had a technical interview, and it went terribly. I was guessing at answers, even to "tell me about yourself." Painful? Yes. But also one of the best wake-up calls I’ve had as a developer.</title>
      <dc:creator>Orlando Ascanio </dc:creator>
      <pubDate>Thu, 18 Sep 2025 19:54:01 +0000</pubDate>
      <link>https://dev.to/gojer16/i-just-had-a-technical-interview-and-it-went-terribly-i-was-guessing-at-answers-even-to-tell-me-3c1p</link>
      <guid>https://dev.to/gojer16/i-just-had-a-technical-interview-and-it-went-terribly-i-was-guessing-at-answers-even-to-tell-me-3c1p</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/gojer16/first-technical-interview-14pe" class="crayons-story__hidden-navigation-link"&gt;First Technical Interview&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/gojer16" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F2111749%2F5657552f-d2ff-49ef-9396-6d3b22606084.jpeg" alt="gojer16 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/gojer16" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Orlando Ascanio 
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Orlando Ascanio 
                
              
              &lt;div id="story-author-preview-content-2854404" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/gojer16" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F2111749%2F5657552f-d2ff-49ef-9396-6d3b22606084.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Orlando Ascanio &lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/gojer16/first-technical-interview-14pe" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 18 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/gojer16/first-technical-interview-14pe" id="article-link-2854404"&gt;
          First Technical Interview
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/interview"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;interview&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/learning"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;learning&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/career"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;career&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/gojer16/first-technical-interview-14pe#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            1 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>interview</category>
      <category>learning</category>
      <category>programming</category>
      <category>career</category>
    </item>
    <item>
      <title>First Technical Interview</title>
      <dc:creator>Orlando Ascanio </dc:creator>
      <pubDate>Thu, 18 Sep 2025 19:52:31 +0000</pubDate>
      <link>https://dev.to/gojer16/first-technical-interview-14pe</link>
      <guid>https://dev.to/gojer16/first-technical-interview-14pe</guid>
      <description>&lt;p&gt;Yesterday I finished my first technical interview, and honestly, it didn't go as I expected.&lt;/p&gt;

&lt;p&gt;They asked me deep questions about React, design principles, UX, and even threw in a LeetCode problem. I found myself guessing on answers instead of confidently explaining what I know, even when they asked the classic “Tell me about yourself.” That moment of uncertainty was humbling, but also eye-opening.&lt;/p&gt;

&lt;p&gt;Here’s what I’m taking away from this experience:&lt;/p&gt;

&lt;p&gt;1️⃣ Preparation is more than knowledge – knowing something is different from being able to communicate it clearly under pressure.&lt;/p&gt;

&lt;p&gt;2️⃣ Anchored examples matter – I need concrete stories from my projects to illustrate principles like React patterns, UX decisions, and problem-solving.&lt;/p&gt;

&lt;p&gt;3️⃣ Confidence beats guessing – showing structured thinking is often more important than getting a perfect answer.&lt;/p&gt;

&lt;p&gt;Mistakes are uncomfortable, but they are also the best teachers. I’m grateful for this experience because it highlighted exactly what I need to improve and that clarity is invaluable.&lt;/p&gt;

&lt;p&gt;To anyone else who’s had a tough interview recently: take a deep breath, reflect, and make a plan. Growth comes from facing challenges head-on. 💪&lt;/p&gt;

</description>
      <category>interview</category>
      <category>learning</category>
      <category>programming</category>
      <category>career</category>
    </item>
    <item>
      <title>How do you actually use an MCP client with GitHub? I wrote a step-by-step guide for devs, clear, simple!</title>
      <dc:creator>Orlando Ascanio </dc:creator>
      <pubDate>Fri, 05 Sep 2025 05:15:55 +0000</pubDate>
      <link>https://dev.to/gojer16/how-do-you-actually-use-an-mcp-client-with-github-i-wrote-a-step-by-step-guide-for-devs-clear-13o4</link>
      <guid>https://dev.to/gojer16/how-do-you-actually-use-an-mcp-client-with-github-i-wrote-a-step-by-step-guide-for-devs-clear-13o4</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/gojer16/mcp-the-usb-c-for-ai-development-why-you-should-care-2071" class="crayons-story__hidden-navigation-link"&gt;MCP: The USB-C for AI Development (Why You Should Care)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/gojer16" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F2111749%2F5657552f-d2ff-49ef-9396-6d3b22606084.jpeg" alt="gojer16 profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/gojer16" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Orlando Ascanio 
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Orlando Ascanio 
                
              
              &lt;div id="story-author-preview-content-2821069" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/gojer16" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F2111749%2F5657552f-d2ff-49ef-9396-6d3b22606084.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Orlando Ascanio &lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/gojer16/mcp-the-usb-c-for-ai-development-why-you-should-care-2071" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 5 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/gojer16/mcp-the-usb-c-for-ai-development-why-you-should-care-2071" id="article-link-2821069"&gt;
          MCP: The USB-C for AI Development (Why You Should Care)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag crayons-tag--filled  " href="/t/todayilearned"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;todayilearned&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/mcp"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;mcp&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/learning"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;learning&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/gojer16/mcp-the-usb-c-for-ai-development-why-you-should-care-2071#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            3 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>mcp</category>
      <category>ai</category>
      <category>learning</category>
      <category>todayilearned</category>
    </item>
  </channel>
</rss>
