


I wanted to create an interactive SQL learning platform where students could practice real queries while I tracked their progress and learning patterns as an educator.
Frontend: React + Monaco Editor (VS Code's editor)
Backend: Node.js + Express
Databases:
PostgreSQL (AWS RDS) - For student practice data
Supabase - For users and activity tracking
Hosting: Render
// My dual database approach
const pool = new Pool({ /* PostgreSQL for learning data */ });
const supabasePool = new Pool({ /* Supabase for user management */ });
✅ Interactive SQL Editor - Real-time syntax highlighting and query execution
✅ User Authentication - Email-based login with session tracking
✅ Activity Logging - Every query, login, and error tracked
✅ Database Explorer - Browse tables and generate queries
Challenge: Backend kept failing with "Tenant not found" errors
Solution: Special characters in passwords needed different handling in cloud vs local
# What broke on Render
SUPABASE_PASSWORD="XXXXXXX" # Quotes caused issues
# What worked
SUPABASE_PASSWORD=XXXXXXX # No quotes needed
Challenge: Students confused by separate Login ID + Email fields
Solution: Refactored to email-only authentication
// Before: Confusing
{ loginId: 'user123', email: 'user@email.com', password: '...' }
// After: Clean
{ email: 'user@email.com', password: '...' } // loginId auto-generated
Challenge: Track everything without slowing down queries
Solution: Async logging that never blocks user experience
// Non-blocking activity tracking
const logActivity = async (type, query, result) => {
try {
await fetch('/api/log-activity', { /* ... */ });
} catch (error) {
console.error('Logging failed, but user experience continues');
}
};
Challenge: Adding email field without breaking existing users
Solution: Careful migration with backfill strategy
-- Safely add email to existing table
ALTER TABLE users ADD COLUMN email VARCHAR(255);
UPDATE users SET email = login_id || '@temp-email.com' WHERE email IS NULL;
ALTER TABLE users ALTER COLUMN email SET NOT NULL;
Password Visibility Toggle: Eye icons with proper spacing
Required Field Indicators: Red asterisks (*) on mandatory fields
Better Error Messages: Clear, actionable feedback
Responsive Design: Works on all screen sizes
Every student interaction is captured:
{
"student": "john@university.edu",
"query": "SELECT * FROM customers WHERE city = 'Boston'",
"result": { "rows": 295, "executionTime": 1037, "success": true },
"timestamp": "2025-08-09T03:59:22Z"
}
This enables me to see:
Learning patterns - What students practice most
Common mistakes - Where they get stuck
Progress tracking - Skill development over time
Engagement metrics - Session duration and frequency
Environment parity matters - Cloud behaves differently than local
User experience drives architecture - Sometimes you need to refactor working code
Async operations are critical - Never block the main user flow
Database migrations need planning - Always have a rollback strategy
Data-driven teaching - Activity logs reveal learning gaps I never noticed
UX reduces cognitive load - Simple interfaces help students focus on SQL, not the tool
Real-time feedback matters - Students learn faster with immediate query results
Admin Dashboard: Visual analytics for educators
Progressive Challenges: Difficulty-based exercises
Automated Grading: Pattern matching for correct solutions
Collaboration Features: Shared queries and peer review
Building this taught me that educational technology success comes from balancing technical sophistication with user simplicity. The hardest part wasn't the code - it was understanding how students actually learn and designing around their needs.
The activity tracking data has already changed how I teach SQL. I can now see exactly where students struggle and adapt my lessons accordingly.
Most importantly: Sometimes the best technical solution is the one that gets out of the student's way and lets them focus on learning.

Running data quality checks on retail sales distribution data

This blog explores my experience with cleaning datasets during the process of performing EDA for analyzing whether geographical attributes impact sales of beverages

Snowflake recommends 100–250 MB files for optimal loading, but why? What happens when you load one large file versus splitting it into smaller chunks? I tested this with real data, and the results were surprising. Click to discover how this simple change can drastically improve loading performance.

Master the bronze layer foundation of medallion architecture with COPY INTO - the command that handles incremental ingestion and schema evolution automatically. No more duplicate data, no more broken pipelines when new columns arrive. Your complete guide to production-ready raw data ingestion

Learn Git and GitHub step by step with this complete guide. From Git basics to branching, merging, push, pull, and resolving merge conflicts—this tutorial helps beginners and developers collaborate like pros.

Discover how data management, governance, and security work together—just like your favorite food delivery app. Learn why these three pillars turn raw data into trusted insights, ensuring trust, compliance, and business growth.

Beginner’s journey in AWS Data Engineering—building a retail data pipeline with S3, Glue, and Athena. Key lessons on permissions, data lakes, and data quality. A hands-on guide for tackling real-world retail datasets.

A simple request to automate Google feedback forms turned into a technical adventure. From API roadblocks to a smart Google Apps Script pivot, discover how we built a seamless system that cut form creation time from 20 minutes to just 2.

Step-by-step journey of setting up end-to-end AKS monitoring with dashboards, alerts, workbooks, and real-world validations on Azure Kubernetes Service.

My learning experience tracing how an app works when browser is refreshed

A hands-on learning journey of building a login and sign-up system from scratch using React, Node.js, Express, and PostgreSQL. Covers real-world challenges, backend integration, password security, and key full-stack development lessons for beginners.

This is the first in a five-part series detailing my experience implementing advanced data engineering solutions with Databricks on Google Cloud Platform. The series covers schema evolution, incremental loading, and orchestration of a robust ELT pipeline.

Discover the 7 major stages of the data engineering lifecycle, from data collection to storage and analysis. Learn the key processes, tools, and best practices that ensure a seamless and efficient data flow, supporting scalable and reliable data systems.

This blog is troubleshooting adventure which navigates networking quirks, uncovers why cluster couldn’t reach PyPI, and find the real fix—without starting from scratch.

Explore query scanning can be optimized from 9.78 MB down to just 3.95 MB using table partitioning. And how to use partitioning, how to decide the right strategy, and the impact it can have on performance and costs.

Dive deeper into query design, optimization techniques, and practical takeaways for BigQuery users.

Wondering when to use a stored procedure vs. a function in SQL? This blog simplifies the differences and helps you choose the right tool for efficient database management and optimized queries.

Discover how BigQuery Omni and BigLake break down data silos, enabling seamless multi-cloud analytics and cost-efficient insights without data movement.

In this article we'll build a motivation towards learning computer vision by solving a real world problem by hand along with assistance with chatGPT

This blog explains how Apache Airflow orchestrates tasks like a conductor leading an orchestra, ensuring smooth and efficient workflow management. Using a fun Romeo and Juliet analogy, it shows how Airflow handles timing, dependencies, and errors.

The blog underscores how snapshots and Point-in-Time Restore (PITR) are essential for data protection, offering a universal, cost-effective solution with applications in disaster recovery, testing, and compliance.

The blog contains the journey of ChatGPT, and what are the limitations of ChatGPT, due to which Langchain came into the picture to overcome the limitations and help us to create applications that can solve our real-time queries

This blog simplifies the complex world of data management by exploring two pivotal concepts: Data Lakes and Data Warehouses.

demystifying the concepts of IaaS, PaaS, and SaaS with Microsoft Azure examples

Discover how Azure Data Factory serves as the ultimate tool for data professionals, simplifying and automating data processes

Revolutionizing e-commerce with Azure Cosmos DB, enhancing data management, personalizing recommendations, real-time responsiveness, and gaining valuable insights.

Highlights the benefits and applications of various NoSQL database types, illustrating how they have revolutionized data management for modern businesses.

This blog delves into the capabilities of Calendar Events Automation using App Script.

Dive into the fundamental concepts and phases of ETL, learning how to extract valuable data, transform it into actionable insights, and load it seamlessly into your systems.

An easy to follow guide prepared based on our experience with upskilling thousands of learners in Data Literacy

Teaching a Robot to Recognize Pastries with Neural Networks and artificial intelligence (AI)

Streamlining Storage Management for E-commerce Business by exploring Flat vs. Hierarchical Systems

Figuring out how Cloud help reduce the Total Cost of Ownership of the IT infrastructure

Understand the circumstances which force organizations to start thinking about migration their business to cloud