← All work

Full-Stack Engineering

The Optimal Steep

Role Full-Stack Engineer · UX Designer
Timeline 2 months · Q1 2025
Team Solo Project
Stack / Tools Python · Flask · NetworkX · HTML · CSS · JavaScript · JSON · CSV

Designed and developed a graph-based tea recommendation platform that combines curated health research with public tea data to generate personalized recommendations based on multiple health concerns, taste preferences, and tea characteristics.

What existed, and why it wasn't working

Choosing a tea for specific wellness goals can require searching across multiple websites, comparing conflicting information, and understanding relationships between tea varieties, health benefits, taste profiles, and origins.

I wanted to create an experience that transformed this fragmented information into an interactive recommendation engine capable of helping users discover teas based on their unique priorities rather than requiring them to know exactly what tea they were looking for.

A single definition of success

Build an accessible recommendation platform that combines multiple data sources into a unified knowledge graph capable of generating personalized tea recommendations through flexible search and exploration.

How might we help users discover the best tea for multiple wellness goals instead of relying on simple keyword searches?

How the work unfolded

Brief framing sentence — what approach did you take and why?

Research & Data Collection

The recommendation engine relied on two complementary datasets. I integrated a publicly available API (converted to JSON dataset) containing tea metadata—including origins, taste profiles, caffeine levels, and existing health benefits—with a custom CSV dataset that I independently researched and curated to expand available wellness associations. Combining both datasets produced a richer foundation than either source could provide individually.

Data Modeling

Rather than organizing information in relational tables or simple lookup lists, I modeled teas, health benefits, flavor profiles, categories, and origins as interconnected nodes within a graph using NetworkX. This structure allowed relationships between teas and multiple attributes to be traversed efficiently, enabling recommendation features based on shortest-path searches, shared health benefits, overlapping characteristics, and multiple simultaneous search criteria.

Build

The backend was built with Flask and exposed REST endpoints supporting multiple recommendation workflows, including:
• Single health concern recommendations
• Multi-condition recommendation matching
• Exploration by tea characteristics
• Tea-to-tea comparisons
Each endpoint queried the underlying graph and returned JSON responses consumed by an interactive frontend built with HTML, CSS, and vanilla JavaScript.

Experience

The interface emphasized exploration over traditional search by allowing users to browse teas through multiple entry points, compare tea characteristics, discover recommendations tailored to multiple health concerns, and explore teas based on taste, caffeine, or origin. The frontend was designed to meet WCAG 2.1 AA accessibility guidelines while maintaining responsive layouts across modern browsers.

Validation

Testing focused on validating recommendation accuracy across different query combinations, ensuring reliable API responses for incomplete or invalid inputs, verifying graph traversal logic, and confirming consistent behavior across browsers and device sizes.

Architecture Diagram

Public Tea JSON + Custom Benefits CSV ↓ Data Normalization ↓ NetworkX Knowledge Graph ↓ Flask REST API ↓ Interactive Frontend HTML CSS JavaScript

Caption: briefly describe what this shows and why it matters.

The non-obvious call

Rather than implementing recommendations using hardcoded rules or sequential filtering, I chose to represent teas and their relationships as a graph. Although this introduced additional implementation complexity, it created a much more flexible recommendation engine capable of answering richer questions, such as identifying teas that satisfy multiple health concerns, exploring related characteristics, and comparing teas based on shared attributes without rewriting recommendation logic for each new feature.

Key Functionality

The Optimal Steep successfully transformed multiple independent datasets into a unified recommendation platform capable of supporting personalized tea discovery through graph-based relationships rather than traditional keyword searches. Users can explore teas through multiple pathways, including health goals, taste preferences, origins, tea characteristics, and side-by-side comparisons, creating a significantly richer discovery experience than static reference websites.

What I'd do differently

This project fundamentally changed how I think about modeling complex data. Rather than viewing recommendations as a series of conditional statements, I learned how graph-based representations can naturally model interconnected domains and simplify the implementation of increasingly sophisticated recommendation features. If I continued developing the platform, I would migrate the backend into a production-ready API, introduce automated testing, expand the recommendation algorithm with weighted edge scoring, and add user accounts to personalize recommendations over time.

Noteworthy accomplishments

• Built a recommendation engine using NetworkX graph traversal
• Combined public JSON data with independently researched CSV data
• Developed REST APIs with Flask
• Implemented multi-criteria recommendation logic
• Designed responsive HTML/CSS/JavaScript frontend
• Built accessible interface following WCAG 2.1 AA guidelines

Next project

Canvas to Covers →