Crafting a beautiful home for custom Tailwind UI component libraries: Case Study

Let me take you through my process of designing and developing Rinse Docs, a UI component library docs platform.

Jin Su Park
7 min readApr 3, 2024


My background

Hey there, I am an open source loving multi-disciplinary Product Designer, based in Brooklyn, New York. I’ve devoted my professional career to unraveling complex design challenges with meticulous and integrated strategies, ensuring each solution is both beautifully polished and imbued with purpose.

The intention behind this case study is to document and showcase my design journey and thought process for potential clients who may be interested in using Rinse Docs or working with me.

About Rinse Docs

Rinse Docs is a comprehensive component library documentation portal designed to be the “Beautiful home for custom Tailwind UI libraries.” This case study explores the journey of developing Rinse Docs, from identifying the need within our organization to the solution’s impact on our design and development workflow.

Project Background

Understanding the problem

As our organization increasingly adopted Tailwind CSS for rapid prototyping and development, we encountered a significant challenge: maintaining, documenting, and iterating on our custom components across multiple projects and teams. The lack of a centralized system led to outdated components, design inconsistencies, and inefficiencies that hindered our ability to prototype rapidly and maintain design coherence.

  • Component Iterations in Silos: Without a central repository, component updates were made in isolation, leading to discrepancies between project iterations and a lack of visibility across teams.
  • Inaccessible Documentation: The documentation of our design system and components was scattered or non-existent, making it difficult for new team members to get up to speed and for existing members to reference and utilize established components effectively.
  • Design Inconsistencies: The absence of a unified source of truth for our components allowed design inconsistencies to creep into our prototypes, affecting the overall user experience and brand coherence.

Discovery & Research

Identifying needs across teams

Our discovery and research phase involved engaging with cross-department stakeholders to precisely identify their needs and examining existing solutions to find gaps that Rinse Docs could fill.

In the pursuit of centralizing design truth, we also discovered the need for non-product related teams to also document and have access to product related assets and libraries. We saw an opportunity to design Rinse Docs to be a flexible tool that could also support our non-engineering brand and marketing teams.

  • Engaged with design and development teams to understand their specific challenges and requirements.
  • Reviewed available tools to identify shortcomings and opportunities for a Tailwind CSS-focused solution.
  • Emphasized collaborative input in shaping the concept and features of Rinse Docs, ensuring other non-product engineering needs were met.

Finding the right balance

We explored and piloted existing solutions in the market such as Storybook and Zeroheight, however, when testing our use case, we soon realized these solutions were positioned too deep in code or not enough to provide the right benefits. We discovered the following gaps:

  1. Required deep understanding of the core component codebase.
  2. Did not support markdown for documentation.
  3. Was designed to be language or framework specific.
  4. Leaned to heavily on the brand and marketing side or not enough.
  5. Was poorly maintained and did not reflect our design values.
  6. Over complex for our needs.

Design & Development

Defining the core elements

We began our design journey by identifying the key features and components we needed to support. Taking inspiration from existing solutions, we were able to design a form factor that could provide the flexibility and composability that we needed.

  • Side Navigation for Easy Access: Introduced a side navigation system to facilitate seamless browsing through different categories of the component library, enhancing the user navigation experience.
  • Expansion to Include Brand Elements: Based on departmental feedback, Rinse Docs evolved to incorporate not just UI components but also brand-related elements like colors and image libraries, broadening its scope as a central creative repository.
  • Adaptive UI for Varied Component Widths: Implemented a toggleable sidebar to accommodate components requiring more screen real estate, allowing certain elements to be displayed at full width by default.

Refining the UI

Once we were satisfied with the core features we wanted to implement, we set out to define the overall color and design scheme. Allowing the components to be the main focus with minimal external UI interference and distraction was an important criteria.

Darkmode support

To ensure our future component design could also support dark mode, we also implemented multiple color schemes and introduced dark mode toggle support so that all dark components could be previewed under the right light setting.

Leveraging Tailwind CSS and Astro

The development of Rinse Docs required a balanced approach to crafting a lightweight, maintainable static site that also catered to the nuanced needs of our design and development teams.

Utilizing Tailwind CSS for styling and Astro for building, we created a platform that was not only easy to customize but also robust in its capability to house a comprehensive library of components. This phase saw the evolution of Rinse Docs into a central hub for all things related to creative and product UI, driven by feedback from various departments within our organization.

  • Integration of Tailwind CSS and Astro: Chose Tailwind CSS for its utility-first approach and Astro for its efficient static site generation, ensuring Rinse Docs was lightweight and easily maintainable.
  • Astro’s MDX Solution for Flexible Documentation: Leveraged Astro’s MDX capabilities to write JSX components, which automatically generated code snippets in both JSX and final HTML output. This feature was specifically requested by developers to provide flexibility in viewing component code options.

The great benefit of choosing Astro as our static site generation framework was that we could test and preview components written in any front-end language. In addition, Astro provided mdx support out of the box meaning our JSX components could be imported alongside our markdown documentation. This was a huge time-saver as it allowed us to work in a mental model that was easy to grasp and many of us were farmiliar with.

title: Dialog
date: 2023-05-12
version: 1.0
author: Jin Su Park,
description: Interactive dialog boxes that present information over an overlay.
draft: false

import RinseUI from '@/components/docs/RinseUI2';

## Basic dialog

The following is an example of a basic dialog.

<RinseUI url="/components/dialog/basic-dialog"></RinseUI>

User Testing

Piloting Rinse Docs within the Product Team

To validate the effectiveness and efficiency of Rinse Docs, we embarked on a user testing phase by introducing it to our product team. The team utilized Rinse Docs to build a prototype for an upcoming feature, serving as a practical test of the platform’s capabilities. This phase was crucial not only for assessing Rinse Docss functionality but also for ensuring it met the needs of those who would be using it most frequently.

  • Initial Integration with the Product Team: Rinse Docs was first introduced to our product team, selected for their extensive experience and familiarity with our existing design and development workflows.
  • Real-World Application: Utilized Rinse Docs in the development of a prototype for a new feature, offering a hands-on opportunity to test the platform’s usability, efficiency, and integration with our processes.
  • Gathering Direct Feedback: Throughout the prototyping process, we collected feedback from the product team on their experiences using Rinse Docs, focusing on aspects such as navigation, component usability, and documentation clarity.
  • Iterative Improvements: Feedback led to immediate iterative adjustments to Rinse Docs, enhancing its features and user interface based on direct user experience and suggestions.

Final Result

Elevating Design and Development with Rinse Docs

The implementation of Rinse Docs within our organization has helped us to elevate both the efficiency and quality of our design and development processes. By centralizing and streamlining the management of our Tailwind CSS components and design assets, Rinse Docs has addressed and resolved the critical challenges we faced in maintaining consistency and agility in our prototyping and feature development efforts.

  • Enhanced Efficiency and Consistency: The ability to quickly access and utilize an up-to-date library of components has significantly reduced the time and effort required in the design and development phases, ensuring a high level of consistency across all projects.
  • Improved Collaboration and Accessibility: Rinse Docs has fostered improved collaboration between design and development teams by providing a shared, easily accessible platform. This shared resource has enhanced understanding and alignment on design specifications, facilitating a smoother transition from design to development.
  • Positive Feedback and Broader Adoption: The initial user testing within the product team not only demonstrated Rinse Docs’s effectiveness but also garnered overwhelmingly positive feedback. This success led to the broader adoption of Rinse Docs as an integral part of our feature development process, with plans to further expand its use across additional teams and projects.



Jin Su Park

Founding Product Designer at Castle, Director of Lumebrite