The Fastest Way I’ve Found to Build a Solid UI Without a Designer
The experience-based workflow I use to turn product requirements into a polished, usable interface quickly when design support is limited.
Open to senior software and product engineering opportunities.
I’m João Forja. I build and shape software products end to end, combining deep frontend expertise with product judgment, design collaboration, backend delivery, and applied AI. Outside work, I train Brazilian jiu-jitsu and surf.
Based in Faro, Portugal. Available for remote opportunities.





Practical notes on React, testing, and software design.
The experience-based workflow I use to turn product requirements into a polished, usable interface quickly when design support is limited.
It's not always obvious which tests we should be writing for our React components. One way to solve this problem is to use a combination of Input Space Partitioning and Whitebox testing to guide us during the process.
It's not always obvious how to decompose a React component. This article explains a guideline you can use to validate a decomposition.
Learn about: testing, relying on TypeScript to improve correctness, and modeling data-structures while building a multilevel-list React component. In this part, we'll focus on modeling the underlying data structure to support the multilevel-list component.