<?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>Forem: Eli_coding</title>
    <description>The latest articles on Forem by Eli_coding (@eli_coding).</description>
    <link>https://forem.com/eli_coding</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%2F2548075%2F1f8062c1-5b7e-4181-ae3a-87ec3244a796.png</url>
      <title>Forem: Eli_coding</title>
      <link>https://forem.com/eli_coding</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/eli_coding"/>
    <language>en</language>
    <item>
      <title>I Keep Telling Claude the Same Things. So He Started Writing Them Down Himself.</title>
      <dc:creator>Eli_coding</dc:creator>
      <pubDate>Fri, 10 Apr 2026 11:24:23 +0000</pubDate>
      <link>https://forem.com/eli_coding/i-keep-telling-claude-the-same-things-so-he-started-writing-them-down-himself-1i9</link>
      <guid>https://forem.com/eli_coding/i-keep-telling-claude-the-same-things-so-he-started-writing-them-down-himself-1i9</guid>
      <description>&lt;p&gt;&lt;em&gt;A small moment that changed how I think about AI coding tools.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;If you've used Claude Code for more than a week, you know the pattern.&lt;/p&gt;

&lt;p&gt;You tell it something. It does it. Next session — gone. You tell it again. It does it. Next session — gone again.&lt;/p&gt;

&lt;p&gt;For me, it was always the same three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"Keep components dumb. Logic goes in services."&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Use constants instead of string literals."&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"Every new service or helper needs a unit test."&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I said these things so many times they started to feel like a ritual. Open Claude, remind Claude, work, close Claude, repeat.&lt;/p&gt;

&lt;p&gt;Then one day I was watching the terminal output — and I saw something I didn't expect.&lt;/p&gt;




&lt;h2&gt;
  
  
  What happened
&lt;/h2&gt;

&lt;p&gt;I was working on a mid-sized Angular project — forms, validators, lazy-loaded modules, the usual stuff.&lt;/p&gt;

&lt;p&gt;I'd just corrected Claude again on the dumb components rule. Nothing unusual. But instead of just applying the fix and moving on, I watched the terminal and noticed Claude was still running.&lt;/p&gt;

&lt;p&gt;It was writing files.&lt;/p&gt;

&lt;p&gt;Not code files. Not component files. Its own internal files.&lt;/p&gt;

&lt;p&gt;Right there in the console output, I could see it creating &lt;code&gt;memory.md&lt;/code&gt;, then &lt;code&gt;feedback_dumb_components.md&lt;/code&gt;, then &lt;code&gt;feedback_unit_tests.md&lt;/code&gt; — one by one.&lt;/p&gt;

&lt;p&gt;I hadn't asked for any of this.&lt;/p&gt;




&lt;h2&gt;
  
  
  The files it created
&lt;/h2&gt;

&lt;p&gt;Claude Code had built its own memory index and a set of structured feedback files — one for each rule it had learned from our sessions together.&lt;/p&gt;

&lt;p&gt;Here's the actual &lt;code&gt;memory.md&lt;/code&gt; it wrote:&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="gh"&gt;# Memory Index&lt;/span&gt;
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Project: Users Management&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;project_users_management.md&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
  — Angular frontend for Users Management; tabs, forms, validators
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Feedback: OnPush + forms&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;feedback_onpush_forms.md&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
  — How to correctly update OnPush components when reactive form state changes
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Feedback: No inline styles&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;feedback_no_inline_styles.md&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
  — Never use style attribute in HTML; always use scss files
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Feedback: Dumb components + constants&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;feedback_dumb_components.md&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
  — Components must be dumb/agnostic; logic in services/helpers; always use constants
&lt;span class="p"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;Feedback: Unit tests required&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="sx"&gt;feedback_unit_tests.md&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
  — Every new service, helper, or util file must have a .spec.ts unit test file
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And here's what it wrote inside &lt;code&gt;feedback_dumb_components.md&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;name: Dumb components + constants rule
type: feedback

Components should be dumb and agnostic — they bind signals/inputs from services 
and delegate all logic elsewhere. Business logic, form orchestration, and state 
management belong in services or helper functions, not in component classes.

Never use string literals in TypeScript code where a constant exists or can be created.

Why: User explicitly requested this as a project rule.

How to apply:
&lt;span class="p"&gt;-&lt;/span&gt; Move any non-trivial logic (subscriptions, form manipulation, state derivation) 
  into a service or helper.
&lt;span class="p"&gt;-&lt;/span&gt; Before writing a string like 'address', 'postalCode', etc., check if a constant 
  already exists. If not, create one.
&lt;span class="p"&gt;-&lt;/span&gt; Components should only: inject services, expose signals/computed for the template, 
  and forward events.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And &lt;code&gt;feedback_unit_tests.md&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;name: Unit tests required for services, helpers, and utils
type: feedback

Whenever a new service, helper, or utility file is created, a unit test file 
(.spec.ts) must also be created for it.

Why: User explicitly requested this as a project rule.

How to apply: After writing a new .service.ts, helper.ts, or utils.ts file, 
immediately create the corresponding .spec.ts file with at minimum a basic 
test suite skeleton covering the main logic.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It didn't just remember the rules. It documented &lt;em&gt;why&lt;/em&gt; they exist and &lt;em&gt;how to apply them&lt;/em&gt;. Like a junior dev writing up notes after a code review — except nobody told it to.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this moment stuck with me
&lt;/h2&gt;

&lt;p&gt;Watching it happen in real time in the terminal was different from finding files afterwards.&lt;/p&gt;

&lt;p&gt;I saw Claude finish applying my correction, then immediately pivot to: &lt;em&gt;"I should make sure I don't repeat this mistake."&lt;/em&gt; And then it built a system to prevent that.&lt;/p&gt;

&lt;p&gt;That's not autocomplete. That's not even a smart assistant. That's something closer to a collaborator that takes feedback seriously.&lt;/p&gt;

&lt;p&gt;We talk a lot about prompting — how to write better instructions, how to get better output. But what Claude did here is different. It turned &lt;em&gt;my feedback&lt;/em&gt; into &lt;em&gt;its own system&lt;/em&gt;, without being asked.&lt;/p&gt;




&lt;h2&gt;
  
  
  What changed in my workflow after this
&lt;/h2&gt;

&lt;p&gt;Since seeing this happen, I've started being more deliberate about corrections. When Claude makes a mistake I've seen before, instead of just fixing it in the moment, I now say:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"This is a pattern I always want you to follow. Make sure you remember this."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And it does. It updates its own memory files.&lt;/p&gt;

&lt;p&gt;The result is that my sessions now build on each other instead of starting from zero. The tool gets more useful the longer I work with it — which is exactly what you want from any collaborator.&lt;/p&gt;




&lt;h2&gt;
  
  
  The honest take
&lt;/h2&gt;

&lt;p&gt;Claude Code still makes mistakes. It still occasionally ignores its own memory. It's not perfect.&lt;/p&gt;

&lt;p&gt;But watching it write those files in real time made me realize I'd been thinking about AI tools the wrong way. I was treating each session as isolated.&lt;/p&gt;

&lt;p&gt;Claude was treating them as a relationship.&lt;/p&gt;

&lt;p&gt;One of us was doing it right.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;10 years of Angular. Now learning from my own tools.&lt;/em&gt;&lt;br&gt;&lt;br&gt;
&lt;em&gt;Follow &lt;a href="https://instagram.com/eli_coding" rel="noopener noreferrer"&gt;@eli_coding&lt;/a&gt; on Instagram for weekly posts on Angular, AI and real engineering.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>angular</category>
      <category>ai</category>
      <category>claude</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I've Been a Frontend Engineer for 10 Years. Here's How Claude Changed My Workflow in 30 Days.</title>
      <dc:creator>Eli_coding</dc:creator>
      <pubDate>Tue, 07 Apr 2026 18:02:38 +0000</pubDate>
      <link>https://forem.com/eli_coding/ive-been-a-frontend-engineer-for-11-years-heres-how-claude-changed-my-workflow-in-30-days-2222</link>
      <guid>https://forem.com/eli_coding/ive-been-a-frontend-engineer-for-11-years-heres-how-claude-changed-my-workflow-in-30-days-2222</guid>
      <description>&lt;p&gt;&lt;em&gt;A practical, honest account from an Angular developer who was skeptical — and then wasn't.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;I'll be upfront: I was one of those engineers who rolled my eyes at AI coding tools.&lt;/p&gt;

&lt;p&gt;"It hallucinates," I'd say. "It writes mediocre code." "I can do this faster myself."&lt;/p&gt;

&lt;p&gt;10 years of Angular, TypeScript, RxJS, and hard-won debugging instincts will do that to you. You build confidence in your own way of working, and anything that disrupts it feels like noise.&lt;/p&gt;

&lt;p&gt;Then I gave Claude a real chance. Not a toy project. My actual work.&lt;/p&gt;

&lt;p&gt;This is what I found.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I was building
&lt;/h2&gt;

&lt;p&gt;I was working on a mid-sized Angular 17 app — signals, standalone components, the whole modern stack. The task: a complex data table with filtering, sorting, inline editing, and real-time updates via WebSockets.&lt;/p&gt;

&lt;p&gt;The kind of component that takes a full day to get right, and another day to test properly.&lt;/p&gt;

&lt;p&gt;I decided to treat Claude as a pairing partner for the whole thing, from architecture to final polish.&lt;/p&gt;




&lt;h2&gt;
  
  
  The part that surprised me most: it's not about autocomplete
&lt;/h2&gt;

&lt;p&gt;Before this experiment, I thought of AI coding tools as fancy autocomplete. Type a function signature, get a suggestion, accept or reject.&lt;/p&gt;

&lt;p&gt;That's not what Claude is.&lt;/p&gt;

&lt;p&gt;The real shift was using it as a &lt;strong&gt;thinking partner&lt;/strong&gt; — before writing a single line of code.&lt;/p&gt;

&lt;p&gt;I described the component requirements in plain language and asked: &lt;em&gt;"What are the tradeoffs between using a single datasource with BehaviorSubject vs leveraging Angular Signals with computed state here?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The answer was genuinely useful. Not because it was magic, but because it forced me to articulate my problem clearly — and then gave me a structured way to think through it. Like a good code review, before the code exists.&lt;/p&gt;




&lt;h2&gt;
  
  
  Concrete example: the filter logic
&lt;/h2&gt;

&lt;p&gt;Here's a real case. I needed to combine three independent filters — search text, status dropdown, and a date range — into a single reactive stream that the table datasource consumes.&lt;/p&gt;

&lt;p&gt;My first instinct was something like this:&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;// My initial rough sketch&lt;/span&gt;
&lt;span class="nf"&gt;filterByText&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;items&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;Item&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="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nx"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;items&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;i&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;i&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="nf"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;includes&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;toLowerCase&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;I described the full requirement to Claude and asked for an approach using Angular Signals. It proposed this structure:&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="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;DataTableComponent&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;private&lt;/span&gt; &lt;span class="nx"&gt;items&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;signal&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Item&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;([]);&lt;/span&gt;

  &lt;span class="nx"&gt;searchText&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;signal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;''&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;statusFilter&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;signal&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;Status&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;dateRange&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;signal&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;start&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;end&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Date&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;filteredItems&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;computed&lt;/span&gt;&lt;span class="p"&gt;(()&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;const&lt;/span&gt; &lt;span class="nx"&gt;search&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;searchText&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;toLowerCase&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;status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;statusFilter&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;range&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dateRange&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;items&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;item&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;const&lt;/span&gt; &lt;span class="nx"&gt;matchesSearch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;search&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;item&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="nf"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;search&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;matchesStatus&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;status&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;matchesDate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
        &lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;range&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createdAt&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="nx"&gt;range&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;start&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;item&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;createdAt&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="nx"&gt;range&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;end&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

      &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;matchesSearch&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;matchesStatus&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nx"&gt;matchesDate&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;Honestly? This is close to what I would have written. But it took me 4 minutes instead of 25.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where it saved me the most time
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Boilerplate I hate writing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Unit test stubs. Interface definitions from API response shapes. Error handling wrappers. I started pasting in API JSON responses and asking Claude to generate the TypeScript interface. Three seconds. Done.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Explaining &lt;em&gt;why&lt;/em&gt; something is broken&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'd paste a broken piece of code and describe the symptom — not ask for a fix, just ask for an explanation. The process of getting a structured explanation helped me spot the bug myself, faster than if I'd just stared at the code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Writing tests for things I'd already built&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Claude is excellent at generating a first pass of &lt;code&gt;describe&lt;/code&gt;/&lt;code&gt;it&lt;/code&gt; blocks from a component's public API. They're not perfect, but they're a solid 70% starting point.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where it still falls short
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;It doesn't know your codebase.&lt;/strong&gt; Without context, suggestions can be technically correct but architecturally wrong for your project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It can be confidently wrong.&lt;/strong&gt; Especially with Angular-specific APIs that changed in recent versions. Always verify anything touching the framework internals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It doesn't replace judgment.&lt;/strong&gt; That's still on me.&lt;/p&gt;




&lt;h2&gt;
  
  
  What actually changed in my workflow
&lt;/h2&gt;

&lt;p&gt;Three habits I've kept after 30 days:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Before writing a component&lt;/strong&gt;, I describe it to Claude and ask for an architecture sketch — not code, just the approach.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;After writing a function&lt;/strong&gt;, I paste it in and ask: &lt;em&gt;"What edge cases am I not handling?"&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;For any PR I'm unsure about&lt;/strong&gt;, I ask Claude to review it before I submit.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  The honest summary
&lt;/h2&gt;

&lt;p&gt;I'm faster. Not 10x — that's marketing speak. But meaningfully faster on the tasks that used to drain me.&lt;/p&gt;

&lt;p&gt;If you're an experienced frontend engineer who's been skeptical — I was too. Give it a real 30-day trial on actual work, not toy examples. That's where the value shows up.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Follow me on Instagram &lt;a href="https://instagram.com/eli_coding" rel="noopener noreferrer"&gt;@eli_coding&lt;/a&gt; for weekly posts on Angular, AI and real engineering.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>angular</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
