<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Loiane Groner</title>
    <link>https://loiane.com/</link>
    <description>Java, Spring Boot, Spring AI, AI, Angular, Typescript, JavaScript</description>
    <language>en</language>
    <lastBuildDate>Sun, 09 Aug 2026 17:47:33 -0400</lastBuildDate>
    <atom:link href="https://loiane.com/rss.xml" rel="self" type="application/rss+xml" />

    
    <item>
      <title>AI Loop Engineering: Four Loops From a GitHub Issue to a Merged Feature</title>
      <link>https://loiane.com/2026/08/ai-loop-engineering-github-pr-claude-code/</link>
      <guid isPermaLink="true">https://loiane.com/2026/08/ai-loop-engineering-github-pr-claude-code/</guid>
      <pubDate>Sun, 09 Aug 2026 07:00:00 -0400</pubDate>
      <description>A few weeks ago I stopped babysitting a pull request and let an agent do it instead.</description>
      
      <category>AI</category>
      
    </item>
    
    <item>
      <title>Mutation Testing for Angular with Stryker: When 100% Coverage Still Tests Nothing</title>
      <link>https://loiane.com/2026/08/mutation-testing-angular-stryker/</link>
      <guid isPermaLink="true">https://loiane.com/2026/08/mutation-testing-angular-stryker/</guid>
      <pubDate>Tue, 04 Aug 2026 07:00:00 -0400</pubDate>
      <description>A few weeks ago I wrote about mutation testing for Java with PIT: why 100% line coverage can still catch nothing, and how deliberately injecting small bugs, mutants, measures whether your tests would actually notice. If you want the full case for why coverage lies, start there. This post is the other half of the stack: the same sensor, applied to Angular with Stryker Mutator.</description>
      
      <category>Angular</category>
      
    </item>
    
    <item>
      <title>Contract Testing for Spring Boot and Angular: Catch Frontend-Backend Drift Before Production</title>
      <link>https://loiane.com/2026/07/contract-testing-spring-boot-angular/</link>
      <guid isPermaLink="true">https://loiane.com/2026/07/contract-testing-spring-boot-angular/</guid>
      <pubDate>Thu, 30 Jul 2026 07:00:00 -0400</pubDate>
      <description>Your Angular service reads courseName off every response. Last Tuesday the backend renamed that field to name. Both projects compile. Both test suites are green. Production shows a table full of blanks.</description>
      
      <category>Java</category>
      
      <category>Spring</category>
      
      <category>Angular</category>
      
    </item>
    
    <item>
      <title>Architecture Testing for Java with ArchUnit: Stop Trusting Your Diagram, Start Testing It</title>
      <link>https://loiane.com/2026/07/architecture-testing-java-archunit/</link>
      <guid isPermaLink="true">https://loiane.com/2026/07/architecture-testing-java-archunit/</guid>
      <pubDate>Sun, 05 Jul 2026 07:00:00 -0400</pubDate>
      <description>Your architecture diagram says controllers never touch the repository directly. Your codebase disagrees.</description>
      
      <category>Java</category>
      
      <category>Spring</category>
      
    </item>
    
    <item>
      <title>Mutation Testing for Java with PIT: Stop Trusting Your Coverage Numbers</title>
      <link>https://loiane.com/2026/06/mutation-testing-java-pit/</link>
      <guid isPermaLink="true">https://loiane.com/2026/06/mutation-testing-java-pit/</guid>
      <pubDate>Fri, 19 Jun 2026 07:00:00 -0400</pubDate>
      <description>You have 100% line coverage for unit testing. A bug ships anyway.</description>
      
      <category>Java</category>
      
      <category>Spring</category>
      
    </item>
    
    <item>
      <title>Specs-Driven Development in Practice: End-to-End Delivery with Spring Boot and Angular</title>
      <link>https://loiane.com/2026/05/specs-driven-development-end-to-end-with-spring-boot-angular/</link>
      <guid isPermaLink="true">https://loiane.com/2026/05/specs-driven-development-end-to-end-with-spring-boot-angular/</guid>
      <pubDate>Sat, 23 May 2026 08:00:00 -0400</pubDate>
      <description>Prompt-first AI work is great for exploration. It is not enough for delivery.</description>
      
      <category>AI</category>
      
      <category>Angular</category>
      
      <category>Spring Framework</category>
      
    </item>
    
    <item>
      <title>Modern Angular 15: Add to Cart with output()</title>
      <link>https://loiane.com/2026/04/modern-angular-add-to-cart-output/</link>
      <guid isPermaLink="true">https://loiane.com/2026/04/modern-angular-add-to-cart-output/</guid>
      <pubDate>Tue, 21 Apr 2026 08:00:00 -0400</pubDate>
      <description>This is lesson 15 of the Modern Angular Course. In the previous lesson, we used computed() to filter products reactively. Now we add child-to-parent communication so clicking “Add to Cart” in a product card notifies the parent grid component.</description>
      
      <category>Angular Course</category>
      
    </item>
    
    <item>
      <title>Spring Boot 3 EOL to Spring Boot 4: A Production Upgrade Playbook (Including Jackson 2 to 3)</title>
      <link>https://loiane.com/2026/04/spring-boot-3-eol-to-4-upgrade-playbook-jackson-3/</link>
      <guid isPermaLink="true">https://loiane.com/2026/04/spring-boot-3-eol-to-4-upgrade-playbook-jackson-3/</guid>
      <pubDate>Sun, 19 Apr 2026 07:00:00 -0400</pubDate>
      <description>Spring Boot 4 is not a routine version bump.</description>
      
      <category>Spring Framework</category>
      
    </item>
    
    <item>
      <title>Modern Angular 14: Filtering Products with Computed Signals</title>
      <link>https://loiane.com/2026/04/modern-angular-filtering-products-computed-signals/</link>
      <guid isPermaLink="true">https://loiane.com/2026/04/modern-angular-filtering-products-computed-signals/</guid>
      <pubDate>Thu, 16 Apr 2026 08:00:00 -0400</pubDate>
      <description>This is lesson 14 of the Modern Angular Course. In the previous lesson, we introduced a writable signal for the search input. Now we build on that foundation by deriving filtered state with computed(), so the grid reacts automatically as the user types.</description>
      
      <category>Angular Course</category>
      
    </item>
    
    <item>
      <title>Harness Engineering: The Missing Layer in Specs-Driven AI Development</title>
      <link>https://loiane.com/2026/04/harness-engineering-missing-layer-specs-driven-ai-development/</link>
      <guid isPermaLink="true">https://loiane.com/2026/04/harness-engineering-missing-layer-specs-driven-ai-development/</guid>
      <pubDate>Tue, 14 Apr 2026 08:00:00 -0400</pubDate>
      <description>Many teams are still using AI like an intern.</description>
      
      <category>AI</category>
      
    </item>
    
    <item>
      <title>Modern Angular 13: Writable Signals for Search State</title>
      <link>https://loiane.com/2026/04/modern-angular-writable-signals-search-state/</link>
      <guid isPermaLink="true">https://loiane.com/2026/04/modern-angular-writable-signals-search-state/</guid>
      <pubDate>Mon, 13 Apr 2026 08:00:00 -0400</pubDate>
      <description>This is lesson 13 of the Modern Angular Course. In the previous lesson, we used @if and @else to conditionally render UI in the product card. Now we turn to user interaction by adding a search input that stores its value in a writable signal.</description>
      
      <category>Angular Course</category>
      
    </item>
    
    <item>
      <title>Modern Angular 12: Conditional Rendering with @if and @else</title>
      <link>https://loiane.com/2026/04/modern-angular-conditional-rendering-if-else/</link>
      <guid isPermaLink="true">https://loiane.com/2026/04/modern-angular-conditional-rendering-if-else/</guid>
      <pubDate>Sun, 12 Apr 2026 08:00:00 -0400</pubDate>
      <description>This is lesson 12 of the Modern Angular Course. In the previous lesson, we passed product data from the parent component to child cards using the modern input() API. Now that each card receives real product data, we can make the UI smarter by conditionally rendering parts of the template.</description>
      
      <category>Angular Course</category>
      
    </item>
    
    <item>
      <title>Modern Angular 11: Passing Data to Child Components with input()</title>
      <link>https://loiane.com/2026/04/modern-angular-passing-data-child-components-input/</link>
      <guid isPermaLink="true">https://loiane.com/2026/04/modern-angular-passing-data-child-components-input/</guid>
      <pubDate>Sat, 11 Apr 2026 10:00:00 -0400</pubDate>
      <description>This is lesson 11 of the Modern Angular Course. In the previous lesson, we rendered a list of products using signals and @for. Each card still shows placeholder content. Now it is time to connect real data from the parent component to the child component using Angular’s modern input() signal API.</description>
      
      <category>Angular Course</category>
      
    </item>
    
    <item>
      <title>Modern Angular 10: Rendering Lists with Signals and @for</title>
      <link>https://loiane.com/2026/04/modern-angular-rendering-lists-signals-for/</link>
      <guid isPermaLink="true">https://loiane.com/2026/04/modern-angular-rendering-lists-signals-for/</guid>
      <pubDate>Fri, 10 Apr 2026 10:00:00 -0400</pubDate>
      <description>This is lesson 10 of the Modern Angular Course. In the previous lesson, we built the ProductsGrid and ProductCard components with static placeholder content. Now it is time to make the UI reactive by connecting it to signals and rendering the product list dynamically.</description>
      
      <category>Angular Course</category>
      
    </item>
    
    <item>
      <title>Modern Angular 09: Products Grid with Angular Material</title>
      <link>https://loiane.com/2026/04/modern-angular-products-grid-angular-material/</link>
      <guid isPermaLink="true">https://loiane.com/2026/04/modern-angular-products-grid-angular-material/</guid>
      <pubDate>Thu, 09 Apr 2026 10:00:00 -0400</pubDate>
      <description>This is lesson 9 of the Modern Angular Course. In the previous lesson, we set up Angular Material and created the application header. Now we have a basic app shell, so it is time to build the main feature of the page: the products list.</description>
      
      <category>Angular Course</category>
      
    </item>
    
    <item>
      <title>Modern Angular 08: Angular Material and Header Setup</title>
      <link>https://loiane.com/2026/04/modern-angular-material-header-setup/</link>
      <guid isPermaLink="true">https://loiane.com/2026/04/modern-angular-material-header-setup/</guid>
      <pubDate>Wed, 08 Apr 2026 10:00:00 -0400</pubDate>
      <description>This is lesson 8 of the Modern Angular Course. In the previous lessons, we covered Angular fundamentals and the full signals model — writable signals, computed signals, and effects. Now we shift towards building a real project, step by step, applying what we have learned and introducing new concepts along the way.</description>
      
      <category>Angular Course</category>
      
    </item>
    
    <item>
      <title>Modern Angular 07: Effects</title>
      <link>https://loiane.com/2026/04/modern-angular-effects-signals/</link>
      <guid isPermaLink="true">https://loiane.com/2026/04/modern-angular-effects-signals/</guid>
      <pubDate>Tue, 07 Apr 2026 10:00:00 -0400</pubDate>
      <description>This is lesson 7 of the Modern Angular Course. In the previous lessons, we covered writable signals for state and computed signals for derived values. Now we complete the signals trio by introducing effects — the way Angular handles side effects in a reactive, predictable way.</description>
      
      <category>Angular Course</category>
      
    </item>
    
    <item>
      <title>Modern Angular 06: Computed Signals</title>
      <link>https://loiane.com/2026/04/modern-angular-computed-signals/</link>
      <guid isPermaLink="true">https://loiane.com/2026/04/modern-angular-computed-signals/</guid>
      <pubDate>Mon, 06 Apr 2026 10:00:00 -0400</pubDate>
      <description>This is lesson 6 of the Modern Angular Course. In the previous lesson, we introduced writable signals and used them to manage local component state. Now we build on that foundation with computed signals — derived state that updates automatically when its dependencies change.</description>
      
      <category>Angular Course</category>
      
    </item>
    
    <item>
      <title>Modern Angular 05: Introducing Signals for Local State</title>
      <link>https://loiane.com/2026/04/modern-angular-introducing-signals/</link>
      <guid isPermaLink="true">https://loiane.com/2026/04/modern-angular-introducing-signals/</guid>
      <pubDate>Sun, 05 Apr 2026 10:00:00 -0400</pubDate>
      <description>This is lesson 5 of the Modern Angular Course. In the previous lesson, we worked with component templates and learned how to bind data and handle user interaction. So far, we have been using regular class properties to manage component state. Now it is time to introduce signals — the foundation of state management in modern Angular.</description>
      
      <category>Angular Course</category>
      
    </item>
    
    <item>
      <title>Modern Angular 04: Component Templates and Interaction</title>
      <link>https://loiane.com/2026/04/modern-angular-component-templates-and-interaction/</link>
      <guid isPermaLink="true">https://loiane.com/2026/04/modern-angular-component-templates-and-interaction/</guid>
      <pubDate>Sat, 04 Apr 2026 10:00:00 -0400</pubDate>
      <description>This is lesson 4 of the Modern Angular Course. In the previous lesson, we created our first standalone component and rendered it using its selector. Now that we understand the structure of a component, it is time to make it interactive.</description>
      
      <category>Angular Course</category>
      
    </item>
    
  </channel>
</rss>
