About Journey Skills Projects Blog Life
Data Scientist · Designer · Builder

Supriya Adapa
Here.
Data × Design.

Data Scientist with a designer's instinct — I build dashboards, train ML models, design products, and bridge the gap between raw data and human experience.

6+
Yrs Coding
3.7
MS GPA
10+
Projects
2
Countries
skills_dashboard.csv
Python
SQL
Figma
Azure
CV
ML
HCI
92%
Python
10+
Projects
About Me

Data scientist by day,
creative human always.

Supriya Adapa
✦ Open to Work

I don't just analyse data — I find the human story inside it and make it impossible to ignore.

CS Engineering from JNTUK (GPA 3.5) · MS Computer Science from Montclair State University (GPA 3.7). Built self-driving cars, educational analytics platforms, highway detection systems, and full AI products — while developing deep passion for human-centred design.

Currently a Data Scientist at Savi Technologies, New Jersey — teaching students programming and data analysis. Where making complex things simple and beautiful became my calling.

📍 New Jersey, USA 🌍 Open to global roles 🎓 MS CS · GPA 3.7
🚗
Built a self-driving car demo
Python · Robotics · Montclair · Curved track demo
🪴
Nature lover & gardener
Plants, crocheting, cooking — grounded outside of code, Passionate about teaching
✍️
Writes original quotes
Words are just another design medium
🌏
Global experience
India → USA — 6+ years across two countries
📜
NJ CS Technology Certificate
#4148 · NJDOE Career & Technical Education
Career Journey

Five levels.
One clear direction.

CS Foundation
Jul 2017 – Jun 2021
Completed ✓
B.Sc Computer Science · JNTUK University · GPA 3.5
Built the full CS toolkit — algorithms, DBMS, data structures, OOP. First ML project: object detection system using Python, YOLO and OpenCV in Google Colab.
PythonSQLJavaAlgorithmsOOP
🔓 Unlocked: Data Engineering
Data Engineer Intern → Engineer
Feb 2018 – Dec 2021
Completed ✓
Arete IT Services · Vijayawada, India
Grew from intern to Data Engineer. Built automated testing (60% QA reduction), admin dashboards, Azure SQL migrations. Cloud Connector project → 35% sales increase. 15+ API endpoints documented.
T-SQLAzureCI/CDTDDERD
🔓 Unlocked: Masters in USA
Master of Science — Computer Science
Aug 2022 – May 2024
GPA 3.7 ✓
Montclair State University · New Jersey
Self-driving car (successful curved track), highway vehicle detection at NJIT, full educational analytics platform for HCI. Courses: Database Systems, Software Engineering, HCI, Robotics.
HCIRoboticsOpenCVReactUX Design
🔓 Unlocked: NJ CS Certificate · Data Scientist
Data Scientist
Jun 2024 – Present
Active 🌟
Savi Technologies · New Jersey, USA
Teaching high school students programming, data analysis, and CS fundamentals. Designing Python modules, data visualisation examples, analytical thinking exercises.
Data VizCurriculumPython Teaching
🔓 Unlocked: Design Transition
Next Chapter
2025 → ✨
Exploring design-led roles · Open globally
Building toward roles that combine data science and experience design.
Skills

The toolkit.

🐍 Python
92%
PandasNumPyOpenCVML Pipelines
🗄️ SQL / T-SQL / Azure SQL
88%
SQL ServerAzure SQLPostgreSQL
🖌️ Figma / UI / HCI
82%
FigmaPrototypingHCIUX Research
☁️ Azure DevOps & Cloud
85%
Azure SynapseDevOpsCI/CD
Design & UX
🖌️
Figma
82%
📐
UI Design
75%
🔬
HCI / UX
78%
🎭
Poster Design
88%
Data & Engineering
🐍
Python
92%
🗄️
T-SQL
88%
☁️
Azure
85%
📈
Data Viz
90%
👁️
Computer Vision
80%
🤖
Machine Learning
82%
🗃️
PostgreSQL
78%
🔧
CI/CD
76%
Projects — Live Code & Output

Click Code to read · Click Output to run.

Each project has three tabs: Preview, actual Code with syntax highlighting, and a simulated Output panel. Run buttons open the real platform.

🚗
🏆 Montclair Robotics · Successful Demo
RoboticsPythonPID Control
Autonomous Self-Driving Car
Lane detection with Canny edges + Hough Transform. PID controller computes steering correction from lateral deviation. Successfully completed a curved physical demo track at Montclair State.
PythonOpenCVPID ControllerLane DetectionNumPy
✅ Curved track completed
autonomous_car.py
# Autonomous Self-Driving Car — Lane Following
# Author: Your Name | Montclair State Robotics

import cv2
import numpy as np
import time

class PIDController:
    def __init__(self, Kp=0.45, Ki=0.001, Kd=0.25):
        self.Kp, self.Ki, self.Kd = Kp, Ki, Kd
        self._integral = self._prev_error = 0.0
        self._last_time = time.time()

    def compute(self, error):
        dt = max(time.time() - self._last_time, 1e-6)
        self._integral += error * dt
        deriv = (error - self._prev_error) / dt
        out   = self.Kp * error + self.Ki * self._integral + self.Kd * deriv
        self._prev_error = error
        return float(np.clip(out, -1.0, 1.0))

def detect_lanes(frame):
    gray  = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    blur  = cv2.GaussianBlur(gray, (5,5), 0)
    edges = cv2.Canny(blur, 50, 150)
    h, w = frame.shape[:2]
    mask = np.zeros_like(edges)
    cv2.fillPoly(mask, np.array([[
        (0,h),(0,int(h*.55)),(w,int(h*.55)),(w,h)
    ]], np.int32), 255)
    return cv2.bitwise_and(edges, mask)

def compute_steering(frame, left, right):
    w  = frame.shape[1]
    if left and right:
        mid = (left[2] + right[2]) // 2
    elif left:  mid = left[2]  + 150
    elif right: mid = right[2] - 150
    else: return 0.0
    return float(np.clip((mid - w//2) / (w/2), -1.0, 1.0))

def run(source=0):
    cap = cv2.VideoCapture(source)
    pid = PIDController(Kp=0.45, Ki=0.001, Kd=0.25)
    while True:
        ret, frame = cap.read()
        if not ret: break
        roi      = detect_lanes(frame)
        lines    = cv2.HoughLinesP(roi,1,np.pi/180,30,40,120)
        dev      = compute_steering(frame, left_line, right_line)
        steer    = pid.compute(dev)
                # motor.set_steering(steer)  ← hardware call
    cap.release()
[Autonomous Car] Loading camera source...
✓ Camera opened: 1280×720 @ 30fps
[PID] Kp=0.45 Ki=0.001 Kd=0.25
Processing frames
100%
Frame 60 | steering=+0.021 | pid=+0.018 | STRAIGHT
Frame 120 | steering=-0.312 | pid=-0.285 | LEFT ◄
Frame 180 | steering=-0.189 | pid=-0.162 | LEFT ◄
Frame 240 | steering=+0.034 | pid=+0.029 | STRAIGHT
Frame 300 | steering=+0.427 | pid=+0.391 | ► RIGHT
Frame 360 | steering=+0.041 | pid=+0.035 | STRAIGHT
✓ Processed 420 frames
✓ Destination reached — curved track COMPLETED ✓
Output saved → autonomous_drive.mp4
▶ Run Full Notebook in Colab ↗
person 97% chair 88% book 91%
👁️
Bachelor's · JNTUK · Python + YOLO
Computer VisionYOLO
Object & Person Detection
Upload any image — detects people, animals, objects with bounding boxes and confidence scores. 80+ COCO classes. Works in Google Colab.
PythonYOLO v3OpenCVGoogle Colab
80+ object classes
object_detection.py
# Object Detection — YOLOv3 + OpenCV
# Author: Your Name | JNTUK Bachelor's Project

import cv2, numpy as np

CONF = 0.50   # confidence threshold
NMS  = 0.40   # non-max suppression
SIZE = 416    # YOLO input size

CLASSES = ["person","bicycle","car","motorbike",
           "cat","dog","chair","book","laptop"
           ... 71 more COCO classes]

def detect(image_path):
    net = cv2.dnn.readNetFromDarknet(
        "yolov3.cfg", "yolov3.weights")
    img = cv2.imread(image_path)
    h, w = img.shape[:2]

    blob = cv2.dnn.blobFromImage(
        img, 1/255.0, (SIZE,SIZE), swapRB=True)
    net.setInput(blob)
    outputs = net.forward(get_output_layers(net))

    boxes, confs, ids = [], [], []
    for out in outputs:
        for det in out:
            scores = det[5:]
            cid    = int(np.argmax(scores))
            conf   = float(scores[cid])
            if conf > CONF:
                cx, cy = int(det[0]*w), int(det[1]*h)
                bw, bh = int(det[2]*w), int(det[3]*h)
                boxes.append([cx-bw//2,cy-bh//2,bw,bh])
                confs.append(conf)
                ids.append(cid)

    nms = cv2.dnn.NMSBoxes(boxes,confs,CONF,NMS)
    for i in nms.flatten():
        x,y,bw,bh = boxes[i]
        label = f"{CLASSES[ids[i]]} {confs[i]:.0%}"
        cv2.rectangle(img,(x,y),(x+bw,y+bh),color,2)
        cv2.putText(img,label,(x,y-5),...)
    cv2.imwrite("result.jpg", img)
[YOLO] Loading model weights...
Downloading yolov3.weights
Done
✓ YOLOv3 loaded — 80 classes ready
[Detect] Running on: sample_image.jpg
── Detections ──────────────────────────────
[person] 97.2% bbox=[112, 45, 180, 320]
[chair] 88.5% bbox=[310, 200, 90, 140]
[laptop] 91.0% bbox=[420, 250, 110, 80]
[book] 63.4% bbox=[505, 260, 60, 45]
✓ 4 object(s) detected
✓ Result saved → result.jpg
▶ Try With Your Own Image ↗
CAR 94% · 65mph TRUCK 87% · 52mph
🚦
NJIT · Masters Year 1
Image ProcessingTraffic AI
Highway Vehicle Detection
Vehicle classification, speed estimation, and lane tracking on real highway footage. Background subtraction + centroid tracking.
PythonOpenCVBackground SubtractionNumPy
Real highway footage
vehicle_detection.py
# Highway Vehicle Detection & Speed Estimation
# Author: Your Name | NJIT Image Processing Course

import cv2, numpy as np
from collections import defaultdict

MIN_AREA = 1200   # minimum contour area (px²)
SL1_Y   = 0.45   # speed line 1 position
SL2_Y   = 0.65   # speed line 2 position
DIST_M  = 5.0    # real-world distance between lines

def classify_vehicle(w, h):
    if   w*h > 25000 and w/h > 1.8:
        return "TRUCK", (0,180,255)
    elif w*h > 8000:
        return "CAR", (0,230,80)
    else:
        return "MOTO", (255,140,0)

def process_video(path):
    cap  = cv2.VideoCapture(path)
    bg   = cv2.createBackgroundSubtractorMOG2(
        history=200, varThreshold=50)
    count = 0
    speeds, cross_t = {}, {}

    while True:
        ret, frame = cap.read()
        if not ret: break
        H,W = frame.shape[:2]

                # Background subtraction → contours
        mask = bg.apply(frame)
        mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
        cnts,_ = cv2.findContours(
            mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

        for c in cnts:
            if cv2.contourArea(c) < MIN_AREA: continue
            x,y,w,h = cv2.boundingRect(c)
            vtype,col = classify_vehicle(w,h)
            cv2.rectangle(frame,(x,y),(x+w,y+h),col,2)
    return count
[VehicleDetect] Opening: highway.mp4
✓ Video: 1920×1080 @ 25fps · 420 frames
[BG Subtractor] MOG2 initialising...
Processing frames
420/420
── Detection Log ───────────────────────────
CAR 94.1% speed=65mph lane=1
TRUCK 87.3% speed=52mph lane=2
CAR 91.8% speed=71mph lane=1
CAR 89.2% speed=68mph lane=3
MOTO 76.5% speed=58mph lane=2
✓ Processed 420 frames
✓ Total vehicles counted: 47
CAR: 31 · TRUCK: 12 · MOTO: 4
Output → highway_result.mp4
▶ Run on Your Video ↗
grade_analytics student_performance improvement_tracking
🎓
HCI · Montclair · Full-Stack · Live Platform
HCIEdTechAnalytics
Educational Analytics Platform
Full HCI course project — individual grade tracking, improvement analytics, teacher dashboards. Bridges data science and UX design. Live platform + GitHub + Figma designs available.
ReactPythonPostgreSQLHCIData Viz
Grade tracking · Full UX
schema_and_analytics.sql
-- Educational Analytics Platform Schema
-- Author: Your Name | HCI Course — Montclair

CREATE TABLE students (
    student_id  SERIAL PRIMARY KEY,
    name        VARCHAR(120) NOT NULL,
    email       VARCHAR(200) UNIQUE,
    grade_level SMALLINT
);

CREATE TABLE submissions (
    submission_id SERIAL PRIMARY KEY,
    student_id    INT REFERENCES students(student_id),
    quiz_id       INT REFERENCES quizzes(quiz_id),
    total_score   NUMERIC(5,2),
    submitted_at  TIMESTAMPTZ DEFAULT NOW()
);

-- Average score per student
SELECT
    s.name,
    ROUND(AVG(sub.total_score),1) AS avg_score,
    MIN(sub.total_score)         AS lowest,
    MAX(sub.total_score)         AS highest
FROM students s
JOIN submissions sub
  ON s.student_id = sub.student_id
GROUP BY s.name
ORDER BY avg_score DESC;

-- Students needing support (avg < 70)
SELECT s.name,
  ROUND(AVG(sub.total_score),1) AS avg_score,
  'Needs Support' AS status
FROM students s
JOIN submissions sub
  ON s.student_id = sub.student_id
GROUP BY s.student_id, s.name
HAVING AVG(sub.total_score) < 70
ORDER BY avg_score;
[EduAnalytics] Building database...
✓ Schema created · 8 students · 5 quizzes · 40 submissions
── Student Summary ─────────────────────────
student avg low high status
Eva Martinez 97.6 96 99 🟢 Excellent
Alice Johnson 92.0 88 95 🟢 Excellent
Clara Davis 89.2 85 92 🟢 Excellent
Grace Kim 87.6 84 90 🟢 Excellent
Bob Williams 74.0 70 78 🟡 Average
Frank Thomas 71.2 68 75 🟡 Average
David Lee 61.8 58 65 🔴 Needs Support
Henry Brown 56.2 52 60 🔴 Needs Support
✓ Dashboard saved → charts/dashboard.png
✓ 8 individual reports generated
🌐 Open Live Platform ↗
☁️
Arete IT Services · +35% Sales
CloudAzureMulti-Tenant
Cloud Connector — Multi-Tenant DB
Multi-tenant Azure SQL architecture with Row-Level Security. Each tenant sees only their data. Built for SaaS product at Arete IT — contributed to 35% sales increase.
T-SQLAzure SQLRow-Level SecurityStored Procs
+35% sales impact
cloud_connector_schema.sql
GitHub ↗
-- Cloud Connector — Multi-Tenant Schema
-- Author: Your Name | Arete IT Services
-- Impact: +35% sales after deployment

CREATE TABLE tenants (
    tenant_id   INT IDENTITY(1,1) PRIMARY KEY,
    tenant_code VARCHAR(50)  UNIQUE NOT NULL,
    plan_tier   VARCHAR(20)  DEFAULT 'starter',
    is_active   BIT           DEFAULT 1
);

CREATE TABLE cloud_resources (
    resource_id   INT IDENTITY(1,1) PRIMARY KEY,
    tenant_id     INT NOT NULL REFERENCES
                  tenants(tenant_id),
    resource_type VARCHAR(50),
    status        VARCHAR(20) DEFAULT 'running',
    cost_per_hour DECIMAL(10,6)
);

-- Row-Level Security: tenants only see their rows
CREATE FUNCTION dbo.fn_TenantPredicate
    (@tenant_id INT)
RETURNS TABLE WITH SCHEMABINDING AS
    RETURN SELECT 1 AS result
    WHERE @tenant_id = CAST(
        SESSION_CONTEXT(N'tenant_id') AS INT);

CREATE SECURITY POLICY CloudResourcesPolicy
    ADD FILTER PREDICATE
    dbo.fn_TenantPredicate(tenant_id)
    ON dbo.cloud_resources;

-- Stored proc: set tenant context on login
CREATE PROCEDURE dbo.sp_TenantLogin
    @tenant_code VARCHAR(50)
AS BEGIN
    DECLARE @tid INT
    SELECT @tid = tenant_id
    FROM   tenants
    WHERE  tenant_code = @tenant_code
    EXEC sp_set_session_context
         N'tenant_id', @tid
END
[CloudConnector] Connecting to Azure SQL...
✓ Connected: cloud-connector.database.windows.net
✓ Schema deployed — 6 tables created
✓ RLS policy enabled on cloud_resources
✓ Stored procedures compiled
✓ Performance indexes created
── Tenant Isolation Test ───────────────────
Tenant A login → sees 12 resources
Tenant B login → sees 8 resources
Cross-tenant query0 rows returned ✓
── Query Performance ───────────────────────
Resource summary12ms (indexed)
Billing rollup8ms (indexed)
✓ All tests passed · RLS isolation verified
Business impact: +35% sales after deployment
Personal Project · Live ✓
AI ProductDeployed ✓
YuktiAI — AI Agency Platform
Full AI automation agency with 6 AI agents, client portal, admin dashboard. Zero investment, built and deployed in one day.
HTML/CSS/JSn8nSupabase
Deployed live
agents_config.js
// YuktiAI — Agent Configuration
// 6 AI agents running the entire business

const agents = [
  {
    id:    "vikram-bda",
    name:  "Vikram — Business Development",
    model: "deepseek/deepseek-r1:free",
    tools: ["apollo_scrape", "lead_score", "supabase_insert"],
    schedule: "0 9 * * 1-5" // 9am weekdays
  },
  {
    id:    "arya-soa",
    name:  "Arya — Sales Outreach",
    model: "google/gemini-flash-1.5:free",
    tools: ["gmail_send", "calendly_book", "ab_test"],
    sequence: [0, 3, 7, 10, 14] // email days
  },
  {
    id:    "priya-rtsa",
    name:  "Priya — Support Agent",
    model: "anthropic/claude-haiku-4-5",
    tools: ["crisp_chat", "vector_search"],
    sla_hours: 2
  }
];

async function runAgent(agentId, task) {
  const agent = agents.find(a => a.id === agentId);
  const res   = await fetch("https://openrouter.ai/api/v1/chat/completions", {
    method: "POST",
    body: JSON.stringify({
      model: agent.model,
      messages: [{ role: "user", content: task }]
    })
  });
  return (await res.json()).choices[0].message.content;
}
[YuktiAI] Starting agent workforce...
✓ Vikram (BDA) — Online · 47 leads queued
✓ Arya (SOA) — Online · 12 emails sent today
✓ Priya (RTSA) — Online · 2 live chats
✓ Dev (DPB) — Busy · Building chatbot
✓ Lakshmi (OFA) — Online · 3 invoices tracked
✓ Riya (MCA) — Online · 2 posts scheduled
── Live Metrics ────────────────────────────
MRR: $3,297
Active clients: 5
Leads in pipe: 24
CSAT score: 96%
✓ All 6 agents running — $8/month total cost
🌐 See Live Platform ↗

💡 Replace all GitHub/Colab/Netlify URLs above with your real links after uploading your code files

Blog & Writing

Words I've written.

🚗
Technical
How We Built a Self-Driving Car in Python — And It Worked
Lane detection, PID control, the moment the car completed the curved track...
Mar 20248 min
🎓
Design
What HCI Taught Me About Real Humans
Great UX is emotional safety as much as usability...
Jan 20245 min
🌱
Life
From Vijayawada to New Jersey — The Honest Story
Nobody talks about rebuilding a career in a new country...
Dec 20246 min
🧶
Creative
Crocheting Is Just Programming With Yarn
Loops, conditions, repeats — suspiciously similar to a for loop...
Mar 20254 min
💡
Career
Why Data Scientists Make the Best Designers
We already run A/B tests. We build dashboards. We haven't called it design yet...
Mar 20255 min
Life Outside Work

More than just code.

🪴Nature
Plants & Gardening
20+ plants — herbs, succulents, flowering.
🎨Creative
Poster & Digital Design
Typography, visual hierarchy, storytelling through form.
🧶Cozy
Crocheting
Amigurumi, bags, coasters — an algorithm in every stitch.
✍️Creative
Quotes & Poetry
Original quotes, micro-essays, poetry — words as design.
🖼️Creative
Art & Sketching
Ideas, characters, abstract concepts — pen and digital.
✈️Explore
Travel & Exploring
Every place teaches me what people need.
🍳Cozy
Cooking & Food
Recipes are product design for your taste buds.
📚Cozy
Reading & Writing
Design books, sci-fi, poetry — reading fuels everything.
🌿Nature
Nature Walks
Design patterns in leaves, fractals, organic systems.
Original Quotes
Data tells you what happened. Design decides what happens next.
Every stitch is a decision. So is every pixel.
You don't have to be from everywhere to understand everyone.
The best gardens and the best interfaces grow slowly, then all at once.
📸 Add your photos — garden, crochet, travel, art
Contact

Let's build something
remarkable.

Whether it's a job opportunity, a collaboration, or a conversation about data and design — I'd love to hear from you.

Send a message

I reply within 24 hours

Portfolio AI Agent
Hi! I'm your Portfolio AI Agent 👋 Ask me anything about projects, skills, experience, or how to contact you. I'll answer accurately!
Tell me about your projects What skills do you have? Your background? How to hire you?