L o a d i n g
Back to Portfolio Business & Retail Platform

Woodstop — Furniture Business Platform

A full-stack Django platform for a solid-wood furniture business serving South Indian architects, contractors, homeowners and retailers — public catalog, custom admin CMS, and a token-authenticated customer "quotation" (quote-list) system.

Django 5.2 Django REST Framework PostgreSQL ApexCharts TinyMCE

AJAX

Live Product Filtering

Dual Login

Password or Phone/OTP

In-House

Visitor Analytics

Token Auth

REST API Layer
Walkthrough

Storefront & Admin Dashboard

Key Features

What The Platform Does

AJAX Product Filtering

Category, subcategory, wood-type, search and sort — no page reload.

Dual-Mode Authentication

Password or phone+OTP login, unified behind one login view.

Quotation (Quote-List) System

Authenticated users build a quote-request list via token-secured REST APIs.

Custom Admin CMS

Full CRUD for products/categories/blog with multi-image management.

In-House Visitor Analytics

Device + monthly trend charts built from custom middleware, no external tool.

Segmented Landing Pages

Four audience-specific pages: architects, contractors, homeowners, retailers.

Technology

Stack & Integrations

Frontend
Django Templates Bootstrap 5 Vanilla JS / AJAX AOS
Backend
Python Django 5.2 Django REST Framework
Database
PostgreSQL
Integrations
In-house analytics (no external SaaS)
Architecture

How It's Built

Woodstop is a single-app Django project where every business model — products, categories, wood types, blog, quotations — is exposed two ways: form-based CRUD views for staff, and DRF serializers/APIViews for the customer-facing JS interactions (OTP auth, quotations, product autocomplete). There's no separate SPA build step; the frontend is progressively enhanced server-rendered HTML calling those JSON endpoints via fetch, with the DRF auth token kept in localStorage.

A custom TrackVisitorMiddleware records every non-admin request as a Visit, which the dashboard aggregates with plain Django ORM (annotate, TruncMonth) into device-type and monthly-trend analytics — a deliberate choice to avoid a third-party analytics dependency for a catalog site this size.