Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/ALEJ4NDRO2025/urban-store/llms.txt

Use this file to discover all available pages before exploring further.

Urban Store is a fully self-hosted, full-stack e-commerce platform built for urban fashion brands that want complete ownership of their storefront and data. It pairs a Next.js 16 App Router frontend with a Django 6 + Django REST Framework backend, persists all domain data in MongoDB Atlas via MongoEngine, and handles payments through Stripe. Whether you are launching a streetwear label, a sneaker boutique, or any urban lifestyle brand, Urban Store ships with everything you need — product catalog, cart, checkout, order management, user authentication, analytics, and an admin dashboard — ready to run with a single docker-compose up --build.

What Makes Urban Store Unique

Most open-source storefronts force you to choose between a polished frontend with a locked-in SaaS backend or a flexible backend with a generic UI. Urban Store brings both together in one repository, with no vendor lock-in and no per-transaction platform fees beyond Stripe’s own rates. It is self-hosted by design: all services run in Docker containers that you control, and your customer data never leaves your own infrastructure. The platform was built with the Colombian market as the primary target: the locale is set to es-co, the timezone defaults to America/Bogota, and COP (Colombian Peso) is the assumed currency for pricing and display. These defaults are easy to override for other markets, but they mean the platform works correctly out of the box for Colombian brands and shoppers without any additional configuration. Built-in analytics — powered by a custom analytics Django app — let you track events and review store performance directly from the admin dashboard, powered by Recharts on the frontend. There is no need to integrate a third-party analytics service to get basic insight into your sales and traffic.

Key Features

Product Catalog

Browse, filter, and search products with image hosting on Cloudinary. Each product supports multiple sizes, colors, and rich media.

Cart & Checkout

Persistent cart state synced between localStorage and the backend. Multi-step checkout with shipping address collection.

Order Management

Full order lifecycle from placement to fulfillment. Stock is decremented on order creation and restored on cancellation.

Payments

Stripe PaymentIntents integration with test and live key support. Confirm payments from the frontend using @stripe/react-stripe-js.

Authentication

Custom JWT authentication built with PyJWT and bcrypt — no third-party auth service required. Email verification via Gmail SMTP with a 6-digit code.

Analytics

Event-based analytics tracked server-side and visualised with Recharts in the admin dashboard. No external analytics vendor needed.

Admin Dashboard

Protected admin panel at /admin for managing products, reviewing orders, and monitoring store analytics — accessible only to users with is_admin: true in their JWT.

Deployment

Three-service Docker Compose setup (frontend, backend, mongo) with persistent volume for MongoDB data. Ready to extend with a reverse proxy for production.

How It Works

Urban Store is split into three layers that communicate over a local Docker network. Frontend — A Next.js 16 App Router application served on port 3000. Pages are organised under the app/ directory and cover the full shopping journey: home, catalog, cart (carrito), checkout, payment, order confirmation, profile (perfil), admin, and all authentication flows (login, register, verify-email, forgot-password, reset-password). Client-side state for the cart is managed with Zustand, animations are handled by GSAP and Three.js, and charts in the admin dashboard use Recharts. A Next.js middleware module enforces route-level access control on every page request before it reaches a React component. Backend — A Django 6 + DRF API served on port 8000. Eight project-specific Django apps are registered in INSTALLED_APPS: six (users, products, orders, cart, payments, analytics) expose URL prefixes under /api/, while two additional stubs (chatbot, recomendaciones) are declared but not yet wired up. Authentication is handled manually using PyJWT and bcrypt — DRF’s built-in session and token authentication classes are disabled on all views so that the custom JWT logic is the single source of truth. CORS is configured to accept requests from http://localhost:3000. DatabaseMongoDB Atlas is the primary data store for all domain models (users, products, orders, cart, analytics events), connected via MongoEngine. A SQLite file (db.sqlite3) is present in the repository as Django’s default database configuration, but it is not used for any domain data — all meaningful persistence happens in MongoDB. Product images are stored in Cloudinary, transactional emails are sent via Gmail SMTP, and payments are processed by Stripe.

Colombian Market Defaults

Urban Store ships with LANGUAGE_CODE = 'es-co' and TIME_ZONE = 'America/Bogota' in settings.py. All timestamps stored and displayed by the backend reflect Colombian local time. If you are deploying for a different market, update both values and adjust any currency formatting on the frontend before going live.

Build docs developers (and LLMs) love