<?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: Hem</title>
    <description>The latest articles on DEV Community by Hem (@hem_081a27fed379).</description>
    <link>https://dev.to/hem_081a27fed379</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%2F3977872%2Fb372dbe4-2b4b-4e8a-869d-beeb5b2c25dc.jpg</url>
      <title>DEV Community: Hem</title>
      <link>https://dev.to/hem_081a27fed379</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hem_081a27fed379"/>
    <language>en</language>
    <item>
      <title>Building for Indonesia? What UU PDP Actually Requires From Developers (a Practical Checklist)</title>
      <dc:creator>Hem</dc:creator>
      <pubDate>Wed, 10 Jun 2026 14:11:20 +0000</pubDate>
      <link>https://dev.to/hem_081a27fed379/building-for-indonesia-what-uu-pdp-actually-requires-from-developers-a-practical-checklist-1i0o</link>
      <guid>https://dev.to/hem_081a27fed379/building-for-indonesia-what-uu-pdp-actually-requires-from-developers-a-practical-checklist-1i0o</guid>
      <description>&lt;p&gt;If your product touches users in Indonesia, the country's Personal Data Protection Law — UU PDP, Law 27/2022 — is now fully in force. The two-year transition ended in October 2024, and the law is &lt;strong&gt;extraterritorial&lt;/strong&gt;: it applies to you even if your company sits in Singapore, Australia or Berlin, as long as you process the data of people in Indonesia.&lt;/p&gt;

&lt;p&gt;Most engineering teams treat "privacy" as a checkbox near launch. UU PDP is closer to GDPR than to a checkbox, and a lot of what it requires lands directly on the codebase. Here's the developer-level version — what it actually means for what you build.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;(Not legal advice — talk to an Indonesian lawyer for your specific case. This is the engineering-side map.)&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The five things that hit your code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. A lawful basis and real consent (Art. 26).&lt;/strong&gt; You need a lawful basis for every processing activity, and for most consumer products that means consent — &lt;em&gt;real&lt;/em&gt; consent, not a pre-ticked box. Practically: granular opt-ins (don't bundle "marketing" with "create account"), a record of &lt;em&gt;what&lt;/em&gt; was consented to and &lt;em&gt;when&lt;/em&gt;, and a way to &lt;strong&gt;withdraw&lt;/strong&gt; it that actually stops the processing. If you can't show the consent log, you can't prove compliance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Transparent privacy notices.&lt;/strong&gt; Users must be told what you collect and why, in plain language, before you collect it. That's a product surface, not a PDF nobody reads — wire it into signup and data-collection points.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Nine data-subject rights → you need endpoints for them.&lt;/strong&gt; UU PDP grants users rights including access, correction, deletion, and portability of their data. In engineering terms: you need to be able to &lt;strong&gt;export&lt;/strong&gt; a user's data and &lt;strong&gt;delete&lt;/strong&gt; it on request, reliably, across every service and backup that holds it. If "delete my account" leaves data scattered in logs, analytics and a warehouse, that's a problem. Design for export/delete from day one — retrofitting it is painful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Breach notification within 3×24 hours.&lt;/strong&gt; If you have a qualifying breach, Art. 46 requires written notice to the affected users &lt;em&gt;and&lt;/em&gt; the authority within three days, including what was breached, when and how, and your remediation. You cannot meet a 3-day clock if you have no idea what happened — so this is really a requirement for &lt;strong&gt;logging, monitoring and an incident process&lt;/strong&gt; that exist &lt;em&gt;before&lt;/em&gt; the breach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Data minimization.&lt;/strong&gt; The cheapest way to comply is to not hold data you don't need. Every extra field is extra liability — especially anything payment-adjacent or sensitive. "We might use it later" is how you end up over-exposed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The ones that hit your architecture and org
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cross-border transfer.&lt;/strong&gt; If you host or process Indonesian data outside Indonesia, you need appropriate safeguards. Know where your data physically lives and where it flows.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DPO and DPIA.&lt;/strong&gt; Large-scale or sensitive processing can require appointing a Data Protection Officer and running a Data Protection Impact Assessment for high-risk features. Build the DPIA habit into how you scope risky features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-tenant isolation.&lt;/strong&gt; For multi-tenant products, isolating each customer's data cleanly isn't just good architecture — it makes access control, deletion and breach scoping dramatically easier to honor.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why take it seriously
&lt;/h2&gt;

&lt;p&gt;Administrative fines can reach &lt;strong&gt;up to 2% of annual revenue&lt;/strong&gt;, and the law also carries criminal liability. The dedicated PDP Agency is being stood up (targeted for 2026); for now enforcement sits with Komdigi. The point isn't to panic — it's that "we'll add privacy later" is now an expensive default in this market.&lt;/p&gt;

&lt;h2&gt;
  
  
  A pragmatic build checklist
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Granular, logged, withdrawable consent — not a single bundled checkbox&lt;/li&gt;
&lt;li&gt;A privacy notice wired into collection points, in plain language&lt;/li&gt;
&lt;li&gt;A working &lt;strong&gt;export-user-data&lt;/strong&gt; path and a working &lt;strong&gt;delete-user-data&lt;/strong&gt; path across all stores&lt;/li&gt;
&lt;li&gt;Logging and monitoring good enough to detect and describe a breach within 3 days&lt;/li&gt;
&lt;li&gt;Collect the minimum; drop fields you don't actually use&lt;/li&gt;
&lt;li&gt;Know where data is hosted and how it crosses borders&lt;/li&gt;
&lt;li&gt;DPIA for high-risk features; DPO if your scale/sensitivity triggers it&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Common mistakes I see
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;"Delete account" that only flips an &lt;code&gt;is_active&lt;/code&gt; flag and leaves the data everywhere&lt;/li&gt;
&lt;li&gt;Consent stored as a single boolean with no record of scope or timestamp&lt;/li&gt;
&lt;li&gt;No way to assemble everything you hold about one user (so you can't honor access/portability)&lt;/li&gt;
&lt;li&gt;Treating compliance as a launch-week task instead of an architecture decision&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you'd rather not own all of this in-house, studios that build UU-PDP-aware products for the Indonesian market — for example &lt;a href="https://www.h-studio.id/en" rel="noopener noreferrer"&gt;H-Studio&lt;/a&gt; — can bake it into the architecture from the start. But the checklist above is the same whoever builds it.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does UU PDP apply if my company isn't in Indonesia?&lt;/strong&gt;&lt;br&gt;
Yes — it's extraterritorial. If you process data of people in Indonesia, it applies regardless of where you're based.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How fast do I have to report a breach?&lt;/strong&gt;&lt;br&gt;
Within 3×24 hours (three days) to the affected users and the authority, with details of what happened and your response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need a DPO?&lt;/strong&gt;&lt;br&gt;
Not always — but large-scale or sensitive-data processing can require one. Check your thresholds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the penalty for ignoring it?&lt;/strong&gt;&lt;br&gt;
Administrative fines up to 2% of annual revenue, plus possible criminal liability — on top of the reputational hit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;UU PDP turns three things into engineering requirements: real consent you can prove, the ability to export and delete a user's data on demand, and enough observability to report a breach in three days. Build those in early, collect less data, and know where it lives. It's far cheaper as an architecture decision than as a launch-week scramble — or a 2%-of-revenue fine.&lt;/p&gt;

&lt;p&gt;How are you handling UU PDP in your stack? Comparing notes in the comments.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sources: &lt;a href="https://www.dlapiperdataprotection.com/?t=law&amp;amp;c=ID" rel="noopener noreferrer"&gt;DLA Piper – Indonesia data protection&lt;/a&gt; · &lt;a href="https://www.aseanbriefing.com/doing-business-guide/indonesia/company-establishment/personal-data-protection-law" rel="noopener noreferrer"&gt;ASEAN Briefing – Indonesia PDP Law guide&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>data</category>
      <category>privacy</category>
      <category>security</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Integrating Payments in Indonesia: Midtrans vs Xendit (and When to Pick Which)</title>
      <dc:creator>Hem</dc:creator>
      <pubDate>Wed, 10 Jun 2026 14:08:48 +0000</pubDate>
      <link>https://dev.to/hem_081a27fed379/integrating-payments-in-indonesia-midtrans-vs-xendit-and-when-to-pick-which-5eb6</link>
      <guid>https://dev.to/hem_081a27fed379/integrating-payments-in-indonesia-midtrans-vs-xendit-and-when-to-pick-which-5eb6</guid>
      <description>&lt;p&gt;If you're shipping anything that takes money in Indonesia, two names come up before all others: Midtrans and Xendit. They're both solid, both support the payment methods Indonesians actually use, and both will get you live. But they're tuned for different kinds of projects, and picking the wrong one means either fighting the API or migrating later. Here's a developer-level comparison, plus the QRIS basics you need either way.&lt;/p&gt;

&lt;h2&gt;
  
  
  QRIS is the backbone — start there
&lt;/h2&gt;

&lt;p&gt;Whatever gateway you pick, QRIS (the national QR standard) is non-negotiable for the Indonesian market: one QR that works across every bank and e-wallet. Good news for your budget — the QRIS merchant fee is regulated by Bank Indonesia at &lt;strong&gt;0.7% per transaction&lt;/strong&gt;, the same on both gateways. So QRIS pricing is not a differentiator; the developer experience and the surrounding features are.&lt;/p&gt;

&lt;h2&gt;
  
  
  Midtrans in one paragraph
&lt;/h2&gt;

&lt;p&gt;Midtrans is part of the GoTo group, which gives it one concrete advantage: &lt;strong&gt;native GoPay integration&lt;/strong&gt; — Indonesia's largest e-wallet. Customers can be redirected straight into the GoPay app instead of scanning a QR. It tends to have &lt;strong&gt;faster settlement&lt;/strong&gt;, a large library of &lt;strong&gt;ready-made plugins&lt;/strong&gt; for popular CMS and e-commerce platforms, and the deepest pool of &lt;strong&gt;Indonesian-language tutorials and community&lt;/strong&gt; — which matters a lot if your team is junior or local. The trade-off: it's focused on &lt;em&gt;receiving&lt;/em&gt; payments.&lt;/p&gt;

&lt;h2&gt;
  
  
  Xendit in one paragraph
&lt;/h2&gt;

&lt;p&gt;Xendit's reputation is the &lt;strong&gt;clean, modern API and genuinely good docs&lt;/strong&gt; — the nicer developer experience if you're building something custom and API-first. Its standout feature is &lt;strong&gt;Disbursement&lt;/strong&gt;: programmatically sending money &lt;em&gt;out&lt;/em&gt; to bank accounts. If your product pays sellers, drivers, freelancers or refunds at scale, that's a big deal Midtrans doesn't cover. The trade-off: no native GoPay redirect (GoPay users still pay via universal QRIS, just with a scan instead of an app hand-off).&lt;/p&gt;

&lt;h2&gt;
  
  
  How to actually choose
&lt;/h2&gt;

&lt;p&gt;A few honest rules of thumb:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You're on a CMS or e-commerce platform&lt;/strong&gt; (WooCommerce, Shopify-style, Laravel with existing packages) → Midtrans usually wins on ready plugins and time-to-live.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You're building custom and comfortable with APIs&lt;/strong&gt; → Xendit's API is the more pleasant place to live.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You need to pay money out, not just take it in&lt;/strong&gt; (marketplaces, payouts, refunds at scale) → Xendit, for Disbursement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GoPay redirect UX matters for conversion&lt;/strong&gt; and your audience leans GoPay-heavy → Midtrans's native integration is smoother than a QR scan.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Faster settlement is critical to your cash flow&lt;/strong&gt; → lean Midtrans.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a lot of marketplaces the real answer is &lt;em&gt;both&lt;/em&gt;: Xendit for disbursement to sellers, plus whichever fits your collection UX best.&lt;/p&gt;

&lt;h2&gt;
  
  
  The gotchas nobody mentions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Webhooks are your source of truth, not the redirect.&lt;/strong&gt; Don't mark an order paid because the user landed back on your success page — confirm via the gateway's server-side notification/webhook, and make the handler idempotent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Settlement time ≠ transaction time.&lt;/strong&gt; Money confirmed today isn't money in your account today. Model that in your cash-flow and your seller payouts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;UU PDP applies to you.&lt;/strong&gt; The moment you store customer data tied to payments, Indonesia's Personal Data Protection Law is in scope — consent, a processing policy, and sensible data handling. Don't store card-adjacent data you don't need.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test mode lies a little.&lt;/strong&gt; Sandbox behaviour for QRIS and e-wallets doesn't always match production edge cases. Budget time for a real-money smoke test before launch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are other players worth a look depending on your case — DOKU and iPaymu among them — but for most new builds the decision is Midtrans vs Xendit.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you'd rather not build it in-house
&lt;/h2&gt;

&lt;p&gt;Payment integration is one of those tasks that looks like "just add a button" and turns into webhooks, reconciliation, payouts and edge cases. If it's outside your team's wheelhouse, studios that build Indonesian payment and platform integrations — for example &lt;a href="https://www.h-studio.id/en" rel="noopener noreferrer"&gt;H-Studio&lt;/a&gt; — can take it end to end. Either way, the decision framework above is the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is QRIS cheaper on Midtrans or Xendit?&lt;/strong&gt;&lt;br&gt;
Neither — the QRIS merchant fee is regulated at 0.7% on both. Choose on developer experience and features, not QRIS price.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which is better for a custom-built product?&lt;/strong&gt;&lt;br&gt;
Xendit, generally — cleaner API and better docs for API-first builds. Midtrans shines when you're on a CMS with ready plugins.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I need to pay out to sellers — which one?&lt;/strong&gt;&lt;br&gt;
Xendit, for its Disbursement feature. Midtrans focuses on collecting payments, not sending them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need both?&lt;/strong&gt;&lt;br&gt;
Many marketplaces do: Xendit for payouts plus the best collection UX for their audience. For a simple checkout, one is enough.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaway
&lt;/h2&gt;

&lt;p&gt;Midtrans and Xendit are both good — they're just good at different things. CMS and GoPay-heavy, fast-settlement shops lean Midtrans; custom, API-first products and anything needing payouts lean Xendit. Decide based on what your product does with money, wire up webhooks properly, and remember UU PDP the moment you store customer data.&lt;/p&gt;

</description>
      <category>api</category>
      <category>backend</category>
      <category>softwaredevelopment</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
