Home About Portfolio Research Blog Contact

Ravindi Ayodhya

Aspiring Data Engineer

Engineering scalable data systems that turn complexity into intelligence.

Image

About Me

As an aspiring Data Engineer, I am deeply engaged in building a strong foundation across data engineering, analytics, and modern data-driven technologies. With a growing proficiency in tools such as SQL, Python, and cloud-based platforms, I focus on designing efficient data pipelines, transforming raw datasets, and enabling meaningful insights.

Driven by curiosity and a commitment to continuous learning, I actively explore areas such as big data processing, data warehousing, and scalable data systems. My work reflects a hands-on approach to solving real-world data challenges, with an emphasis on clean, reliable, and well-structured data.

Image

Biography

I am someone who enjoys working with data and discovering the stories hidden behind it. My journey into data engineering started with a curiosity about how raw information can be transformed into something meaningful and useful. Since then, I have been continuously learning and expanding my skills in databases, Python, and cloud technologies.

Beyond just technical knowledge, I enjoy problem-solving and challenging myself to think in new ways. Whether it is working on academic projects or exploring new concepts, I focus on understanding how systems work and how they can be improved to handle data more efficiently.

I believe in continuous growth and always look for opportunities to expand my knowledge in areas like big data, data pipelines, and modern data systems. My goal is to develop into a well-rounded data professional who can contribute to building smart, scalable solutions.

Outside of my technical interests, I value creativity, curiosity, and staying open to new ideas — qualities that help me grow both personally and professionally.

Education

Bachelor of Science (Hons) in Data Science
Sri Lanka Technology Campus
Mar 2023 – Mar 2027
NLP Virtualization Big Data Machine Learning Deep Learning Artificial Intelligence Data Warehouse Linear Algebra
Data Engineer Career Bootcamp
SITC Campus (with Codezela Career Accelerator)
Mar 2026 – Aug 2026
Data Engineering Data Modeling ETL/ELT with Orchestration Data Pipelines Data Lakes Governance
Pearson Assured Diploma in Information Technology
Esoft Metro Campus
Nov 2020 – Jun 2022
Python C# MS Office Database
Licenses & Certificates

Experience

Intern Data Engineer
Codezela Technologies (Pvt) Ltd.
March 2026 – September 2026 · Hybrid

Leadership

Secretary
IEEE Industry Applications Society of SLTC
Aug 2025 - Present

Managing official communications and documentation for the society while supporting the planning and coordination of its events and initiatives.

Student Branch Ambassador of IEEEXtreme 19.0
IEEE Student Branch of SLTC, IEEE Sri Lanka Section
Jun 2025 - Jun 2026

Promoting IEEEXtreme within the student branch and encouraging peers to participate in the global 24-hour programming competition.

Editorial Head - Sub Committee
IEEE Industry Applications Society of SLTC
Jun 2024 - Aug 2025

Leading the editorial sub-committee in producing newsletters and content that showcase the society's activities and achievements.

Skills

Front-End
React✕ JavaScript✕ HTML✕ CSS✕ Bootstrap✕
Front-End Mobile
React Native✕ Flutter✕ Swift (iOS)✕ Android✕
Back-End
Python✕ Java✕ C#✕ C✕
Database
MongoDB✕ Firebase✕ MySQL✕ SQLite✕
Technologies & Tools
Docker✕ TypeScript✕ Git✕ GCP✕ AWS✕ Figma✕
Soft Skills
Team Leadership✕ Good Team Player✕ Attention to Detail✕ Time Management✕ Creative Problem Solver✕

Portfolio

Full-Stack Web Development
StudyMate

A full-stack AI-powered study notes app with secure per-user accounts, letting students capture notes, generate AI summaries and quizzes, and manage everything through a custom MCP server. Built with React, Express, and MongoDB, with JWT authentication ensuring notes stay private per user, and Google Gemini powering the AI features. Deployed live across Vercel, Railway, and MongoDB Atlas.

React Node.js Express MongoDB JWT Google Gemini API MCP Vercel Railway
Read more →
Data Engineering / DevOps
DataOps CI/CD Project

A Python-based ETL pipeline with automated testing, containerization, and CI/CD, built to apply DevOps engineering practices to data workflows. Cleans raw customer data and validates output quality on every commit using GitHub Actions.

Python Pandas Pytest Docker GitHub Actions Terraform
Read more →
Mobile Application Development
Lanka Smart Mart

A native Android app for grocery and household shopping with secure Google Sign-in, easy product browsing, and a dynamic cart system. Integrated OpenStreetMap and SQLite for cart and order data, with automatic PDF receipt generation and delivery location tracking across Sri Lanka.

Java XML SQLite OpenStreetMap API Google Auth SDK Material UI PDFBox/Canvas API
Read more →

Research

In Progress
Final Year Research Project
AI-Based Personalized Financial Coaching and Sandbox Investment Training for Financial Literacy Development in Sri Lanka

Designing an AI-powered mobile app that helps close Sri Lanka's financial knowledge-to-action gap through personalized coaching and risk-free investment practice. Combines Explainable AI (SHAP, LIME) for transparent recommendations, an LSTM model for spending prediction, and BERT-based sentiment analysis of financial news, alongside a sandbox investment simulator and multilingual education module tailored to different user groups.

Blog

April 2026
Building the Foundation of the AI Era: Why Data Engineering Matters More Than Ever

In today's data-driven world, Artificial Intelligence (AI) often steals the spotlight. But behind every successful AI system lies a powerful, often overlooked discipline, Data Engineering. Without it, even the most advanced machine learning models fail to deliver meaningful results.

Read more →
March 2026
Building Your First Data Pipeline with Python and SQL

A step-by-step tutorial on building a simple but production-ready data pipeline using Python, PostgreSQL, and Apache Airflow for orchestration.

Read more →
February 2026
UI/UX Design Principles Every Developer Should Know

Good design is not just about aesthetics. I explore the core principles of UI/UX design that every developer should apply to create more intuitive and accessible products.

Read more →

Contact Me

Open to Remote Work & On-Site

Location: Matale, Sri Lanka

Current Location: Colombo, Sri Lanka

Time Zone: Colombo Standard Time (UTC +5:30)

Colombo

--:----

--

Feel free to reach out for collaborations, opportunities, or just a friendly conversation about data and technology.

Get in Touch

April 2026

Building the Foundation of the AI Era: Why Data Engineering Matters More Than Ever

In today's technology-driven world, Artificial Intelligence (AI) continues to transform industries, automate workflows, and redefine how businesses operate. But behind every intelligent system lies an essential foundation that often goes unnoticed, Data Engineering.

Without reliable data systems, even the most advanced AI models cannot perform effectively. Data Engineering is what makes modern analytics, machine learning, and large-scale digital systems possible.

What is Data Engineering?

Data Engineering is the practice of designing, building, and maintaining systems that collect, store, process, and deliver data efficiently. It focuses on creating reliable pipelines and infrastructures that allow organizations to transform raw information into meaningful insights.

Simply put, Data Engineering acts as the bridge between raw data and intelligent decision-making. As businesses generate massive amounts of data every day, the need for scalable and efficient data systems continues to grow rapidly.

Why Data Engineering Matters

Many organizations focus heavily on AI and analytics, but successful AI systems depend on high-quality, organized, and accessible data. Strong Data Engineering enables:

  • Faster decision-making
  • Better data quality
  • Scalable infrastructures
  • Automated reporting systems
  • Reliable analytics and AI models

When data systems are poorly designed, businesses face inaccurate insights, slow processing, and unreliable AI outcomes. This is why Data Engineering has become one of the most important fields in modern technology.

The Data Engineering Workflow

A modern data system typically follows a structured pipeline:

  1. Ingest — Data is collected from multiple sources such as applications, APIs, databases, sensors, and websites.
  2. Store — The collected data is stored in databases, data lakes, or warehouses for future processing.
  3. Process — Data is cleaned, transformed, and prepared for analytics or machine learning tasks.
  4. Serve — Processed data is delivered to dashboards, reports, applications, or AI systems.

This continuous flow ensures that organizations can use data efficiently and make informed decisions in real time.

Core Areas of Data Engineering

Modern Data Engineering involves several important disciplines:

ETL and ELT Pipelines — Engineers build pipelines to extract, transform, and load data efficiently across systems.
Data Modeling — Structuring relationships between datasets helps improve performance and organization.
Data Quality and Governance — Maintaining accurate, secure, and reliable data is essential for business trust.
Workflow Orchestration — Automation tools help schedule and manage complex data workflows.
Distributed Computing — Large-scale data processing systems allow organizations to handle massive datasets efficiently.
Infrastructure as Code — Engineers automate infrastructure deployment and management using code-based configurations.

Together, these practices help organizations build scalable and maintainable data ecosystems.

Technologies Used in Modern Data Engineering

The modern data stack includes a wide range of technologies and platforms. Some commonly used tools include:

  • SQL and Python
  • Apache Spark
  • Databricks
  • Apache Airflow
  • Snowflake
  • Amazon S3
  • Google BigQuery
  • AWS, Azure, and Google Cloud Platform

These technologies allow engineers to process large volumes of data while maintaining performance and scalability.

How to Start Learning Data Engineering

For beginners interested in entering the field, a structured learning path can make the journey easier. A strong roadmap includes:

  1. Learning SQL and Python
  2. Understanding relational and NoSQL databases
  3. Studying data warehousing concepts
  4. Building ETL pipelines
  5. Exploring cloud platforms
  6. Learning orchestration and big data tools

Consistency and hands-on practice are key to improving technical skills.

Best Practices Every Data Engineer Should Follow

Successful Data Engineers focus on more than just tools. They also follow strong engineering principles:

  • Prioritize data quality
  • Automate repetitive tasks
  • Monitor pipeline performance
  • Use version control systems
  • Document workflows clearly
  • Build scalable and maintainable architecture

These habits improve reliability and help teams collaborate more effectively.

Final Thoughts

Data Engineering is no longer a niche specialization, it has become the backbone of the AI era. As companies continue investing in Artificial Intelligence, analytics, and automation, the demand for skilled Data Engineers will only continue to rise.

While AI models often receive attention, it is the underlying data systems and infrastructure that truly power innovation. For anyone looking to build a future-proof career in technology, Data Engineering offers one of the most exciting and impactful paths available today.

Certificate

February 2026

UI/UX Design Principles Every Developer Should Know

Good design is not only about making apps look beautiful. It is about creating products that are easy, useful, and enjoyable for users. Today, developers need basic UI/UX knowledge to build better digital experiences.

A strong application should not only work well but also feel simple and comfortable to use. This is where UI and UX design become important.

What is UI and UX?

UI (User Interface)

UI focuses on how a product looks. This includes:

  • Buttons
  • Colors
  • Typography
  • Layouts
  • Icons

UI is the visual side of an application.

UX (User Experience)

UX focuses on how users feel when using a product. This includes:

  • Ease of use
  • Navigation
  • Accessibility
  • Speed
  • Overall user satisfaction

UX is about creating smooth and meaningful experiences.

Why Developers Should Learn UI/UX

Understanding UI/UX helps developers:

  • Build user-friendly applications
  • Improve usability
  • Create responsive designs
  • Work better with designers
  • Increase user satisfaction

Even small design improvements can make a big difference.

1. Keep the Design Simple

Simple interfaces are easier to use. Avoid too many colors, unnecessary elements, and complex layouts. Use clean layouts, proper spacing, and clear navigation. A simple design helps users focus on important tasks.

2. Maintain Consistency

Consistency makes applications easier to understand. Keep button styles, colors, fonts, and navigation patterns consistent. Users should feel familiar with the interface across all pages.

3. Focus on Accessibility

Applications should be usable for everyone, including people with disabilities. Good accessibility practices include:

  • Proper color contrast
  • Readable text sizes
  • Keyboard navigation
  • Alt text for images
  • Semantic HTML

Accessible design improves the experience for all users.

4. Make Designs Responsive

Users access apps from phones, tablets, laptops, and desktops. Responsive design ensures applications work properly on all screen sizes. Use flexible layouts, optimize for mobile devices, and test on multiple screens.

5. Create Clear Visual Hierarchy

Visual hierarchy helps users understand what is most important. You can improve hierarchy by using larger headings, bold text, proper spacing, and highlighted buttons. Good hierarchy makes content easier to scan and read.

6. Improve Navigation

Users should move through the application easily. Good navigation should be simple, use clear labels, and follow predictable patterns. Confusing navigation creates frustration.

7. Give Feedback to Users

Users should know what is happening after an action. Examples include loading indicators, success messages, error messages, and button animations. Feedback improves user confidence and experience.

8. Optimize Performance

Fast applications create better user experiences. Improve performance by optimizing images, reducing unnecessary code, using lazy loading, and improving server speed. Slow applications often lose users quickly.

9. Design for Users

Always think from the user's perspective. Ask: Is this easy to understand? Can users complete tasks quickly? Does this solve a real problem? User-centered design creates better products.

10. Use Whitespace Properly

Whitespace improves readability and reduces clutter. Benefits include cleaner layouts, better focus, and easier reading. Not every part of the screen needs content.

Common UI/UX Mistakes

Avoid overcrowded interfaces, poor mobile design, inconsistent styles, small buttons, slow loading times, and complicated forms. Simple and clear designs usually work best.

Final Thoughts

UI/UX design is an important skill for every developer. Good design helps users interact with applications more easily and comfortably.

By focusing on simplicity, consistency, accessibility, responsiveness, and performance, developers can create products that users truly enjoy using.

Great applications are not just functional, they are designed with the user in mind.

March 2026

Building Your First Data Pipeline with Python and SQL

A step-by-step guide to building a production-ready data pipeline using Python, PostgreSQL, and Apache Airflow.

Introduction

Data powers almost every modern application we use today. From streaming platforms and e-commerce websites to AI systems and analytics dashboards, data flows continuously between systems.

But raw data alone is not valuable. Before businesses can use data for insights or machine learning, it must be collected, cleaned, transformed, and stored properly. This entire process is handled through data pipelines.

In this guide, you will learn how to build your first simple yet production-ready data pipeline using Python, SQL, PostgreSQL, and Apache Airflow. By the end, you will understand the fundamentals of modern data engineering workflows.

What Is a Data Pipeline?

A data pipeline is a sequence of processes that move data from one system to another while transforming it along the way. Most pipelines follow the ETL process:

  • Extract — Collect data from a source
  • Transform — Clean and process the data
  • Load — Store the processed data into a database or warehouse

Data pipelines are widely used for analytics dashboards, business reporting, machine learning systems, recommendation engines, fraud detection, and real-time monitoring.

Overview

In this guide, we will build a pipeline that:

  1. Reads sales data from a CSV file
  2. Cleans and transforms the data using Python
  3. Loads the processed data into PostgreSQL
  4. Automates the workflow using Apache Airflow

Architecture

CSV File → Python ETL → PostgreSQL → Airflow Scheduling

Technologies Used

Python — Used for extracting, transforming, and processing data.
PostgreSQL — A powerful open-source relational database for storing processed data.
SQL — Used for database operations and querying insights.
Apache Airflow — Used to automate, schedule, and monitor workflows.

Step 1 — Install Required Libraries

Install the required Python packages:

pip install pandas sqlalchemy psycopg2 apache-airflow

You should also have PostgreSQL installed locally, Python 3.10+, and Apache Airflow configured.

Step 2 — Create the PostgreSQL Database

Create a new database:

CREATE DATABASE sales_pipeline;

Now create a table for storing processed data:

CREATE TABLE sales_data ( id SERIAL PRIMARY KEY, customer_name VARCHAR(100), product_name VARCHAR(100), quantity INT, price DECIMAL(10,2), total_amount DECIMAL(10,2), purchase_date DATE );

Step 3 — Create Sample Data

Create a CSV file called sales.csv:

customer_name,product_name,quantity,price,purchase_date John Doe,Laptop,1,1200,2026-04-01 Jane Smith,Mouse,2,25,2026-04-02 Alex Brown,Keyboard,1,75,2026-04-03

Step 4 — Build the ETL Script

Create a Python file called etl_pipeline.py and add the following code:

import pandas as pd # Read CSV file df = pd.read_csv("sales.csv") # Create total amount column df["total_amount"] = df["quantity"] * df["price"] # Remove missing values df = df.dropna() print(df)

This stage reads data from the CSV file, performs basic transformations, calculates the total sales amount, and removes invalid records. This is known as the Transformation Layer.

Step 5 — Load Data into PostgreSQL

Now connect Python to PostgreSQL and load the transformed data:

from sqlalchemy import create_engine # PostgreSQL connection engine = create_engine( "postgresql+psycopg2://postgres:password@localhost:5432/sales_pipeline" ) # Load data into PostgreSQL df.to_sql( "sales_data", engine, if_exists="append", index=False ) print("Data loaded successfully")

At this point, your data has successfully moved from the CSV file into PostgreSQL.

Step 6 — Query the Data Using SQL

Run the following SQL query to generate total revenue per product:

SELECT product_name, SUM(total_amount) AS revenue FROM sales_data GROUP BY product_name;

Step 7 — Automate with Apache Airflow

Running pipelines manually is not scalable. Apache Airflow helps schedule workflows, retry failed tasks, monitor pipelines, manage task dependencies, and automate recurring jobs.

Inside the Airflow DAGs folder, create sales_pipeline_dag.py and add the following:

from airflow import DAG from airflow.operators.python import PythonOperator from datetime import datetime import pandas as pd from sqlalchemy import create_engine def run_etl(): df = pd.read_csv("/path/to/sales.csv") df["total_amount"] = df["quantity"] * df["price"] engine = create_engine( "postgresql+psycopg2://postgres:password@localhost:5432/sales_pipeline" ) df.to_sql("sales_data", engine, if_exists="append", index=False) default_args = { "owner": "airflow", "start_date": datetime(2026, 1, 1) } with DAG( dag_id="sales_pipeline", default_args=default_args, schedule="@daily", catchup=False ) as dag: etl_task = PythonOperator( task_id="run_etl_pipeline", python_callable=run_etl ) etl_task

Step 8 — Start Airflow

Run the following command to start Airflow:

airflow standalone

Then open the Airflow UI in your browser and trigger the DAG. Once executed successfully, data loads automatically, PostgreSQL updates continuously, and pipelines run on schedule.

Production Best Practices

1. Add Error Handling

try: # pipeline code except Exception as e: print(f"Pipeline failed: {e}")

2. Use Logging

import logging logging.basicConfig(level=logging.INFO) logging.info("Pipeline started")

Logging makes debugging much easier.

3. Validate Data

Always check for missing values, duplicate records, invalid formats, and incorrect data types.

4. Avoid Hardcoding Credentials

Instead of storing database credentials directly in code, use environment variables, secret managers, or Airflow connections.

Common Beginner Mistakes

Ignoring Data Quality — Poor-quality data leads to inaccurate analytics.
Building Everything in One Script — Separate extraction, transformation, and loading logic.
No Monitoring — Without monitoring, failed pipelines may go unnoticed.
Skipping Documentation — Document workflows clearly for maintainability.

Real-World Applications

Modern companies rely heavily on data pipelines. Examples include streaming recommendations, financial transaction processing, business intelligence dashboards, AI training systems, and customer analytics platforms.

Large-scale platforms like Netflix, Amazon, and Spotify process massive amounts of data every second through sophisticated data engineering systems.

Final Thoughts

Data engineering is becoming one of the most valuable fields in technology. As AI, analytics, and cloud computing continue growing rapidly, businesses increasingly depend on reliable and scalable data pipelines.

This project demonstrates the core building blocks of modern data engineering: data ingestion, transformation, database storage, and workflow orchestration. Once you understand these fundamentals, you can move into advanced tools such as Apache Spark, Kafka, dbt, Snowflake, Databricks, and Cloud Data Platforms.

The best way to learn data engineering is by building real projects. Start small, improve continuously, and focus on creating reliable systems that solve real-world problems.

Conclusion

Building your first data pipeline is a major step toward becoming a data engineer. With Python, SQL, PostgreSQL, and Apache Airflow, you already have the foundation used in many real-world production systems.

Keep learning, keep building, and continue experimenting with larger datasets and more advanced workflows. The future of technology runs on data — and data engineers are the ones building that foundation.

Full-Stack Web Development

StudyMate

An AI-powered study notes app with secure per-user accounts, built and deployed end-to-end as a solo full-stack project.

1. Introduction

1.1 Overview

StudyMate is a full-stack MERN application built to give students a single place to capture study notes, get AI-generated help understanding them, and test themselves - without needing separate apps for notes, summarization, and quiz practice. It moves the typical "write notes, then separately quiz yourself" workflow into one authenticated, AI-assisted tool, and is deployed live rather than only running locally.

1.2 Purpose

The app provides a private, per-account space to create, edit, and search notes by subject, then layer AI on top: a one-click summary distills a note into three key points plus a comprehension question, and a separate Quiz Mode generates a full multiple-choice quiz from the note content, complete with instant right/wrong feedback. A custom MCP (Model Context Protocol) server also exposes the notes data as tools, so an AI assistant can list or create notes directly.

1.3 Problem Statement

The project addresses a few recurring pain points in how students actually study:

  • Passive re-reading - Notes are often written once and re-read passively, which is a weak retention strategy. StudyMate turns any note into an active recall exercise via AI-generated quiz questions.
  • Fragmented tooling - Notes, summarization, and self-testing usually live in separate apps. StudyMate keeps all three in one authenticated dashboard.
  • Data privacy in shared/demo apps - An early version of the app stored all notes in one global collection with no ownership check, meaning any user of a public demo link could see or delete anyone else's notes. This was identified and fixed by adding full JWT-based authentication, scoping every note to its owner at the database query level.

1.4 Target Users

  • Students - need a fast way to capture lecture/reading notes and turn them into revision material without manual summarizing.
  • Self-learners - anyone studying independently who wants auto-generated quizzes to check their own understanding.
  • Developers/AI assistants - via the MCP server, an AI client such as Claude can list or create notes directly through defined tools rather than a UI.

2. Project Requirements

2.1 Functional Requirements

  • User Lifecycle - Register/login with hashed passwords (bcrypt) and JWT-based session tokens; every note request is authenticated and scoped to the logged-in user.
  • Note Management - Create, edit, delete, and search notes by title or subject, with controlled forms and live client-side filtering.
  • AI Summarization - One-click endpoint sends note content to Google Gemini and returns a 3-bullet summary plus a single comprehension question, persisted on the note.
  • AI Quiz Generation - Separate endpoint generates 3 multiple-choice questions (4 options each, correct answer tracked) from a note, rendered as an interactive quiz with instant feedback.
  • MCP Integration - A standalone Node MCP server exposes list_notes and create_note tools over stdio, authenticating with a stored account so tool calls only ever touch that account's own notes.

2.2 Non-Functional Requirements

  • Security - Passwords are never stored in plaintext; every note route validates a signed JWT and filters by userId at the database layer, not just in the UI.
  • Validation - Empty title/content is rejected server-side with a 400 and a clear JSON error message, not just client-side checks.
  • Availability - Deployed live (not local-only) across three independent free-tier platforms, so the demo is reachable by anyone at any time.
  • Adaptability - Dark mode toggle available across both the marketing landing page and the authenticated dashboard, persisted via localStorage.

3. System Design

3.1 Architecture

StudyMate follows a clear separation between four independently deployable pieces:

  • Landing page - static HTML/CSS/vanilla JS marketing page, no framework.
  • Client - React (Vite) single-page app: auth screen, note dashboard, search, AI summary/quiz UI.
  • Server - Express REST API with Mongoose models for User and Note, a JWT auth middleware gating every note route, and REST calls out to Google Gemini for AI features.
  • MCP server - separate Node process, authenticates against the same API as a real user, and exposes note-management tools over the Model Context Protocol.

3.2 Workflow

Authentication

  • AuthForm - single component toggling between Login and Sign Up.
  • /api/auth/register / /api/auth/login - hash/verify password with bcrypt, issue a 30-day JWT on success.
  • Session persistence - token and user info stored in localStorage; every subsequent API call attaches Authorization: Bearer <token>.

Note Management

  • Dashboard - fetches only the logged-in user's notes on load, with loading and empty states.
  • NoteForm - controlled add/edit form with client-side validation mirrored by server-side 400 checks.
  • Search - client-side filter across title and subject as the user types.

AI Features

  • Summarize - sends note content to Gemini with a strict JSON-only prompt, parses the response into bullets + a quiz question, and saves it on the note document so it survives a refresh.
  • Quiz Mode - separate prompt asks for exactly 3 MCQs with 4 options and a correct index; the client renders them as clickable options that turn green/red on selection.

MCP Server

  • Login on demand - caches a JWT after logging in with credentials from its own .env, so every tool call is properly authenticated.
  • list_notes / create_note - call the same REST endpoints as the React client, proving the API is a single source of truth regardless of which client uses it.
  • Verified with MCP Inspector - both tools tested end-to-end (login → API → MongoDB → response) with screenshots as proof.

3.3 UI Design

Purple-accented, card-based UI across a static landing page and the authenticated dashboard, with a consistent dark mode toggle on both. AI-generated content (summary bullets, quiz questions) is visually distinguished with its own soft-tinted panel inside each note card.

3.4 Data Model

Two primary collections:

users -- name, email (unique), hashed password notes -- user (owner reference), title, subject, content, summary (bullets + quiz question), quiz (3 MCQs), createdAt

Every note document carries a user reference, and every query in routes/notes.js filters by { user: req.userId } - the fix that closed the original data-privacy gap.

4. Technologies Used

  • React + Vite - fast dev server and build for the client dashboard.
  • Express + Mongoose - REST API and schema-based MongoDB access.
  • JWT + bcrypt - stateless authentication and one-way password hashing.
  • Google Gemini API (gemini-3.1-flash-lite) - called directly via fetch, no SDK dependency, to generate summaries and quizzes from raw note text.
  • MCP SDK - implements a standard stdio-based tool server, tested independently with MCP Inspector.
  • Vercel / Railway / MongoDB Atlas - free-tier hosting split across frontend, backend, and database respectively.

5. Implementation Highlights

5.1 Key Modules

  • middleware/auth.js - verifies the JWT on every note request and attaches req.userId, rejecting unauthenticated calls with 401.
  • routes/notes.js - every CRUD and AI route is scoped with { user: req.userId }, so cross-account access is impossible even if a note ID is guessed.
  • mcp-server/index.js - logs in once, caches the token, and reuses it across list_notes and create_note calls.

5.2 Technical Highlights

  • Strict JSON prompting - both AI endpoints instruct Gemini to return only JSON (no markdown fences), parsed defensively with a fallback 502 if the model ever returns malformed output.
  • Optimistic UI + rollback - deleting a note removes it from the UI immediately, and rolls back if the API call fails, keeping the interface responsive.
  • Cross-platform deployment - frontend, backend, and database each live on a separate provider, connected purely through environment variables and public URLs, rather than a single monolithic host.

6. Testing & Results

  • Auth testing - verified duplicate email rejection, wrong-password rejection, and correct token issuance on both register and login.
  • Data isolation testing - confirmed via two separate test accounts that notes created under one account never appear for another.
  • AI endpoint testing - verified summary and quiz generation return well-formed JSON and persist correctly across page refreshes.
  • MCP testing - verified both list_notes and create_note via MCP Inspector, confirming tool calls authenticate and only touch the logged-in account's data.

7. Conclusion

StudyMate evolved well beyond its original scope - starting as a CRUD notes app with AI summarization, it grew into a properly authenticated, privacy-conscious, fully deployed product with a working MCP integration. The project reflects practical full-stack experience: designing a REST API, securing it with JWT, integrating a third-party AI service, building a protocol-level tool server, and coordinating a multi-provider production deployment - not just building a working demo, but hardening it once a real gap (global note visibility) was identified.

Data Engineering / DevOps

DataOps CI/CD Project

1. Introduction

1.1 Overview

DataOps CI/CD Project is a Python-based data engineering solution built to demonstrate how modern DevOps practices can be applied to data pipeline workflows. It moves a simple ETL process from an ad-hoc script into a structured, automated, and reproducible pipeline.

1.2 Purpose

The project provides an end-to-end workflow that extracts raw customer data, cleans it, and loads a validated output - with every stage automatically tested and rebuilt on each code change. It shows how DataOps brings software engineering discipline (testing, automation, version control) into workflows that are traditionally run manually.

2. Project Requirements

2.1 Functional Requirements

  • Extract - Read raw customer data from a structured CSV source.
  • Transform - Clean the dataset by removing rows with missing or null values.
  • Load - Output a validated, cleaned dataset to a processed data directory.
  • Automated Testing - Verify the processed dataset contains no missing values before it's considered valid.
  • Automated Pipeline Execution - Run the full ETL and test suite automatically on every push via CI/CD.

2.2 Non-Functional Requirements

  • Reproducibility - The pipeline produces identical output given identical input, regardless of the machine it runs on.
  • Portability - Packaged with Docker so the environment stays consistent across local, CI, and any future deployment target.
  • Maintainability - Simple, modular structure (src/, tests/, terraform/) so components can be updated independently.

3. System Design

3.1 Architecture

A linear ETL pipeline architecture: the extract layer (src/etl.py) reads raw input from data/raw/customers.csv; the transform layer removes incomplete records; the load layer writes cleaned output to data/processed/cleaned_customer.csv; the validation layer (tests/test_etl.py) confirms data quality on the output.

3.2 Workflow

  • Pipeline is developed and tested locally in a Python virtual environment.
  • Code changes are committed and pushed to GitHub.
  • GitHub Actions automatically checks out the repo, sets up Python, and installs dependencies.
  • The ETL script runs, generating the processed dataset.
  • Pytest validates the output for data quality before the change is considered safe to merge.
  • The same pipeline can be built and run inside a Docker container for environment-independent execution.

4. Technologies Used

  • Python - Core language for the ETL pipeline logic.
  • Pandas - Data cleaning and transformation.
  • Pytest - Automated data quality testing.
  • GitHub Actions - CI/CD automation; runs the pipeline and test suite on every push.
  • Docker - Containerizes the pipeline for consistent execution across environments.
  • Terraform - Basic Infrastructure as Code example for provisioning supporting resources declaratively.

5. Implementation Highlights

  • Automated CI/CD pipeline - every push runs the full ETL job and test suite, catching issues before merge.
  • Containerized execution - docker build and docker run reproduce the same pipeline behavior regardless of host machine.
  • Data quality gate - the pipeline is only considered successful if the output dataset passes the null-value validation test.
  • Infrastructure as Code - a Terraform configuration demonstrates declarative provisioning of supporting resources.

6. Conclusion

DataOps CI/CD Project reinforces core DataOps principles: pipelines should be simple, testable, and repeatable, with issues caught early through automation rather than discovered downstream. By combining ETL logic with automated testing, containerization, and CI/CD, the project shows how standard DevOps practices translate directly into more reliable data engineering workflows.

Mobile Application Development

LankaSmartMart

A native Android supermarket app engineered for Sri Lanka's digital retail transformation.

1. Introduction

1.1 Overview

LankaSmartMart is a native Android solution built to digitally transform a prominent Sri Lankan supermarket chain with branches in Colombo Fort, Maharagama, Gampaha, and Kandy. Developed in Java with the Android SDK, it shifts operations from legacy phone-order workflows to a sophisticated mobile-first marketplace that maintains performance across both urban and regional districts.

1.2 Purpose

The app provides a seamless 24/7 digital storefront covering Groceries, Household goods, Stationeries, and Personal Care products. A persistent shopping cart and structured multi-step checkout streamline the journey from product discovery to order confirmation, supporting both Card and Cash on Delivery (CoD) payments.

1.3 Problem Statement

The app was designed to address key retail pain-points in Sri Lanka:

  • Accessibility Barriers — Physical transit to supermarkets is constrained by time poverty and inconsistent transport for suburban residents.
  • Information Asymmetry — Customers lacked a centralised mechanism to verify real-time stock availability, leading to inefficient trips.
  • Connectivity Volatility — Cloud-dependent apps fail in rural/low-bandwidth areas. LankaSmartMart uses an offline-first SQLite architecture to keep core features functional without active network status.

1.4 Target Users

  • Consumers — Busy professionals, university students, and families requiring efficient procurement.
  • Elderly Users — Targeted via a high-contrast, simplified UI.
  • Administrators — Store managers requiring real-time CRUD access to inventory.

2. Project Requirements

2.1 Functional Requirements

  • User Lifecycle — Multi-role authentication (Admin/Customer) with persistent session management.
  • Intelligent Discovery — Keyword-based search using SQL LIKE pattern matching across product names and categories.
  • Order Management — Persistent cart with real-time price synchronisation and multi-payment support.
  • Logistics Module — Dynamic nearest-branch calculation using geographic coordinates.
  • Documentation Engine — Automated digital receipt generation in PDF format.

2.2 Non-Functional Requirements

  • Performance — Database response latency kept below 50ms for local queries.
  • Adaptability — Semantic UI for seamless Light/Dark mode transitions.
  • Persistence — ACID-compliant data management via SQLite.

3. System Design

3.1 Architecture (MVC Pattern)

  • Model — POJO layer (Product, CartItem, Order) handles data encapsulation.
  • View — XML-based Material Design 3 components ensure high-density responsiveness.
  • Controller — Activities and Custom Adapters bridge SQLite logic with the UI.

3.2 Workflow

Launch & Authentication

  • SplashActivity — Branded splash screen performs a background SessionManager check.
  • LoginActivity / SignupActivity — New users register details into SQLite; the system distinguishes Customer and Admin roles.
  • Session Management — Credentials are encrypted and saved locally to avoid repeated logins.

Product Discovery

  • HomeActivity — Featured offers and four main categories: Groceries, Household, Personal Care, Stationeries.
  • Global Search — SQL LIKE query fetches matching items across all categories.
  • ProductsActivity — Dynamic grid view of products rendered from the local database.
  • ProductDetailsActivity — Detailed metadata, price, and real-time stock availability.

Shopping & Transactional Flow

  • CartActivity — Persistent cart with increment/decrement controls; subtotal and delivery fees update in real time.
  • CheckoutActivity — Confirms delivery address and payment method (Card or CoD).
  • DeliveryAddressActivity — Uses osmdroid to show user location and calculates the nearest branch.
  • Order Completion — Items saved to orders table, cart cleared, unique Order ID generated.

3.3 UI Design

Clean green-and-white Material Design 3 theme covering the full user journey: Splash, Login/Signup, Home, Product Details, Cart, Payment, Receipt, Profile, and Order History. Includes a dark mode toggle throughout.

View Figma Design →

3.4 Database Schema

Five primary entities:

users -- Secure credential storage products -- Comprehensive inventory metadata cart -- Intermediate transactional data orders -- Permanent historical records order_items -- Relational mapping of ordered products

4. Technologies Used

  • Java (JDK 17) — Strong typing, extensive documentation, and excellent memory management for complex DB transactions and multi-threaded image processing.
  • Android Studio Ladybug (2024.2.1) — Layout Inspector, Logcat & Profiler (60fps monitoring), Device File Explorer.
  • SQLite (SQLiteOpenHelper) — ACID-compliant, server-less local database; app functions fully offline.
  • Material Design 3 — MaterialCardView, BottomNavigationView, SwitchCompat following Google's latest accessibility standards.
  • osmdroid (OpenStreetMap) — Open-source map library for delivery location visualisation and branch distance calculation.
  • Glide (v4.16.0) — Asynchronous image loading and caching; prevents UI stutter when scrolling large product lists.
  • Android PdfDocument API — Programmatically renders receipt UI into downloadable PDF format.
  • FusedLocationProviderClient — High-accuracy GPS coordinates for nearest-branch calculation.
  • Gradle (Kotlin DSL) — Automated dependency management and consistent builds.

5. Implementation

5.1 Key Modules

  • DatabaseHelper.java — Transactional logic for placing orders and keyword search.
  • ReceiptActivity.java — Converts visual UI layouts into PDF documents saved to scoped storage.
  • DeliveryAddressActivity.java — Haversine formula logic to determine closest branch from geocoded address.

5.2 Technical Highlights

Map Color Coding

  • Green — Closest branch to the user.
  • Red — Delivery destination (user's address).
  • Gray — All other branch locations.

Order Process (3-Step Chain)

  1. User clicks Place Order.
  2. App saves order to history (SQLite orders table).
  3. App generates a downloadable PDF receipt automatically.

Additional Features

  • My Orders — Digital filing cabinet storing all past orders for review or repeat purchase.
  • Profile Picture — Users can select a photo from the device Gallery to personalise their account.

6. Testing & Results

  • Unit Testing — Verified nearest-branch algorithm correctness.
  • Integration Testing — Validated the Place Order → Save to History → Generate PDF workflow.
  • UI/UX Testing — Verified Dark Mode readability across all 15 screens.

7. Conclusion

LankaSmartMart embodies a new paradigm in professional-grade retail solutions, effectively integrating an offline-first approach with automated PDF generation and dynamic interface scaling. By balancing architectural integrity with modern UI standards, the project showcases a robust, scalable, and production-ready Android application built for real-world resilience.