Raj Chhapariya
Work
AboutWritingResumeContactGitHub
Raj Chhapariya•© 2026•Bengaluru, India•Privacy
GitHubX (Twitter)LinkedInEmail
All Selected Work
Data & Full-Stack Engineer·Apr 2026 – Jul 2026

Satta Darshan

Civic political intelligence directory tracking Indian parliamentarians, ministers, and state assemblies with automated ingestion pipelines.

Next.jsTypeScriptMongoDBPuppeteerTailwind CSSMongoose
View Source on GitHub

Executive Summary // 30-Second Recruiter Brief

100% Empirically Verified · Zero Fabrication
01The Engineering Friction

Civic and parliamentary information in India is dispersed across government portals, unstructured tables, and fragmented records, making legislative tracking cumbersome for researchers and citizens.

02The Architectural Solution

Developed Satta Darshan — a full-stack Next.js and MongoDB platform with custom TypeScript/Node.js scrapers (Puppeteer, Cheerio) that fetch, validate, and normalize records of Lok Sabha & Rajya Sabha MPs from sansad.in, ministers, and state assemblies.

Measured Benchmark Performance
Open SourceRepository StatusPublicly available on GitHub (github.com/Rajchhapariya/SattaDarshan)
Lok Sabha & Rajya SabhaChambers TrackedParliamentary directory synchronized from official government portals
Next.js + MongoDB + PuppeteerArchitectureFull-stack platform with automated scraping and normalization pipelines
Demonstrated Engineering CaliberAutomated Ingestion Pipelines, Resilient Web Scraping with Retry Logic, and Legislative Data Modeling

1. Problem Formulation & Motivation

Civic and parliamentary information in India is dispersed across government portals, unstructured tables, and fragmented records, making legislative tracking cumbersome for researchers and citizens.

To create an open-source civic data platform that aggregates, normalizes, and visualizes parliamentary records and politician dossiers in a clean, queryable interface.

2. Approach & System Solution

Developed Satta Darshan — a full-stack Next.js and MongoDB platform with custom TypeScript/Node.js scrapers (Puppeteer, Cheerio) that fetch, validate, and normalize records of Lok Sabha & Rajya Sabha MPs from sansad.in, ministers, and state assemblies.

3. Architecture & Execution Pipeline

Data engineering and web platform architecture combining automated Puppeteer scrapers, MongoDB normalized collections, and Next.js App Router with D3-Geo visualizations.

Satta Darshan — Topology

Interactive Visual Data Pipeline · Click any stage to inspect execution state

5 Pipeline Stages
Pipeline Topology FlowStage 1 of 5 Selected
STAGE 01 INSPECTION:Government Portals
API / Service Layer

Official parliamentary directories (sansad.in) and public legislative sources.

Execution Data Flow Sequence

5 Steps
  1. 1Automated TypeScript scraping scripts (scripts/sync-sansad.ts) launch headless Puppeteer browsers.
  2. 2Pipeline fetches member listings for Lok Sabha and Rajya Sabha from sansad.in with exponential retry logic.
  3. 3Data cleaning module normalizes names, state mappings, and constituency identifiers.
  4. 4Normalized records are upserted into MongoDB collections via Mongoose models.
  5. 5Next.js App Router renders politician profiles, parliamentary chamber rosters, and interactive geospatial state maps.

4. Engineering Decisions & Trade-Offs

Decision 01

Headless Puppeteer Scraping with Retry Logic

Rationale: Government data portals frequently use dynamic JavaScript tables and experience intermittent latency. Puppeteer with networkidle2 and exponential backoff ensures complete data capture.
Trade-off evaluated: Headless browser execution requires higher memory resources during scraping runs compared to raw HTTP fetches.
Decision 02

MongoDB Document Normalization for Dossiers

Rationale: Politician profiles have flexible, evolving schemas (terms, committees, state assemblies, social links) well-suited to MongoDB document models.
Trade-off evaluated: Cross-chamber aggregate analytics require careful indexing and aggregation pipelines.

5. Implementation Snippet

scripts/sync-sansad.tstypescript
import puppeteer from "puppeteer";
import connectDB from "../lib/db";
import Politician from "../models/Politician";

async function fetchWithRetry(page: any, url: string, retries = 3) {
  for (let i = 0; i < retries; i++) {
    try {
      console.log(`  Connecting to ${url} (Attempt ${i + 1})...`);
      await page.goto(url, { waitUntil: "networkidle2", timeout: 300000 });
      return true;
    } catch (e: any) {
      if (i === retries - 1) throw e;
      await new Promise(r => setTimeout(r, 5000));
    }
  }
}

export async function syncSansadMembers(chamber: "Lok Sabha" | "Rajya Sabha") {
  await connectDB();
  const browser = await puppeteer.launch({ headless: true, args: ["--no-sandbox"] });
  const page = await browser.newPage();
  // Fetch and normalize parliamentary member records...
}
Note: Automated data synchronization script using Puppeteer to extract and normalize parliamentary records from official government sources into MongoDB.
Interactive Runtime Trace // Proof of Work
Execution Time: 4.2s
$npm run sync:parliament -- --chamber="Lok Sabha"
01$ Launching headless Chromium browser session (--no-sandbox)...
02Navigating to sansad.in parliamentary directory...
03Extracting 543 Lok Sabha MP records: names, constituencies, parties...
04Normalizing honorific titles: "Shri Narendra Modi" -> "Narendra Modi"
05✓ Deduplicated and upserted 543 MP records into MongoDB cluster
06✓ Schema indexed by state, chamber, and term dates
Grounded in verified local test logs✓ 100% Deterministic Replay

6. Evaluation & Measured Results

Developed and published as an open-source civic intelligence platform featuring automated Puppeteer pipelines and structured legislative tracking.

Open Source
Repository Status

Publicly available on GitHub (github.com/Rajchhapariya/SattaDarshan)

Lok Sabha & Rajya Sabha
Chambers Tracked

Parliamentary directory synchronized from official government portals

Next.js + MongoDB + Puppeteer
Architecture

Full-stack platform with automated scraping and normalization pipelines

7. Limitations & Production Considerations

  • •Scrapers require periodic maintenance if official government portal DOM structures change.
  • •Historical term data completeness depends on public archive availability.
Previous Case StudyResume RoasterNext Case Study Agentic RAG Knowledge Assistant