Skip to content
View krishn1301's full-sized avatar

Block or report krishn1301

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
krishn1301/README.md

Krishn Khandelwal - Business Analyst, Product, Business Intelligence, Technology Consulting

LinkedIn Email Location


Currently

  • PR Lead — IETE Students' Chapter, SIES GST
  • Open to Business Analyst · Product · Business Intelligence · Technology Consulting roles
  • Learning where automation stops being a novelty and starts being a process decision
  • Contributing documentation fixes to Grafana, Superset, Airflow, Metabase and dbt — see below

Latest

"Who is actually enforcing the rule?"

A free app for two people — every question pack, widget and game that comparable apps put behind a subscription, permanently free. In daily use by real couples, which is where most of the interesting bugs came from.

The core mechanic is you cannot see their answer until you've written your own. A client that receives both answers and declines to render one has implemented a delay — and anyone with dev tools can skip a delay. So the rule lives in a Postgres row-level-security policy instead, with a security definer function to break the recursion a policy querying its own table causes.

Location sharing follows the same principle: off by default, per person, coarsened to a grid by a database trigger, and withdrawing consent re-coarsens the partner's stored row without them opening the app. The widget is handed two finished strings, never a number it could turn back into a position.

Home-screen widgets are the core feature rather than a bonus — a version of this without them is a chat app with extra steps.

TypeScript React Supabase Postgres RLS Capacitor Jetpack Glance PWA


Selected work

Each framed by the question it started from rather than the stack it ended up with.

🎮 LifeRPG

"What happens when you refuse to add a server?"

An offline-first habit tracker for Android and web. No account, no sync, no backend — and each of those is a decision with consequences documented in the repo, not an omission.

Ships with PRODUCT.md, DESIGN.md, SPEC.md and TESTING.md alongside the code. Scope is stated plainly: feature-complete for its three users.

React Capacitor Vite PWA

🛡️ PhishGuard

"How do you hand someone an answer, not 22 numbers?"

A URL risk-scoring platform. The modelling was the easy half; the real problem was turning a continuous probability into a decision a non-technical person can act on.

Resolved with a 4-tier classification — Safe / Low / Medium / Critical — mapped to thresholds, plus evidence shown only above the high-risk line.

Python XGBoost Flask Feature engineering

"Why do verification workflows stall?"

A case-management system for reporting and tracking missing persons.

Mapped the lifecycle from public submission through admin verification to status updates, then built the approval gate at the point where cases were actually going stale. Role-based access separates submission, community input, and approval.

React TypeScript Flask Tailwind


Open source

Documentation and correctness fixes in tools I use, in repos where a wrong claim gets caught by someone who wrote the code.

The method is the same every time: read the source before writing a word, and say so plainly when the issue as filed is wrong.

Project Contribution
Apache Superset 74k ★ #43109 — documented an undocumented zstd prerequisite that stops the dev server at startup. Corrected two claims in the issue after reading the dependency's source.
🔄 Grafana 76k ★ #131333 — a deprecation notice promising an archive date three months past, on a repo still shipping commits. Declined to invent a replacement date.
🔄 Metabase 49k ★ #80578 — documented background task statuses, including that a run is only "success" when every task succeeded, and that two statuses carry no stack trace to read.
🔄 Apache Airflow 47k ★ #71984db downgrade reverts schema but not row content, because the compatibility shim only runs forward. Narrowed the issue's claim rather than repeating it.
dbt docs #9757 merged, five more open — including a backfill diagram that was arithmetically impossible, and a flag whose paths resolve somewhere the docs never mentioned.

Two of these corrected the issue that prompted them. One I closed myself when a maintainer's PR landed the same fix first, with a note on why their version was better than mine.


How I work

Before the code

I write the problem down before the solution — who owns the decision, what "done" means, and what we're explicitly not building. Every project here ships with a PRODUCT.md or SPEC.md because the argument matters more than the implementation.

Verify, then claim

I read the source before describing behaviour. Four of my open-source contributions corrected the issue that prompted them — including one where I proved a documented diagram was arithmetically impossible, not just unclear.

Enforce it where it can't be skipped

If a rule matters, it belongs somewhere the client can't bypass. In TwoEnds that meant moving the reveal into a Postgres policy — a UI that hides an answer it already received has built a delay, not a rule.

Say what's still unknown

I flag the parts I couldn't confirm rather than rounding them up. In a Grafana PR I removed a stale date and told the maintainers I wasn't going to invent the replacement, because I had no way to know it.


Toolkit

Analysis & BI

SQL Power BI Excel Pandas

Build

Python TypeScript React Flask

Platform & process

AWS n8n Postman Git


Credentials

AWS Academy Graduate — Cloud Foundations Amazon Web Services · Sep 2025
Automate with n8n Somaiya Machine Learning Research Association · Jan 2026
API Fundamentals Student Expert Postman · Feb 2024
Web & Application Security Workshop IETE Students' Forum · Sep 2024

Recognition — Top 20 Performer, Google Gen AI Study Jams · Winner, TECHlekh Technical Writing Competition · 3rd Prize, Cognition Project Presentation


Activity

Contribution activity graph


Most of what I care about isn't in the commit history — it's in the PRODUCT.md files.

Pinned Loading

  1. twoends twoends Public

    A free couple app for two people. Widgets, offline-first, and a both-must-answer reveal enforced by Postgres row-level security rather than by the client. No paid tier, ever.

    TypeScript

  2. Liferpg Liferpg Public

    Gamified offline-first habit tracker — one React codebase shipping as an installable PWA and a signed Android APK. No account, no server, 345 tests.

    JavaScript

  3. missing-person-registry missing-person-registry Public

    Case management for missing-person reports, built around the two review gates where cases actually stall — the public submission and the community tip, each queued separately for admin approval. Re…

    TypeScript 1

  4. phishing-url-detector phishing-url-detector Public

    Turns a phishing probability into a decision a non-specialist can act on: 22 URL signals (SSL, WHOIS, DNS, redirect chain) → XGBoost → four risk tiers, with forensic evidence shown only above the h…

    Python 1