<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Architecture on Daffa Abhipraya</title><link>https://blog.abhipraya.dev/tags/architecture/</link><description>Recent content in Architecture on Daffa Abhipraya</description><generator>Hugo</generator><language>en-us</language><copyright>© Daffa Abhipraya</copyright><lastBuildDate>Thu, 09 Apr 2026 00:00:00 +0700</lastBuildDate><atom:link href="https://blog.abhipraya.dev/tags/architecture/index.xml" rel="self" type="application/rss+xml"/><item><title>PPL: SOLID Principles in a FastAPI Invoice System</title><link>https://blog.abhipraya.dev/ppl/part-a/solid/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-a/solid/</guid><description>&lt;p>SIRA (Smart Invoice Reminder AI) is a system that automates invoice collection reminders. It monitors payment status, scores client risk using a weighted formula, and sends personalized reminders by email or messaging. The backend is built with FastAPI, Supabase (Postgres via REST), Celery for background jobs, and Redis as the message broker.&lt;/p>
&lt;p>This blog walks through how SOLID principles shaped the architecture at three levels: the overall layer structure, service-level design patterns, and individual function design. The goal is not to explain what SOLID stands for (there are plenty of articles for that), but to show what it looks like in production code and why certain design choices were made over simpler alternatives.&lt;/p></description></item><item><title>PPL: Programming [Sprint 2, Week 2]</title><link>https://blog.abhipraya.dev/ppl/part-b/s2w2-programming/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-b/s2w2-programming/</guid><description>&lt;h2 id="what-i-worked-on">
 &lt;a class="anchor" href="#what-i-worked-on" data-anchor="what-i-worked-on" aria-hidden="true">#&lt;/a>
 What I Worked On
&lt;/h2>
&lt;p>Two major features this week, email integration (SIRA-160) and session management (SIRA-214), both followed the SOLID principles that have been established in the codebase. The email feature in particular offered a good opportunity to show SRP in action: sending an email and rendering an email template are genuinely different responsibilities, and keeping them separate made both easier to test.&lt;/p>
&lt;hr>
&lt;h2 id="email-integration-separating-transport-from-rendering">
 &lt;a class="anchor" href="#email-integration-separating-transport-from-rendering" data-anchor="email-integration-separating-transport-from-rendering" aria-hidden="true">#&lt;/a>
 Email Integration: Separating Transport from Rendering
&lt;/h2>
&lt;p>SIRA-160 (MR !108) introduced three distinct services:&lt;/p></description></item><item><title>PPL: SOLID and Layered Architecture [Sprint 1, Week 3]</title><link>https://blog.abhipraya.dev/ppl/part-b/s1w3-programming/</link><pubDate>Fri, 13 Mar 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-b/s1w3-programming/</guid><description>&lt;h2 id="what-i-worked-on">
 &lt;a class="anchor" href="#what-i-worked-on" data-anchor="what-i-worked-on" aria-hidden="true">#&lt;/a>
 What I Worked On
&lt;/h2>
&lt;p>This week&amp;rsquo;s invoice management feature (MR !12) required a full CRUD stack with filtering, sorting, auth enforcement, and business validation (status transitions, admin-only delete). Building this properly meant enforcing strict layer boundaries and handling the tension between HTTP concerns and domain logic.&lt;/p>
&lt;h2 id="the-three-layer-pattern-in-practice">
 &lt;a class="anchor" href="#the-three-layer-pattern-in-practice" data-anchor="the-three-layer-pattern-in-practice" aria-hidden="true">#&lt;/a>
 The Three-Layer Pattern in Practice
&lt;/h2>
&lt;p>SIRA&amp;rsquo;s backend follows Router → Service → DB, where each layer has a single responsibility:&lt;/p></description></item></channel></rss>