🥪 Sandwitches
Sandwiches so good, they haunt you!
✨ Overview
Sandwitches is a modern, recipe management platform built with Django. It is made as a hobby project for my girlfriend, who likes to make what I call "fancy" sandwiches (sandwiches that go beyond the Dutch normals), lucky to be me :). Sandwiches so good you will think they are haunted !. See wanted to have a way to advertise and share those sandwiches with the family and so I started coding making it happen, in the hopes of getting more fancy sandwiches.
To view the live website go to sandwitches.vandijke.xyz
🎯 Features
Sandwitches comes packed with comprehensive features for recipe management, community engagement, and ordering:
- 🍞 Recipe Management - Upload and create sandwich recipes with images, ingredients, and instructions
- 👥 Community Page - Discover and browse sandwiches shared by community members
- 🛒 Ordering System - Browse recipes and place orders with cart functionality and order tracking
- ⭐ Ratings & Reviews - Rate recipes on a 0-10 scale with detailed comments
- 🔌 REST API - Full API access for recipes, tags, ratings, orders, and user management
- 📊 Admin Dashboard - Comprehensive admin interface for recipe approval and site management
- 🌍 Multi-language Support - Internationalization for multiple languages
- 📱 Responsive Design - Mobile-friendly interface with BeerCSS framework
- 🔔 Notifications - Email and Gotify push notification integration
- 📈 Order Tracking - Real-time order status tracking with unique tracking tokens
- 📊 Analytics - Umami analytics integration for tracking user behavior
- 🖨️ TRML – Official TRML plugin support.
TRML
If you happen to have a TRML laying arround be sure to check out this recipe which is an official plugin for your TRML.
📥 Getting Started
services:
sandwitches:
image: martynvandijke/sandwitches:latest
container_name: sandwitches
environment:
- ALLOWED_HOSTS=localhost,127.0.0.1,[::1]
- CSRF_TRUSTED_ORIGINS=http://localhost:8000,http://127.0.0.1:8000
- SECRET_KEY=superdupersecretkey
- DATABASE_FILE=/config/db.sqlite3
- MEDIA_ROOT=/config/media
ports:
- 6270:6270
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:6270/api/ping"]
interval: 5s
timeout: 10s
retries: 3
volumes:
- /path/to/sandwitches:/config
restart: always
Environment variables
Below is a list of all supported environment variables.
| Variable | Required | Description |
|---|---|---|
| ALLOWED_HOSTS | Yes | A list of strings representing the host/domain names that this Django site can serve. |
| CSRF_TRUSTED_ORIGINS | Yes | A list of trusted origins for safe cross-site requests (e.g., https://example.com). |
| SECRET_KEY | Yes | A unique, secret value used for cryptographic signing and session security. |
| DATABASE_FILE | Yes | The file path to the SQLite database or the name of the database being used. |
| MEDIA_ROOT | Yes | The absolute filesystem path to the directory that will hold user-uploaded files. |
| SMTP_USE_TLS | No | Boolean (True/False) to enable/disable TLS encryption for outgoing emails. |
| SMTP_HOST | No | The hostname or IP address of the mail server used to send emails. |
| SMTP_PORT | No | The port number to use for the SMTP server (usually 587 for TLS or 465 for SSL). |
| SMTP_FROM_NAME | No | The display name that appears in the "From" field of outgoing emails. |
| SMTP_FROM_EMAIL | No | The actual email address used as the sender for system-generated messages. |
| SMTP_USER | No | The username required to authenticate with the SMTP server. |
| SMTP_PASSWORD | No | The password required to authenticate with the SMTP server. |
| GOTIFY_URL | No | The base URL of your Gotify server instance for push notifications. |
| GOTIFY_TOKEN | No | The application-specific token used to authenticate with Gotify. |
| UMAMI_HOST | No | UMAMI analytics tracking host. |
| UMAMI_WEBSITE_ID | No | UMAMI analytics website id. |
Development setup
Prerequisites
- Python 3.12+
- uv (recommended) or pip
Installation
-
Clone the repository:
git clone https://github.com/martynvdijke/sandwitches.git cd sandwitches
-
Sync dependencies:
uv sync -
Run migrations and collect static files:
uv run src/manage.py migrate uv run src/manage.py collectstatic --noinput
-
Start the development server:
uv run src/manage.py runserver
🧪 Testing & Quality
This project wraps all tests, linting and formatting in invoke tasks so you can run:
- Run tests:
uv run invoke tests - Linting:
uv run invoke linting - Type checking:
uv run invoke typecheck
Made with ❤️ for sandwich enthusiasts.
Release files for sandwitches 2.13.8
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sandwitches-2.13.8.tar.gz | 71.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sandwitches-2.13.8-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 189.9 kB
Release files / sandwitches-2.13.8.tar.gz
| Download URL | sandwitches-2.13.8.tar.gz |
|---|---|
| Size | 71.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
09f801b3a637c88c492203b8dc94076e1e3e7c8f7298a1ae254c7006d4d742a7
|
|
BLAKE2b-256 checksum How to use checksums |
6760592d4cbacfec3f80debc8080f1349eeba0d618b8f7cb2af3b5ba85c64906
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / sandwitches-2.13.8-py3-none-any.whl
| Download URL | sandwitches-2.13.8-py3-none-any.whl |
|---|---|
| Size | 118.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
08e6972b2af67fdb494d6dd51230269b96cac0a9d765c5a40d1ced2ecfcc7222
|
|
BLAKE2b-256 checksum How to use checksums |
b2d724d23a3407ca5dcedec8b8964f7a36f105b642e72f48bb94d17a3861e8da
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|