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 singleDocumentation 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.
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 toes-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 port3000. 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.
Database — MongoDB 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.