V. Singh 00 Home
  1. 01About
  2. 02Projects
  3. 03Practice
  4. 04Stack
  5. 05Contact

Portfolio · 2026~/vivekanand

$ whoami

Vivekanand Singh

> data science / ai / full stack, iiit dharwad

> open to internships, 2026

Open to internships, 2026

01 · About

I build data pipelines and the dashboards that sit on top of them. Currently learning linear algebra for ML, PyTorch and TensorFlow.1

1 “I spend 10% of my time writing code and 90% figuring out why import numpy isn't working in my virtual environment.”

02 · Projects · 04 / 04

Projects

01 GH Pulse Batch ETL over GitHub Archive Python · DuckDB · Postgres 2026

02 · Projects / 01

GH Pulse

Role
Solo build
Year
2026
Stack
Python · httpx · tenacity · DuckDB · Parquet · PostgreSQL · pytest · ruff · GitHub Actions · Streamlit

Problem

GitHub Archive publishes every public GitHub event as hourly gzipped JSON. In that raw form it can't answer simple questions about repos and contributors.

Data

8,784 gzipped JSON files a year, streamed with retries.

Method

httpx and tenacity download the files. DuckDB unnests them into Parquet (100M+ rows) and aggregates repo stats, contributor counts and event-type breakdowns. PostgreSQL takes upserts plus an audit-log row for every run.

Result

A live Streamlit dashboard, 15+ tests, CI on every push, and idempotent loads with an audit trail.

  1. 01 Extract 8,784 gzipped JSON files a year, streamed with retries
  2. 02 Transform 100M+ rows unnested by DuckDB into Parquet
  3. 03 Aggregate Metrics repo stats, contributor counts, event-type breakdowns
  4. 04 Load Postgres upserts plus an audit log row for every run
02 NetWatch Live attack map built from server logs Python · D3 · systemd 2026

02 · Projects / 02

NetWatch

Role
Solo build
Year
2026
Stack
Python · maxminddb · DB-IP · ufw · systemd · Caddy · D3 · TopoJSON

Problem

Bots start scanning any server with a public IP within minutes of it going online. They look for open databases, remote desktops and weak SSH passwords. The logs record all of it, but nobody reads them.

Data

Blocked connections from a ufw LOG rule and failed sshd logins, both read from the systemd journal. An offline DB-IP database gives each source a rough location.

Method

netwatch.py follows the journal, treats every line as untrusted input, masks each source IP (45.83.x.x) and runs two rules. 10+ closed ports in 10 seconds is a port scan, and 5+ failed SSH logins in 5 minutes is brute force. The browser polls a JSON snapshot every two seconds and draws each event as an arc on a D3 world map.

Result

A live dashboard on a real VPS. It runs as a sandboxed systemd DynamicUser with a 200 MB memory cap, behind Caddy HTTPS with a strict CSP. No database, and 10 tests.

03 Messenger Private, invite-only chat for a friend group React · Node · Postgres 2026

02 · Projects / 03

Messenger

Role
Solo build
Year
2026
Stack
React · Vite · Tailwind CSS · Express · Socket.io · PostgreSQL · Prisma · Zod · argon2 · Resend · Docker · Caddy
Code
Private

Problem

A chat app for a closed group of friends, hosted on my own server. No public sign-up, no ads, no analytics, and message text never sits in the database as plain text.

Data

PostgreSQL through Prisma: users, friendships, conversations, members, messages, image attachments and hashed refresh tokens. Every request body is checked with Zod.

Method

Express serves the REST API and Socket.io handles live messages, typing and presence. Each message is encrypted with AES-256-GCM using a fresh IV before it is stored. Passwords use argon2id, sign-up is confirmed with an emailed code, and refresh tokens rotate and can be revoked.

Result

A live app with friend requests, blocking, 1:1 and group chats with admin roles, read receipts and image uploads. It runs in Docker Compose behind Caddy HTTPS.

04 Vajra P1 9mm service pistol concept, from brief to 3D reveal Blender · Python · Cycles 2026

02 · Projects / 04

Vajra P1

Role
Solo concept
Year
2026
Stack
Blender · Python (bpy) · Cycles
Status
Concept, pre-prototype
15 s reveal · Cycles · model v14

Problem

The Indian Army's officer sidearm is the Pistol Auto 1A, a licensed copy of a 1960s Hi-Power. It holds 13+1 rounds, weighs 1,180 g loaded, takes no optics and is sized for a Western hand.

Data

Published DRDO DIPAS hand measurements for Indian male soldiers, 5th to 95th percentile, set the grip size and trigger reach.

Method

A design brief worked out over 11 rounds and five engineering schematics. Then a parametric Blender model written in Python, taken through 14 versions to a Cycles render.

Result

A modular 9mm striker-fired concept in two sizes, with a design brief, a one-page pitch and this reveal.

Vs the incumbent 1AFrom the pitch

Rounds · 17+1 vs 13+1
+4
Loaded · 924 g vs 1,180 g
−256 g
Service life target
6×

Default trigger reachShorter suits the Indian soldier's hand

Vajra P1
68 mm
Glock 17
72 mm
SIG M17
74 mm
SpecP1 full-sizeP1C compact
RoleJCO / general issueOfficer / vehicle crew
Length198 mm175 mm
Weight, unloaded720 g650 g
Capacity17+115+1

Research filesShared on request, not public

  • Not publicDesign brief v0.211 sections
  • Not publicEngineering schematics5 drawings
  • Not publicOne-page pitchOctober 2026
  • Not publicBlender model and script14 versions

Currently working on

Mars Rover Terrain Segmentation

A segmentation model that labels every pixel of Curiosity's camera images as soil, bedrock, sand or big rock, so a rover knows where it can drive safely. NASA's Spirit rover got stuck in soft sand in 2009 and never moved again. The data is AI4Mars from NASA JPL, labelled by thousands of volunteers.

03 · Practice

27 problems, 12 of them hard.

Easy
4
Medium
11
Hard
12

LeetCode, mostly in C++, plus SQL, JavaScript and Python. Each dot is a solution. Height is difficulty and position is the problem number on a log scale.

Each dot links to its solution
  1. #5 Longest palindromic substring medium
  2. #6 Zigzag conversion medium
  3. #7 Reverse integer medium
  4. #8 String to integer (atoi) medium
  5. #9 Palindrome number easy
  6. #11 Container with most water medium
  7. #12 Integer to Roman medium
  8. #13 Roman to integer easy
  9. #14 Longest common prefix easy
  10. #15 3Sum medium
  11. #16 3Sum closest medium
  12. #22 Generate parentheses medium
  13. #25 Reverse nodes in k-group hard
  14. #30 Substring with concatenation of all words hard
  15. #32 Longest valid parentheses hard
  16. #34 Find first and last position of element in sorted array medium
  17. #41 First missing positive hard
  18. #185 Department top three salaries hard
  19. #262 Trips and users hard
  20. #601 Human traffic of stadium hard
  21. #835 Image overlap medium
  22. #836 Rectangle overlap easy
  23. #1467 Probability of a two boxes having the same number of distinct balls hard
  24. #2630 Memoize II hard
  25. #2650 Design cancellable function hard
  26. #3414 Maximum score of non-overlapping intervals hard
  27. #3451 Find invalid IP addresses hard

04 · Stack

Stack

Used in projects

  • Python
  • SQL
  • C++
  • JavaScript
  • DuckDB
  • PostgreSQL
  • Parquet
  • pytest
  • GitHub Actions
  • Streamlit
  • Git

Familiar / learning

Data / AI
NumPy, Pandas, Matplotlib, PyTorch, TensorFlow
Languages
C, Java, TypeScript, Rust
Backend & DB
MySQL, SQLite, Redis, Neo4j, Prisma, Jinja, Nginx, Apache
Frontend
CSS, Vite
Infra & tools
Docker, Kubernetes, Azure, Cloudflare, GitLab, Jira, Postman

05 · Contact

Open to internships in data science, AI and software engineering.