Project

Spiral Sounds

A full-stack vinyl store originally built during my developer training, later revisited and substantially improved with stronger authentication, inventory-aware business logic, transactional checkout, and persistent order management.

Node.jsExpressJavaScriptSQLiteREST APIsExpress SessionbcryptjsValidator
Spiral Sounds project screenshot
01Overview

What I built

Spiral Sounds is a full-stack e-commerce vinyl store application originally developed as part of my Full Stack Developer learning path. After gaining more experience with backend architecture, database design, authentication, and production practices, I revisited the project to identify limitations in the original implementation and strengthen its reliability. The revised version introduces more robust authentication and session handling, inventory-aware cart and checkout logic, transactional order processing, persistent order history, stronger database integrity, centralized error handling, and improved frontend feedback for loading and failure states.

02Features

What I changed

01

Secure authentication and session handling

02

Inventory-aware shopping cart

03

Transactional checkout

04

Persistent orders and order history

05

Centralized error handling

03Screenshots

See it in action

Spiral Sounds vinyl catalogue
The storefront catalogue provides product browsing, genre filtering, search, pricing, and cart actions.
Spiral Sounds shopping cart
The inventory-aware shopping cart validates quantities against available stock.
Spiral Sounds orders history showing completed purchases, order details, and purchase totals.
Completed purchases are persisted as orders, allowing users to review their previous purchases after checkout.
04Technical

How it was built

Frontend

Vanilla JavaScript storefront with client-side state, API integration, loading states, and user-facing error feedback.

Backend

Node.js and Express REST APIs organized with routes, controllers, middleware, and database access layers.

Database

SQLite using sqlite3 and sqlite with foreign keys, integrity constraints, relational order data, and transactional checkout.

Tools & Other

Express Session, bcryptjs, Validator, dotenv, HTTP-only cookies, authentication middleware, centralized error handling, and environment-aware session configuration.

05Challenges

Challenges & solutions

01

Strengthening inventory consistency by validating available stock when products are added to the cart and again during checkout, preventing purchases from exceeding current inventory.

02

Making checkout atomic by using a database transaction so order creation, order items, inventory updates, and cart cleanup either all succeed or roll back together.

03

Separating completed purchases from the active cart by introducing persistent order and order-item records while preserving the price paid at the time of checkout.

04

Centralizing error handling so expected application errors produce consistent API responses while unexpected server errors are handled without exposing internal implementation details.

05

Improving authentication and session handling through input validation, password hashing, authentication middleware, HTTP-only cookies, and environment-aware session configuration.

06

Revisiting Spiral Sounds gave me the opportunity to apply what I'd learned since the original implementation and turn a functional learning project into a more robust full-stack application.