Schon — your store without the extra baggage. https://schon.io
  • Python 86%
  • HTML 8.5%
  • Shell 2.5%
  • PowerShell 2.3%
  • Dockerfile 0.4%
  • Other 0.3%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Egor Gorbunov ec087f2c25 fix(payments): improve error handling in callback view
Add conditional detail in error response based on `settings.DEBUG`.
This avoids exposing sensitive stack traces in production while
allowing for debugging in development.
2026-09-08 23:09:45 +03:00
.idea 2026.1 2026-01-25 23:16:38 +03:00
Dockerfiles fix(filters): correct attribute expression parsing and permission check 2026-08-07 15:31:07 +10:00
engine fix(payments): improve error handling in callback view 2026-09-08 23:09:45 +03:00
monitoring feat(monitoring): automate Prometheus web config generation 2026-02-22 00:17:55 +03:00
schon feat(crm): add support for company and contact creation in AmoCRM 2026-08-21 19:43:11 +10:00
scripts fix(hooks): update pre-commit to use ruff directly 2026-08-17 17:53:13 +10:00
storefront Features: 1) Add .gitkeep file under storefront directory; 2025-06-27 04:28:58 +03:00
systemd feat(worker): add stock updater-specific worker configuration 2026-04-11 23:22:09 +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 feat(env): refactor env var handling with type-safe helpers and group sorting 2026-07-14 00:09:50 +03:00
CHANGELOG.md release: 2026.2 2026-03-30 00:58:37 +03:00
CODEOWNERS 2026.1 2026-01-25 23:16:38 +03:00
docker-compose.override.yml fix(schon): Remove docker IP binding 2026-07-28 14:44:15 +03:00
docker-compose.yml feat(elasticsearch): enhance search index reconciliation task 2026-08-17 01:35:09 +10:00
health_shooter.py feat(messaging): add thread auto-join on WebSocket connect and messaging health check 2026-05-27 18:07:07 +03:00
LICENSE 2026.1 2026-01-25 23:16:38 +03:00
Makefile feat(consumer): add websocket notifications for new orders 2026-08-14 23:31:08 +10: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 fix(core): update email backend type in connection helper 2026-08-17 17:49:09 +10:00
README.md feat(make): add drop-email-settings command and make target 2026-08-12 02:14:58 +10:00
uv.lock fix(core): update email backend type in connection helper 2026-08-17 17:49:09 +10: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
make drop-email-settings # Clear email settings in .env and constance

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