CHAPTER 03 / 07
6 MIN READ

Mobile App

Two new lending apps, designed in parallel by one team, on one versioned component library with a theme per brand.

CLIENT
Level Up Funding · MaxLend
YEAR
2019–2022
ROLE
Design Lead
DURATION
2019–2022 · several release cycles
TEAM
Designer (me) · 1 PM per app · engineering shared across both
STACK
Adobe XD · Figma
Status · Shipped (Level Up Funding) · Shipped (MaxLend)
INTERACTIVE PROTOTYPEPLAYABLE · LIVE STATE

Use the carousel arrows on Home to step through progress views. Switch to Loan Schedule, Payments, or Menu via the bottom tab bar.

10:36100%
LevelUp
FUNDING
Loading your loan info
Level Up Funding · Mobile App
01CONTEXT
01 / 06

The Situation We Walked Into

Level Up Funding and MaxLend launched as new lending products at the same time, and both needed a first mobile app as part of the launch. Neither had a web app to translate or a legacy mobile surface to improve. Two 0-to-1 builds, in parallel, with one design team.

The products ask different questions. Level Up Funding is small-business origination: the customer is mid-application and wants to know what happens next. MaxLend is an installment-loan account: the customer is in repayment and wants to know where they stand. The brief was to design both without building two design systems, with a shared layer that would let each app move at its own pace after launch.

02CONSTRAINTS
02 / 06

The Box We Had to Work Inside

  1. 01TWO APPS, ONE TEAM

    No additional headcount for the second product. Sharing at the component level was the only way to ship both. Sharing whole screens was ruled out, because each app needed its own story on the home surface.

  2. 02TWO BRANDS

    Level Up Funding is lime on navy. MaxLend is rust and green. The same component had to render in both without a code branch per brand.

  3. 03TWO MENTAL MODELS

    Origination customers look forward: what now? Account holders look back: how am I doing? The home screens had to honor that difference while everything beneath them stayed common.

  4. 04A LIBRARY EACH APP COULD PIN

    When one app needed a component to change, the other could not inherit the change by accident. Per-app versioning was a requirement from the start, not an afterthought.

03DECISIONS
03 / 06

The Calls We Made, with Rationale

  1. 01
    Twelve shared components, versioned

    The library covers the primitives both apps are built from: navigation and header, buttons, status pills, account cards, payment rows, the progress donut, slider, calendar, modal, and the smaller list and toggle pieces. Each component carries a version, and each app pins the version it ships.

  2. 02
    Level Up Funding's home is action-forward

    The home surface leads with the next step: re-borrow, payoff progress, the scheduled payment. History sits behind a secondary tab. Lime callouts mark the actions.

  3. 03
    MaxLend's home is summary-forward

    The home surface leads with the state of the loan: repayment progress, next payment date, total paid. Actions are one tap away and deliberately not first.

  4. 04
    Theme tokens, not branded components

    One status pill renders lime on navy in Level Up Funding and rust on green in MaxLend by reading its colors from the app's theme tokens. There is no Level Up pill and no MaxLend pill. One component, two themes.

  5. 05
    One bottom-navigation shape

    Both apps carry a four-item bottom navigation: Home, Payments, Documents, More. The contents differ; the shape does not. A customer who meets both products learns the layout once.

04PROCESS
04 / 06

Artifacts and the Path

  1. 01MAP THE TWO NARRATIVES

    Before any primitives, wrote down the customer's job on each app: what's next, versus where am I. That asymmetry belongs on the home screen and nowhere else. The shared layer underneath had to be indifferent to it.

  2. 02BUILD THE LIBRARY BEFORE THE SCREENS

    Started with the shared library rather than either app's surfaces. A component is cheaper to iterate than every screen that uses it. Twelve primitives, each specified with states, sizes, and theme bindings.

  3. 03COMPOSE THE APPS FROM IT

    With the library in place, each app's screens became compositions of existing components plus app-specific copy. A new screen was rarely a new component.

  4. 04THEME IT TWICE

    Two token sets, one per app, and a library that reads from them. The same component renders correctly in both palettes with no per-brand fork.

  5. 05SHIP IN WAVES

    Onboarding first, then the dashboards, then payments, then the secondary surfaces, in both apps together. Each wave proved the shared layer before the next one leaned on it.

¶ WALKTHROUGHSTEP 01 OF 04
Level Up Funding home: payoff progress + scheduled payment
Level Up Funding home: payoff progress + scheduled paymentFIG. 01
05OUTCOME
05 / 06

What Shipped and What It Moved.

  1. FIG. 01ONE LIBRARY, TWO APPS
    12

    shared components, documented and versioned, each app pinning its own

  2. FIG. 02APPS SHIPPED
    2

    apps shipped from the same library

  3. FIG. 03SAME TOKENS, TWO VALUES
    2

    themes, one per brand, applied through tokens rather than forks

  4. FIG. 04BOTH APPS
    1

    bottom-navigation shape across both products

Both apps shipped on the shared library, and components added since are versioned the same way. The action-forward and summary-forward split has held: each app leads with the question its customer is asking, and the layer underneath stays common.

The claims in this study are structural. It does not cite usage or support numbers for either app.

06REFLECTION
06 / 06

What I'd Do Again, What I Wouldn't

  1. Versioning was the underestimated work

    The components came together quickly. Documenting versions, agreeing what counts as a breaking change, and making per-app pinning behave took more rounds than any component did. It was worth it. The apps still share one library.

  2. Theme first, then components

    We retrofitted theming halfway through the library, and a few components carried hardcoded colors longer than they should have. Build the token layer before the first component. It is the right discipline for any shared layer.