Schon — your store without the extra baggage. https://schon.io
Find a file
Egor fureunoir Gorbunov 1c10d5ca53 feat(demo_data): enhance data with images, new categories, and multilingual updates
Expanded demo content with additional images for products and blog posts, improving user experience. Added new categories such as "Jewelry" and "Services," along with their subcategories. Supported richer multilingual descriptions and included new brands, ensuring broader and detailed offerings.
2026-02-21 18:07:07 +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 feat(demo_data): enhance data with images, new categories, and multilingual updates 2026-02-21 18:07:07 +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 feat(emailing): add OpenAPI schemas for unsubscribe and tracking endpoints 2026-02-05 19:30:53 +03:00
README.md 2026.1 2026-01-25 23:18:04 +03:00
uv.lock feat(emailing): add OpenAPI schemas for unsubscribe and tracking endpoints 2026-02-05 19:30:53 +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