<?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: Heshan Sanjuka</title>
    <description>The latest articles on DEV Community by Heshan Sanjuka (@hexsyro).</description>
    <link>https://dev.to/hexsyro</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%2F4020631%2Fde83ff46-7225-4950-97c7-4ae72d73c49d.jpg</url>
      <title>DEV Community: Heshan Sanjuka</title>
      <link>https://dev.to/hexsyro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hexsyro"/>
    <language>en</language>
    <item>
      <title>Bootstrapped Data Products — Here's What I Learned</title>
      <dc:creator>Heshan Sanjuka</dc:creator>
      <pubDate>Wed, 08 Jul 2026 06:16:31 +0000</pubDate>
      <link>https://dev.to/hexsyro/bootstrapped-data-products-heres-what-i-learned-2one</link>
      <guid>https://dev.to/hexsyro/bootstrapped-data-products-heres-what-i-learned-2one</guid>
      <description>&lt;p&gt;&lt;strong&gt;I'm Heshan. I build data products.&lt;/strong&gt; No VC, no team — just me, a lot of Playwright scripts, and PostgreSQL.&lt;/p&gt;

&lt;p&gt;Two years ago I couldn't build anything that worked. Today I run three production data platforms. Here's what they are and what each one taught me.&lt;/p&gt;

&lt;p&gt;Social Intel — &lt;a href="https://socialintel.io" rel="noopener noreferrer"&gt;socialintel.io&lt;/a&gt;&lt;br&gt;
A social media dataset marketplace. 130+ pre-enriched datasets across 100+ platforms, plus custom dataset builds.&lt;/p&gt;

&lt;p&gt;Every post goes through a deterministic enrichment pipeline (no LLMs) — sentiment, topics, financial signals, bot detection, 250+ fields, 25 quality checks. Export in CSV, JSON, JSONL, or Parquet.&lt;/p&gt;

&lt;p&gt;Built with: FastAPI, PostgreSQL, Next.js 15, Playwright, VADER Lexicon, AWS S3 What I learned: A deterministic pipeline beats LLMs for reproducibility. No token costs, no schema drift.&lt;/p&gt;

&lt;p&gt;Pulse Aggregator — &lt;a href="https://www.pulseaggregator.com" rel="noopener noreferrer"&gt;pulseaggregator.com&lt;/a&gt;&lt;br&gt;
Production news platform indexing 100,000+ articles per week from 10,000+ sources. Updated hourly.&lt;/p&gt;

&lt;p&gt;4-tier fallback: RSS → Playwright scraper (paywalls) → full-text search → REST API. Runs on APScheduler, has been at 99.9% uptime since launch.&lt;/p&gt;

&lt;p&gt;Built with: FastAPI, PostgreSQL, Playwright, Next.js, APScheduler What I learned: Fallback chains save you. When one source breaks, the next tier catches it. No single point of failure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/hexsyro/Goodreads-quote-scraper" rel="noopener noreferrer"&gt;GoodQuote Scraper&lt;br&gt;
&lt;/a&gt;Production Goodreads scraper that outputs structured CSV/JSON. Pagination, data validation, multi-page crawling.&lt;/p&gt;

&lt;p&gt;Built with: BeautifulSoup, Python What I learned: Sometimes BeautifulSoup is all you need. Not every project needs Playwright.&lt;/p&gt;

&lt;p&gt;FinPull — finpull.dev (Upcoming)&lt;br&gt;
Financial data pipeline — OHLCV, earnings, P/E ratios, analyst ratings. Playwright + yfinance → FastAPI → PostgreSQL → dashboard.&lt;/p&gt;

&lt;p&gt;Target: Traders, analysts, portfolio dashboards.&lt;/p&gt;

&lt;p&gt;Built with: Playwright, yfinance, FastAPI, PostgreSQL, Next.js What I'm learning now: Financial data has worse APIs than social media. That's saying something.&lt;/p&gt;

&lt;p&gt;The Stack That Stuck&lt;br&gt;
After building all of these, here's what I actually reach for:&lt;/p&gt;

&lt;h2&gt;
  
  
  Production Tech Stack
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;Tools&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Scraping&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Playwright · BeautifulSoup · Asyncio · Proxy rotation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Pandas · NumPy · Parquet/JSONL exports&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Backend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;FastAPI · PostgreSQL · APScheduler · JWT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Frontend&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Next.js 15 · Tailwind · TypeScript&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Infra&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vultr · Vercel · Supabase · Docker&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;freeCodeCamp Certified&lt;/strong&gt;: Responsive Web Design (Mar 2024) · Scientific Computing with Python (Nov 2025) Everything I know about production scraping I learned by breaking things in production.&lt;/p&gt;

&lt;p&gt;Right now I split time between Social Intel (growing, revenue-generating) and building FinPull. If you work with data at scale or have opinions about Playwright vs. pure HTTP — I'd love to hear your take.&lt;/p&gt;

&lt;p&gt;All projects are linked on my GitHub.&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>datascience</category>
      <category>fullstack</category>
      <category>founder</category>
    </item>
  </channel>
</rss>
