Schon — your store without the extra baggage. https://schon.io
Find a file
Alexandr SaVBaD Waltz c36135d78d feat(storefront): add wishlist and guest cart support with cookie persistence
Enhancements:
- Introduced `wishlist.vue` for displaying and managing the wishlist.
- Added guest cart and wishlist handling via cookies for unauthenticated users.
- Implemented synchronization logic for wishlist and cart (`useOrderSync` and `useWishlistSync`) upon user login.
- Updated `cart.vue` layout with a bulk 'add all to cart' button for wishlist items.
- Enhanced `post.vue` prop handling for improved type safety.

Fixes:
- Fixed breadcrumbs console log removal in `useBreadcrumbs.ts`.
- Corrected and unified translations in `en-gb.json` for cart and wishlist descriptions.
- Fixed stale routes in footer (`terms-and-condition` -> `terms-and-conditions`, etc.).

Extras:
- Refactored composables `useWishlistOverwrite` and `useOrderOverwrite` for cookie-based fallback.
- Applied code styling improvements, organized imports, and optimized API requests in Apollo plugin.
2026-02-28 17:39:17 +03:00
.idea 2026.1 2026-01-25 23:16:38 +03:00
Dockerfiles refactor(docker): rename environment variables for storefront to SCHON 2026-02-27 23:55:09 +03:00
engine Merge branch 'master' into storefront-nuxt 2026-02-28 09:26:38 +03:00
monitoring feat(monitoring): automate Prometheus web config generation 2026-02-22 00:17:55 +03:00
schon feat(markdown): integrate markdown rendering and editor support 2026-02-27 23:36:51 +03:00
scripts feat(monitoring): automate Prometheus web config generation 2026-02-22 00:17:55 +03:00
storefront feat(storefront): add wishlist and guest cart support with cookie persistence 2026-02-28 17:39:17 +03:00
systemd 2026.1 2026-01-25 23:18:04 +03:00
.dockerignore Merge branch 'main' into storefront-nuxt 2025-11-13 18:11:58 +03:00
.gitattributes Features: 1) Enforce LF line endings for .sh files using .gitattributes; 2) Add filtering of attributes and products based on active status in querysets. 2025-10-26 16:56:34 +03:00
.gitignore chore(gitignore): fix ignore paths for production configs 2026-02-27 21:51:51 +03:00
CHANGELOG.md 2026.1 2026-01-25 23:16:38 +03:00
CODEOWNERS 2026.1 2026-01-25 23:16:38 +03:00
docker-compose.yml fix(storefront): update env variables in docker-compose for consistency 2026-02-28 00:05:59 +03:00
LICENSE 2026.1 2026-01-25 23:16:38 +03:00
Makefile chore(makefile): remove unused targets for formatting and type checking, move to pre-commit 2026-02-12 11:55:48 +03:00
manage.py 2026.1 2026-01-25 23:16:38 +03:00
nginx.example.conf refactor(configurations): update domain references to wiseless.xyz 2026-02-15 01:39:15 +03:00
pyproject.toml feat(markdown): integrate markdown rendering and editor support 2026-02-27 23:36:51 +03:00
README.md 2026.1 2026-01-25 23:18:04 +03:00
uv.lock feat(markdown): integrate markdown rendering and editor support 2026-02-27 23:36:51 +03:00

Schon

Python 3.12+ Django 5.2 License Version

Schon Logo

Schon is a production-ready e-commerce backend. Storefront, product catalog, cart, orders, and payments work out of the box. Minimal complexity, maximum flexibility.


What is Schon?

Schon is a complete backend solution for online stores. Whether you're launching a small shop or scaling a marketplace, Schon provides the foundation:

  • Ready to use - Clone, configure, deploy. No assembly required.
  • API-first - REST and GraphQL endpoints for any frontend framework.
  • Multilingual - 28 languages supported out of the box.
  • Extensible - Modular Django apps, easy to customize.

Features

Category Details
Framework Django 5.2, Django REST Framework 3.16, Graphene-Django
Database PostgreSQL with PostGIS, Redis caching, Elasticsearch search
Tasks Celery workers with Redis broker, scheduled tasks with Beat
Auth JWT authentication, rate limiting, custom user model (email-based)
APIs REST + GraphQL, Swagger/ReDoc documentation
i18n 28 languages, model translation support
Deployment Docker Compose or native Linux with systemd

Quick Start

Prerequisites

  • Git
  • Docker and Docker Compose or Linux with Python 3.12+, PostgreSQL, Redis, Elasticsearch
# Clone the repository
git clone https://git.wiseless.xyz/fureunoir/schon
cd schon

# Generate environment file
make generate-env

# Review and adjust .env as needed
nano .env

# Install (pull and build images)
make install

# Start all services
make run

Native Linux (Production)

# Clone to /opt/schon
sudo git clone https://git.wiseless.xyz/fureunoir/schon /opt/schon
cd /opt/schon

# Generate environment file
make generate-env

# Review and adjust .env
sudo nano .env

# Install (creates schon user, syncs dependencies, configures systemd)
sudo make install
# Select option 2: Native Linux

# Start services
sudo systemctl start schon-web schon-worker schon-beat schon-stock-updater

Storefronts

The main branch ships backend-only. For a complete store with frontend:

git checkout storefront-<nuxt|next|sk|qwik>

Configuration

Environment Variables

After running make generate-env, review .env:

Variable Description
DEBUG Set to 0 for production
SECRET_KEY Django secret key (auto-generated)
JWT_SIGNING_KEY JWT token signing key (auto-generated)
POSTGRES_* Database credentials
REDIS_PASSWORD Redis authentication
SCHON_PROJECT_NAME Your store name
SCHON_BASE_DOMAIN Your domain (e.g., example.com)

Nginx

  1. Copy the example config:

    sudo cp nginx.example.conf /etc/nginx/sites-available/schon
    
  2. Update domain names and paths in the config

  3. Enable the site:

    sudo ln -s /etc/nginx/sites-available/schon /etc/nginx/sites-enabled/
    
  4. Obtain SSL certificates:

    sudo certbot --nginx -d api.yourdomain.com -d yourdomain.com -d www.yourdomain.com
    
  5. Reload Nginx:

    sudo systemctl reload nginx
    

DNS Records

Configure these DNS records pointing to your server:

  • yourdomain.com (A record)
  • www.yourdomain.com (A or CNAME)
  • api.yourdomain.com (A or CNAME)
  • prometheus.yourdomain.com (A or CNAME, optional)

API Documentation

Once running, access the API documentation:

Endpoint Description
http://api.localhost:8000/ API root / Admin redirect
http://api.localhost:8000/docs/swagger/ Swagger UI
http://api.localhost:8000/docs/redoc/ ReDoc
http://api.localhost:8000/graphql/ GraphQL Playground
http://api.localhost:8000/admin/ Django Admin
http://api.localhost:8000/health/ Health check endpoint

Authentication header: X-SCHON-AUTH: Bearer <token>


Development

Commands

make run              # Start services
make restart          # Restart services
make test             # Run tests with coverage
make format           # Format code with Ruff
make check            # Lint code with Ruff
make typecheck        # Type check with ty
make precommit        # Run format, check, typecheck
make make-messages    # Extract translation strings
make compile-messages # Compile translations
make backup           # Create database backup

Running Migrations

# Docker
docker compose exec app uv run python manage.py migrate

# Native
cd /opt/schon && .venv/bin/python manage.py migrate

Creating a Superuser

# Docker
docker compose exec app uv run python manage.py createsuperuser

# Native
cd /opt/schon && .venv/bin/python manage.py createsuperuser

Project Structure

schon/
├── schon/                 # Django project settings
│   ├── settings/          # Split settings (base, drf, celery, etc.)
│   ├── middleware.py      # Custom middleware
│   └── urls.py            # URL routing
├── engine/                # Django apps
│   ├── core/              # Products, orders, categories, vendors
│   ├── payments/          # Transactions, payment gateways
│   ├── vibes_auth/        # Custom User model, JWT auth
│   └── blog/              # Blog posts
├── Dockerfiles/           # Docker configurations
├── systemd/               # Systemd service files
├── scripts/               # Installation and utility scripts
└── nginx.example.conf     # Nginx configuration template

Feedback & Issues

We value your feedback. Please open issues for:

  • Bug reports
  • Feature suggestions
  • Questions about usage

Issue Tracker: Plane

Due to licensing restrictions, we cannot accept pull requests. See the LICENSE file for details.


License

Schon is released under a custom license. Key points:

  • Non-commercial use: Free for personal, academic, and non-commercial purposes
  • Commercial use: Requires written authorization or automatic 8% royalty

See the LICENSE file for complete terms.


Contact

Author: Egor "fureunoir" Gorbunov


Built with care by the Wiseless Team