<?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: migu kk</title>
    <description>The latest articles on DEV Community by migu kk (@migu_kk).</description>
    <link>https://dev.to/migu_kk</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2564285%2F30fab227-a43d-4f3c-b4c6-3d9f19428ff2.png</url>
      <title>DEV Community: migu kk</title>
      <link>https://dev.to/migu_kk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/migu_kk"/>
    <language>en</language>
    <item>
      <title>Building Pactiamo solo and 5 decisions I am glad I made</title>
      <dc:creator>migu kk</dc:creator>
      <pubDate>Mon, 13 Jul 2026 13:49:16 +0000</pubDate>
      <link>https://dev.to/migu_kk/building-pactiamo-solo-and-5-decisions-i-am-glad-i-made-10c3</link>
      <guid>https://dev.to/migu_kk/building-pactiamo-solo-and-5-decisions-i-am-glad-i-made-10c3</guid>
      <description>&lt;p&gt;Freelance deals often die in the gaps between tools. You send a document for the proposal, a PDF for the contract, an electronic signature link, and then a payment link in another email. I built &lt;a href="https://www.pactiamo.com" rel="noopener noreferrer"&gt;Pactiamo&lt;/a&gt; to collapse all of that into one single link. Here are five technical and product decisions I made along the way and why I stand by them.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Zero client accounts at any cost. Every signup screen a client sees is a place where a deal can fall through. The public share page is entirely server rendered so it works perfectly on slow connections without heavy JavaScript hydration. It captures signatures without requiring authentication. We just record the signer identity directly with the signature including their name, email, and a timestamp. That single constraint drove my architecture more than any specific framework choice.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I take zero percent of payments because I never touch the money. Users simply embed their own Stripe, PayPal, or bank links. I originally considered acting as a merchant of record. But that brings in chargebacks, payouts, and KYC regulations. It is basically a completely different business model. Sticking to a flat subscription keeps the codebase and the trust model simple since the funds never pass through my servers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I use Postgres for absolutely everything including background jobs and realtime features. I am using the pg boss library for scheduled follow up reminders. It runs right inside the Next.js server using instrumentation.ts. For live notifications like when a client views or signs a document, I use an in memory bus combined with SSE. There is no Redis and no separate queue service. It is just one database to operate. At my current scale boring technology always wins.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Internationalization from day one with English as the strict fallback. The interface supports 10 languages with one rule. Any missing translation key automatically falls back to English. You will never see a raw key string in the UI. Retrofitting internationalization later is the most expensive refactor I have ever experienced. Building that fallback discipline from the start made adding the tenth language just as easy as adding the second.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The AI uses a strict protocol instead of a standard chat box. The drafting assistant communicates using a three mode protocol consisting of chat, patch, and full document modes. This means the model output maps deterministically onto specific editor blocks. A patch is rendered as a reviewable diff for each block with simple apply or reject buttons. It is never just a massive wall of regenerated text. If you cannot diff an LLM output, you cannot trust it in a legal document.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The stack is Next.js App Router, PostgreSQL with Drizzle, the pg boss package, and SSE. It is entirely a solo build.&lt;/p&gt;

&lt;p&gt;What would you have done differently? I am particularly curious about the second point. Has anyone here gone the merchant of record route and either loved or regretted it?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>saas</category>
      <category>proposal</category>
    </item>
  </channel>
</rss>
