Designing products where strategy, systems, and interfaces meet.
I help teams turn product ideas
into clear, usable systems.
Connecting business goals, user behavior,
and design execution.
AI speeds it up. Judgment makes it work.
AI gives designers real ownership of what ships, not just what's designed. What used to take weeks can now happen in hours, without skipping thinking.
Let's build
something together.
Open to freelance projects and full-time opportunities.
I'm a Product Design Leader. Based in Bogotá, working for the world.
I've worked on product teams and in agency environments across fintech, payments, and digital platforms. Helping organizations turn complex ideas into solutions people can understand and use.
Strategy, systems, and interfaces. Making complex things simple and ambiguous things clear.
When I decided to build this site my first instinct was to use Framer or Webflow. Then I wondered how far AI and real code could actually go. That question is what started this.
I had never coded at this level before. I understood how components are composed, how systems are structured, but owning the full code? Not close.
The first sessions with AI vibe-coding felt like magic. You pull something from Figma and it appears in code. I spent some time expecting that to be the default. It isn't, but when I slowed down and worked section by section, the precision came back.
Detailed microinteractions, animations and visual effects turned out to be as achievable as basic layout. That opened everything.
The limit is on the idea, not the implementation. You still need to know what you want, why it matters, and when something is wrong. Basic dev concepts help, but AI also explains what it's doing if you ask. You can learn as you go and make better decisions because of it.
Setting up a repository and deploying to Vercel felt like a different kind of ownership. Not just designing something, but actually launching it. Every improvement I make now goes live. The site keeps getting better because iteration has no friction.
Owning the full experience end to end, every detail and interaction, is what changed.
Let's build
something together.
Open to freelance projects and full-time opportunities.
Project Title
Check back soon.
Let's build
something together.
Open to freelance projects and full-time opportunities.
Building a BNPL Marketplace
How a checkout financing tool evolved into a consumer-facing commerce platform
Our BNPL platform in Latam was widely used at checkout but had almost no relationship with users beyond the purchase moment. Most users didn't recognize our brand, couldn't find where to pay their installments, and didn't know they had a reusable credit line.
What was accomplished
- Materialized a direct channel between brand and users, with 30% logging in within weeks of launch
- Improved payment behavior, with an 85% on-time rate among app users
- Grew to 600K active users across our platform
- Our app became a commerce channel, opening an attribution revenue model with partner merchants
Building the app MVP
Our product existed at checkout and disappeared after. Users didn't recognize our brand and had no way to manage their relationship with us.
A central card made our credit logic visible at a glance: available credit, next payment, and total balance together.
A payments flow was built directly into the app to remove the most critical friction. Users simply didn't know how or where to pay.
A store browsing section let users discover partner merchants and see what they could buy with their credit.
After 2 months of the MVP live
Learning from real usage
As adoption grew, we started seeing new friction in real usage. Multi-purchase debt was confusing, credit mechanics were opaque, and browsing had high taps but poor conversion.
A purchase-by-purchase breakdown was introduced so users could see exactly how each transaction related to their balance and how payments were split across them.
Our payments flow was expanded to show users how their payment behavior directly affected their available credit, making the dynamic credit model visible.
Categories was the most tapped section in our app but had less than 1% conversion. We redesigned it with a deeper structure matching how users actually searched, not how merchants were organized. Conversion grew to around 6% as content was refined.
Users who shopped at more than two stores bought 27% more often. We introduced a favorites section and surfaced stores they had visited before.
As the app matured and the platform grew
Exploring new directions for the app
With 600K active users and purchases already starting inside the app, we launched an attribution model as a B2B effort. That opened a bigger question: what else could our app become?
A product-based marketplace, letting users discover and compare products across multiple merchants.
Deal tracking inspired by travel platforms, where users could follow products and get notified when prices dropped.
Community-driven discounts, where groups of users could collectively unlock deals by showing interest in specific products.
I departed from the project after this phase. The product-based marketplace direction was later implemented by the team.
Impact
Over two years building the platform
Clarity came first, commerce followed. When users understood their credit, they paid better and bought more. Our interface decisions had a direct line to financial behavior, and eventually to business model expansion.
In 2021 I joined a BNPL platform in Latam, it was widely used at checkout, but users had little understanding of the product beyond the purchase moment.
By introducing a mobile app focused on clarity, credit understanding, and payments, we turned the product into a direct relationship channel with users.
Over time, the app evolved into a commerce discovery surface for merchants.
This article explores how user contact, product strategy, and interface design helped transform a checkout feature into a platform experience.
Building a BNPL Marketplace
At the time of this project, the BNPL platform operated primarily inside partner stores.
Customers could purchase a product and split the payment into three installments with zero interest, receiving approval in just a few minutes. After completion of payment of first purchase, users were assigned a dynamic credit line that could grow over time based on good payment behavior.
The model worked great on e-commerce and in physical retail checkouts.
However, it had a structural limitation: the platform had almost no relationship with users outside the purchase moment.
Customers remembered the store where they bought their product, but rarely the financing service enabling the purchase.
The question we started exploring was:
How can we increase the relationship with our users beyond checkout?
This question led to the idea of launching the platform's first mobile app.
But before designing the app, we needed to understand something more fundamental: how did users actually perceive and experience the product?
Understanding the User Relationship
Instead of starting with internal assumptions, I conducted a simple research exercise.
For two weeks, I personally called users every day. More than 200 conversations took place during this period.
Each call revolved around three simple questions:
- What do you dislike about the service?
- What do other services do better?
- What do you think about your available credit?
The goal was to understand how people actually related to the product.
Very quickly, clear patterns emerged.
Many users did not recognize the financing provider behind their purchase. When I introduced myself, it often took a moment before they connected the call to the transaction they had made in a store.
Another recurring problem was payments.
Users were not failing to pay because they lacked money. They simply did not know how, where, or when to pay their installments.
Trust was also fragile.
Customers tended to trust the store brand, not the financing service enabling the purchase.
Finally, many users did not realize they had a dynamic credit line that allowed them to continue purchasing as they paid their installments.
These insights pointed toward a clear opportunity. The product lacked clarity and relationship.
Designing the First Version of the App
The first version of the mobile app was intentionally simple.
The goal was to explain the product beyond the checkout moment and help users manage their relationship with the platform.
The initial experience focused on three essential needs.
First, the app needed to explain how the credit product worked. Users needed to clearly understand:
- How much they owed
- How much they could still spend
- When their next payment was due
Second, the experience needed to clarify the relationship between these concepts. Paying an installment increased the available credit line. Understanding this relationship was key to helping users confidently reuse the product.
Third, users needed an easy way to complete their payments directly in the app, while also enabling digital payment channels outside the app.
Together, these elements created the foundation of the mobile experience.
The Key Interface Decision
To make these concepts understandable, I proposed a central interface component that connected the most important elements of the product.
This component displayed three pieces of information together:
- The available credit line
- The next payment due
- The total outstanding balance
This design was developed in collaboration with the product team and became the central card of the app's home screen.
The intention was simple.
Users should immediately understand what they owe, what they can spend, and how their payments affect both.
Because the product functions as a dynamic credit line, these concepts are inseparable.
If users did not understand their relationship, they could not fully understand the product.
Bringing them together into a single interface element helped clarify the logic of the service and gave users confidence in using it repeatedly.
Early Signals After Launch
About two months after launching the MVP, the team began observing important signals.
The app quickly gained traction among users.
Within a short period, around 30% of users logged into the app at least once.
Users who made their payments through the app showed significantly higher payment punctuality, with roughly 85% paying their installments on time.
This was a powerful signal.
The app was not only improving the user experience. It was also improving financial behavior and credit performance.
This insight strengthened the case for making the app a central part of the product experience.
Learning from Real Usage
As adoption grew, product data began revealing new patterns in how people interacted with the app.
Several signals began shaping the next iteration of the product.
Debt clarity
As users accumulated multiple purchases, the debt overview became harder to interpret.
Users struggled to understand how individual purchases related to their upcoming payments and overall debt.
To address this, a dedicated payments and purchases section was introduced, allowing users to review each transaction and clearly understand how their debt was structured.
Credit line behavior
Another recurring question from users was how their credit limit changed over time.
The credit model was dynamic. As users made purchases and paid on time, their available limit increased. If payments were delayed for too long, the credit line could temporarily freeze.
Although users had a general sense of this relationship, the mechanics behind it were not always clear.
To improve transparency, the interface was adjusted to better surface the relationship between payments, debt, and available credit, reinforcing how responsible usage directly affected purchasing power.
Category Browsing
The categories section received a large number of taps but converted poorly.
This suggested that users were attempting to browse, but the structure did not match how they explored products.
The browsing experience was redesigned with a deeper category structure, allowing users to navigate merchants through more specific product groupings.
Repeat purchases
Users who purchased from more than two different stores repeated their purchases about 27% more often.
This suggested that encouraging exploration across merchants could increase retention.
To support this behavior, a favorites section was introduced where users could save stores they were interested in. Merchants that users had purchased from multiple times were also surfaced automatically, making it easier to return to familiar stores.
Search behavior
Search interactions revealed that users were not primarily searching for stores.
They were searching for products.
To respond to this pattern, product tags were added to stores, highlighting the most searched items each merchant offered and helping users discover relevant merchants more quickly.
Together, these changes gradually shifted the app from a credit management tool into a place where users could also explore and shop.
When the App Became a Growth Channel
As the product evolved, the scale of the platform continued to grow.
The app reached roughly 600,000 active users, measured as users who interacted with the app at least once within a six-week window.
At the same time, the platform had expanded to more than 2,000 partner merchants.
Another interesting signal began to appear.
A growing share of online purchases financed through the platform were starting inside the app itself.
This meant the app was not just helping users manage their credit. It was also sending customers to merchants.
This opened a new strategic opportunity.
If the app was influencing where users shopped, it could become a customer acquisition channel for partner stores.
This idea introduced the possibility of an attribution model, where purchases originating from the app could generate additional revenue from merchants.
The product was beginning to move beyond financing. It was becoming part of the commerce discovery experience.
Exploring the Future Marketplace
With this new direction in mind, we began exploring how the product experience could evolve.
One insight kept appearing in both user research and product data.
People do not shop for stores. They shop for products.
This led to several exploration concepts.
One direction explored a product-based marketplace, allowing users to discover products and compare offers across multiple merchants.
Another concept focused on deal-based discovery, inspired by travel platforms where users can track prices and receive alerts when deals appear.
A third direction experimented with community-driven deals, where groups of users could collectively unlock discounts by showing interest in specific products.
These explorations were not intended to immediately replace the existing experience. Instead, they were designed to test mechanisms that could increase exploration, engagement, and repeat purchases.
Prototypes were tested with users to gather feedback on these interaction patterns.
Some of these ideas later influenced product directions after my time with the company.
Reflection
What started as an attempt to clarify a financing product gradually transformed into something larger.
The mobile app helped shift the platform from being an invisible checkout feature into a product users could understand, manage, and interact with directly.
Design played a central role in this transformation.
Not only through interface decisions, but through the ability to translate user behavior, product strategy, and business goals into a coherent experience.
In the process, the product moved closer to becoming a commerce platform, rather than simply a financing tool.
Let's build
something together.
Open to freelance projects and full-time opportunities.
Designing Payments on Real-Time Rails
Turning real-time infrastructure into understandable and adoptable money flows
Real-time payment infrastructure had already changed how people sent money in the region. On the network we operated, P2P transactions were running at over 10 million per month. But business-initiated transactions, payroll, disbursements, and collections, barely reached 30,000. The infrastructure was there. Businesses simply didn't know how to use it. We opened our APIs to change that.
What was accomplished
- Business transactions grew from 30K to 2M per month, a 65x increase
- Product teams went from blank-page integrations to working flows in significantly less time
- Use cases like instant cash-in and cash-out became standard parts of fintech products
How the network worked
The real-time network connected banks so money could move between any two accounts instantly, regardless of institution. Banks could connect to the network directly, through our hub, or through another third party. We operated the hub and managed connections for several of the banks on the network.
Aliases
To send or receive money, users didn't need full account numbers. The network used phone numbers as aliases. A single number could be linked to multiple accounts across different banks, added automatically when sending or receiving a transaction, or manually through each bank's app.
Receiving money
When receiving a transaction, if a user had one account linked to their number, it arrived automatically. If they had multiple accounts, they needed to complete an acceptance flow in whichever app they wanted to receive the money. Users could also set a default account to skip this step entirely.
Request-to-Pay
Request-to-Pay was originally launched for P2P transactions. Instead of a sender initiating a transfer, the receiver could request money directly to the sender's phone number. The experience was clean, but adoption was low. Users weren't yet in the habit of requesting payments from each other.
The real value surfaced on the business side. A merchant or service provider sending a payment request to a customer's phone number, with one-tap approval, no card, no redirect. We focused on extracting that value through business transaction flows.
Building the core flows
More than 50 fintechs integrated. But only 4 or 5 were generating meaningful volume. The APIs worked, the problem was that teams didn't know what to build with them. Each fintech was inventing their own flows from scratch, leading to inconsistent experiences, long cycles, and many simply stalling.
Our hub connected banks to the real-time network. The connection itself was straightforward, but we saw an opportunity beyond it. By opening APIs on top of that connection, businesses could initiate real-time transactions directly, without relying on the bank's traditional channels.
This created a new model: banks gained a new revenue stream by offering RTP capabilities to their clients, and those clients gained the independence to build their own payment flows. For us, it meant more transactions running on our platform and entirely new use cases beyond standard bank-initiated flows.
Cash-in
A user moves money into a wallet or platform from any bank on the network. We defined how the user is identified by phone number, how they select the source account, and how the transaction is confirmed. Because the network is interoperable, the source can be any linked account, not just one specific bank.
Cash-out
A user moves money out of a platform to any bank account on the network. The flow focuses on destination selection, validation, and instant confirmation. The experience removes uncertainty, users know the money arrived, immediately.
By defining these two flows as templates, fintechs could move from API access to working product significantly faster, with far fewer false starts. These became the foundation every other use case was built on.
Expanding to specific use cases
With cash-in and cash-out as a foundation, the next step was applying them to specific business contexts. Each use case had its own constraints, recurring timing and scale, that required adapting the core flows rather than reinventing them.
Service payments
Utility bills, streaming services, and recurring collections in the region relied on physical cards or manual transfers. Both created friction for users and uncertainty for businesses.
Real-time Request-to-Pay changed this. A service provider schedules a payment request tied directly to service delivery. No payment, no service. The user receives a notification, reviews the amount, and approves. No card, no manual transfer, no forgotten payments.
For businesses, collection became predictable and instant. For users, every payment was visible and intentional. A simpler model for both sides.
File-based payments and requests
Some use cases required sending or requesting payments to hundreds or thousands of people at once, payroll, loan disbursements, mass collections. Doing this transaction by transaction wasn't viable.
We designed a file-based flow where businesses could upload a CSV with recipient details and amounts. The system validated the file, processed each transaction individually against the network, and returned a confirmation report. The same approach worked for mass payment requests, a single file could trigger individual RtP requests to each recipient's phone number.
What previously required bank infrastructure and days of processing could now be initiated by any business with API access, with funds arriving instantly across any bank on the network.
Small neighborhood stores were already informal financial access points. By combining real-time payments with simple POS tools, they became interoperable cash agents, letting anyone deposit or withdraw money for any bank at any of those locations.
Each of these flows was documented as a product template, covering the full screen-by-screen experience, edge cases, and error states. Banks shared these directly with their business clients, giving them a clear reference to build on top of the APIs without having to interpret the infrastructure themselves.
The goal was the same as Stage 1: reduce the gap between API access and working product. But here the complexity was higher, timing, scale, and service logic, so the templates did more of the heavy lifting.
Adapting to regulation
The central bank introduced new regulations that restructured how aliases worked. The flexible multi-account model was replaced. Each alias now linked to one specific account. For users with a single linked account, migration was automatic. For everyone else, re-registration was required.
Every flow we had defined assumed the old model. But beyond the redesign work, the regulation itself was the first obstacle. A dense written document that banks and businesses had to interpret on their own, leading to confusion, inconsistent implementations, and slow adoption.
Translating regulation into UX
We treated the regulation as a design brief. Our response was to fully translate it into UX templates, covering every scenario the new rules introduced, so banks and their business clients didn't have to interpret the document themselves. Clear flows, edge cases documented, ready to implement.
New alias types
The new model also expanded what an alias could be. Beyond phone numbers, users and businesses could now register email addresses, national IDs, or autogenerated alphanumeric codes, each linked to one specific account. More flexibility in how you were identified, with stricter control over where money landed.
Single-use aliases
This also opened an unexpected capability. By generating an alias tied to a specific payment and deprecating it once the transaction completed, we had a reliable way to verify payment. A unique alias, one transaction, one confirmation. Clean and auditable.
What started as a forced redesign became a design opportunity. The regulation brought clarity the old system never had, and the new alias types added flexibility and verification capabilities that hadn't existed before.
A wrong turn
We bet early on payment service providers as the fastest path to scale. They already distributed transactional flows, had the infrastructure, and several were genuinely interested.
What we learned is that PSPs don't create new payment behaviors. They distribute existing ones. Their model depends on flows that are already fully adopted, already proven on traditional rails. Asking them to build something new meant asking them to take on market risk they weren't set up for.
They preferred to wait for the market to figure it out first, then adopt once it was safe. That was a reasonable call on their part. It just wasn't the shortcut we thought it would be.
The real traction came from fintechs building new products, not from distributors of existing ones.
Impact
At peak business transaction volume
Most of the volume was still coming from a small group of early adopters who had figured out how to use the system well. The broader base of integrated fintechs had barely started. The potential was clearly much larger.
This work was less about designing interfaces and more about designing understanding. The infrastructure was already powerful. The challenge was making it legible, turning technical capability into something product teams could see themselves using. By defining flows instead of features, we created a shared language for how real-time transactions work. That clarity was the real product.
Business transactions on a real-time payment network were running at 30K per month while P2P hit 10M on the same infrastructure. The connection worked. The problem was that businesses didn't know what to build on top of it. We opened APIs and defined the flows.
What was accomplished
- Business transactions grew from 30K to 2M per month, a 65x increase
- Product teams went from blank-page integrations to working flows in significantly less time
- Use cases like instant cash-in and cash-out became standard parts of fintech products
Building the core flows
50+ fintechs had API access. Only 4 or 5 were generating meaningful volume. The connection worked, but there was no reference for what to build on top of it.
Our hub connected banks to the real-time network. By opening APIs on top of that connection, businesses could initiate transactions directly, without relying on the bank's traditional channels.
Cash-in: user identified by phone number, source account selected, transaction confirmed. One clear pattern any fintech could start from.
Cash-out: destination selection, validation, instant confirmation. Users knew the money arrived. No ambiguity in either direction.
Expanding to specific use cases
Core flows needed to adapt to recurring timing, scale, and service logic specific to each use case.
Service payments: provider sends a Request-to-Pay tied to service delivery, user approves with one tap. No card, no redirect, no forgotten payments.
Mass payments: upload a CSV, each transaction runs individually on the network, confirmation report returned. Payroll and disbursements without bank infrastructure.
Adapting to regulation
The central bank required each alias to link to one specific account. Every flow needed to be redesigned and re-documented from scratch.
We treated the regulation as a design brief. Every scenario was translated into UX templates so banks and their clients didn't have to interpret the document themselves.
New alias types: beyond phone numbers, users could register email addresses, national IDs, or alphanumeric codes, each linked to one specific account.
Single-use aliases: one unique alias per transaction, deprecated after completion. A clean payment verification method that came out of the regulatory redesign.
Impact
At peak business transaction volume
This work was less about designing interfaces and more about designing understanding. The infrastructure was already powerful. The challenge was making it legible, turning technical capability into something product teams could see themselves using. By defining flows instead of features, we created a shared language for how real-time transactions work. That clarity was the real product.
We operated the infrastructure connecting banks to real-time payment networks across Latin America. From the inside, the gap was visible: peer-to-peer transactions were running at over 10 million per month in the first country where we had API access. Business-initiated transactions barely reached 30,000.
Our hub was the connection point between financial institutions, but businesses had no way to use it. We opened the APIs. As Lead Designer, I focused on making those APIs usable as actual products, not just as technical documentation.
Context
Real-time payment systems had already reached strong adoption in peer-to-peer transactions across Latin America. Sending money instantly between aliases and accounts, across any bank, regardless of financial institution, was already part of everyday user behavior.
That interoperability is what made RTP powerful: money could move from any account to any account, same bank or different, in seconds.
But that adoption did not translate into business usage.
For financial institutions, this created a gap. Transactions existed, but not a clear way to build products or generate revenue from them. Businesses still relied on slower systems for payouts, collections, and operational money movement.
The infrastructure was there. What was missing was not capability, but clarity.
Our company operated a connection hub that allowed banks to integrate once with the real-time network. This hub was originally built to power P2P flows, but its position as the central link between financial institutions created an opportunity we hadn't fully explored: exposing APIs so external businesses could also initiate transactions on top of the network.
We opened those APIs. And that's where things got interesting.
The Problem
Even with our APIs available, adoption among businesses was surprisingly low.
More than 50 fintechs had integrated with our hub. But when we looked at actual usage, only 4 or 5 were generating any significant volume. The rest had connected and stopped. Business transactions were stuck at around 30,000 per month, a fraction of what the infrastructure could handle.
The issue was not technical. The connections worked. The problem was that teams didn't know what to do with them once they had access.
A simple question like:
"How do I implement a real-time cash-out for my users?"
did not have a clear answer.
Each team had to figure out their own approach: what the flow should look like, how to identify users, how to handle errors, how to communicate status back to their product. This led to inconsistent implementations, long integration cycles, and in many cases, teams simply not moving forward at all.
The system worked. But product teams were left interpreting it entirely on their own.
My Role
My focus was on closing the gap between what our APIs could do and what product teams could actually build.
I started with desk research, mapping the most common use cases, the regulatory context in each country, and where real-time payments added the most value. From that, I designed transaction flows as templates. Not UI kits. Actual screen-by-screen flows that showed how a specific use case should behave from start to finish. Together with the team, we documented each use case from three angles: technical, product, and UX, so any fintech could pick it up and implement it without needing to interpret the infrastructure themselves.
How Money Moves
Before designing anything, we made the system explicit.
Every transaction follows the same structure. A business triggers a payment through a bank API. The bank routes the request through our connection hub. The request reaches the real-time network and is processed by the receiving bank, which could be any bank on the network, regardless of institution. Funds are credited, and a confirmation is returned.
Our hub standardizes this flow so each participant only handles their part. Interoperability is built in. The sender and receiver don't need to be at the same bank.
Once that structure was clear, we could start defining what it meant for specific use cases.
Core Flows
Two flows became the foundation for nearly every business use case we encountered. The idea was not to create something new but to define how to use what was already there, in a way that any team could pick up and build on.
Cash-in
A user moves money into a wallet or platform, whether as a service payment, subscription, top-up, or transfer to a third party.
The flow defines how the user is identified, how the source account is selected, and how the transaction is confirmed. Because RTP is interoperable, the source can be any account on the network, not just accounts at a specific bank.
The value becomes visible immediately. The action is instant, and the result is certain.
Cash-out
A user moves money out of a platform into a bank account: payroll, royalty payments, refunds, withdrawals, and more.
The flow focuses on destination selection, validation, and instant confirmation. The destination can be any account on the network, across any financial institution.
The experience is not only about speed. It is about removing uncertainty. Users know the money arrived, immediately.
Enabling Real Use Cases
Once the core patterns were defined, teams could focus on applying them rather than inventing them. Here are some of the most impactful use cases we helped unlock.
Cash-Out Patterns
Instant Lending Disbursement
In micro-lending products, credit approval could already happen within minutes. But receiving the money often took hours or days, breaking the "instant lending" promise at the last step.
By applying our cash-out flow templates, disbursement became immediate. Approval and access to funds both happened in seconds, to any bank account on the network, not just one specific institution.
Refunds
Refunds are typically a friction point in digital commerce. Users face long waits or receive store credits instead of real money back.
With real-time cash-out flows, refunds could be processed instantly to any account. Depending on the implementation, users could provide destination details or trigger the refund themselves. Trust improved, and post-purchase friction dropped significantly.
Batch and Payroll Disbursements
In many Latin American markets, payroll was constrained by bank relationships. Employees needed accounts at a specific institution to receive pay quickly. With interoperable RTP, that constraint disappeared. Payments could reach any bank instantly, using simple identifiers like an employee ID or alias.
Companies integrated these flows directly into HR and ERP systems, simplifying operations while removing bank dependency for employees.
Cash-In Patterns
Service Payments (Request-to-Pay)
Utility and subscription payments were enhanced using request-to-pay flows. A payment request could be initiated by the service provider and received by the user directly in their banking app, no card needed, no manual transfer required.
For service providers, payment, clearing, and settlement happened simultaneously. This also enabled recurring payments for services without relying on card infrastructure.
Wallet and Platform Top-Ups
For platforms handling crypto, stablecoins, foreign currencies, or any balance-based experience, real-time top-ups changed the economics significantly. Funds arrived instantly, reducing exposure to currency fluctuations and improving reconciliation. Balances updated in real time for both users and internal systems.
E-commerce Payments
For e-commerce, real-time payments provided a clean alternative to card infrastructure. Transactions processed instantly, reconciliation improved, and users got a reliable payment experience without the friction of card entry or redirects.
Cash as a Network Edge
One of the most impactful applications came from small neighborhood stores, ones that already acted as informal financial access points in underserved areas.
By combining real-time payments with simple POS tools, these stores became interoperable cash-in and cash-out agents. A user could deposit or withdraw money for any participating bank at any of these locations.
A typical flow: a user brings cash to the store. The owner initiates a transfer to the user's account on the network. The user pays a small fee. For withdrawals, the process reverses through a request-to-pay interaction.
This created a new economic model. Users got financial access, store owners generated income, and fintechs captured volume. More importantly, it extended real financial services to areas where traditional bank infrastructure simply didn't exist.
A Wrong Turn
Our early assumption was that payment service providers would be the fastest path to scale. They already distributed transactional flows, had the infrastructure, and several were genuinely interested.
What we learned is that PSPs don't create new payment behaviors. They distribute existing ones. Their model depends on flows that are already fully adopted, already proven on traditional rails. Cards, online transfers, established methods. Asking them to build something new meant asking them to take on market risk they weren't set up for.
They preferred to wait for the market to figure it out first, then adopt once it was safe. That was a reasonable call on their part. It just wasn't the shortcut we thought it would be.
The real traction came from fintechs building new products, not from distributors of existing ones.
Impact
Business transaction volume grew from around 30,000 per month to a peak of 2 million monthly transactions, a 65x increase. At that point, P2P transactions on the same network had reached 40 million per month. Business usage was growing, and the gap with P2P showed how much headroom remained.
Most of the volume was still coming from a small group of early adopters who had figured out how to use the system well. The broader base of integrated fintechs had barely started. The potential was clearly much larger.
The infrastructure hadn't changed. What changed was the ability to understand how to use it. By giving product teams clear flows, documented patterns, and concrete references, they could move from API access to working product significantly faster, with far fewer false starts.
Reflection
This work was less about designing interfaces and more about designing understanding.
The infrastructure was already powerful. The challenge was making it legible, turning technical capability into something product teams could see themselves using.
What I found is that design at this layer is mostly about translation: between what a system can do and what a team can confidently build. When that translation exists, adoption follows.
By defining flows instead of features, we created a shared language for how real-time transactions work. That clarity was the real product.
Let's build
something together.
Open to freelance projects and full-time opportunities.
Lighter Thoughts
Exploring how adventure-based interaction patterns can make sharing thoughts feel like discovery
Mental health conversations online tend to stay in problem mode: support spaces, resource lists, forums for venting. Lighter Thoughts started from a different question: what if sharing something personal felt more like discovery than confession?
This was a solo master's thesis project from 2021, designed during the peak of post-pandemic isolation.
The two problems
Two goals shaped everything. First: explore new interaction patterns that promote an aesthetic and inspirational experience. Second: tackle emotional and intellectual loneliness in mental health by building an interactive community.
Most solutions to loneliness in mental health focus on the resource layer: who to call, what to read, where to find help. Lighter Thoughts explored a different layer: what does it feel like to be part of something?
The world as interface
Most mental health apps organize around forms: questionnaires, logs, journal entries. The model keeps users in observation mode. The question was: what if the interface itself created a sense of being somewhere?
Try it ▼
Lighter Thoughts borrowed its interaction model from games and exploration apps. Hold-press to move your avatar through the world. Single tap to approach a totem or another user. Double-tap to enter a space or open a conversation.
The mechanics were familiar from mobile gaming, but the destination was new: a community space where information and people were discovered through movement, not menus. The world was the navigation.
Thought as light
The core emotional moment in the app was sharing a thought with the community. The design question was: how should this moment feel?
When you share a thought, it doesn't post to a feed. It rises. A light lifts from where you stood and joins the world above. The visual metaphor was intentional: sharing something heavy becomes the act of contributing something bright. Dark thoughts become light. The community is literally made of what its people share.
The rising light was the mirroring concept: the opposite of a dark thought. Whatever someone was carrying, the moment it was shared, it became part of something warm. The world above was built from those contributions.
The community system
Progress was tied to participation, not personal streaks. Completing three community goals unlocked a new skin for your avatar. The world expanded as more people engaged: new landscapes appeared, new totems surfaced with new content.
Belonging was the mechanic, not just the feeling. Every interaction had weight because it changed something visible in the shared space.
Try it. Use the tabs to switch environments.
Impact
Selected as one of the best projects of the year at ESDi Design, 2021. The faculty recognized the coherence between the problem, the aesthetic, and the interaction model.
Reflection
Looking back, two things would make this stronger: the UX writing inside the app, and a first coded version to test the model against real behavior. Both are in progress.
Lighter Thoughts is a mobile app concept for mental health community. But describing it that way misses almost everything interesting about it.
It's a world. A shared, persistent, isometric space where your avatar lives alongside other people's avatars, where content exists as physical objects you walk toward, where sharing a thought sends a light rising above the landscape, and where the more the community participates, the more the world itself grows.
The thesis behind it was written in 2021, in the middle of a period when isolation had become the defining experience for most people. The question was not how to make another mental health app. It was how to make something that felt genuinely different, at the level of the idea, not just the interface.
The idea: a world built from what people give it
The core concept of Lighter Thoughts is that a community space should be literally made of its members' contributions. Not metaphorically, but visibly. Every thought shared by every person becomes a light floating above the world. The more people participate, the brighter and more populated the sky above becomes. The world expands as the community engages with it. New territory appears at the edges. The landscape gets richer, more complex, more inhabited.
This is the opposite of most digital communities, which are architecturally neutral: the platform looks the same whether 10 people are using it or 10 million. In Lighter Thoughts, the state of the community is the state of the world. You can see at a glance how alive it is.
The name comes from this: the idea that sharing something heavy, a thought you've been carrying, a feeling you haven't put into words yet, makes it lighter. And makes the world above a little brighter for everyone else.
Two kinds of loneliness
The research phase mapped what loneliness actually looks like in the context of mental health. The word is broad enough to hide two distinct experiences.
Emotional loneliness is the absence of close personal connection, the feeling of not being truly known by another person. Intellectual loneliness is the absence of community around the things you're thinking about, the feeling that your curiosity or questions don't belong anywhere.
Most mental health platforms addressed emotional loneliness through peer support, journals, and direct conversation. Intellectual loneliness was almost entirely ignored. And yet for many people, especially younger users, intellectual isolation was as painful as emotional isolation. Not having anyone to explore ideas with was its own kind of being alone.
The thesis positioned Lighter Thoughts at the intersection of both. A community where you could find people who felt what you felt and think alongside them at the same time.
Three principles before any screen
Before any screen was designed, three principles were defined to keep every decision coherent. They functioned as a filter: if a design choice violated one of these, it was wrong regardless of how it looked.
Discovery over browsing
Users should encounter things by moving toward them, not by searching or filtering. This ruled out every conventional navigation pattern: no menus, no search bars, no category lists. If something existed in the world, you had to find it by being in the world. The constraint forced a spatial logic onto every design decision.
Contribution as presence
Being in the community means leaving something behind. Every interaction should add to the world rather than consume from it. This is the opposite of how most social platforms work, where presence means consumption: scrolling, reading, watching. Here, you were not present unless you contributed something. The world was built from what its members gave it.
Progress as belonging
Progression should come from connection with others, not from personal habit streaks. Most wellness apps use individual achievement metrics: days in a row, goals completed, personal bests. That model reinforces isolation. It makes you feel good about yourself but does nothing for the community around you. In Lighter Thoughts, the community's growth was your growth. You progressed by making the world better for everyone.
Onboarding as framing
The first-time experience had one job above all others: establish that this was a community, not a self-help tool. Every choice in the onboarding flow either reinforced or undermined that distinction.
The decision to ask users to name their community at the very start was deliberate. You were not setting up an account. You were joining something that, in some sense, already belonged to you. That framing changed the relationship with the app before a single feature was encountered.
The mental health calibration questions that followed were designed to feel like community setup, not intake forms. The intent was to personalize what surfaced in the world, but the tone had to feel like joining a group rather than being assessed by a system.
The rules screen introduced a deliberate friction: to enter the world, you had to understand how it worked first. The rules could not be skipped. This was a calculated bet that two minutes of mandatory orientation would produce users who engaged more meaningfully. A world with rules is more interesting than a world without them, but only if you know what the rules are.
Framing the first actions as community goals rather than product tutorials set the expectation clearly from the start. The app was not teaching you how to use it. It was inviting you to participate in something.
Why a world, not an app
The central design decision was the isometric world. Not a feed, not a dashboard, not a set of tabs. A persistent, shared space that existed whether you were in it or not. This choice had consequences for every other decision in the project.
A persistent world changes the psychological relationship with the product. You are not opening an app. You are returning somewhere. Other people are already there. The world has been changing while you were away. That sense of a place that continues without you is fundamentally different from a product that starts fresh on every open.
The interaction model was borrowed from mobile games because it was already understood by the target audience. The goal was not to teach a new vocabulary. The goal was to redirect a familiar vocabulary toward a new purpose. Users who had moved characters around in mobile games already knew how to be in this world. What they were discovering was what this particular world contained.
Avatar customization was tied to the progression system from the start. The visual representation of your avatar was meant to communicate tenure without requiring any explicit signal of rank. A more elaborate avatar was a quieter way of saying: this person has been here a while. It made belonging visible without turning it into a competition.
Try it ▼
Content that requires movement
The totem system was the answer to a problem that most content platforms ignore: if content is instantly accessible from anywhere, users never develop a relationship with where they found it.
Totems placed content inside the world as physical objects. To read an article or listen to something, you had to walk to it. The spatial requirement added friction, but it was the right kind of friction. It created a sense that content had a location, that discovery was something you did rather than something that happened to you.
The decision to curate rather than generate content was also deliberate. Totems did not have infinite content feeds. They had a specific depth, and you could see how far through them you had gone. Finite content creates completion. You could actually finish a totem, which is a different relationship with information than scrolling through an endless feed.
Different totem types were designed for the full version, each with a different function in the world: informative, discussion-based, event-based. The prototype established the informative type as the foundation. The logic of the others would follow from the same spatial principle.
The moment of sharing
Sharing a thought was the emotional core of the product. More care went into this flow than any other. If this moment felt wrong, nothing else in the app would matter.
The compose screen was stripped of everything that might create pressure. No character count, no formatting options, no suggested topics. The interface had to disappear so the user could think. Any feature that made the screen feel like a publishing tool was a mistake. This was not broadcasting. It was release.
The light animation that followed was not cosmetic. It was the thesis made visible. The mirroring concept behind it was: whatever someone carries into the moment of sharing, the act of sharing converts it into something that contributes brightness to a shared world. The animation was the product's clearest statement of what it believed about people and what they give each other.
A community that only takes from its members eventually exhausts them. A community that converts contribution into something collectively beautiful gives people a reason to keep giving. The light was that reason, made tangible on the screen.
Intentional connection
The decision to require physical proximity for reading someone else's thought was one of the most deliberate constraints in the project. It was also the most likely to look wrong before you understood why it was there.
Passive scrolling through other people's pain is a well-documented harm. Timeline-based mental health content creates exposure without context, engagement without consent, and a relationship with other people's suffering that is consumption rather than care. Requiring movement to reach someone's thought prevented that dynamic entirely. Every interaction was preceded by a decision.
Removing text replies was the same logic applied to response. Replies create social pressure. The obligation to respond meaningfully in words is enough to prevent most people from engaging at all. Constraining reactions to a small set of emotional responses specific to the context made engagement lower-cost without making it meaningless. A reaction that communicated "I'm here" was more honest than a thumbs-up, and required less courage than a reply.
The reaction set being constrained was as important as its content. Generic positive signals would have made the app feel like any other social platform. The specific palette communicated that this was a different kind of community, with a different understanding of what support looked like.
When community isn't enough
Community is valuable. It is not a substitute for professional support, and Lighter Thoughts needed to say that clearly through its design rather than a disclaimer.
Placing the support resources section outside the world was that statement. The world was for community. The support section was for when community wasn't sufficient. Keeping them separate was a form of honesty: the app knew what it was and what it wasn't.
The four categories within it (local crisis lines, professional directories, wellness tools, information resources) were organized by urgency and intent, not by content type. Someone in crisis needed to reach a phone number without navigating past articles first. Someone curious needed to be able to explore without pressure. The structure respected those different states without making the user declare which one they were in.
The section was designed to be understated. It did not try to compete with the world aesthetically. Being obvious and accessible was the only job it had.
Rewarding participation without gamifying it
Gamification was the easy answer and the wrong one. Points, leaderboards, and streaks create the right behaviors for the wrong reasons. The goal was a progression system that made belonging feel real without turning the community into a competition.
Goals were defined as community contributions rather than personal activities. You progressed by sharing, reacting, discovering, and connecting. The reward was a new skin for your avatar, visible to the entire community. Not a private achievement. A public expression of how much you had given.
The territory expansion was the same principle at the world level. As the community engaged, the world grew. New areas appeared. The space became richer and more complex. Users who had been present longer inhabited a world that was visibly different from what a new user saw. Belonging had a visual form, and it accumulated over time without any explicit score being displayed.
The progression system was designed to answer a simple question through the product itself: what does it look like when a community is thriving? The answer was a world that kept growing.
Try it. Use the tabs to switch environments.
Impact
Lighter Thoughts was the best project of the year at ESDi Design in 2021. The faculty recognized the coherence between the problem, the aesthetic world, and the design system. The three things pointed in the same direction, which is rarer than it sounds.
The project lived as an Invision prototype. No user testing was conducted. The interaction model was validated by the faculty panel but never by someone trying to use it without knowing how it worked. That gap is the most important one to close next.
Two things would make this substantially stronger. The UX writing: every word in the prototype was a first draft, and the world needs a verbal language as distinct as its visual one. And a coded version, because the movement model, the interaction vocabulary, and the light animation need to be felt, not just seen in a prototype.
Let's build
something together.
Open to freelance projects and full-time opportunities.