Play

Design and art, in my free time.

Play

Design and art, in my free time.

Graphic Design

Kamayan

An invite for a traditional Filipino meal

Pacific Climate Summit 2026

Event visual identity for the first inaugural Pacific Climate Summit held in Honolulu, Hawaii

Printmaking

Printmaking preview
Printmaking preview
Printmaking preview
Printmaking studio preview

UX-UI

Personal project — 2026

my Hair

A self-built adaptive routine tracker for hair health. Designed, coded, and shipped in a single afternoon — then iterated across three versions based on real daily use.

UX Design HTML / CSS / JS GitHub Pages Local Storage Progressive Web App
v3
Current version
1
Afternoon to ship
4
Week adaptive cycle
0
Dependencies
01

Maximizing my product efficacy
with a bit of timing help.

A static rotation meeting a dynamic life

I had a written haircare rotation — four weeks, two washes per week, protein and moisture sequenced intentionally. But the moment life disrupted it (a vacation, a forgotten week, a steam room session that threw off the sequence) my brain rejected the whole system. Static plans don't survive contact with a real schedule.

What I actually needed

Not a calendar. A constraint satisfaction engine — something that knew the goals behind each step and could re-derive the right path from any starting point. The workout equivalent: a 4-day split that compresses intelligently to 3 days without losing its goals.

02

Six design iterations.
One afternoon.

Hair care
Week 2 of 4 · Light Protein
Today is
Wash day
Rest day
Briogeo treatment wash
1
L'Oréal Elvive shampoo hyaluronic base, moisture anchor
2
Briogeo MegaStrength 5–10 min, ends only
3
Anti-Snap + heat spray if blow drying
Steam room today?
Changes your prep sequence
Done as assigned
Something different
Wash day
Hair care
Week 2 of 4 · Light Protein
Today is
Wash day
Rest day
Rest day
Next wash day in 2–3 days. What did you do today?
Rosemary oil scalp massage
Dry shampoo at roots
1–2 drops oil on ends
Steam room today?
No wash — oil ends + water rinse
Done
Something different
Rest day
Hair care
Week 2 of 4 · Light Protein
Logged.
Your routine is on track. See you next wash day.
Logged today at 8:42 am
undo & resubmit
Next wash
Gentle recovery wash
Week 2, Wash 2
Wash logged
Hair care
Week 2 of 4 · Light Protein
How did your hair look and feel this week?
Rough week Pretty good Loved it
What was bothering you?
Oily roots
Breakage
Frizz
Dryness
Hair felt great
How well did you stick to your routine?
Mostly yes
Hit and miss
Barely
Weekly check-in
What day is it again?
Your ends are grateful. Carry on.
Which week
Week 1Clarify
Week 2Protein
Week 3Moisture
Week 4Bond
Which wash
Wash 1
Wash 2
Start here
Set position
03

The logic behind
the four-week cycle.

Week 1
Clarify & moisture
Wash 1Kristin Ess clarifying + Arvazallia mask. Reset buildup, pure moisture.
Wash 2Cécred shampoo + Wave Babe. Light maintenance.
Week 2
Light protein
Wash 1Briogeo MegaStrength. Protein + moisture balanced.
Wash 2Cécred hydrating wash. Recovery — no treatment.
Week 3
Deep moisture
Wash 1Arvazallia 15–20 min. Counterbalance protein stiffness.
Wash 2Wave Babe + Cécred oil. Wave definition.
Week 4
Bond & repair
Wash 1Cécred Reconstructing Mask. Heavy protein, once a month.
Wash 2Cécred hydrating + Acidic Bonding serum. Seal.
04

Building it taught me
more than using it.

Design by doing

Six UI iterations in one afternoon — each driven by a specific friction point I noticed in the previous version. The footer buttons needed to recede. The action buttons needed to be terracotta. The rest day needed its own accent color to feel distinct from wash day. None of this was obvious until I used the thing.

The right split between AI and code

The routine logic isn't hardcoded — it's data the app reads from. When a product runs out or the cycle changes, I update the data layer, not the interface. The app stays stable while the knowledge evolves. That distinction — between the container and the content — is the architecture decision I'm most proud of.

Persistence is a UX problem

The biggest version-to-version improvement wasn't visual — it was the persistent today state. Opening the app to a blank form after you've already logged felt wrong. Opening it to a timestamped confirmation of what you did feels trustworthy. Trust is a feature.

Personal project — 2026

my Skin

Retinoids, BHA, clay masks — I had all of it. I also had no idea what to use on any given night. So I built something that just tells me.

UX Design HTML / CSS / JS GitHub Pages Local Storage Progressive Web App
v1.1
Current version
1
Session to ship
7
Day adaptive schedule
0
Dependencies
01

Beating laziness by solving
decision fatigue.

Actives without a system are just products

I did the research. I bought the products. Every night I opened the cabinet and stared at six serums, trying to remember whether tonight was a retinoid night, whether BHA and retinoid could share a session, whether dry skin meant skip the BHA or push through. I almost always defaulted to cleanser and moisturizer. The actives sat there doing nothing.

The brief I gave myself

Open the app, see exactly what to do tonight. Full stack, in order, no memory required. If my skin is dry or I'm breaking out, the plan adjusts without me having to think about it. If I'm exhausted, there's a lazy night mode that strips it down to five steps. The routine bends around real life instead of collapsing under it.

02

Built to survive
10pm, half asleep.

Skin care
v1.1
Wednesday · BHA morning
AM routine
PM routine
How does your skin feel?
Normal
Dry / irritated
Breaking out
BHA morning
1
Vanicream Gentle CleanserRinse thoroughly
swap
2
Caudalie Vinoperfect EssencePat in, don't rub
swap
3
Niacinamide 10% + ZincDaily
swap
4
Paula's Choice BHA 2%Wait 2–3 min
swap
5
COSRX Snail 92 CreamDefault moisturizer
6
Skin Aqua SPF 50+Non-negotiable
BHA morning
Skin care
v1.1
Thursday · Retinoid night
AM routine
PM routine
How does your skin feel?
Normal
Dry / irritated
Breaking out
Lazy night
Retinoid night
1
Belif Aqua Bomb BalmFirst cleanse
2
Vanicream Gentle CleanserSecond cleanse
3
Hada Labo Alpha TonerPat in gently
4
COSRX Snail 96 MucinRetinoid buffer
5
Mad Hippie Vitamin A SerumTonight's retinoid
6
COSRX Ceramide MoisturizerGo heavier than usual
Retinoid night
Skin care
v1.1
Sunday · Mask + retinoid
AM routine
PM routine
Mask + retinoid night
1
Belif Aqua Bomb BalmFirst cleanse
2
Tatcha The Deep CleanseTonight only
3
Innisfree Jeju Volcanic MaskNose + T-zone, 10 min
4
Hada Labo Alpha TonerAfter mask — restore hydration
5
COSRX Snail 96 MucinRetinoid buffer
6
Mad Hippie Vitamin A SerumCompatible with mask
Sheet mask tonight?
Adds a step after toner
Sunday mask night
Skin care
v1.1
Wednesday · BHA morning
AM routine
PM routine
PM routine logged
Base night
Logged today at 9:14 pm
undo & resubmit
Logged.
Your routine is on track.
Logged today at 7:52 am
undo
Streak
4 days logged
Active uses this week
BHA ×2 · Retinoid ×1
Session logged
Skin care
v1.1
Sunday · Check in
How did your skin look and feel this week?
Rough week Pretty good Loved it
What was bothering you?
Dryness
Dullness
Texture
Breakout(s)
Fine lines
Nothing — skin felt good
How well did you stick to your routine?
Mostly yes
Hit and miss
Barely
Weekly check-in
03

Three actives, seven days,
one rule per night.

Sun
Mask
PM onlyClay mask + retinoid. The weekly deep clean, then repair.
Mon
BHA
AM onlyPaula's Choice 2% after cleansing. Pore work begins the week.
Tue
Retinoid
PM onlyMad Hippie HPR serum. Recovery night, ceramide-heavy.
Wed
BHA
AM onlyBHA mid-week. Never same night as retinoid.
Thu
Retinoid
PM onlySecond retinoid night. Mucin buffer always before.
Fri
BHA
AM onlyThird BHA. Skin heading into a weekend of no actives.
Sat
Light
PM onlyNo actives. Barrier repair only. Rest before Sunday's mask.
BHA morning — Paula's Choice 2%
Retinoid night — HPR serum
Mask + retinoid — Innisfree clay
Light / base — barrier only
04

What I learned
from building it.

Color as information, not decoration

The step number circles are color-coded by active type: powder blue for BHA, raspberry plum for retinoid, olive for mask. After a few weeks of use, the color pattern becomes legible at a glance. You stop reading the routine and start recognizing it -- and recognizing it means you actually follow it.

The skin state as a decision tree

Dry, breaking out, lazy night -- each state modifies tonight's assigned routine without replacing it. On a dry night, BHA gets swapped for extra snail mucin and the ceramide moisturizer comes out. On a breakout night, there's a pimple patch prompt and retinoid gets skipped. The logic lives in the app. I just tap a pill and follow the steps.

Persistence as a trust signal

The most important UX detail wasn't visual. It was the timestamped confirmation on reopen -- "Logged today at 8:25 pm" -- that removes the doubt loop of did I already do this? I kept reopening the app just to check. Building in the answer to that question made the whole system feel reliable in a way the blank form never did.

Conversation as design process

Before any code, there was a long conversation -- skin concerns, product inventory, goals, weekly rhythm, compatibility rules, edge cases. The architecture came out of that conversation rather than being imposed on it. This is the part I keep thinking about: the best design I've made for myself started with articulating what I actually needed, out loud, before I tried to build anything.