Schon — your store without the extra baggage. https://schon.io
Find a file
Egor fureunoir Gorbunov c728204cb1 chore(deps): update dependencies in uv.lock
upgrade versions for `aiogram` (3.24.0 → 3.25.0), `async-lru` (2.1.0 → 2.2.0), `coverage` (7.13.3 → 7.13.4), and `cryptography` (46.0.4 → 46.0.5) to incorporate latest bug fixes and enhancements.
2026-02-21 19:49:47 +03:00
.idea 2026.1 2026-01-25 23:16:38 +03:00
Dockerfiles chore(dependencies): update multidict to 6.7.1 and remove unused celery-prometheus-exporter 2026-01-27 20:53:30 +03:00
engine chore(deps): update dependencies in uv.lock 2026-02-21 19:49:47 +03:00
monitoring 2026.1 2026-01-25 23:16:38 +03:00
schon refactor(configurations): update domain references to wiseless.xyz 2026-02-15 01:39:15 +03:00
scripts refactor(configurations): update domain references to wiseless.xyz 2026-02-15 01:39:15 +03:00
storefront Features: 1) Add .gitkeep file under storefront directory; 2025-06-27 04:28:58 +03:00
systemd 2026.1 2026-01-25 23:18:04 +03:00
.dockerignore Features: 1) Add backup_task to manage database and media backups; 2) Introduce periodic scheduling for backup_task via Celery Beat; 2025-11-13 17:14:00 +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): adjust entries for queries and nginx.conf paths 2026-02-17 01:09:52 +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 chore(dependencies): update multidict to 6.7.1 and remove unused celery-prometheus-exporter 2026-01-27 20:53:30 +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 chore(deps): update dependencies in uv.lock 2026-02-21 19:49:47 +03:00
README.md 2026.1 2026-01-25 23:18:04 +03:00
uv.lock chore(deps): update dependencies in uv.lock 2026-02-21 19:49:47 +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