Spindle: a vinyl collection app

Spindle is a vibe-coded app for tracking and enjoying a vinyl collection a straightforward way to search, check, and spend time with the records I own (and the ones I want). Its powered by the Discogs API, giving access to millions of artists and releases.

When

Feb 2026

When

Feb 2026

When

Feb 2026

Timeframe

1 week

Timeframe

1 week

Timeframe

1 week

Tools

Figma, Loveable, Cursor and Supabase

Tools

Figma, Loveable, Cursor and Supabase

Tools

Figma, Loveable, Cursor and Supabase

Screenshot of user dashboard of spindle app
Screenshot of user dashboard of spindle app
Screenshot of user dashboard of spindle app

Tech stack

Tech stack

Tech stack

I experimented with a number of tools to put this app together

Loveable

Used for rapid prototyping of the essential user flows, so I could quickly shape how the app should work before committing to a full build.

Cursor (+Claude Sonnet 4.5)

Once basic user flows were working, I brought it into Cursor to start injecting real data via the API, as well as user authentication.

Figma (+Gemini Pro 3.5)

I used Figma to define the UI look and feel, refining it into a small, tokenised design system that was passed into Cursor via the Figma MCP.

Supabase

Supabase handles authentication and data storage so I can focus on product behaviour rather than infrastructure.

Discogs API

The Discogs API provides the music data that powers the app — artists, releases, and metadata.

Why?

Why?

Why?

This was an exercise to learn how to 'vibe code' a fully functional tool that I 'd actually use.

Spindle started as something I wanted for myself a fast, clean way to check and manage my record collection without clunky spreadsheets.

More importantly, I did this as a way to learn how to 'vibe code' and work handson with modern designtodevelopment tools, using AI to shape ideas, validate feasibility, and accelerate execution.

Screenshot of old spreadsheet used for before building new app.
Screenshot of old spreadsheet used for before building new app.
Screenshot of old spreadsheet used for before building new app.

I used to manage this in a spreadsheet, but thought "I wonder if I could building something more enjoyable to use".

Shaping

Shaping

Shaping

I started by fleshing out the idea into a detailed 'Product Requirements Prompt' (PRP)

I used ChatGPT to structure the idea, turning scattered thoughts into a PRP that defined the boundaries of version one. This clarified the scope, aligned the product to the APIs realities, and prevented unnecessary features from derailing the build.

Screenshot of Google doc showing product requireemnts prompt used to create inital build.
Screenshot of Google doc showing product requireemnts prompt used to create inital build.
Screenshot of Google doc showing product requireemnts prompt used to create inital build.

Key features included:

  • Search extensive music catalogue

    Find almost any artist or release quickly using a large, reliable record database.

  • Search extensive music catalogue

    Find almost any artist or release quickly using a large, reliable record database.

  • Search extensive music catalogue

    Find almost any artist or release quickly using a large, reliable record database.

  • Collections and wishlists

    Keep track of the records I own and the ones I want, in one place.

  • Collections and wishlists

    Keep track of the records I own and the ones I want, in one place.

  • Collections and wishlists

    Keep track of the records I own and the ones I want, in one place.

  • Rich meta information

    See detailed info for each record, especially the album artwork.

  • Rich meta information

    See detailed info for each record, especially the album artwork.

  • Rich meta information

    See detailed info for each record, especially the album artwork.

  • User authentication

    Sign in so my collection is saved and personal, not temporary.

  • User authentication

    Sign in so my collection is saved and personal, not temporary.

  • User authentication

    Sign in so my collection is saved and personal, not temporary.

Building MVP

Building MVP

Building MVP

I built the essentials first; key user flows and technical architecture

Mapping out user flows

I brought the PRP into Lovable to quickly sketch the core user flows – how someone would move through search, results, and collection views – and to rough out early layouts. This allowed me turn my idea into something interactive that I could react to and iterate on.

Screenshot of initial user flow built out in loveable (mobile version).
Screenshot of initial user flow built out in loveable (mobile version).
Screenshot of initial user flow built out in loveable (mobile version).

Injecting real data from Discogs API

Once the flows felt right, I moved the project into Cursor and started treating it like a real product. I got it running properly, hooked it up to real Discogs data, and made sure the foundations were solid before worrying about anything visual.

Screenshot of app working with real data i.e.album artwork in meta info pulling through.
Screenshot of app working with real data i.e.album artwork in meta info pulling through.
Screenshot of app working with real data i.e.album artwork in meta info pulling through.

Adding authentication and database

I used Supabase to handle authentication and data storage, letting users sign in and automatically save their collection, wishlist, and preferences without building that infrastructure from scratch.

Screenshot of user sign in modal.
Screenshot of user sign in modal.
Screenshot of user sign in modal.

Polishing the front end

Polishing the front end

Polishing the front end

Once the back-end worked, I shifted to design mode

Speeding up ideation with Figma Make + Gemini Pro 3.5

I gathered visual references to set the tone, then fed these to Figma Make (with Gemini Pro 3.5) to rapidly generate and refine layouts through prompting. Once I had something close, I brought it into Figma to fine-tune the details before bridging the design back into code.

Shot of material collected as an inspo board.
Shot of material collected as an inspo board.
Shot of material collected as an inspo board.

Inspo collected for the UI and visual colour palettes

Finalised designs in Figma, marked as ready for dev.
Finalised designs in Figma, marked as ready for dev.
Finalised designs in Figma, marked as ready for dev.

Final UI direction — rapidly explored in Figma Make to test layout and interaction ideas, then rebuilt properly in Figma with defined tokens, variables, and production-ready specs.

Bridging design and code through Figma MCP to Cursor

My Figma file used components, variables, and tokens for colour, typography, and spacing. Figma Make generated JSON that Cursor could consume, giving it a better chance of recreating the Figma file more accurately.

Diagram explaining how the Figma MCP is used to feed design tokens to cursor, which then outputs a file in the cursor project.
Diagram explaining how the Figma MCP is used to feed design tokens to cursor, which then outputs a file in the cursor project.
Diagram explaining how the Figma MCP is used to feed design tokens to cursor, which then outputs a file in the cursor project.

Adding features

Adding features

Adding features

Once everything was stable, I added features to further improve and smoothen user experience.

Loading screens

Provide clear feedback while data is loading so the app feels responsive, even when pulling large amounts of information.

Loading screens

Provide clear feedback while data is loading so the app feels responsive, even when pulling large amounts of information.

Loading screens

Provide clear feedback while data is loading so the app feels responsive, even when pulling large amounts of information.

Reveal animations

Use subtle transitions to guide attention and make navigation feel smooth rather than abrupt.

Reveal animations

Use subtle transitions to guide attention and make navigation feel smooth rather than abrupt.

Reveal animations

Use subtle transitions to guide attention and make navigation feel smooth rather than abrupt.

Album cover interactivity

Allows the user to move and flip the album to view the back cover, imitating the enjoyment of handling physical records.

Album cover interactivity

Allows the user to move and flip the album to view the back cover, imitating the enjoyment of handling physical records.

Album cover interactivity

Allows the user to move and flip the album to view the back cover, imitating the enjoyment of handling physical records.

Recent search history

Surface recent searches so users can quickly return to artists or records without retyping.

Recent search history

Surface recent searches so users can quickly return to artists or records without retyping.

Recent search history

Surface recent searches so users can quickly return to artists or records without retyping.

Personalised dashboard

Give users a snapshot of their collection and activity, turning the app into a fun place to return to.

Personalised dashboard

Give users a snapshot of their collection and activity, turning the app into a fun place to return to.

Personalised dashboard

Give users a snapshot of their collection and activity, turning the app into a fun place to return to.

Final design

Final design

Final design

A navigation system that balances depth, flexibility, and consistency across the entire USYD website.

Live search designed to handle a large catalogue while staying fast and predictable.
Three-level mobile navigation enables users to move freely across sections before committing to a page.
Three-level mobile navigation enables users to move freely across sections before committing to a page.
Screenshot of a search bar of Spindle
Screenshot of a search bar of Spindle
Screenshot of a search bar of Spindle
Screenshot of the album info that spindle can display
Screenshot of the album info that spindle can display
Screenshot of the album info that spindle can display
Interactive album view with subtle interaction to make browsing feel closer to handling a physical record.
Interactive album view with subtle interaction to make browsing feel closer to handling a physical record.
Interactive album view with subtle interaction to make browsing feel closer to handling a physical record.
Track and filter through own collection, and create a wishlist.
Track and filter through own collection, and create a wishlist.
Track and filter through own collection, and create a wishlist.
Screenshot of Spindle's filter dropdown
Screenshot of Spindle's filter dropdown
Screenshot of Spindle's filter dropdown
Screenshot of personalised dashboard in both desktop and mobile views
Screenshot of personalised dashboard in both desktop and mobile views
Screenshot of personalised dashboard in both desktop and mobile views
Personalised snapshot of the collection, showing that the app remembers the user and gives them a reason to return.
Personalised snapshot of the collection, showing that the app remembers the user and gives them a reason to return.
Personalised snapshot of the collection, showing that the app remembers the user and gives them a reason to return.
Access collection from any device with user sign-in backed by Supabase.
Access collection from any device with user sign-in backed by Supabase.
Access collection from any device with user sign-in backed by Supabase.
Screenshot use sign in modal (lastest iteration)
Screenshot use sign in modal (lastest iteration)
Screenshot use sign in modal (lastest iteration)

More projects