Schon — your store without the extra baggage. https://schon.io
Find a file
Alexandr SaVBaD Waltz 556354a44d feat(storefront): overhaul theming system and unify SCSS variables
Revamped the theming system with new SCSS variables for consistent styling across light and dark themes. Replaced static color values with dynamic variables for maintainability and improved theme adaptability. Updated components and layouts to use the new variables.

- Moved theme plugin logic for optimized handling of theme cookies and attributes.
- Enhanced `useThemes` composable for simplified client-side updates and SSR support.
- Replaced redundant SCSS color definitions with centralized variables.
- Improved page structure by introducing `ui-title` for reusable section headers.
- Unified transitions and border-radius for consistent design language.

Breaking Changes:
Theming system restructured—migrate to `$main`, `$primary`, and related variables for SCSS colors. Remove usage of `--color-*` variables in templates and styles.
2026-03-01 20:16:05 +03:00
.idea 2026.1 2026-01-25 23:16:38 +03:00
Dockerfiles feat(storefront): add SCHON_LANGUAGE_CODE support to Docker setup 2026-02-28 19:15:05 +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): overhaul theming system and unify SCSS variables 2026-03-01 20:16:05 +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 feat(storefront): add SCHON_LANGUAGE_CODE support to Docker setup 2026-02-28 19:15:05 +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