Most designers hand off mockups. Most developers implement them imperfectly. The gap between intention and execution costs projects weeks of revision cycles and produces products that feel slightly off — not quite right in ways that are hard to articulate but immediately felt by users. Being both the designer and the developer eliminates that gap entirely.
01
The Unusual Advantage of Being Both
When I design a component, I am simultaneously thinking about how it will be implemented. I know which CSS properties will be tricky, which animations will be performant, and which layouts will break on mobile. That awareness changes what I design. I avoid the beautiful-but-impossible patterns that look great in Figma but collapse in browser.
The reverse is equally valuable. When I am coding a UI, I can make nuanced design decisions in real time without needing to consult a designer, because I am the designer. A subtle spacing adjustment, a font weight change, a hover state tweak — these happen in seconds, not in a days-long feedback cycle.
02
Design Systems: The Foundation
Every product I build starts with a design system, not with a page design. A design system is a set of decisions made once and applied everywhere: color tokens, typography scale, spacing units, border radii, and component-level patterns. It is the grammar of a product's visual language.
The investment pays off exponentially. When every component speaks the same visual language, the product feels coherent even across different pages built by different developers at different times. Without a system, interfaces drift. Colors vary slightly. Spacing becomes inconsistent. The product looks assembled rather than designed.
03
Typography as the Backbone
Typography is where most developer-designed UIs fall down. The default system font at 16px on a white background is technically readable but completely forgettable. Typography is not just about legibility — it is about personality, hierarchy, and rhythm.
My approach pairs two complementary typefaces: an editorial serif for headlines and a clean sans-serif for body text and UI elements. The contrast creates visual interest without requiring heavy graphical elements. Careful attention to line height, letter-spacing, and measure (line length) makes the difference between a page that is pleasant to read and one that is exhausting.
04
Micro-interactions That Matter
A button that subtly lifts on hover. A card that shifts background on focus. An arrow that rotates 45 degrees when you hover a link. These are micro-interactions — small, purposeful animations that provide feedback, indicate affordance, and make an interface feel alive.
The key word is purposeful. Micro-interactions should communicate something: this element is interactive, this action succeeded, this state changed. Decorative animation for its own sake adds noise. Every motion should reduce cognitive load, not increase it. I aim for transitions under 300 milliseconds and easing curves that feel physical, not mechanical.
05
Brand Identity Beyond the Logo
Working with brands like Be Alyv and Prakroot taught me that a brand identity is not a logo. The logo is a small part of a larger system that includes color, typography, tone of voice, iconography, photography style, and the way interactive elements behave on screen.
A brand identity should be so coherent that a user could identify your product without seeing the logo. That level of consistency requires documented decisions — a brand guide that travels with the product and evolves deliberately, not accidentally.
06
From Design to Functioning Product
The moment a design moves from Figma to code is where most projects lose fidelity. Developers implement what is easy, not always what is correct. Pixel rounding, font rendering, shadow blur radius, scroll behavior — all of these differ between design tools and browsers in ways that matter to experienced designers.
Because I write the code myself, I can match the design intent precisely. When I cannot — because a browser limitation or performance constraint makes exact implementation impossible — I make a conscious design decision rather than an accidental compromise. That distinction is the difference between a designed product and an assembled one.
Need design and development under one roof?
Let's Talk ↗