I build clean, controlled interfaces for things that are hard to hold still: ruins, data, games, social rituals, moving images. The work sits between product logic and spatial imagination; precise enough to use, strange enough to remember.
Architect by training, creative coder by obsession. I think in shaders, particles and point clouds now instead of walls. The through-line is control: designing systems that feel calm on the surface, even when the engine underneath is doing something ambitious.
A small playable memory: code as a way of revisiting a moment.
open sketch ↗A generative study in restraint: rectangles accumulate until the grid declares itself full.
open sketch ↗A coded exquisite-corpse drawing game: each player only ever sees the last fragment before adding their own.
open sketch ↗A portrait filter built from elongation and line: faces redrawn the way Modigliani might have seen them.
open sketch ↗An endless road generated entirely in a fragment shader: no geometry, just math pretending to recede.
open sketch ↗A skyline built from noise and distance fields: a city that exists only as long as the shader runs.
open sketch ↗Always scanning something new.
A Romanesque masterpiece, decoded in light.
For Iconem, in partnership with the Cité de l'architecture et du patrimoine, I worked on the digital mediation of the 12th-century frescoes of Saint-Martin de Vic: high-definition capture, video-mapping, and an interactive console for reading the choir and its iconography in detail.
A Paris gallery-vernissage Instagram brand (@latourneeparis), built into a full three-tab tool — post generator, public submission form, and admin panel — with a four-flute "pinard estimé" wine-rating system at its core, integrated with Tally.so.
full case study coming soon — send screenshots and this gets built out properly
A full visual identity for a NYC gelato business — pistachio-green palette, Cormorant Garamond paired with DM Sans, and a 1920×1080 digital menu board system with a rotating hero panel, including the Pistachio LAVA landing page.
full case study coming soon — send screenshots and this gets built out properly
A second life for this portfolio — an isometric, walkable world where a pixel-art avatar wanders between pavilions for The Lab, Iconem work, case studies, and about. Validated programmatically for tile reachability and interaction-zone spacing.
full case study coming soon — send screenshots and this gets built out properly
A strategy case deck rebuilt for clarity and pace — restructuring the argument slide by slide and giving it a presentation system that reads as confidently on screen as it would in the room.


The upgrade moves the slide away from dense consulting clutter and toward one clear read: the OTA shift is easier to compare as two channel-mix moments, supported by a single financial consequence. Fewer competing annotations, stronger hierarchy, more confidence.
A panel-by-panel customizer for the FENDI Peekaboo bag — front leather, metal, handles, trim handle, metal details, inside material, stitches, and inside zipper, each chosen on its own screen and applied to a single build before it's ready to purchase. The pacing is deliberately slow and editorial: one decision per screen instead of a cluttered configurator, so the bag feels designed rather than assembled.
Instagram's Close Friends is one list, shared in full with everyone on it. So adding someone means giving them visibility into everyone else, and removing someone means an awkward, visible "hide." This concept replaces the single list with named, private groups: post to Work, Family, Running Crew, or any custom group, and no one in it knows who else is there, or that the group exists at all. Quietly including or excluding someone stops being an event.

Efrat Bergstein, A.C. Harkness, Juwon Lee, Olivia Ramos
The visualization addresses the research question: “How big of a role do you think bias plays in the issuing of red cards?”
By interacting with this visualization, users will better understand the results of the original study, why these results matter within the game of soccer, and why these results matter outside of the game of soccer. The goal is to lead users to an ‘aha’ moment at the end and understand that bias is everywhere, uncertainty in data selection is to be expected at some level, and the data from this study shouldn’t be seen just as a condemnation of referees (or coders).
Journal article: Many Analysts, One Data Set: Making Transparent How Variations in Analytic Choices Affect Results ↗
Recent earthquake records plotted two ways: first as a 3D globe, then as a Python/Folium heatmap filtered by magnitude.

The second view translates the same dataset into a threshold-controlled heatmap. The Colab code below rebuilds the map as the magnitude slider changes.

import pandas as pd
import folium
from folium.plugins import HeatMap
import ipywidgets as widgets
from IPython.display import display
data = pd.read_csv('Earthquake Data.csv')
def update_heatmap(magnitude_threshold):
filtered_data = data[data['mag'] >= magnitude_threshold]
map = folium.Map(location=[0, 0], zoom_start=2, tiles='OpenStreetMap')
heat_data = (filtered_data[['latitude', 'longitude', 'mag']].dropna().groupby(['latitude', 'longitude']).sum().reset_index().values.tolist())
HeatMap(data=heat_data, radius=15, gradient={0.2:'blue', 0.4:'green', 0.6:'orange', 1:'red'}).add_to(map)
display(map)
magnitude_slider = widgets.FloatSlider(value=4.0, min=3.0, max=9.0, step=0.1, description='Magnitude Threshold:')
display(widgets.interactive(update_heatmap, magnitude_threshold=magnitude_slider))A clock that tells time through Cindy Sherman instead of numbers. The concept treats each hour as a staged photograph: 8am can be breakfast, 3am can be the darker, messier image. The moving p5 sketch sits beside the live clock logic, while the full 24-image sequence stays visible as the source archive.
_files/1.png)
_files/2.png)
_files/3.png)
_files/4.png)
_files/5.png)
_files/6.png)
_files/7.png)
_files/8.png)
_files/9.png)
_files/10.png)
_files/11.png)
_files/12.png)
_files/13.png)
_files/14.png)
_files/15.png)
_files/16.png)
_files/17.png)
_files/18.png)
_files/19.png)
_files/20.png)
_files/21.png)
_files/22.png)
_files/23.png)
_files/24.png)
Each photograph is treated as an hour-state in the clock: a day told as performance rather than digits.
For our game, we were inspired by New York's long, ongoing and riveting battle with the rats. Given that our usual role is that of a city resident and thus certainly not a friend to the rats, we decided to take the opposite POV here and embody a rat trying to scuttle through the streets unseen. In level 1, we navigate the streets of New York to gather as much food as possible to drag down into the subway. In level 2, we need to cross consecutive tracks to reach a hole that brings us to the underworld without getting hit by incoming trains. For the final level, the rat navigates a low-lit winding system of pipes to reach his lair on a countdown before the rat poison gas gets released into the pipes.
Your perfect seatmate, sorted.
Wingmate matches airline passengers with a compatible seatmate on the same flight. People set a "Flight Mode": Quiet, Social, Explorer, Business, or Romantic, answer a short personality quiz, and get matched with someone on their flight looking for the same kind of company. Matches chat before takeoff, held together by push notifications and a trip dashboard. Built end-to-end: onboarding, sign-in, the quiz, mode selection (mobile + desktop companion), matching, in-app chat, and notifications.


















A before-and-after comparison of the Anti-Spike mobile education module. The earlier extended screen is kept smaller so the updated design can hold the visual weight.


A campaign system broken out into individual social frames, rather than one long carousel strip.






“Time is out of order.” Design a small interaction, system, or visualization where time isn’t linear. What does that mean for input, output, or user navigation? Explore how GenAI could represent or reshape that logic.
NOTE — independent project. Not an official collaboration with, or endorsed by, C+T.
Songs don't trigger memories in order. Whenever a track plays, a different story surfaces — often from a totally different age, with no logic tying one to the next. This became a small local installation: someone pastes a Spotify link and/or a few lines about the memory, a Python backend pulls the track's metadata (title, artist, year) and merges it with their words into a weighted prompt, and a Unity frontend renders the result at center scale — shrinking and drifting every earlier memory outward, into a constellation of emotional fragments rather than a sequence.
CUT IN AFTER EFFECTS / CODE + THEORY PROMPT
Prototype 3 turns art-market data and collector behavior into a poster system. Open the accordion and click any image to enlarge it inline.
_files/2.png)
_files/2.+gagosian.png)
_files/3.png)
_files/4.png)
_files/5.png)
A small product-facing set of screens around AI search, research, APIs, and product navigation.




A research-heavy visual system for Mexican heritage, mezcal landscapes, routes, materials, and spatial storytelling. The images are grouped into the clearer project logic: landscape system, place/origin, movement, material language, and the full deck archive.
_files/large+grid.jpeg)
_files/agave+grid.jpeg)
_files/location.jpeg)
_files/origin.jpeg)
_files/areas.jpeg)
_files/mezcal+areas.jpeg)
_files/roads.gif)
_files/hacienda.gif)
_files/calpulli.gif)
_files/Landscape+(1)..gif)
_files/agave.jpeg)
_files/colors.jpeg)
_files/influences.jpeg)
_files/Mezcal+Vasiliki.jpg)
_files/Mezcal.jpg)
_files/64+mezcal.jpg)
_files/86+mezcal.jpg)
_files/παρουσίαση39.jpg)
_files/παρουσίαση40.jpg)
_files/παρουσίαση43.jpg)
_files/παρουσίαση47.jpg)
_files/παρουσίαση48.jpg)
_files/παρουσίαση49.jpg)
_files/παρουσίαση50.jpg)
_files/παρουσίαση51.jpg)
_files/παρουσίαση52.jpg)
_files/παρουσίαση53.jpg)
_files/παρουσίαση54.jpg)
_files/%CF%80%CE%B1%CF%81%CE%BF%CF%85%CF%83%CE%B9%CC%81%CE%B1%CF%83%CE%B755.jpg)
_files/παρουσίαση56.jpg)
_files/παρουσίαση57.jpg)
_files/παρουσίαση60.jpg)
_files/παρουσίαση61.jpg)
_files/παρουσίαση63.jpg)
_files/παρουσίαση65.jpg)
_files/παρουσίαση66.jpg)
_files/παρουσίαση68.jpg)
_files/παρουσίαση70.jpg)
_files/παρουσίαση71.jpg)
_files/παρουσίαση72.jpg)
_files/παρουσίαση73.jpg)
_files/παρουσίαση74.jpg)
_files/παρουσίαση87.jpg)
A spatial and visual critique of art as transaction: freeports, ownership, hoarding, display, and the rituals that turn cultural objects into financial instruments.
Collectors have an issue with storage, but the project asks whether possession is the real desire. If cultural objects are moved into freeports, the public loses access to the work, its context, and the education built around seeing it.
_files/exhibits_in_space_2.png)
_files/why+do+you+buy+art.png)
_files/first+piece+of+art.png)
_files/tax.png)
_files/artwashing1.png)
_files/freeport.png)
_files/hoarder2.png)
_files/1.jpg)
_files/2.jpg)
_files/3.jpg)
_files/salvator.png)











A compact sequence about separation, entanglement, and the emotional geometry of distance. The inside view starts after the cover image, then includes the Visual Jam film as part of the same project world.




Short body-motion studies and capture tests, held as process material rather than polished film.

.jpg)
Motion identity fragments and interface studies around Ori, now led by the cloud bed image.

A poster series about the art market, collecting, laundering, tax, value, and ownership.







A visual and sound study around time, daily motion, and quantum metaphor.

A collection of motion studies across logo animation, editorial clips, maps, and brand fragments.
A before-and-after interface cleanup: the left image shows the earlier state, the right image shows the calmer, more legible redesign.


In collaboration with Zhuoying Wang and Haoxin Tao. Built with Rhino, Substance Painter, Maya, Roblox Studio, and Blender, this project explores the synergy between virtual fashion and creative design inside imaginative Roblox attire.



A single object-focused ring render, kept as a compact material and form study.

The project folder exists, but there are no visible media assets in it yet. This placeholder keeps the category represented until images or video are added.

In New York, many people struggle to find a place to call home, feeling lost in an endless maze. Every time the ideal place seems found, something goes wrong. This project sits inside that feeling: never quite closer to the exit, but still looking.



























What is a human connection — how hard or easy is it to make, and how much does it affect us? This project was a place to explore that question, and to find connection with others, let alone with myself.

An exploration of feelings presented as a short film — a specific aesthetic applied to computer-generated clips to talk about the hard-to-describe fragility of human connection. Through non-linear, experimental narrative it blurs reality and perception, and asks what forms our identity.
This film now lives inside the Disentanglement project so the image sequence and moving-image study read as one body of work.
A collaborative game with John Kim, built around gathering, alien presence, and playful interaction.
Play on itch ↗An exploration game about moving through an environment by following traces, echoes, and fragments.
Play on itch ↗