Interview design challenge · Concept feature

Libby Stats

A take-home design challenge from an interview process: a concept Stats tab for Libby where readers set a reading goal, see what their library saved them, and look back on what they read.

Libby Stats screen in light mode with the reading goal ring and money saved card
Libby Stats screen in dark mode

Interview design challenge · Concept feature

Libby Stats

A take-home design challenge from an interview process: a concept Stats tab for Libby where readers set a reading goal, see what their library saved them, and look back on what they read.

Libby Stats screen in light mode with the reading goal ring and money saved card
Libby Stats screen in dark mode

Interview design challenge · Concept feature

Libby Stats

A take-home design challenge from an interview process: a concept Stats tab for Libby where readers set a reading goal, see what their library saved them, and look back on what they read.

Libby Stats screen in light mode with the reading goal ring and money saved card
Libby Stats screen in dark mode

Project

Take-home design challenge for an interview

Role

Solo designer

Scope

One concept feature, not shipped

Deliverables

Research, wireframes, UI and a clickable prototype

Project

Take-home design challenge for an interview

Role

Solo designer

Scope

One concept feature, not shipped

Deliverables

Research, wireframes, UI and a clickable prototype

Project

Take-home design challenge for an interview

Role

Solo designer

Scope

One concept feature, not shipped

Deliverables

Research, wireframes, UI and a clickable prototype

Overview

Libby is OverDrive’s app for borrowing ebooks and audiobooks from public libraries. My concept adds a Stats tab that shows readers what they have read and listened to, how they are doing against a yearly goal, and how much their library has saved them.

Goals

Develop a fun new feature

Encourage, never scold

Show the library’s value

Match the Libby brand

Pass contrast in both themes

Overview

Libby is OverDrive’s app for borrowing ebooks and audiobooks from public libraries. My concept adds a Stats tab that shows readers what they have read and listened to, how they are doing against a yearly goal, and how much their library has saved them.

Goals

Develop a fun new feature

Encourage, never scold

Show the library’s value

Match the Libby brand

Pass contrast in both themes

Overview

Libby is OverDrive’s app for borrowing ebooks and audiobooks from public libraries. My concept adds a Stats tab that shows readers what they have read and listened to, how they are doing against a yearly goal, and how much their library has saved them.

Goals

Develop a fun new feature

Encourage, never scold

Show the library’s value

Match the Libby brand

Pass contrast in both themes

The prompt

As part of a design test, I was tasked with creating a feature that I’d love to see in an app I regularly use. I am a huge bookworm and an avid user of Libby. I’m also a big stats nerd, so the feature I proposed would be a stats page where a user can set reading goals, see how much using their library card has saved them, and look back on what they’ve read and listened to.

Constraints I set from Libby’s app

  • Libby uses a Material UI component library, so use its components as much as possible

  • Match the existing branding and styling

  • Flag everything that would need to be custom

The prompt

As part of a design test, I was tasked with creating a feature that I’d love to see in an app I regularly use. I am a huge bookworm and an avid user of Libby. I’m also a big stats nerd, so the feature I proposed would be a stats page where a user can set reading goals, see how much using their library card has saved them, and look back on what they’ve read and listened to.

Constraints I set from Libby’s app

  • Libby uses a Material UI component library, so use its components as much as possible

  • Match the existing branding and styling

  • Flag everything that would need to be custom

The prompt

As part of a design test, I was tasked with creating a feature that I’d love to see in an app I regularly use. I am a huge bookworm and an avid user of Libby. I’m also a big stats nerd, so the feature I proposed would be a stats page where a user can set reading goals, see how much using their library card has saved them, and look back on what they’ve read and listened to.

Constraints I set from Libby’s app

  • Libby uses a Material UI component library, so use its components as much as possible

  • Match the existing branding and styling

  • Flag everything that would need to be custom

Research

I scrolled Reddit threads where Libby users talk about features they wish the app had, and looked at reading-tracker apps readers already use for stats. The ask that came up was a running tally of what the library saves you.

Reddit comment: “A tally of how much you’ve saved by using Libby vs buying the book”

A Reddit comment from my research

Stats screens from reading-tracker apps, including StoryGraph, a bookshelf tracker, a statistics screen and a reading dashboard

Reading apps I looked at for how they show stats

Pain points to design around

Too much data is overwhelming

Led to the goal and money saved first, three totals after, and a 2025 / All time toggle instead of a longer page.

Low stats can discourage casual readers

Led to goal copy about what’s left and the pace, such as “8 to go this year,” never a shortfall.

Charts can get in the way of screen readers

Led to labeled bars in place of a pie, and a text equivalent for every custom chart.

Readers may worry about data privacy

Led to a no-data state that says nothing is tracked while reading history is off.

Data points I chose to show

Books read

Pages read

Money saved

Reading time

Genre breakdown

Research

I scrolled Reddit threads where Libby users talk about features they wish the app had, and looked at reading-tracker apps readers already use for stats. The ask that came up was a running tally of what the library saves you.

Reddit comment: “A tally of how much you’ve saved by using Libby vs buying the book”

A Reddit comment from my research

Stats screens from reading-tracker apps, including StoryGraph, a bookshelf tracker, a statistics screen and a reading dashboard

Reading apps I looked at for how they show stats

Pain points to design around

Too much data is overwhelming

Led to the goal and money saved first, three totals after, and a 2025 / All time toggle instead of a longer page.

Low stats can discourage casual readers

Led to goal copy about what’s left and the pace, such as “8 to go this year,” never a shortfall.

Charts can get in the way of screen readers

Led to labeled bars in place of a pie, and a text equivalent for every custom chart.

Readers may worry about data privacy

Led to a no-data state that says nothing is tracked while reading history is off.

Data points I chose to show

Books read

Pages read

Money saved

Reading time

Genre breakdown

Research

I scrolled Reddit threads where Libby users talk about features they wish the app had, and looked at reading-tracker apps readers already use for stats. The ask that came up was a running tally of what the library saves you.

Reddit comment: “A tally of how much you’ve saved by using Libby vs buying the book”

A Reddit comment from my research

Stats screens from reading-tracker apps, including StoryGraph, a bookshelf tracker, a statistics screen and a reading dashboard

Reading apps I looked at for how they show stats

Pain points to design around

Too much data is overwhelming

Led to the goal and money saved first, three totals after, and a 2025 / All time toggle instead of a longer page.

Low stats can discourage casual readers

Led to goal copy about what’s left and the pace, such as “8 to go this year,” never a shortfall.

Charts can get in the way of screen readers

Led to labeled bars in place of a pie, and a text equivalent for every custom chart.

Readers may worry about data privacy

Led to a no-data state that says nothing is tracked while reading history is off.

Data points I chose to show

Books read

Pages read

Money saved

Reading time

Genre breakdown

How I worked

1

Listen to readers

Read Reddit threads and other reading apps to see what people want from reading stats.

2

Pick the data

Listed the data points, user value and business impact, and sketched chart options for each.

3

Wireframe and flag questions

Drew two wireframes and left sticky notes with the questions a developer would need answered.

4

Apply the brand

Moved to Libby’s plum, berry and teal, then checked every color for contrast in light and dark.

5

Design the UI

Built the screens from Figma components, flagging what’s Material and what’s custom.

6

Prototype and annotate

Linked the screens into a clickable prototype and wrote Why and Dev notes for each section.

How I worked

1

Listen to readers

Read Reddit threads and other reading apps to see what people want from reading stats.

2

Pick the data

Listed the data points, user value and business impact, and sketched chart options for each.

3

Wireframe and flag questions

Drew two wireframes and left sticky notes with the questions a developer would need answered.

4

Apply the brand

Moved to Libby’s plum, berry and teal, then checked every color for contrast in light and dark.

5

Design the UI

Built the screens from Figma components, flagging what’s Material and what’s custom.

6

Prototype and annotate

Linked the screens into a clickable prototype and wrote Why and Dev notes for each section.

How I worked

1

Listen to readers

Read Reddit threads and other reading apps to see what people want from reading stats.

2

Pick the data

Listed the data points, user value and business impact, and sketched chart options for each.

3

Wireframe and flag questions

Drew two wireframes and left sticky notes with the questions a developer would need answered.

4

Apply the brand

Moved to Libby’s plum, berry and teal, then checked every color for contrast in light and dark.

5

Design the UI

Built the screens from Figma components, flagging what’s Material and what’s custom.

6

Prototype and annotate

Linked the screens into a clickable prototype and wrote Why and Dev notes for each section.

Exploring the data

Before wireframing, I sketched each data point as a chart in greyscale: reading by type, hours over time, genre, and the reading-goal ring.

Greyscale chart sketches: reading by type, hours over time, genre and the reading-goal ring

Chart explorations

Wireframes and dev questions

I drew two versions of the page. The second moved the reading goal to the top and badges higher up. Next to each section I left sticky notes with the questions a developer would need to answer, plus my recommendation on where the feature should live.

Two greyscale wireframes of the Stats page with sticky notes of developer questions

Wireframe 1 (left) and wireframe 2 (right), with my sticky notes

How the final design handles each question

These are design answers. Each one would still need a developer to confirm it’s possible.

Should genres max out at the top 6?

Top five plus Other, as ranked bars with percentages instead of a pie.

Can the hours scale go past 80?

The axis grows to the next 20 above the reader’s best year, and every bar is labeled.

What are the format bars out of?

Each bar is out of the year’s total books, so no legend is needed.

Can badges be tapped for details?

Yes. A sheet explains how each was earned, and locked ones show progress.

How often does data update?

When a title is finished, with “Updated when you finish a book or title” instead of a timestamp.

Its own tab or inside Profile?

Its own tab, as I recommended, to keep Profile tidy and leave room to grow.

Wireframes and dev questions

I drew two versions of the page. The second moved the reading goal to the top and badges higher up. Next to each section I left sticky notes with the questions a developer would need to answer, plus my recommendation on where the feature should live.

Two greyscale wireframes of the Stats page with sticky notes of developer questions

Wireframe 1 (left) and wireframe 2 (right), with my sticky notes

How the final design handles each question

These are design answers. Each one would still need a developer to confirm it’s possible.

Should genres max out at the top 6?

Top five plus Other, as ranked bars with percentages instead of a pie.

Can the hours scale go past 80?

The axis grows to the next 20 above the reader’s best year, and every bar is labeled.

What are the format bars out of?

Each bar is out of the year’s total books, so no legend is needed.

Can badges be tapped for details?

Yes. A sheet explains how each was earned, and locked ones show progress.

How often does data update?

When a title is finished, with “Updated when you finish a book or title” instead of a timestamp.

Its own tab or inside Profile?

Its own tab, as I recommended, to keep Profile tidy and leave room to grow.

Wireframes and dev questions

I drew two versions of the page. The second moved the reading goal to the top and badges higher up. Next to each section I left sticky notes with the questions a developer would need to answer, plus my recommendation on where the feature should live.

Two greyscale wireframes of the Stats page with sticky notes of developer questions

Wireframe 1 (left) and wireframe 2 (right), with my sticky notes

How the final design handles each question

These are design answers. Each one would still need a developer to confirm it’s possible.

Should genres max out at the top 6?

Top five plus Other, as ranked bars with percentages instead of a pie.

Can the hours scale go past 80?

The axis grows to the next 20 above the reader’s best year, and every bar is labeled.

What are the format bars out of?

Each bar is out of the year’s total books, so no legend is needed.

Can badges be tapped for details?

Yes. A sheet explains how each was earned, and locked ones show progress.

How often does data update?

When a title is finished, with “Updated when you finish a book or title” instead of a timestamp.

Its own tab or inside Profile?

Its own tab, as I recommended, to keep Profile tidy and leave room to grow.

Key decisions

Decision 1

Start with the goal

It’s the one number readers choose, so it leads. The copy says what’s left and the pace, never a shortfall.

Decision 2

Make money saved the hero

It was the clearest ask in my research and the best reason to come back and share.

Decision 3

Bars over the pie

Ranked bars are easier to compare, show percentages, and screen readers read them in order.

Decision 4

Reward, don’t rank

Badges explain how they were earned. Locked ones get a dashed outline, so the state doesn’t rely on color alone.

Key decisions

Decision 1

Start with the goal

It’s the one number readers choose, so it leads. The copy says what’s left and the pace, never a shortfall.

Decision 2

Make money saved the hero

It was the clearest ask in my research and the best reason to come back and share.

Decision 3

Bars over the pie

Ranked bars are easier to compare, show percentages, and screen readers read them in order.

Decision 4

Reward, don’t rank

Badges explain how they were earned. Locked ones get a dashed outline, so the state doesn’t rely on color alone.

Key decisions

Decision 1

Start with the goal

It’s the one number readers choose, so it leads. The copy says what’s left and the pace, never a shortfall.

Decision 2

Make money saved the hero

It was the clearest ask in my research and the best reason to come back and share.

Decision 3

Bars over the pie

Ranked bars are easier to compare, show percentages, and screen readers read them in order.

Decision 4

Reward, don’t rank

Badges explain how they were earned. Locked ones get a dashed outline, so the state doesn’t rely on color alone.

Annotated for design and development

For the final design, each section has two notes. Teal Why notes explain the design choice. Purple Dev notes ask the open question, tag the component as Material or custom, and spell out the interactions.

Stats screen in light and dark mode with seven Why notes on the left and seven Dev notes on the right

The annotated board from the Figma file

Libby’s colors, in two modes

One Figma color collection with Light and Dark modes drives every screen. The light series uses Libby’s plum, berry and teal. Dark mode swaps to lighter tints so each chart color still stands out against the dark cards.

Light mode series

Plum

#651A39

Berry

#A41F4B

Teal

#1F7A76

Gold

#8A5A00

Navy

#3B4A7A

Muted

#6B5D63

Dark mode series

Pink

#F08AA8

Teal

#4BC0BB

Gold

#F2B84B

Blue

#9DB4FF

Lilac

#C79BF2

Gray

#A99BA1

Type

Open Sans Bold

Titles and big numbers, like $348 and 16/24

Karla Regular and Bold

Labels, body text and buttons

Contrast check

Dark mode went from 1.5:1 to 4.7:1 or better

Plum bars were 1.5:1 on dark cards and three badge colors were 2.1 to 2.5:1. Series colors now measure 4.7 to 9.9:1 on cards. In light mode, teal text and the ring are darkened to 5.6:1.

Libby’s colors, in two modes

One Figma color collection with Light and Dark modes drives every screen. The light series uses Libby’s plum, berry and teal. Dark mode swaps to lighter tints so each chart color still stands out against the dark cards.

Light mode series

Plum

#651A39

Berry

#A41F4B

Teal

#1F7A76

Gold

#8A5A00

Navy

#3B4A7A

Muted

#6B5D63

Dark mode series

Pink

#F08AA8

Teal

#4BC0BB

Gold

#F2B84B

Blue

#9DB4FF

Lilac

#C79BF2

Gray

#A99BA1

Type

Open Sans Bold

Titles and big numbers, like $348 and 16/24

Karla Regular and Bold

Labels, body text and buttons

Contrast check

Dark mode went from 1.5:1 to 4.7:1 or better

Plum bars were 1.5:1 on dark cards and three badge colors were 2.1 to 2.5:1. Series colors now measure 4.7 to 9.9:1 on cards. In light mode, teal text and the ring are darkened to 5.6:1.

Libby’s colors, in two modes

One Figma color collection with Light and Dark modes drives every screen. The light series uses Libby’s plum, berry and teal. Dark mode swaps to lighter tints so each chart color still stands out against the dark cards.

Light mode series

Plum

#651A39

Berry

#A41F4B

Teal

#1F7A76

Gold

#8A5A00

Navy

#3B4A7A

Muted

#6B5D63

Dark mode series

Pink

#F08AA8

Teal

#4BC0BB

Gold

#F2B84B

Blue

#9DB4FF

Lilac

#C79BF2

Gray

#A99BA1

Type

Open Sans Bold

Titles and big numbers, like $348 and 16/24

Karla Regular and Bold

Labels, body text and buttons

Contrast check

Dark mode went from 1.5:1 to 4.7:1 or better

Plum bars were 1.5:1 on dark cards and three badge colors were 2.1 to 2.5:1. Series colors now measure 4.7 to 9.9:1 on cards. In light mode, teal text and the ring are darkened to 5.6:1.

Components

Every card on the Stats tab is a Figma component with text properties, so content changes don’t need detaching. Badges and hour bars are variant sets.

Card components: goal ring, money saved, achievements, top genres, hours chart and format

Cards

Material

Reused from Libby’s platform

Segmented button, cards, buttons, bottom sheet and navigation bar. Only the Stats icon in the nav is new.

Custom

Built for this feature

Goal ring, genre bars, hours chart and badge grid. Each needs a text equivalent for screen readers.

Components

Every card on the Stats tab is a Figma component with text properties, so content changes don’t need detaching. Badges and hour bars are variant sets.

Card components: goal ring, money saved, achievements, top genres, hours chart and format

Cards

Material

Reused from Libby’s platform

Segmented button, cards, buttons, bottom sheet and navigation bar. Only the Stats icon in the nav is new.

Custom

Built for this feature

Goal ring, genre bars, hours chart and badge grid. Each needs a text equivalent for screen readers.

Components

Every card on the Stats tab is a Figma component with text properties, so content changes don’t need detaching. Badges and hour bars are variant sets.

Card components: goal ring, money saved, achievements, top genres, hours chart and format

Cards

Material

Reused from Libby’s platform

Segmented button, cards, buttons, bottom sheet and navigation bar. Only the Stats icon in the nav is new.

Custom

Built for this feature

Goal ring, genre bars, hours chart and badge grid. Each needs a text equivalent for screen readers.

Final designs

The Stats tab from top to bottom, in light and dark mode.

Libby Stats on a phone at the top, middle and bottom of the page, in light and dark mode

Top of page, mid scroll and bottom, in each theme

Past the happy path

Loading, offline and first-run screens, including readers who keep reading history off, plus the full Achievements page.

Libby Stats no data yet: reading history is off screen

No data yet: reading history is off

Libby Stats loading screen

Loading

Libby Stats offline, with a retry screen

Offline, with a retry

Libby Stats achievements, after view all screen

Achievements, after View all

Final designs

The Stats tab from top to bottom, in light and dark mode.

Libby Stats on a phone at the top, middle and bottom of the page, in light and dark mode

Top of page, mid scroll and bottom, in each theme

Past the happy path

Loading, offline and first-run screens, including readers who keep reading history off, plus the full Achievements page.

Libby Stats no data yet: reading history is off screen

No data yet: reading history is off

Libby Stats loading screen

Loading

Libby Stats offline, with a retry screen

Offline, with a retry

Libby Stats achievements, after view all screen

Achievements, after View all

Final designs

The Stats tab from top to bottom, in light and dark mode.

Libby Stats on a phone at the top, middle and bottom of the page, in light and dark mode

Top of page, mid scroll and bottom, in each theme

Past the happy path

Loading, offline and first-run screens, including readers who keep reading history off, plus the full Achievements page.

Libby Stats no data yet: reading history is off screen

No data yet: reading history is off

Libby Stats loading screen

Loading

Libby Stats offline, with a retry screen

Offline, with a retry

Libby Stats achievements, after view all screen

Achievements, after View all

Prototype flows

Stats is one screen with many ways in and out. First-run and offline states lead into it, and every card opens a bottom sheet that closes with Close or a tap on the dimmed area. I linked six flows in Figma, covering the stats flow, first run and offline, each in light and dark mode.

Getting to Stats

No data yet

Turn on reading history

Loading

after 1.5 s

Stats, 2025

Offline banner

Retry

Loading

after 1.5 s

Stats, 2025

Year toggle

Stats, 2025

All time

Stats, All time

2025

Stats, 2025

Reading goal

Goal ring

tap

Pace sheet

Edit goal

tap

Goal stepper

Save goal

Toast, 2.5 s

Money saved

Saved card

tap

Savings by format

Achievements

Badge

tap

Earned or locked sheet

View all

push

Achievements

Back

Stats

Top genres

Genre row

tap

Genre sheet

See these books

Tags, filtered

Hours chart

Year bar

tap

Year sheet

Screen

State

Bottom sheet

Toast

Outside the prototype

The year toggle uses Smart Animate so the cards change in place. View all and Back slide sideways, and every sheet fades in over a dimmed screen.

Try the flows in Figma

Prototype flows

Stats is one screen with many ways in and out. First-run and offline states lead into it, and every card opens a bottom sheet that closes with Close or a tap on the dimmed area. I linked six flows in Figma, covering the stats flow, first run and offline, each in light and dark mode.

Getting to Stats

No data yet

Turn on reading history

Loading

after 1.5 s

Stats, 2025

Offline banner

Retry

Loading

after 1.5 s

Stats, 2025

Year toggle

Stats, 2025

All time

Stats, All time

2025

Stats, 2025

Reading goal

Goal ring

tap

Pace sheet

Edit goal

tap

Goal stepper

Save goal

Toast, 2.5 s

Money saved

Saved card

tap

Savings by format

Achievements

Badge

tap

Earned or locked sheet

View all

push

Achievements

Back

Stats

Top genres

Genre row

tap

Genre sheet

See these books

Tags, filtered

Hours chart

Year bar

tap

Year sheet

Screen

State

Bottom sheet

Toast

Outside the prototype

The year toggle uses Smart Animate so the cards change in place. View all and Back slide sideways, and every sheet fades in over a dimmed screen.

Try the flows in Figma

Prototype flows

Stats is one screen with many ways in and out. First-run and offline states lead into it, and every card opens a bottom sheet that closes with Close or a tap on the dimmed area. I linked six flows in Figma, covering the stats flow, first run and offline, each in light and dark mode.

Getting to Stats

No data yet

Turn on reading history

Loading

after 1.5 s

Stats, 2025

Offline banner

Retry

Loading

after 1.5 s

Stats, 2025

Year toggle

Stats, 2025

All time

Stats, All time

2025

Stats, 2025

Reading goal

Goal ring

tap

Pace sheet

Edit goal

tap

Goal stepper

Save goal

Toast, 2.5 s

Money saved

Saved card

tap

Savings by format

Achievements

Badge

tap

Earned or locked sheet

View all

push

Achievements

Back

Stats

Top genres

Genre row

tap

Genre sheet

See these books

Tags, filtered

Hours chart

Year bar

tap

Year sheet

Screen

State

Bottom sheet

Toast

Outside the prototype

The year toggle uses Smart Animate so the cards change in place. View all and Back slide sideways, and every sheet fades in over a dimmed screen.

Try the flows in Figma

Why I showed what I showed

A design challenge is a short window to show how I think. Beyond the screens, I chose to show the parts of the work a team would need before building it: what a developer has to answer, what’s custom, and whether it’s accessible.

Dev considerations

Every section has a Dev note, so the data questions are on the table before anyone builds:

  • What counts as “finished,” and where the goal is stored

  • Where the money saved comes from: list price per format or per library

  • Badge rules, like Night Owl’s hour and time zone

  • A genre source, and a rule so shares total 100

  • Whether physical checkouts can be read at all

  • Whether “All time” exists in stored history

Material vs custom

I set myself the constraint of using Libby’s Material components wherever possible, so I tagged every part:

  • Material: segmented button, cards, buttons, bottom sheet, navigation bar

  • Custom: goal ring, genre bars, hours chart, badge grid

  • Only the Stats icon in the nav is new

That shows how much new work the feature really needs.

Contrast and accessibility

Libby’s plum and berry are dark, so I designed dark mode too and checked it:

  • Plum bars were 1.5:1 on dark cards. Dark-mode chart colors are now 4.7 to 9.9:1

  • Light-mode teal text and ring darkened to 5.6:1

  • Locked badges use a dashed outline, not color alone

  • Labeled bars replace the pie, and each custom chart needs a text equivalent

Edge cases

Loading, offline and first-run screens show I’ve thought past the happy path, including readers who keep reading history off.

A clickable prototype

Linking the sheets, toggle and states lets reviewers feel the interactions instead of reading about them.

Try the prototype

Why I showed what I showed

A design challenge is a short window to show how I think. Beyond the screens, I chose to show the parts of the work a team would need before building it: what a developer has to answer, what’s custom, and whether it’s accessible.

Dev considerations

Every section has a Dev note, so the data questions are on the table before anyone builds:

  • What counts as “finished,” and where the goal is stored

  • Where the money saved comes from: list price per format or per library

  • Badge rules, like Night Owl’s hour and time zone

  • A genre source, and a rule so shares total 100

  • Whether physical checkouts can be read at all

  • Whether “All time” exists in stored history

Material vs custom

I set myself the constraint of using Libby’s Material components wherever possible, so I tagged every part:

  • Material: segmented button, cards, buttons, bottom sheet, navigation bar

  • Custom: goal ring, genre bars, hours chart, badge grid

  • Only the Stats icon in the nav is new

That shows how much new work the feature really needs.

Contrast and accessibility

Libby’s plum and berry are dark, so I designed dark mode too and checked it:

  • Plum bars were 1.5:1 on dark cards. Dark-mode chart colors are now 4.7 to 9.9:1

  • Light-mode teal text and ring darkened to 5.6:1

  • Locked badges use a dashed outline, not color alone

  • Labeled bars replace the pie, and each custom chart needs a text equivalent

Edge cases

Loading, offline and first-run screens show I’ve thought past the happy path, including readers who keep reading history off.

A clickable prototype

Linking the sheets, toggle and states lets reviewers feel the interactions instead of reading about them.

Try the prototype

Why I showed what I showed

A design challenge is a short window to show how I think. Beyond the screens, I chose to show the parts of the work a team would need before building it: what a developer has to answer, what’s custom, and whether it’s accessible.

Dev considerations

Every section has a Dev note, so the data questions are on the table before anyone builds:

  • What counts as “finished,” and where the goal is stored

  • Where the money saved comes from: list price per format or per library

  • Badge rules, like Night Owl’s hour and time zone

  • A genre source, and a rule so shares total 100

  • Whether physical checkouts can be read at all

  • Whether “All time” exists in stored history

Material vs custom

I set myself the constraint of using Libby’s Material components wherever possible, so I tagged every part:

  • Material: segmented button, cards, buttons, bottom sheet, navigation bar

  • Custom: goal ring, genre bars, hours chart, badge grid

  • Only the Stats icon in the nav is new

That shows how much new work the feature really needs.

Contrast and accessibility

Libby’s plum and berry are dark, so I designed dark mode too and checked it:

  • Plum bars were 1.5:1 on dark cards. Dark-mode chart colors are now 4.7 to 9.9:1

  • Light-mode teal text and ring darkened to 5.6:1

  • Locked badges use a dashed outline, not color alone

  • Labeled bars replace the pie, and each custom chart needs a text equivalent

Edge cases

Loading, offline and first-run screens show I’ve thought past the happy path, including readers who keep reading history off.

A clickable prototype

Linking the sheets, toggle and states lets reviewers feel the interactions instead of reading about them.

Try the prototype

If this went further

This is a concept. Next, I’d test it with Libby readers, especially casual ones, to check the goal copy feels encouraging, and work through the open data questions with OverDrive’s developers.