<?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>Forem: Serhat Soruklu</title>
    <description>The latest articles on Forem by Serhat Soruklu (@coupyn).</description>
    <link>https://forem.com/coupyn</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%2F3439492%2F0943fa5b-9f48-425f-ac31-05b4232edbd9.jpg</url>
      <title>Forem: Serhat Soruklu</title>
      <link>https://forem.com/coupyn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/coupyn"/>
    <language>en</language>
    <item>
      <title>Scaling a 950K Company Directory Solo: What Actually Breaks First</title>
      <dc:creator>Serhat Soruklu</dc:creator>
      <pubDate>Sun, 05 Apr 2026 12:38:38 +0000</pubDate>
      <link>https://forem.com/coupyn/scaling-a-950k-company-directory-solo-what-actually-breaks-first-2463</link>
      <guid>https://forem.com/coupyn/scaling-a-950k-company-directory-solo-what-actually-breaks-first-2463</guid>
      <description>&lt;p&gt;Building a large-scale platform solo sounds exciting until you hit the parts nobody talks about.&lt;/p&gt;

&lt;p&gt;I’ve been building Coupyn, a referral + coupon platform with ~950,000 companies, entirely on my own.&lt;/p&gt;

&lt;p&gt;Here’s what actually breaks first.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Not performance. Not code. &lt;strong&gt;Reality.&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Your system will work.&lt;/p&gt;

&lt;p&gt;Your queries will be fast.&lt;/p&gt;

&lt;p&gt;Your pages will load.&lt;/p&gt;

&lt;p&gt;But users won’t come back.&lt;/p&gt;

&lt;p&gt;The real bottleneck is not infrastructure.&lt;/p&gt;

&lt;p&gt;It’s:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No retention loop&lt;/li&gt;
&lt;li&gt;No outcome signal&lt;/li&gt;
&lt;li&gt;No reason to return&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can build something technically solid and still have a “ghost system”.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcey3jjlvqkxhoovefxt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcey3jjlvqkxhoovefxt.png" alt="A split scene showing a perfectly working system on one side and an empty, lifeless platform on the other. Everything works technically, but no users return." width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Scale exposes weak assumptions
&lt;/h2&gt;

&lt;p&gt;At small scale, everything looks fine.&lt;/p&gt;

&lt;p&gt;At large scale:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;950K entities ≠ 950K value&lt;/li&gt;
&lt;li&gt;Most pages get zero interaction&lt;/li&gt;
&lt;li&gt;A small % carries all activity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You start seeing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Dead zones” in your system&lt;/li&gt;
&lt;li&gt;Mismatch between traffic and value&lt;/li&gt;
&lt;li&gt;Actions that don’t translate into outcomes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This forces you to think differently:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Not “how do I scale more pages?”&lt;br&gt;
But “which pages actually matter?”&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F20dc98mvcr3g59khf6uz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F20dc98mvcr3g59khf6uz.png" alt="Small scale looks healthy, but at large scale most pages are inactive. A few hotspots carry all activity while the rest become dead zones." width="800" height="642"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. SEO is not a growth loop
&lt;/h2&gt;

&lt;p&gt;Getting indexed is not the win.&lt;/p&gt;

&lt;p&gt;I have hundreds of thousands of pages indexed.&lt;/p&gt;

&lt;p&gt;That doesn’t mean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;users trust the platform&lt;/li&gt;
&lt;li&gt;users return&lt;/li&gt;
&lt;li&gt;users convert&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SEO gives you &lt;strong&gt;visitors&lt;/strong&gt;&lt;br&gt;
You still need to build:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;trust signals&lt;/li&gt;
&lt;li&gt;feedback loops&lt;/li&gt;
&lt;li&gt;repeat usage&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwmczwzd3lyuhybe4o3q8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwmczwzd3lyuhybe4o3q8.png" alt="Thousands of indexed pages driving traffic, but users don’t trust, return, or convert. Visitors come in, but the loop never closes." width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Solo building changes your architecture
&lt;/h2&gt;

&lt;p&gt;When you’re alone, you optimize differently:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simplicity &amp;gt; abstraction&lt;/li&gt;
&lt;li&gt;Control &amp;gt; flexibility&lt;/li&gt;
&lt;li&gt;Debuggability &amp;gt; cleverness&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every system has to be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;understandable at 3am&lt;/li&gt;
&lt;li&gt;fixable without context switching&lt;/li&gt;
&lt;li&gt;stable under partial failure&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd1hamb0fow6pege4l183.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd1hamb0fow6pege4l183.png" alt="A lone developer working late, prioritizing simplicity, control, and debuggability. Systems designed to be understood and fixed without complexity." width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. The real system is behavior, not code
&lt;/h2&gt;

&lt;p&gt;Your backend is not your system.&lt;/p&gt;

&lt;p&gt;Your frontend is not your system.&lt;/p&gt;

&lt;p&gt;Your system is:&lt;/p&gt;

&lt;p&gt;user → action → outcome → trust → return&lt;/p&gt;

&lt;p&gt;If that loop is broken, nothing else matters.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhl58h4c1x6xc1b4ict02.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhl58h4c1x6xc1b4ict02.png" alt="A central loop visualizing user → action → outcome → trust → return. Code surrounds it, but the real system is user behavior, not the stack." width="800" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where I’m focused now
&lt;/h2&gt;

&lt;p&gt;Not features.&lt;/p&gt;

&lt;p&gt;Not redesigns.&lt;/p&gt;

&lt;p&gt;Just this:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Turn first visit into a second visit.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s the entire game.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F50ndcp243e8zq1n6fouc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F50ndcp243e8zq1n6fouc.png" alt="A lone developer at night, system running perfectly, but paused in thought. Not debugging code, questioning outcomes. “What broke first for you?”" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re building something at scale, especially solo, I’m curious:&lt;/p&gt;

&lt;p&gt;What broke first for you?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>node</category>
      <category>angular</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Scaling Coupyn: Handling Millions of Requests a Day on $50 Using Cloudflare Edge Caching</title>
      <dc:creator>Serhat Soruklu</dc:creator>
      <pubDate>Thu, 23 Oct 2025 18:21:55 +0000</pubDate>
      <link>https://forem.com/coupyn/scaling-coupyn-handling-millions-of-requests-a-day-on-50-using-cloudflare-edge-caching-3o46</link>
      <guid>https://forem.com/coupyn/scaling-coupyn-handling-millions-of-requests-a-day-on-50-using-cloudflare-edge-caching-3o46</guid>
      <description>&lt;p&gt;When people hear “millions of requests per day”, they imagine big clusters, Kubernetes dashboards, and five-digit cloud bills.&lt;/p&gt;

&lt;p&gt;Coupyn runs on $50/month.&lt;br&gt;
Here’s how.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 The Mindset: Efficiency &amp;gt; Hardware
&lt;/h2&gt;

&lt;p&gt;Coupyn was built solo — no investors, no team, no over-provisioned services. The challenge was to serve global traffic and track live analytics for nearly a million e-commerce companies while keeping infrastructure dirt cheap.&lt;/p&gt;

&lt;p&gt;Instead of scaling up, the entire stack was designed to waste nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏗️ Architecture Overview
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Angular 20 SPA hosted on a small DigitalOcean droplet.&lt;/li&gt;
&lt;li&gt;Pre-rendered HTML for SEO, served by Nginx.&lt;/li&gt;
&lt;li&gt;Global caching handled by Cloudflare edge servers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Backend&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js (Express) with minimal middleware.&lt;/li&gt;
&lt;li&gt;Custom memory caching layer for hot queries.&lt;/li&gt;
&lt;li&gt;Handles between 35–110 requests/sec with ease.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Database&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MongoDB 8 (DigitalOcean Managed Cluster).&lt;/li&gt;
&lt;li&gt;Compound indexes on companySlug, industryTag, and rankScore.&lt;/li&gt;
&lt;li&gt;Average read query time: 12–25 ms for indexed lookups.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Static Assets&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Hosted on DigitalOcean Spaces (S3-compatible).&lt;/li&gt;
&lt;li&gt;Served through Cloudflare CDN with a 95% hit ratio and Brotli compression.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="![Load%20Snapshot](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3w92dw0ohe5bjauvtnid.webp)"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🧩 Optimization Tactics
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Cloudflare Edge Caching&lt;/strong&gt;&lt;br&gt;
Nearly all static and semi-static routes (/company/&lt;em&gt;, /listing/&lt;/em&gt;, /stats) are cached at the edge. Response payloads are tiny (~7 KB average). This drops server CPU usage by ~80%.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. In-Process Caching for Hot Data&lt;/strong&gt;&lt;br&gt;
Node uses a Map() for top queries (company ranks, listing stats, homepage data). Items expire automatically after 15 minutes — no Redis, no external cache, just simplicity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Lazy Analytics&lt;/strong&gt;&lt;br&gt;
Heavy calculations like ranking scores and engagement metrics run in hourly cron jobs. Results are stored in Mongo and instantly retrievable — no real-time load, no aggregation overhead.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Compression &amp;amp; Transport&lt;/strong&gt;&lt;br&gt;
Brotli compression + HTTP/2 multiplexing + long keep-alives keep bandwidth and latency low. This alone cut network transfer by ~40%.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Minimalism in Code&lt;/strong&gt;&lt;br&gt;
Every middleware, route, and dependency is justified. If it doesn’t serve speed or stability, it’s gone.&lt;/p&gt;

&lt;h2&gt;
  
  
  💾 Monitoring
&lt;/h2&gt;

&lt;p&gt;A custom heap logger runs every 30 minutes to monitor RAM/CPU usage, outputting stats like:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi1ux67nxk7y4905c9d29.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi1ux67nxk7y4905c9d29.png" alt="Heap Stats" width="800" height="179"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🌍 Why It Works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Read-heavy workload — perfect for CDN caching.&lt;/li&gt;
&lt;li&gt;Edge-first mindset — bring data closer, compute less.&lt;/li&gt;
&lt;li&gt;Asynchronous computation — the backend never blocks.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When 95% of requests never reach your origin, even small servers look powerful.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 The Result
&lt;/h2&gt;

&lt;p&gt;Coupyn now handles millions of requests daily with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;99.96% uptime,&lt;/li&gt;
&lt;li&gt;95% CDN cache ratio,&lt;/li&gt;
&lt;li&gt;140 ms average global latency,&lt;/li&gt;
&lt;li&gt;and a monthly cost under $50.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s proof that architecture beats budget — and that Cloudflare, Node.js, and MongoDB can scale globally without breaking the bank.&lt;/p&gt;

&lt;h2&gt;
  
  
  💬 About Coupyn
&lt;/h2&gt;

&lt;p&gt;Coupyn is a public affiliate intelligence platform listing nearly 1 million e-commerce brands. It combines coupon discovery, referral code sharing, and transparent analytics to map how digital commerce performs in real time.&lt;/p&gt;

</description>
      <category>node</category>
      <category>cloudflarechallenge</category>
      <category>webperf</category>
      <category>database</category>
    </item>
    <item>
      <title>The Fastest Growing Startup You Haven’t Heard Of (Yet): Coupyn</title>
      <dc:creator>Serhat Soruklu</dc:creator>
      <pubDate>Sat, 16 Aug 2025 20:08:29 +0000</pubDate>
      <link>https://forem.com/coupyn/the-fastest-growing-startup-you-havent-heard-of-yet-coupyn-2ce8</link>
      <guid>https://forem.com/coupyn/the-fastest-growing-startup-you-havent-heard-of-yet-coupyn-2ce8</guid>
      <description>&lt;p&gt;Seventeen months ago, I started building Coupyn with one simple idea: what if sharing referral codes, coupons, and offers and finding great deals could actually be fun and community-driven instead of messy and spammy?&lt;/p&gt;

&lt;p&gt;What began as a solo side project has now grown into:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;1,009 users (and counting daily)&lt;/li&gt;
&lt;li&gt;1,493 live offers shared by real people&lt;/li&gt;
&lt;li&gt;Over 103,000 companies listed with unique SEO-ready pages&lt;/li&gt;
&lt;li&gt;Thousands of pages already indexed by Google&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And all of this has been built entirely from scratch frontend, backend, SEO, infrastructure by one person. No team, no investors, no agencies. Just countless hours, late nights, and stubborn persistence.&lt;/p&gt;

&lt;p&gt;Coupyn isn’t just another coupon site. It’s a platform:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A place where anyone can share referral codes or offers.&lt;/li&gt;
&lt;li&gt;A community that rewards activity and engagement.&lt;/li&gt;
&lt;li&gt;A growing ecosystem with memberships, stats, and rankings&lt;/li&gt;
&lt;li&gt;And yes a hub where you can actually find real deals shared by real people.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I believe the next wave of platforms won’t come from giant corporations, but from focused, independent builders who care deeply about what they’re creating. Coupyn is proof of that.&lt;/p&gt;

&lt;p&gt;This is just the beginning and Coupyn is growing faster than ever, and the journey ahead is even more exciting.&lt;/p&gt;

&lt;p&gt;Check it out for yourself - htts://coupyn.com&lt;/p&gt;

</description>
      <category>startup</category>
      <category>typescript</category>
      <category>node</category>
      <category>mongodb</category>
    </item>
  </channel>
</rss>
