DEV Community

Cover image for How I Built a 1970s Retro Vinyl Store Web App in 1 Single HTML File (No Frameworks, No Build Step)
Mohamed Sadok
Mohamed Sadok

Posted on

How I Built a 1970s Retro Vinyl Store Web App in 1 Single HTML File (No Frameworks, No Build Step)

Every modern e-commerce website seems to look the same.

Clean white backgrounds.
Minimal cards.
Rounded buttons.
The same fonts.
The same SaaS-style layouts.

It works, but sometimes it feels completely soulless.

So I decided to build something different.

I wanted to recreate the feeling of walking into a small record store in the late 1970s — old vinyl sleeves, warm paper textures, bold typography, imperfect print effects, and even the subtle sound of vinyl crackling in the background.

The result is GrooveHaus, a retro vinyl store web app built entirely inside one HTML file.

No framework.
No build process.
No node_modules.
No complicated setup.

Just HTML, CSS, JavaScript, and a lot of experimentation.

🎧 Live Demo & Template

Live Demo:
https://groove-haus.vercel.app/

Template:
https://boukataya.gumroad.com/l/ytowj

The Idea Behind GrooveHaus

The goal wasn't simply to make an "old-looking" website.

I wanted the interface itself to feel like a physical object.

Think:

Vintage record sleeves
Printed paper textures
1970s-inspired typography
Burnt orange, mustard, cream and burgundy colors
Grain and imperfect print effects
Records that physically slide out of their sleeves
Analog vinyl crackle
Simple page transitions
A store experience that feels more like browsing a record shop than using a typical e-commerce dashboard

The interesting part was trying to create those sensations using only browser-native technologies.

The Constraint: One HTML File

I deliberately gave myself a strict constraint:

Everything had to live inside a single .html file.

That means no React.

No Vue.

No build system.

No npm installation.

No bundler.

No component library.

The page contains the markup, styling and JavaScript needed to run the application.

External resources are limited to things like fonts and CDN-hosted libraries.

This sounds restrictive, but it actually made the project more interesting.

Instead of asking:

"Which framework should I use?"

I could focus on:

"How much can I build with the browser itself?"

The Stack

The technology stack is intentionally simple:

HTML5 handles the structure and application views.

Tailwind CSS via CDN provides the utility classes and makes it easy to create the visual system.

Vanilla JavaScript handles routing, application state, rendering, filtering and interactions.

Web Audio API generates the vinyl crackle effect directly in the browser.

Google Fonts and Font Awesome provide typography and icons.

There is no backend because the goal was to create a self-contained frontend template.

  1. Making the Browser Sound Like Vinyl

One of my favorite parts of the project is the analog noise effect.

Instead of shipping an audio file containing vinyl crackle, GrooveHaus generates the sound dynamically using the Web Audio API.

The browser creates an audio buffer containing low-level random noise combined with occasional louder pops.

The result is a subtle background texture that resembles an old record playing.

The important part is keeping it subtle.

The effect isn't supposed to become annoying background music. It's more like an atmospheric layer that you notice when you stop and listen.

Users can also turn the effect on or off.

This was a good reminder that the Web Audio API can do much more than simply play MP3 files.

  1. A Tiny SPA Without a Framework

The application behaves like a small single-page application.

There are different views for things like:

Storefront
Catalog
Product details
Artists
Journal
Cart
Settings

Instead of installing a routing library, I used the browser's native URL hash.

For example, different hash routes determine which application view should be displayed.

When the URL changes, JavaScript hides the previous view, displays the appropriate one and renders the required content.

It's obviously not a replacement for a full routing solution in a large production application.

But for a self-contained template?

It works surprisingly well.

And there is something satisfying about realizing that you don't always need another dependency to solve a relatively small problem.

  1. Making Vinyl Records Feel Physical

One of the visual details I wanted was the feeling of pulling a record out of its sleeve.

When hovering over a product card, the vinyl disc slides out from behind the album artwork while rotating.

It's a small interaction, but it changes how the product card feels.

Instead of:

Image → title → price → button

you get something closer to interacting with a physical record.

The effect is entirely CSS-based, using transforms and transitions.

No animation library required.

This is one of those cases where a few lines of CSS can create much more personality than another UI component ever could.

  1. Recreating Printed Paper

Modern websites are usually extremely clean.

GrooveHaus deliberately isn't.

The background uses warm paper tones combined with subtle radial patterns to imitate the texture of printed material.

The color palette is built around:

Cream
Aged paper
Dark brown
Burnt orange
Mustard
Burgundy

Typography also plays a major role.

Instead of using one generic UI font everywhere, the design combines display and serif typefaces to create something closer to vintage posters, record sleeves and printed magazines.

The goal isn't perfect realism.

It's controlled imperfection.

Why I Didn't Use React

This project probably could have been built faster with React.

But that wasn't the point.

Sometimes constraints are useful.

Removing the framework forced me to think about what the browser already provides:

DOM APIs
URL hashes
CSS transitions
Web Audio
browser storage
native events
modern JavaScript

It also makes the final result extremely portable.

There is something nice about downloading one HTML file and knowing that most of the application is sitting right there.

Where Single-File Apps Actually Make Sense

I'm not suggesting everyone should abandon frameworks.

For a large SaaS platform, complex dashboard or production application with dozens of developers, a single HTML file would quickly become painful.

But there are some cases where this architecture makes a lot of sense.

For example:

Templates

A customer can download one file and immediately start customizing it.

Prototypes

You can experiment with an idea without spending time setting up infrastructure.

Landing pages

For a relatively simple marketing experience, a build pipeline may be unnecessary.

Digital products

A self-contained template is easy to distribute through marketplaces and digital stores.

Experiments

Sometimes you simply want to see how far native browser APIs can take you.

The Bigger Lesson

The most interesting part of building GrooveHaus wasn't actually the vinyl store.

It was realizing how much you can do before reaching for another dependency.

A browser already gives you a lot:

HTML for structure.

CSS for animation and visual effects.

JavaScript for application logic.

Web Audio for sound.

The URL for simple routing.

And modern browser APIs for everything in between.

Frameworks are incredibly useful.

But they aren't mandatory for every project.

Sometimes putting yourself inside a few artificial constraints leads to more creative solutions.

Final Thoughts

GrooveHaus started as a visual experiment:

"Can I make a website feel like a physical record store?"

It ended up becoming an experiment in something else:

"How much can I build with nothing more than a browser and a single HTML file?"

The answer is: quite a lot.

And honestly, building something that doesn't look like another SaaS dashboard was probably the most refreshing part.

Live Demo:
https://groove-haus.vercel.app/

Template:
https://boukataya.gumroad.com/l/ytowj

What retro web design trend would you bring back?







Top comments (0)