<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Part C: Softskill Blogs on Daffa Abhipraya</title><link>https://blog.abhipraya.dev/ppl/part-c/</link><description>Recent content in Part C: Softskill Blogs 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/ppl/part-c/index.xml" rel="self" type="application/rss+xml"/><item><title>PPL: Communication and Knowledge Sharing [Sprint 2, Week 2]</title><link>https://blog.abhipraya.dev/ppl/part-c/s2w2-communication/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-c/s2w2-communication/</guid><description>&lt;h2 id="overview">
 &lt;a class="anchor" href="#overview" data-anchor="overview" aria-hidden="true">#&lt;/a>
 Overview
&lt;/h2>
&lt;p>Sprint 2 Week 2 (April 3 to 9) communication work centered on three substantial code reviews posted as GitLab discussion threads, merge coordination for 13+ teammate MRs, and Linear ticket management. The reviews caught several critical bugs that would have reached production, including a broken SQL join and an auth bypass.&lt;/p>
&lt;hr>
&lt;h2 id="1-threaded-mr-reviews-with-severity-grading">
 &lt;a class="anchor" href="#1-threaded-mr-reviews-with-severity-grading" data-anchor="1-threaded-mr-reviews-with-severity-grading" aria-hidden="true">#&lt;/a>
 1. Threaded MR Reviews with Severity Grading
&lt;/h2>
&lt;p>Three MRs were reviewed this week, all following the same structured approach: positive callouts first, then issues grouped by severity (P0 blockers through P3 nitpicks), with code fix suggestions for every issue.&lt;/p></description></item><item><title>PPL: New Learnings Applied to SIRA [Sprint 2, Week 2]</title><link>https://blog.abhipraya.dev/ppl/part-c/s2w2-aptitude/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-c/s2w2-aptitude/</guid><description>&lt;h2 id="overview">
 &lt;a class="anchor" href="#overview" data-anchor="overview" aria-hidden="true">#&lt;/a>
 Overview
&lt;/h2>
&lt;p>Sprint 2 Week 2 (April 3 to 9) was dominated by a mutation testing sprint: setting up mutmut and Stryker in CI, building integration test infrastructure from scratch, and writing mutation-killing tests. The week also delivered three application features and a meta-level improvement to AI workflow. Each area required learning at least one technology or concept not covered in standard Fasilkom coursework.&lt;/p>
&lt;hr>
&lt;h2 id="1-mutation-testing-with-mutmut-python">
 &lt;a class="anchor" href="#1-mutation-testing-with-mutmut-python" data-anchor="1-mutation-testing-with-mutmut-python" aria-hidden="true">#&lt;/a>
 1. Mutation Testing with mutmut (Python)
&lt;/h2>
&lt;p>Mutation testing is a technique where a tool injects small faults (&amp;ldquo;mutants&amp;rdquo;) into your source code (flipping operators, changing constants, removing lines) and checks whether your test suite catches each fault. If a test fails, the mutant is &amp;ldquo;killed.&amp;rdquo; If no test fails, the mutant &amp;ldquo;survives,&amp;rdquo; meaning your tests have a blind spot.&lt;/p></description></item><item><title>PPL: Work Ethic and Commitment [Sprint 2, Week 2]</title><link>https://blog.abhipraya.dev/ppl/part-c/s2w2-commitment/</link><pubDate>Thu, 09 Apr 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-c/s2w2-commitment/</guid><description>&lt;h2 id="overview">
 &lt;a class="anchor" href="#overview" data-anchor="overview" aria-hidden="true">#&lt;/a>
 Overview
&lt;/h2>
&lt;p>Sprint 2, Week 2 (April 3 to 9) output summary:&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Metric&lt;/th>
 &lt;th>Count&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>MRs authored and merged&lt;/td>
 &lt;td>19&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>MRs reviewed (in-depth, threaded)&lt;/td>
 &lt;td>3 (44 review points)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>MRs merged as maintainer&lt;/td>
 &lt;td>13+ (from teammates)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Commits&lt;/td>
 &lt;td>50+&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Domains covered&lt;/td>
 &lt;td>5 (CI/CD, testing infrastructure, API features, documentation, infra)&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="quantitative-output">
 &lt;a class="anchor" href="#quantitative-output" data-anchor="quantitative-output" aria-hidden="true">#&lt;/a>
 Quantitative Output
&lt;/h2>
&lt;h3 id="mrs-authored-and-merged">
 &lt;a class="anchor" href="#mrs-authored-and-merged" data-anchor="mrs-authored-and-merged" aria-hidden="true">#&lt;/a>
 MRs Authored and Merged
&lt;/h3>
&lt;p>19 MRs created and merged to &lt;code>main&lt;/code> this week, broken down by category:&lt;/p></description></item><item><title>PPL: Communication and Knowledge Sharing [Sprint 2, Week 1]</title><link>https://blog.abhipraya.dev/ppl/part-c/s2w1-communication/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-c/s2w1-communication/</guid><description>&lt;h2 id="overview">
 &lt;a class="anchor" href="#overview" data-anchor="overview" aria-hidden="true">#&lt;/a>
 Overview
&lt;/h2>
&lt;p>Sprint 2 Week 1 (Mar 24 to 30) communication focused on two detailed code reviews posted as GitLab discussion threads, merge coordination for the team, and direct code contributions to address review findings.&lt;/p>
&lt;hr>
&lt;h2 id="1-threaded-mr-reviews-with-severity-grading">
 &lt;a class="anchor" href="#1-threaded-mr-reviews-with-severity-grading" data-anchor="1-threaded-mr-reviews-with-severity-grading" aria-hidden="true">#&lt;/a>
 1. Threaded MR Reviews with Severity Grading
&lt;/h2>
&lt;p>This sprint I shifted to posting reviews as &lt;strong>GitLab discussion threads&lt;/strong> rather than plain comments. Discussion threads can be individually resolved by the MR owner after addressing each issue, making it clear which feedback has been handled and which is still open.&lt;/p></description></item><item><title>PPL: New Learnings Applied to SIRA [Sprint 2, Week 1]</title><link>https://blog.abhipraya.dev/ppl/part-c/s2w1-aptitude/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-c/s2w1-aptitude/</guid><description>&lt;h2 id="overview">
 &lt;a class="anchor" href="#overview" data-anchor="overview" aria-hidden="true">#&lt;/a>
 Overview
&lt;/h2>
&lt;p>Sprint 2 Week 1 (Mar 24 to 30) combined feature development with infrastructure hardening. The week produced two full-stack features (multi-device session management and email integration), a developer tooling improvement (Superset workspace isolation), and iterative CI quality gate improvements. Each required learning at least one technology from scratch.&lt;/p>
&lt;hr>
&lt;h2 id="1-multi-device-session-management">
 &lt;a class="anchor" href="#1-multi-device-session-management" data-anchor="1-multi-device-session-management" aria-hidden="true">#&lt;/a>
 1. Multi-Device Session Management
&lt;/h2>
&lt;p>SIRA needed per-device session tracking: users should see which devices are logged in, and admins should be able to revoke sessions remotely. This isn&amp;rsquo;t a standard Supabase Auth feature; it required a custom session layer on top of the existing JWT auth.&lt;/p></description></item><item><title>PPL: Work Ethic and Commitment [Sprint 2, Week 1]</title><link>https://blog.abhipraya.dev/ppl/part-c/s2w1-commitment/</link><pubDate>Mon, 30 Mar 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-c/s2w1-commitment/</guid><description>&lt;h2 id="overview">
 &lt;a class="anchor" href="#overview" data-anchor="overview" aria-hidden="true">#&lt;/a>
 Overview
&lt;/h2>
&lt;p>Sprint 2, Week 1 (Mar 24 to Apr 2) output summary:&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Metric&lt;/th>
 &lt;th>Count&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>MRs authored and merged&lt;/td>
 &lt;td>13&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>MRs reviewed (in-depth, threaded)&lt;/td>
 &lt;td>2&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>MRs merged as maintainer&lt;/td>
 &lt;td>6+ (from teammates)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Commits (across all branches)&lt;/td>
 &lt;td>100+&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Domains covered&lt;/td>
 &lt;td>9 (CI/CD, infra, backend, frontend, database, DevOps tooling, email, SonarQube, Supabase staging)&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Linear tickets created&lt;/td>
 &lt;td>10 (2 CI tickets + 8 BDD subtasks)&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="quantitative-output">
 &lt;a class="anchor" href="#quantitative-output" data-anchor="quantitative-output" aria-hidden="true">#&lt;/a>
 Quantitative Output
&lt;/h2>
&lt;h3 id="mrs-authored-and-merged">
 &lt;a class="anchor" href="#mrs-authored-and-merged" data-anchor="mrs-authored-and-merged" aria-hidden="true">#&lt;/a>
 MRs Authored and Merged
&lt;/h3>
&lt;p>8 MRs created and merged to &lt;code>main&lt;/code> this week:&lt;/p></description></item><item><title>PPL: Communication and Knowledge Sharing [Sprint 1, Week 3]</title><link>https://blog.abhipraya.dev/ppl/part-c/s1w3-communication/</link><pubDate>Tue, 10 Mar 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-c/s1w3-communication/</guid><description>&lt;h2 id="overview">
 &lt;a class="anchor" href="#overview" data-anchor="overview" aria-hidden="true">#&lt;/a>
 Overview
&lt;/h2>
&lt;p>This week&amp;rsquo;s communication contributions fall into five categories: detailed code reviews, merge coordination, issue tracking, direct code contributions to teammates&amp;rsquo; MRs, and proactive Discord communication to unblock the team.&lt;/p>
&lt;hr>
&lt;h2 id="1-detailed-code-reviews-with-actionable-fixes">
 &lt;a class="anchor" href="#1-detailed-code-reviews-with-actionable-fixes" data-anchor="1-detailed-code-reviews-with-actionable-fixes" aria-hidden="true">#&lt;/a>
 1. Detailed Code Reviews with Actionable Fixes
&lt;/h2>
&lt;p>Reviewed 15 MRs this week. Each review goes beyond surface-level &amp;ldquo;LGTM&amp;rdquo;: they include issue categorization (Critical/Important), before/after code snippets, and concrete suggested fixes that the MR owner can directly apply.&lt;/p></description></item><item><title>PPL: New Learnings Applied to SIRA [Sprint 1, Week 3]</title><link>https://blog.abhipraya.dev/ppl/part-c/s1w3-aptitude/</link><pubDate>Tue, 10 Mar 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-c/s1w3-aptitude/</guid><description>&lt;h2 id="overview">
 &lt;a class="anchor" href="#overview" data-anchor="overview" aria-hidden="true">#&lt;/a>
 Overview
&lt;/h2>
&lt;p>Sprint 1 Week 3 (Mar 4 to 10) was infrastructure-heavy. The project needed production-grade tooling that goes well beyond standard coursework: reverse proxies, email alerting, migration safety nets, security scanning, structured logging, and AI-integrated code quality analysis. Each of these required learning a new technology from scratch and applying it directly to the project.&lt;/p>
&lt;hr>
&lt;h2 id="1-nginx-reverse-proxy-for-subdomain-routing">
 &lt;a class="anchor" href="#1-nginx-reverse-proxy-for-subdomain-routing" data-anchor="1-nginx-reverse-proxy-for-subdomain-routing" aria-hidden="true">#&lt;/a>
 1. Nginx Reverse Proxy for Subdomain Routing
&lt;/h2>
&lt;p>SIRA runs three services on a single Nashta VM, each needing its own subdomain:&lt;/p></description></item><item><title>PPL: Work Ethic and Commitment [Sprint 1, Week 3]</title><link>https://blog.abhipraya.dev/ppl/part-c/s1w3-commitment/</link><pubDate>Tue, 10 Mar 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-c/s1w3-commitment/</guid><description>&lt;h2 id="overview">
 &lt;a class="anchor" href="#overview" data-anchor="overview" aria-hidden="true">#&lt;/a>
 Overview
&lt;/h2>
&lt;p>Sprint 1 Week 3 (Mar 4 to 10) output summary:&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>Metric&lt;/th>
 &lt;th>Count&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>MRs authored &amp;amp; merged&lt;/td>
 &lt;td>13&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>MRs reviewed&lt;/td>
 &lt;td>15&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>MRs merged as maintainer&lt;/td>
 &lt;td>~25&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Linear tickets created (cumulative)&lt;/td>
 &lt;td>69/98&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>Domains covered&lt;/td>
 &lt;td>5 (CI/CD, infra, backend, frontend, database)&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="quantitative-output">
 &lt;a class="anchor" href="#quantitative-output" data-anchor="quantitative-output" aria-hidden="true">#&lt;/a>
 Quantitative Output
&lt;/h2>
&lt;h3 id="mrs-authored-and-merged">
 &lt;a class="anchor" href="#mrs-authored-and-merged" data-anchor="mrs-authored-and-merged" aria-hidden="true">#&lt;/a>
 MRs Authored and Merged
&lt;/h3>
&lt;p>13 MRs created and merged to &lt;code>main&lt;/code> this week:&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th>MR&lt;/th>
 &lt;th>Type&lt;/th>
 &lt;th>Description&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td>&lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/31">!31&lt;/a>&lt;/td>
 &lt;td>feat(ci)&lt;/td>
 &lt;td>Linear auto-tagger for GitLab MR linking&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/34">!34&lt;/a>&lt;/td>
 &lt;td>fix&lt;/td>
 &lt;td>Code quality issues from post-payment-merge review&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/35">!35&lt;/a>&lt;/td>
 &lt;td>fix(auth)&lt;/td>
 &lt;td>Infinite loading after login via auto-link app_users&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/37">!37&lt;/a>&lt;/td>
 &lt;td>feat(api)&lt;/td>
 &lt;td>Structured JSON HTTP access logging middleware&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/38">!38&lt;/a>&lt;/td>
 &lt;td>feat(ci)&lt;/td>
 &lt;td>Security SAST job with bandit and pnpm audit&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/39">!39&lt;/a>&lt;/td>
 &lt;td>feat(infra)&lt;/td>
 &lt;td>GlitchTip email alerting via Resend SMTP&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/41">!41&lt;/a>&lt;/td>
 &lt;td>feat(ci)&lt;/td>
 &lt;td>Manual trigger &amp;amp; rollback for production migrations&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/42">!42&lt;/a>&lt;/td>
 &lt;td>fix(ci)&lt;/td>
 &lt;td>Restore automatic migration, keep rollback as manual&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/44">!44&lt;/a>&lt;/td>
 &lt;td>feat(infra)&lt;/td>
 &lt;td>Nginx reverse proxy for subdomain routing&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/47">!47&lt;/a>&lt;/td>
 &lt;td>feat(db)&lt;/td>
 &lt;td>Seed production admin and staff users&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/54">!54&lt;/a>&lt;/td>
 &lt;td>feat(web)&lt;/td>
 &lt;td>Add Payments link to sidebar navigation&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/66">!66&lt;/a>&lt;/td>
 &lt;td>fix(db)&lt;/td>
 &lt;td>Rename out-of-order migration timestamps&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td>&lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/67">!67&lt;/a>&lt;/td>
 &lt;td>feat(ci)&lt;/td>
 &lt;td>Migration dry-run validation for MR pipelines&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>Plus &lt;a href="https://gitlab.lab.local/joint-research/ui/smart-invoice-reminder/SIRA/-/merge_requests/68">!68&lt;/a> (hotfix: missing ENCRYPTION_KEY in deploy env).&lt;/p></description></item></channel></rss>