This project is password protected

Designing Nearville’s Design System: Introducing Structure to Support Sustainable Product Growth

Creating shared foundations to help a growing marketplace scale with clarity and confidence

Design Systems Lead

5 months

Marketplace

P2P

Mobile

0→1

Overview

Overview

Overview

Nearville is a peer-to-peer rental marketplace navigating a 0→1 growth phase.

As Nearville grew, product velocity increased — but so did inconsistency, duplicated effort, and decision friction across teams. What initially helped the team move fast began to slow progress.

I led the design of Nearville’s design system to introduce shared foundations, clarify patterns, and support better decision-making as the product scaled. The goal was not visual consistency alone, but a system that balanced flexibility with structure — helping the team move faster with confidence, not just speed.

Role & Scope

As a Design Systems Lead, I:

  • Built and scaled a 0→1 design system with 800+ components and variants

  • Established documentation and governance

  • Audited and systematized fragmented UX gaps

Timeline

  • Discovery & foundations (3 mo.)

  • Early iterations (3 mo.)

  • Adoption & iteration (2 mo.)

Team

  • 1 Design Systems Lead (Me)

  • 2 Product Designers

  • 3 Engineers

The Problem

As Nearville grew beyond its MVP, design decisions started to fragment across the product.

New features were built quickly, but patterns diverged, work was duplicated, and design reviews became more subjective. Over time, this made it harder for the team to move forward with confidence and increased complexity for both users and builders.

The Solution

I introduced a design system to give the team shared foundations without slowing development.

The system clarified core patterns, reduced repeated work, and helped designers and engineers make more consistent decisions as the product evolved. It was designed to remain flexible early on and strengthen over time as adoption grew.

Impact

↓ 40%

Design duplication

↑ 60%

Designer efficiency

50%+

Product adoption in 1st mo.

Context

Context

Context

3 designers were shipping in parallel for 6 months in a growing 0→1 product.

Nearville operated in an early-stage environment with an evolving roadmap, where design decisions needed to support rapid iteration without fragmenting the user experience.

Alongside owning the design system, I also contributed as a product designer across core flows. This meant the system needed to be pragmatic, immediately usable, and able to evolve alongside active product work.

Key constraints shaped the approach:

Early-stage

Parallel Design Work

High shipping velocity

Future scalability

Given these constraints, the system was shaped by a few deliberate tradeoffs:

Foundations over completeness

→ Focus on shared patterns that appeared repeatedly, rather than trying to standardize everything upfront.

Adoption over perfection

→ Prioritize patterns the team was already using or struggling with, so the system could be adopted naturally.

Flexibility over rigidity

→ Leave room for exploration in emerging areas, tightening standards only when they clearly reduced friction.

Rather than aiming for a finished system from day one, the design system evolved in phases — adding structure only when it helped the team make clearer decisions or move forward more confidently.

Process

Process

Process

To bring structure to a growing early-stage product, I broke the work into focused phases. Each phase reduced ambiguity, supported parallel design work, and added structure only when it clearly helped the team move forward.

To bring structure to a rapidly evolving early-stage product, I broke the work into focused phases — each designed to reduce ambiguity, support parallel design work, and enable scalable execution without slowing delivery.

STEP 1

STEP 1

STEP 1

Creating clarity by grounding decisions in real product usage

I reviewed live product flows to identify where patterns diverged and which inconsistencies were worth addressing first.

Example 1-1: Aligning UI Behavior Across the Product

Example 1-1: Aligning UI Behavior Across the Product

Before

Inconsistent card sizing across contexts

Inconsistent card sizing across contexts

After

Standardized card sizing throughout

Standardized card sizing throughout

Example 1-2: Aligning component use to user intent

Example 1-2: Aligning component use to user intent

Before

Use case 1: Info input designed in as a form.

Use case 2: Info input designed in as a card.

After

Define info input = form design

Define info output = card design

STEP 2

STEP 2

STEP 2

Establishing shared foundations to support parallel work

I focused on shared foundations designers relied on, enabling parallel work while allowing patterns to evolve.

STEP 3

STEP 3

STEP 3

Introducing governance to maintain clarity over time

I introduced simple governance and documentation to keep decisions visible and maintain clarity as the system scaled.

Several enablers supported the work throughout the process:

Engineering alignment

System decisions were validated early with engineering to ensure feasibility and reduce downstream rework.

Designer feedback loops

Regular check-ins with designers surfaced friction and informed where the system needed to expand, adjust, or stay flexible.

Real usage as signal

Adoption across live flows guided when to formalize patterns and when to leave them open.

Key Decisions

Key Decisions

Key Decisions

As the system moved from early adoption to sustained use, decisions increasingly required balancing flexibility, accuracy, and long-term maintainability.

I focused on reducing risk and preserving clarity, rather than optimizing for completeness too early.

Calibrating component flexibility based on use-case rigidity

Decision

Not all components carried the same risk. High-impact surfaces required stricter structure, while others benefited from flexibility to support varied contexts.

Trade-off

Reduced freedom in high-risk components to ensure accuracy, while allowing more configurability in low-risk patterns to maintain speed.

Balancing Component Optimization with Usability

Instead of reducing complexity too early, I allowed component variation to emerge across real use cases. This approach helped distinguish meaningful differences from true redundancies, ensuring that system optimization supported usability rather than abstracting away important product behaviors.

EARLY EXPLORATION

EARLY EXPLORATION

EARLY EXPLORATION

450 button variants

Built an intentionally broad set of button variants to support rapid exploration and cover emerging use cases.

POST-STABLIZATION

POST-STABLIZATION

POST-STABLIZATION

180 button variants

Re-audited real usage once patterns stabilized and reduced variants to remove redundancy while preserving valid use cases.

Solution

Solution

Solution

These decisions came together in a design system built for speed, consistency, and trust at scale.

Instead of optimizing for completeness upfront, I focused on building a flexible foundation—semantic tokens, clear patterns, and reusable components—that supported rapid iteration early and scaled as the product matured.

Before/After

Components

Documentation

Before/After

Components

Documentation

Before/After

Components

Documentation

Impact

Impact

Impact

By reducing design debt, the system enabled confident, sustained velocity.

By grounding decisions in real usage and introducing structure only when it added value, the system reduced decision friction, aligned design and engineering, and created a scalable foundation for growth.

↓ 40%

↓ 40%

Design Duplication

↑ 60%

↑ 60%

Designer Efficiency

50% & growing

50% & growing

Product Adoption in 1st mo.

Qualitative feedback reinforced the system’s day-to-day impact

"Having a unified design system has made collaboration smoother and sped up our iteration cycles, helping me deliver designs with clarity and confidence."

Design Lead @ Nearville

"The well-established system has created a fast and efficient environment to work in. Collaborating with Moyai on systematizing design elements also helped me grow as a designer by thinking more systematically."

Product Designer @ Nearville

Through ongoing iteration, the system scaled from an initial foundation to 50+ components and continues to evolve alongside product complexity.

The new system unlocked:

  • Faster shipping through reusable, predictable patterns

  • Consistency across designers, platforms, and flows

  • Reduced engineering rework through shared logic and primitives

  • Safer brand evolution without breaking existing experiences

  • Faster onboarding with clear standards and documentation

More importantly, the system gave the team a shared language for making decisions as complexity increased.

Takeaways

Takeaways

Takeaways

This project reinforced that design systems aren’t about enforcing rules—they’re about creating clarity and trust as teams scale.

Working within early-stage constraints clarified what matters most:

Simplicity scales when it’s intentional

Keeping the system intentionally small made it easier to maintain, adopt, and evolve. Prioritizing clarity over completeness allowed it to scale as product needs matured.

Design for how teams actually work

Studying real usage patterns—what designers reused, where friction emerged, and why components were detached—shaped a system that supported real workflows. Adoption became a byproduct of usefulness, not rollout.

Structure creates alignment; flexibility creates momentum

Clear foundations established a shared rhythm, while intentional flexibility allowed designers to move fast without divergence. The system worked because it guided decisions—not because it restricted them.

What I would do differently …

Next time, I’d align earlier with cross-functional partners on when to introduce each layer of system structure. Calibrating system depth to product and organizational readiness would accelerate adoption and amplify impact.