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. |
||
|---|---|---|
| .idea | ||
| Dockerfiles | ||
| engine | ||
| monitoring | ||
| schon | ||
| scripts | ||
| storefront | ||
| systemd | ||
| .dockerignore | ||
| .gitattributes | ||
| .gitignore | ||
| CHANGELOG.md | ||
| CODEOWNERS | ||
| docker-compose.yml | ||
| LICENSE | ||
| Makefile | ||
| manage.py | ||
| nginx.example.conf | ||
| pyproject.toml | ||
| README.md | ||
| uv.lock | ||
Schon
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
Docker (Recommended for Development)
# 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
-
Copy the example config:
sudo cp nginx.example.conf /etc/nginx/sites-available/schon -
Update domain names and paths in the config
-
Enable the site:
sudo ln -s /etc/nginx/sites-available/schon /etc/nginx/sites-enabled/ -
Obtain SSL certificates:
sudo certbot --nginx -d api.yourdomain.com -d yourdomain.com -d www.yourdomain.com -
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
- Email: contact@fureunoir.com
- Telegram: @fureunoir
Built with care by the Wiseless Team