<?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: Sergei Pchelintsev</title>
    <description>The latest articles on DEV Community by Sergei Pchelintsev (@sergei_pchlintsev).</description>
    <link>https://dev.to/sergei_pchlintsev</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%2F3824360%2F32566c7f-1546-44ab-895f-ca9716230ac0.jpg</url>
      <title>DEV Community: Sergei Pchelintsev</title>
      <link>https://dev.to/sergei_pchlintsev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sergei_pchlintsev"/>
    <language>en</language>
    <item>
      <title>How to Write a Privacy Policy for Your Side Project in 2026 (Without a Lawyer)</title>
      <dc:creator>Sergei Pchelintsev</dc:creator>
      <pubDate>Tue, 17 Mar 2026 21:19:03 +0000</pubDate>
      <link>https://dev.to/sergei_pchlintsev/how-to-write-a-privacy-policy-for-your-side-project-in-2026-without-a-lawyer-2960</link>
      <guid>https://dev.to/sergei_pchlintsev/how-to-write-a-privacy-policy-for-your-side-project-in-2026-without-a-lawyer-2960</guid>
      <description>&lt;p&gt;You shipped your app. Users are signing up. And then someone asks: "Where's your privacy policy?"&lt;/p&gt;

&lt;p&gt;You Google "privacy policy generator," click the first result, and get hit with a $15/month subscription for a document you'll generate once. You try a free one — it produces generic HTML that doesn't mention any of the actual services you use. You briefly consider copying Stripe's privacy policy and changing the name.&lt;/p&gt;

&lt;p&gt;I've been there. Multiple times. Here's what I learned about handling privacy policies as a developer in 2026, without hiring a lawyer or paying a monthly subscription.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why you actually need one
&lt;/h2&gt;

&lt;p&gt;Let's get this out of the way — it's not optional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Legal requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GDPR&lt;/strong&gt; (EU) — applies if you have &lt;em&gt;any&lt;/em&gt; EU users, regardless of where your company is based. Fines up to 4% of annual revenue.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CCPA/CPRA&lt;/strong&gt; (California) — applies if you collect data from California residents. $7,500 per intentional violation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;8 new US state laws&lt;/strong&gt; took effect in 2025 (Texas, Oregon, Montana, Florida, and more), with 3 more in January 2026. The trend is clear — every state is going to have one.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Platform requirements:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apple App Store and Google Play &lt;strong&gt;require&lt;/strong&gt; a privacy policy URL to publish.&lt;/li&gt;
&lt;li&gt;Stripe, Paddle, and Lemon Squeezy ask for one during onboarding.&lt;/li&gt;
&lt;li&gt;Enterprise customers will ask for it during due diligence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your side project has users and collects any data (analytics, auth, payments), you need a privacy policy.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to include
&lt;/h2&gt;

&lt;p&gt;A privacy policy under GDPR Articles 13-14 must disclose:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. What data you collect
&lt;/h3&gt;

&lt;p&gt;Be specific. Not "we may collect personal information" — list the actual categories:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Email address (from sign-up)&lt;/li&gt;
&lt;li&gt;Usage data (from analytics)&lt;/li&gt;
&lt;li&gt;Payment information (processed by Stripe — you don't store card numbers, Stripe does)&lt;/li&gt;
&lt;li&gt;IP address (from server logs, analytics)&lt;/li&gt;
&lt;li&gt;Device and browser info (from analytics)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Why you collect it
&lt;/h3&gt;

&lt;p&gt;Each piece of data needs a legal basis. For most side projects:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Data&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;th&gt;Legal Basis (GDPR)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Email&lt;/td&gt;
&lt;td&gt;Account creation, notifications&lt;/td&gt;
&lt;td&gt;Contract performance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Usage analytics&lt;/td&gt;
&lt;td&gt;Product improvement&lt;/td&gt;
&lt;td&gt;Legitimate interest&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Payment info&lt;/td&gt;
&lt;td&gt;Processing purchases&lt;/td&gt;
&lt;td&gt;Contract performance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cookies&lt;/td&gt;
&lt;td&gt;Session management, preferences&lt;/td&gt;
&lt;td&gt;Consent (for non-essential)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  3. Which third-party services process the data
&lt;/h3&gt;

&lt;p&gt;This is where most generators fail. They ask "do you use analytics?" instead of "which analytics tool?"&lt;/p&gt;

&lt;p&gt;It matters because each service has different data practices. PostHog self-hosted processes data on your servers. Google Analytics sends data to Google's servers in the US. These require different disclosures.&lt;/p&gt;

&lt;p&gt;Common services you need to mention:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auth:&lt;/strong&gt; Clerk, Auth0, Supabase Auth, Firebase Auth, NextAuth&lt;br&gt;
&lt;strong&gt;Analytics:&lt;/strong&gt; PostHog, Vercel Analytics, Plausible, Google Analytics, Mixpanel&lt;br&gt;
&lt;strong&gt;Payments:&lt;/strong&gt; Stripe, Lemon Squeezy, Paddle, Gumroad&lt;br&gt;
&lt;strong&gt;Error tracking:&lt;/strong&gt; Sentry, LogRocket, Bugsnag&lt;br&gt;
&lt;strong&gt;Hosting:&lt;/strong&gt; Vercel, Netlify, AWS, Railway&lt;br&gt;
&lt;strong&gt;Email:&lt;/strong&gt; Resend, SendGrid, Postmark, ConvertKit&lt;/p&gt;

&lt;p&gt;For each service, include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What data it receives&lt;/li&gt;
&lt;li&gt;Where it's processed (US, EU, etc.)&lt;/li&gt;
&lt;li&gt;Link to their privacy policy or DPA&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  4. Data retention
&lt;/h3&gt;

&lt;p&gt;How long do you keep the data? Common approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Account data: until the user deletes their account&lt;/li&gt;
&lt;li&gt;Analytics: 12-24 months&lt;/li&gt;
&lt;li&gt;Server logs: 30-90 days&lt;/li&gt;
&lt;li&gt;Payment records: as long as required by tax law (usually 7 years)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  5. User rights
&lt;/h3&gt;

&lt;p&gt;Under GDPR, users have the right to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Access their data&lt;/li&gt;
&lt;li&gt;Correct inaccurate data&lt;/li&gt;
&lt;li&gt;Delete their data ("right to be forgotten")&lt;/li&gt;
&lt;li&gt;Export their data (portability)&lt;/li&gt;
&lt;li&gt;Object to processing&lt;/li&gt;
&lt;li&gt;Withdraw consent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Under CCPA, California residents can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Know what data is collected&lt;/li&gt;
&lt;li&gt;Request deletion&lt;/li&gt;
&lt;li&gt;Opt out of "sale" of personal information&lt;/li&gt;
&lt;li&gt;Not be discriminated against for exercising these rights&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Include a contact email where users can submit these requests.&lt;/p&gt;
&lt;h3&gt;
  
  
  6. International transfers
&lt;/h3&gt;

&lt;p&gt;If you're in the EU and use US-based services (most devs do), you need to mention the legal mechanism for transferring data outside the EU. After the EU-US Data Privacy Framework (2023), US companies on the DPF list have an adequate legal basis. For others, Standard Contractual Clauses (SCCs) apply.&lt;/p&gt;

&lt;p&gt;In practice: check if your service providers are on the &lt;a href="https://www.dataprivacyframework.gov/list" rel="noopener noreferrer"&gt;Data Privacy Framework list&lt;/a&gt;.&lt;/p&gt;
&lt;h3&gt;
  
  
  7. Cookies
&lt;/h3&gt;

&lt;p&gt;If you use non-essential cookies (analytics, marketing), you need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A list of cookies and their purpose&lt;/li&gt;
&lt;li&gt;A way for users to opt out (cookie banner for EU users)&lt;/li&gt;
&lt;li&gt;Duration of each cookie&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essential cookies (session, CSRF tokens) don't require consent.&lt;/p&gt;
&lt;h2&gt;
  
  
  A real example
&lt;/h2&gt;

&lt;p&gt;Here's what a minimal privacy policy section looks like for a typical indie stack (Next.js + Supabase + Stripe + PostHog):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gu"&gt;## Analytics&lt;/span&gt;

We use PostHog for product analytics. PostHog collects:
&lt;span class="p"&gt;-&lt;/span&gt; Page views and navigation patterns
&lt;span class="p"&gt;-&lt;/span&gt; Device type, browser, and operating system
&lt;span class="p"&gt;-&lt;/span&gt; Country-level location (derived from IP, which is then discarded)

PostHog is configured to respect Do Not Track (DNT) headers.
Data is processed on PostHog's EU servers (Frankfurt).

Privacy policy: https://posthog.com/privacy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Compare this with what a typical generator produces:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;We may use third-party analytics services to monitor and
analyze the use of our Service. These services may collect
information sent by your browser as part of a web page
request, such as cookies or your IP address.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first version is useful. The second is legally questionable because it doesn't name the service or disclose where data is processed.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;1. Copy-pasting another company's policy&lt;/strong&gt;&lt;br&gt;
Vercel's privacy policy covers Vercel's data practices, not yours. If you copy it, you're making false claims about data you don't collect and missing disclosures about data you do.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Using AI to generate it&lt;/strong&gt;&lt;br&gt;
ChatGPT will produce something that reads well but often omits GDPR-specific required disclosures (data controller identity, legal basis per processing activity, DPO contact). It's non-deterministic — same prompt, different output. For a legal document, you need to know exactly what you're publishing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Forgetting to update it&lt;/strong&gt;&lt;br&gt;
Added Sentry last month? Your privacy policy should mention it. Changed analytics from Google Analytics to PostHog? Update the policy. Set a reminder to review it quarterly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Not covering all jurisdictions&lt;/strong&gt;&lt;br&gt;
If you have users globally (and if your app is on the internet, you do), covering only GDPR isn't enough. CCPA has different requirements. The new US state laws add more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. HTML-only output&lt;/strong&gt;&lt;br&gt;
If your docs site uses Markdown or MDX, an HTML privacy policy is a formatting headache. Look for tools that output markdown natively.&lt;/p&gt;

&lt;h2&gt;
  
  
  The practical approach
&lt;/h2&gt;

&lt;p&gt;For most side projects, here's what I'd recommend:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;List every third-party service&lt;/strong&gt; your app uses. Check your &lt;code&gt;package.json&lt;/code&gt;, environment variables, and dashboard logins.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read each service's DPA&lt;/strong&gt; (Data Processing Agreement) — specifically what data they collect and where it's processed. This takes 20-30 minutes total.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write the policy in Markdown&lt;/strong&gt; so it lives in your repo alongside your code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cover GDPR + CCPA&lt;/strong&gt; at minimum — these are the most enforced.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Include a real contact email&lt;/strong&gt; for data requests — not a form, an actual email.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review quarterly&lt;/strong&gt; or whenever you add/remove a service.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What I'm building
&lt;/h2&gt;

&lt;p&gt;I ran into this problem enough times that I'm building &lt;a href="https://pliqo.vercel.app?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=organic_v1&amp;amp;utm_content=privacy_article" rel="noopener noreferrer"&gt;Pliqo&lt;/a&gt; — a privacy policy generator that actually knows what Supabase, PostHog, Vercel Analytics, and Stripe are. You pick your stack, it generates the right disclosures. Markdown output. No account. One-time payment instead of a subscription.&lt;/p&gt;

&lt;p&gt;It's still in early development — if this sounds useful, you can &lt;a href="https://pliqo.vercel.app?utm_source=devto&amp;amp;utm_medium=blog&amp;amp;utm_campaign=organic_v1&amp;amp;utm_content=privacy_article" rel="noopener noreferrer"&gt;join the waitlist&lt;/a&gt; and I'll let you know when it's ready.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have questions about privacy policies for your specific stack? Drop a comment — happy to help.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>buildinpublic</category>
      <category>privacy</category>
      <category>saas</category>
    </item>
  </channel>
</rss>
