by Nishant.
Workspace/Projects/ZenPlay
Built in the open
All projects
FULL-STACK PRODUCT / CASE STUDY

ZenPlay

A quieter home for your YouTube library.

Full-stack development · React + RustImplemented · personal project
RustAxumReactPostgreSQL
WHERE THIS CREATES VALUE

A reference for building authenticated web products where the interface and backend have clear responsibilities.

01 / CONTEXT

The problem

Saved videos are useful only when they are easy to find again. ZenPlay brings a private YouTube collection, playlist organization, favorites, and playback into one focused workspace.

02 / IMPLEMENTATION

The approach

The React application handles navigation and playback. A separate Rust service owns identity, library operations, and persistence. HTTP-only cookies connect the authenticated browser session to the API.

  • Sign up, sign in, and retrieve the current session
  • Save and normalize YouTube URLs with custom titles
  • Group, rename, and move items between playlist labels
  • Browse favorites and play individual items or the current list
03 / ARCHITECTURE

Follow the flow.

Select a stage to explore its role. This diagram explains the documented design; it is not live infrastructure.

ARCHITECTURE EXPLORERDOCUMENTED DESIGN
STEP 1 / 4

React application

The browser renders the library, checks the current session, and sends credentialed HTTP requests.

04 / TRADEOFFS

The decisions behind it.

Keep authentication on the backend

The service issues JWT sessions in an HTTP-only cookie. The frontend consumes session state rather than issuing or validating tokens.

Derive playlists from item labels

A playlist is a grouping of saved items, not a separate table. That keeps the model compact, but empty playlists do not persist.

Separate interface and service deployment

The frontend and API have independent configuration. Frontend origin, CORS, and secure-cookie settings must agree in a hosted environment.

05 / EVIDENCE

What the evidence supports.

The repositories describe frontend build/lint scripts, backend startup migrations, and the authentication/library API. The portfolio does not claim an independent end-to-end security audit or a measured capacity result.

Current boundaries

  • Libraries are private; collaborative or public playlists are outside the documented scope.
  • An empty playlist has no separate database representation.
  • A public frontend URL does not establish the current health of its database or authentication service.
06 / NEXT STEPS

What comes next.

  • Add integration coverage for session expiry and label rename behavior.
  • Measure database query behavior with representative library sizes before making scaling claims.
Read the project documentation
NEXT CASE STUDYPagePilot