Comparisons go wrong when columns, names and locations don't match across files.
What I built
An interactive demo of how I map, check and compare messy records before charting them.
My role
Designed and built it independently.
Result
Every total, trend and ranking uses the same checked records. Unclear matches are held back with a reason.
Why it was hard
Keeping uncertain matches visible instead of silently accepting them
Keeping every view consistent under any filter
Usable by keyboard and on small screens
Tools
Demo: React, TypeScript. Real workflow: Python, Pandas, Plotly
Original generated context image. Fictional port and route traces; not project evidence.
THE PROBLEM
Why the system needed to exist.
Comparisons become unreliable when input columns, entity names and location labels disagree. A useful analytical app needs to explain what was matched, what was withheld and which records support each view.
MY ROLE
Where I created leverage.
I designed analytical interfaces around reusable Python data-processing models: ingestion, column mapping, validation and location matching. This independently built browser lab demonstrates those interaction patterns with entirely invented content.
Synthetic demonstration data
INTERACTIVE LAB / A FICTIONAL WORLD
Five ports. One clearer picture.
Explore the imagined journeys of Wheat, Corn and Soybean meal. Compare plans with observations, then see which records are ready to use.
180 fictional records in this selection · 157 comparable records
Planned / demo units11,431Comparable records onlyObserved / demo units11,679Fictional illustrative outputObserved minus planned+248Difference, not performanceReady for comparison87%157 of 180 selected records
Location explorer
An imagined archipelago.
Select a port to focus every view. Positions are abstract, with no real geography or routes.
Comparison trend
Plans meet observations.
Same eligible records on both sides. All four filters apply. Units and comparisons are fictional.
━ Planned━ Observed
Jan
Feb
Mar
Apr
May
Jun
Jul
Read exact trend values
Fictional demo units; “No data” means no eligible observations
Month
Planned
Observed
Jan 2025
2,250
2,059
Feb 2025
1,846
1,721
Mar 2025
1,802
1,898
Apr 2025
1,643
2,312
May 2025
1,902
1,873
Jun 2025
1,988
1,816
Jul 2025
No data
No data
Location ranking
A ranking you can inspect.
Ordered by observed fictional units. Excludes records awaiting review or failing validation.
Illustrative ranking / demo units
Location
Planned
Observed
Gap
1Vellune Quay
2,302
2,626
+324
2Nacreloop Haven
2,214
2,390
+176
3Tessera Reach
2,160
2,375
+215
4Morrowglass Dock
2,450
2,255
-195
5Orrisail Pier
2,305
2,033
-272
Data quality and mapping
Make uncertainty visible.
Illustrative rules, applied before aggregation. These four groups partition the current selection.
Exact location code
125
Recognized fictional alias
32
Ambiguous match · withheld
13
Validation flag · withheld
10
Exact and alias records enter both totals. Ambiguous records need review; validation flags take precedence. Flags are deliberately seeded to illustrate a quality gate, not a measured error rate.
Inspect the fictional record trail Names, dates & mapping decisions
First six records in this selection. Quantities are imaginary demo units; withheld records never enter charts or rankings.
All names, codes, dates and quantities below are invented
Code / date
Company / vessel
Product
Planned / observed
Decision
FICTION-0012025-01-11
Velora LoomworksLantern Equation
Wheat
65 / 71
Exact · included
FICTION-0022025-01-16
Velora LoomworksVelvet Circuit
Wheat
120 / 110
Exact · included
FICTION-0032025-01-21
Velora LoomworksPaper Comet
Corn
49 / 114
Exact · included
FICTION-0042025-01-20
Asterquilt AtelierQuiet Kaleidoscope
Corn
105 / 56
Exact · included
FICTION-0052025-01-20
Velora LoomworksLantern Equation
Soybean meal
100 / 37
Alias · included
FICTION-0062025-01-01
Quillfen CollectiveVelvet Circuit
Soybean meal
122 / 122
Exact · included
WHAT I BUILT
A clear path from inputs to insight.
An analytical product with reusable processing models, connected views and visible quality decisions.
01 / PREPAREINGEST → MAP → VALIDATE
Column mapping and validation give inconsistent inputs a shared analytical structure.
02 / COMPAREFILTER → TREND → RANK
Interactive comparisons and location-oriented views make the selected scope easy to inspect.
03 / REVIEWMATCH → FLAG → EXPLAIN
Entity matching and ambiguity review keep uncertain decisions visible.
+Capabilities are supported by the reference work. All public demonstration content and code were independently created.
Technical details
SYSTEM FLOW
From friction to a repeatable flow.
Prepare inputs
Map columns
Validate records
Resolve locations
Review ambiguity
Filter & compare
Inspect quality
CONSTRAINTS
The difficult parts.
Keep mapping ambiguity visible instead of silently accepting uncertain matches.
Compare the same eligible records across every chart and ranking.
Explain analytical scope without exposing confidential data or implementation details.
Keep the public experience usable on a small screen and with a keyboard.
DESIGN DECISIONS
How I approached them.
Separate reusable data models and processing rules from the analytical interface.
Place validation and matching decisions before aggregation so excluded records remain explainable.
Give every filter one shared selection model across totals, trends and ranked locations.
Keep client exploration separate from governed review workflows; this public lab has no operational integration.
Use a fixed synthetic seed, local calculations and an abstract location panel. Test the filter combinations, totals and exclusion rules.
OUTCOMES
Project outcomes
Explorable
Connected views
One selection updates comparisons, monthly trends and location rankings.
Explainable
Visible quality gates
Accepted mappings and withheld records have distinct, inspectable states.
Isolated
Public demonstration
Fictional content and local computation make the experience safe to explore.