Installing your self-hosted eCommerce Builder is simpler than it looks, because you do not have to do any of it yourself. Your AI assistant does the setup with you, one small step at a time.
It may look like a lot, but you only ever do one step at a time, and your AI assistant remembers where you left off.
Every step below explains what is happening in plain words and gives you a message to paste to your assistant. The exact commands are tucked away in a fold-out in case you are curious, and you never need to understand them. Tick a step when it is done and the guide moves you to the next one. Your ticks are saved in this browser, so you can stop at any point and come back later.
This box means your AI assistant can do the step for you or walk you through it. Any AI works: ChatGPT, Claude, Gemini, Codex or another one. Paste the message in the box and it takes it from there.
This box marks the few places that need Claude. Everything else in this guide works with any AI.
Never paste a secret into an AI chat. That means your SECRET_KEY, ENCRYPTION_KEY, Stripe keys (sk_ and whsec_), email password, server password and admin password. The assistant tells you which file each one goes in, and you type it there yourself.
One step at a time. If something fails, paste the error message (with any keys removed) and your assistant works through it with you.
Any of them. An assistant that can open your folder and run commands, such as Claude Code or Codex, saves you copying and pasting. A normal chat window works too, you just paste a little more. Claude Code needs a paid Claude plan (Pro or higher).
Get Djangify installed
Steps 1 to 9. By the end your shop is running on your own computer and live on your own domain. With your hosting ready and an AI helping, this part can take under an hour.
Think about what you need
About 15 minYour download includes a folder called Your Documentation. It holds the full written guides for installing, Stripe, backups, connecting Claude and more, and START-HERE.md sits next to it. This guide follows those files and points you to them as you go, and your assistant can read them too. It is not the same as the docs notes folder you set up in step 3.
Not sure what any of this means? Ask your assistant. It can explain each item, check what is already on your computer, and help you with anything you do not have yet, including choosing a host and setting up a server.
Gather these before you start. Tick the step when you have each one, or know where you will get it.
- An AI assistant: any one of them, as described above.
- Hosting with your custom domain set up. Your own computer to build and test first (recommended), and a hosting account with a Linux server when you go live, with your custom domain pointed at it. If you do not have these yet, your assistant can walk you through choosing a host, creating the server and pointing your domain at it, and step 8 covers it. You sign up and pay, and it handles the rest with you. Ubuntu 22.04 or newer works, with 1 GB of memory at minimum and 2 GB better. Hetzner, DigitalOcean, Linode and Vultr all work. Shared hosting does not.
- A Stripe account. Test mode is enough to start. Live payments need Stripe to verify your business, which can take a few days, so sign up early.
- Email (SMTP) details: host, port, username, password and a from address. Email matters as much as Stripe. The shop sends order confirmations, download access and password resets by email, so customers cannot get what they bought without it. Your assistant can tell you where to find these for your email provider.
- Your shop name and currency. The currency must match your Stripe account's default currency.
Finding your Stripe keys and your email details usually takes the longest, so start on those first. The install itself is quick once they are ready.
Show me how to check my computer myself
Open a terminal (PowerShell on Windows, Terminal on Mac) and run these. You need Python 3.11 or newer. Git is optional but handy. If either command says it is not found, step 5 covers installing it.
python --version
git --versionpython3 --version
git --versionSkill file: your download includes a file called SKILL.md. It is a set of instructions that teaches your assistant how to guide this install. You will meet it in step 2.
Unzip the code and open it in your assistant
About 10 minKeep everything in one permanent place, not your Downloads folder. Make a folder called Djangify inside your Documents folder, then download the code ZIP and unzip it into the Djangify folder. That is a couple of clicks.
An assistant that can open folders can do this for you. Open your Downloads folder in it and paste this message.
The right folder to work in is the one that contains manage.py. I call it djangify-ebuilder here, so use whatever yours is called. If you see a folder inside a folder, go one level deeper.
Show me how to do it by hand, including hidden files
mkdir "$HOME\Documents\Djangify"mkdir -p ~/Documents/DjangifyFiles and folders that start with a dot, such as .env.example and .claude, are hidden by default. To see them:
- Windows 11: in File Explorer choose View, then Show, then Hidden items. Windows 10: View tab, tick Hidden items.
- Mac: in Finder press
Cmd + Shift + .(period) to show or hide them. - Linux: press
Ctrl + Hin your file manager, or runls -ain a terminal.
Open the folder in your assistant
If your assistant can open folders (Claude Code and Codex can), open the code folder, the one with manage.py, as your project. It can then read everything and does not need uploads. A normal chat window cannot open a folder, so there you upload a few files in the next step instead.
Claude Code loads the SKILL.md instructions by itself when you open this folder. With any other AI, ask it to read .claude/skills/djangify-deploy/SKILL.md first, or upload that file. It works the same either way.
Let your assistant set up your folders and guide you
About 10 minYour assistant makes the folders and copies the guide files for you, then guides you through the rest of the install. Paste this as your first message. Everything after this step starts from here.
It may ask permission to create a folder outside the project. Say yes. The notes folder sits next to your code folder on purpose, so anything you keep in it stays out of the shop's own files.
OPERATIONS.md is your assistant's memory for this project. From now on, whenever you tell it something about your computer, your business, your domain, your hosting or where your files are, it saves that in the file. You never have to start again. In any new chat, with any AI, just say: Read OPERATIONS.md in my docs folder for context. It never holds passwords or keys, so it is safe to share with your assistant.
When it is done you should have this:
Using a chat window, or want to do it yourself?
A chat window cannot create folders, so make the notes folder yourself:
mkdir "$HOME\Documents\Djangify\docs"mkdir -p ~/Documents/Djangify/docsCopy SKILL.md, DEPLOY_WITH_AI.md, STRIPE_SETUP.md and BACKUPS.md into it by hand. Then upload README.md, .env.example and SKILL.md to a new chat and paste the message above. A chat window cannot save files, so when it gives you the text for OPERATIONS.md, save it in your docs folder yourself. Upload it at the start of each new chat, and paste back the updated text whenever it changes.
Skill file: the assistant copies SKILL.md into your docs folder so you always have it to hand. In a chat window the instructions only last for that chat, so upload SKILL.md again whenever you start a new one.
Find your Stripe and email details
About 20 minThese two take the longest, because you collect details from other websites, so it helps to do them early. Your shop needs both. Stripe takes the payments, and email sends order confirmations, download access and password resets. Without email, customers cannot get what they bought.
Your assistant can talk you through the Stripe dashboard screen by screen, and tell you where to find the email details for your own email provider. You copy the keys and the password yourself, so they never pass through a chat.
Your Stripe test keys
- Sign in at dashboard.stripe.com and switch to Test mode. Stripe may call this a sandbox.
- Open Developers, then API keys.
- Copy the Publishable key. It starts with
pk_test_. - Click to reveal the Secret key and copy it. It starts with
sk_test_.
Your email (SMTP) details
You need five things from your email provider: the host (for example smtp.gmail.com), the port (usually 587), your username (normally your full email address), your password, and the address you want order emails to come from. Gmail needs an App Password rather than your normal password. Every provider is a little different, so ask your assistant about yours, or see the email setup page for Gmail, Microsoft 365, SendGrid, Mailgun, Namecheap and GoDaddy.
Save everything in a plain text file called my-keys.txt inside your docs folder. Make this file yourself rather than asking your assistant to, so the keys and password never pass through a chat. It should look like this:
STRIPE_PUBLIC_KEY=pk_test_paste_yours_here
STRIPE_SECRET_KEY=sk_test_paste_yours_here
EMAIL_HOST=smtp.example.com
EMAIL_PORT=587
EMAIL_HOST_USER=you@example.com
EMAIL_HOST_PASSWORD=paste_yours_here
DEFAULT_FROM_EMAIL=noreply@yourdomain.comNever paste the sk_ key or your email password into a chat with an AI assistant, and keep my-keys.txt out of the code folder. If you paste a Stripe key by accident, go to Developers, API keys in Stripe and roll that key to replace it.
Also look at your Stripe account's default currency. You will match it to your shop in step 11.
Skill file: the instructions in SKILL.md follow the same rule. They tell the assistant to leave key and password values as placeholders and never print them, so a good assistant never asks for yours.
Get Python and git ready
About 15 minPython is the language the shop is written in, and your computer needs it installed to run the shop. You need version 3.11 or newer. Git is a tool for tracking changes to code. It is optional here, because your download is a ZIP.
Your assistant can check whether you already have both and tell you exactly how to install anything that is missing, for your type of computer.
Show me how to do it myself
Download Python from python.org. In the installer, tick Add python.exe to PATH before you click Install. Download git from git-scm.com and accept the defaults. Open a new PowerShell window afterwards.
Mac: install Python from python.org, or with Homebrew. Git comes with the Xcode command line tools: running git --version offers to install them.
Ubuntu or other Linux:
sudo apt update
sudo apt install -y python3 python3-venv python3-pip python3-dev build-essential gitThen check both are in place. Python should report 3.11 or higher.
python --version
git --versionpython3 --version
git --versionSkill file: if something will not install, tell your assistant your computer type and paste the exact error. The instructions in SKILL.md make it check what is really on your computer before moving on.
Install the code
About 10 minThis step puts the shop's parts in place. It sounds bigger than it is. Your assistant makes a private box for the shop's parts (called a virtual environment, so nothing clashes with other software on your computer), downloads the parts the shop needs, and makes your settings file from the template.
Your assistant can do all of this. You do not need to know what a virtual environment is. Paste this and let it run.
Show me the commands
Run these from inside the code folder, the one with manage.py.
cd "$HOME\Documents\Djangify\djangify-ebuilder"
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
copy .env.example .envcd ~/Documents/Djangify/djangify-ebuilder
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .envAfter the activate line you should see (venv) at the start of your prompt. The install takes a few minutes. On Windows, if PowerShell refuses to run the activate script, use Command Prompt and run venv\Scripts\activate.bat instead. Each time you open a new terminal to work on the shop, activate the virtual environment again first. The commands in later steps use plain python, meaning the one inside it.
If the install fails with a build error (usually Pillow), on Ubuntu run sudo apt install python3-dev build-essential. On Mac install the Xcode command line tools. On Windows install the latest Microsoft Visual C++ Redistributable.
Skill file: SKILL.md follows the same path as these commands: virtual environment, then the requirements file, then .env. If an install step fails, paste the last 15 lines of the error to your assistant.
Fill in your settings file
About 15 minThe .env file is a list of settings for your shop: your web address, your payment keys, your email details and two secret keys. Your assistant fills in everything that is not a secret. The only things you type yourself are the secret values, and the assistant tells you exactly where each one goes.
Your assistant can fill in every setting for you except the secrets, tell you how to generate your two keys, and then check the whole file for mistakes.
It locks every Stripe, email and AI key you save in the admin. Copy it into a password manager today, and keep a second copy somewhere that is not this computer. Never generate a second one. Use this same key on your computer and your server. If you lose it, the saved keys cannot be read again and you must re-enter them. Read why it matters.
Without working email, customers do not get order confirmations, download access or password resets. Add your email details now, and you check that they work in step 11.
Set the two _COOKIE_SECURE lines to True only once HTTPS is working (step 8). With True on a plain http:// address, you cannot log in.
Show me the settings and the commands
Open the file in a text editor. On Windows, if you save from Notepad's Save As box, set the file type to All files, otherwise Windows saves it as .env.txt and the shop will not see it.
notepad .envnano .envGenerate your two keys
Run these with the virtual environment active. Each prints a value. Copy it straight into .env yourself. Do not paste either one into a chat.
python -c "import secrets; print(secrets.token_urlsafe(50))"
python manage.py generate_encryption_keyThe first is your SECRET_KEY. The second prints your ENCRYPTION_KEY.
On your own computer
DEBUG=True
SECRET_KEY=paste_your_secret_key
ALLOWED_HOSTS=localhost,127.0.0.1
SITE_URL=http://localhost:8000
CSRF_TRUSTED_ORIGINS=http://localhost:8000,http://127.0.0.1:8000
CORS_ALLOWED_ORIGINS=http://localhost:8000,http://127.0.0.1:8000
SESSION_COOKIE_SECURE=False
CSRF_COOKIE_SECURE=False
ADMIN_EMAIL=you@example.com
STRIPE_PUBLIC_KEY=pk_test_paste_yours_here
STRIPE_SECRET_KEY=sk_test_paste_yours_here
STRIPE_WEBHOOK_SECRET=leave_for_step_10
ENCRYPTION_KEY=paste_your_encryption_keyOn your live server
Change these lines when you put the shop on a server. Use your real domain, and include https:// in the origins.
DEBUG=False
ALLOWED_HOSTS=yourdomain.com,www.yourdomain.com
SITE_URL=https://yourdomain.com
CSRF_TRUSTED_ORIGINS=https://yourdomain.com,https://www.yourdomain.com
CORS_ALLOWED_ORIGINS=https://yourdomain.com,https://www.yourdomain.com
SESSION_COOKIE_SECURE=True
CSRF_COOKIE_SECURE=TrueEmail and database
Email: by default the shop prints emails to the terminal, which is fine until you want to test real sending. For real email, add your SMTP details to .env like this, or enter them in Admin, Shop Settings, where they are saved encrypted.
EMAIL_BACKEND=django.core.mail.backends.smtp.EmailBackend
EMAIL_HOST=smtp.example.com
EMAIL_PORT=587
EMAIL_HOST_USER=you@example.com
EMAIL_HOST_PASSWORD=paste_your_email_password
EMAIL_USE_TLS=True
DEFAULT_FROM_EMAIL=noreply@yourdomain.comDatabase: leave DATABASE_URL out. The shop uses SQLite automatically and keeps it at data/db/db.sqlite3. Only add a DATABASE_URL if you want PostgreSQL, and then install its driver first (for example pip install "psycopg[binary]").
Skill file: this is the step where SKILL.md matters most. It makes the assistant read your real .env, leave secrets as placeholders and check every value is set. Tell your assistant to use the djangify-deploy instructions if it does not pick them up.
Set up the database, run the shop, then go live
About 30 min if your hosting is readyThis is the biggest step, and your assistant can do all of it with you. That includes the part many people expect to be hardest. If you do not have a server yet, it can walk you through choosing a host, creating the server, connecting to it, installing the shop, pointing your domain and adding HTTPS. You sign up and pay for the host, and it handles the rest with you.
A. On your own computer
Your assistant creates the shop's database, makes your admin login, collects the files the site needs and starts the shop so you can see it in your browser.
Use createsuperuser_verified, not the plain createsuperuser. The plain one makes an admin who cannot log in. If that happens, run python manage.py verify_superusers.
Skip setup_demo_site. It switches on demo mode, which turns Stripe payments off. If it was run, python manage.py setup_demo_site --disable undoes it.
Show me the commands for my own computer
With the virtual environment active, run these in order:
python manage.py migrate
python manage.py createsuperuser_verified
python manage.py collectstatic --no-input
python manage.py create_default_settings
python manage.py create_default_policiescreatesuperuser_verifiedasks for your email and a password (8 characters or more) and marks the email as verified so you can log in at once.create_default_settingsfills in starter Site Settings, Dashboard Settings and Shop Settings so the admin forms are not blank.create_default_policiesadds draft cookie, privacy, terms and refund pages for you to edit.- Optional:
python manage.py create_demo_productadds one draft demo product if you have none.
Then start the shop:
python manage.py runserverOpen http://localhost:8000 for the shop and http://localhost:8000/admin/ for the admin. Press Ctrl + C in the terminal to stop it. runserver is for your own computer only, never for a live shop.
Building on your own computer first is the safest route. Set up the shop and add products now, then do part B when you are ready to go live.
B. On your live server
Your assistant checks each stage in turn and tells you the command for each check. You tell it what you see.
Only /media/public/ may be served directly. Never expose /media/secure/, because those are your paid downloads and must only go out through the shop's own secure download page.
Show me what the server setup involves
- Point your domain at the server. At your domain registrar, add an A record for your domain (and one for
www) that points to the server's IP address. It can take from a few minutes to a few hours to spread. - Get the code onto the server. Upload the whole code folder with SFTP (FileZilla, WinSCP) or
scp -r. If you built locally, this brings your database indata/db/and your uploads inmedia/with it. Then repeat steps 6 and 7 on the server, with the server.envvalues and the sameENCRYPTION_KEY. - Test that gunicorn runs. Gunicorn is the production server, and it is already in
requirements.txt.Pressgunicorn ebuilder.wsgi:application --bind 127.0.0.1:8000 --workers 3Ctrl + Cto stop it once it starts without errors. - Keep it running with systemd. Create
/etc/systemd/system/ebuilder.service. Replaceyouruserwith your Linux username and fix the folder path to match yours.[Unit] Description=Djangify eCommerce Builder After=network.target [Service] User=youruser Group=youruser WorkingDirectory=/home/youruser/ebuilder ExecStart=/home/youruser/ebuilder/venv/bin/gunicorn ebuilder.wsgi:application --bind 127.0.0.1:8000 --workers 3 Restart=always [Install] WantedBy=multi-user.targetThe app reads its ownsudo systemctl daemon-reload sudo systemctl enable ebuilder sudo systemctl start ebuilder sudo systemctl status ebuilder.envfrom the project folder, so you do not list settings in the service file. After any.envor code change, runsudo systemctl restart ebuilder. - Add HTTPS with Caddy. Install Caddy from caddyserver.com/docs/install, open ports 80 and 443 on your server's firewall, then put this in
/etc/caddy/Caddyfile. Caddy gets and renews your HTTPS certificate on its own.yourdomain.com { @publicmedia path /media/public/* handle @publicmedia { root * /home/youruser/ebuilder file_server } reverse_proxy localhost:8000 }Nginx works too, and the example is insudo systemctl reload caddy2_install.mdin your documentation folder. - Turn the cookie flags on. Once
https://yourdomain.comloads, make sureDEBUG=Falseand both_COOKIE_SECURElines areTrue, then restart the service.
Skill file: the instructions in SKILL.md follow exactly this path: gunicorn, systemd, then a Caddy or Nginx reverse proxy. In a chat window, upload SKILL.md before pasting the messages above.
Check that everything is up
About 5 minThe shop has a built-in health page at /health/. It answers ok with status 200 when the app is running. You want to see a 200, your home page loading with a padlock, and your admin login working.
Your assistant can run the checks and read the results for you. If one fails, it can read the shop's log and tell you what went wrong.
Show me the checks
curl -s -o /dev/null -w "%{http_code}\n" https://yourdomain.com/health/(Invoke-WebRequest https://yourdomain.com/health/).StatusCode- Your home page loads over
https://with a padlock. - You can log in at
/admin/with the account you made in step 8. - On the server,
sudo systemctl status ebuildersaysactive (running), andsudo systemctl is-enabled ebuildersaysenabled, so it comes back after a reboot. - If a check fails, read the live log with
sudo journalctl -u ebuilder -f.
If those checks pass, your eCommerce Builder is running on your own server. Take a minute to browse it as a visitor would. The rest of the steps connect payments and get you ready for real orders.
Skill file: the instructions in SKILL.md tell the assistant to verify before moving on. In a chat window, paste your check results back so it can confirm instead of assuming.
Get Djangify working
Steps 10 to 14. This is the part that makes your shop ready to take orders: payments, email, your first product and your backups. Your Stripe keys and email password are the only sensitive details, and you add those yourself. How your shop looks and what is on its pages comes from the Shop Setup form in your admin.
Open Shop Setup in your admin (in the AI section), fill in your branding, homepage, shop display and pages, and tick the box that says you have finished. Once your shop is connected to Claude in step 13, Claude applies all of it for you. The form leaves out your Stripe and email details and file uploads such as your logo, so you add those yourself.
Add the Stripe webhook
About 10 minA webhook is how Stripe tells your shop that a payment worked, so the order is marked paid and the customer gets their download. Stripe needs a public HTTPS address to reach, so do this on your live server.
Your assistant can talk you through the Stripe screens and tell you which events to pick. You copy the signing secret into your settings file yourself.
- In Stripe (still in Test mode), open Developers, then Webhooks, then Add endpoint.
- Set the URL to:
https://yourdomain.com/shop/webhook/ - Select these three events. The shop's webhook code handles all of them:
payment_intent.succeededcompletes the order and grants access to the download.payment_intent.payment_failedrecords the failed attempt.checkout.session.completedis the safety net for free orders paid with a 100 percent coupon.
- Save the endpoint, open it, and reveal the Signing secret. It starts with
whsec_. - Put it in your
.envyourself, then restart the service:STRIPE_WEBHOOK_SECRET=whsec_paste_yours_heresudo systemctl restart ebuilder
In Stripe, use Send test webhook on the endpoint. A 200 response means it is wired up. A 400 means the signing secret in your .env does not match.
Still building on your own computer?
Install the Stripe CLI and run the command below. It prints a temporary whsec_ value to use in your local .env.
stripe listen --forward-to localhost:8000/shop/webhook/If you save Stripe keys in Admin, Shop Settings, those saved values win over the ones in .env. Keep the two places in agreement.
Skill file: the instructions in SKILL.md list the webhook URL and the first two events. Add the third, checkout.session.completed, as shown above.
Set up your shop, check email and make a test purchase
About 30 minYour assistant can guide you through each admin screen, run the built-in checks for Stripe and email and explain what they say, and watch your test purchase with you.
If you connect your shop to Claude in step 13, Claude can create and edit your products, pages and posts for you directly, so you do not have to fill in the admin forms by hand.
Ask your assistant to run test_email and watch your inbox for the test message. If email does not work, customers cannot get what they bought, so fix it before anything else.
Settings in the admin
- Pages, then Site Settings: business name, site URL, support email, logo, colors and fonts, and the currency code and symbol. The default is GBP, so change it if yours differs. It must match your Stripe account's currency.
- Shop, then Shop Settings: your Stripe keys if you prefer to keep them here rather than in
.env, and your SMTP email details. Both are saved encrypted, which is why yourENCRYPTION_KEYmust be set. - Info Pages: read and edit the draft policy pages from step 8 so they describe your business.
Add a product
Go to Shop, then Products and add a title, description, image, the downloadable file and a price. Set it to published.
Show me the built-in checks and the test card
python manage.py test_stripe
python manage.py test_email --to you@example.comtest_stripe should report a successful connection in TEST mode with charges enabled. test_email connects to your SMTP server and sends a real message to the address you give it. Add --connection-only to test the connection without sending.
Card number 4242 4242 4242 4242
Expiry any future date
CVC any 3 digitsMake a test purchase
On your shop, add the product to the cart and check out with Stripe's test card. Then confirm four things: the order appears in Admin, Orders and is marked paid; the confirmation email arrives; the download works from the customer dashboard; and Stripe shows the webhook as delivered. Finally, select the test order and use Refund selected orders via Stripe to practice a refund.
Skill file: the instructions in SKILL.md cover this same admin setup and tell the assistant to run a full test-mode purchase before anything goes live.
Switch Stripe to live
About 20 minYour assistant can give you a checklist for the switch and check it worked. You copy your live keys into your settings file yourself.
Your Stripe account must be fully verified, and a test purchase must have worked end to end in step 11. The sk_live_ key can move real money, so never paste it into a chat.
- In Stripe, switch from Test mode to Live mode.
- Copy your live keys from Developers, API keys:
pk_live_andsk_live_. - Create a new webhook endpoint in Live mode. Webhooks are separate for each mode. Use the same URL and the same three events as step 10, and copy its new
whsec_secret. - Replace all three values in your server
.env. If you also saved Stripe keys in Admin, Shop Settings, update them there too, because those win over.env.STRIPE_PUBLIC_KEY=pk_live_paste_yours_here STRIPE_SECRET_KEY=sk_live_paste_yours_here STRIPE_WEBHOOK_SECRET=whsec_paste_the_live_one_here - Restart and check:
sudo systemctl restart ebuilder python manage.py test_stripetest_stripeshould now say LIVE. - Confirm
DEBUG=False, both cookie flags areTrue, and your currency still matches Stripe. - Make one small real purchase with your own card, check the order, the confirmation email and the download, then refund it from the admin.
Skill file: the final stage in SKILL.md is exactly this go-live check: live keys, live webhook secret, restart, then a real-mode test.
Connect your shop to Claude Optional
About 30 minYour download includes a connector that lets you manage your shop from Claude: create products and posts, tune SEO, run a site audit. The connector itself works with Claude only. It needs your live server with HTTPS, so skip this step if you are still on your own computer. Tick the box when you finish it or decide to skip it.
Setting it up is the same kind of work as the earlier server steps, so any AI assistant can do it with you. Give it CONNECT_TO_CLAUDE.md from your documentation folder and paste this.
There are three parts: register Claude as an allowed application, run a small second service next to your shop (the sidecar), and add two routes to your Caddy config. Then you add the connector inside Claude.
Show me the commands
1. Create the OAuth client
python manage.py mcp_create_client2. Run the sidecar
Create /etc/systemd/system/ebuilder-mcp.service, changing youruser, the folder path and yourdomain.com:
[Unit]
Description=Djangify eCommerce - MCP sidecar (Claude connector)
After=network.target
[Service]
User=youruser
WorkingDirectory=/home/youruser/ebuilder
Environment=DJANGO_SETTINGS_MODULE=ebuilder.settings
Environment=MCP_OAUTH_ISSUER=https://yourdomain.com
Environment=MCP_RESOURCE_URL=https://yourdomain.com/mcp
Environment=MCP_ALLOWED_HOSTS=yourdomain.com
ExecStart=/home/youruser/ebuilder/venv/bin/uvicorn mcp_server.app:app --host 127.0.0.1 --port 8001
Restart=always
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now ebuilder-mcp.service3. Add two routes to Caddy
Put these inside your existing site block, above the final reverse_proxy localhost:8000 line, then run sudo systemctl reload caddy.
handle /mcp* {
reverse_proxy 127.0.0.1:8001
}
handle /.well-known/oauth-protected-resource* {
reverse_proxy 127.0.0.1:8001
}4. Check it works
curl -s -o /dev/null -w "%{http_code}\n" https://yourdomain.com/.well-known/oauth-protected-resource/mcp
curl -s -o /dev/null -w "%{http_code}\n" -X POST https://yourdomain.com/mcp -H "Content-Type: application/json" -d '{}'You want 200 for the first and 401 for the second.
Add it in Claude
In Claude, go to Settings, Connectors, Add custom connector, and enter https://yourdomain.com/mcp. Leave any Client ID and Secret fields blank. Claude opens a sign-in prompt, and you log in as the shop owner and approve it.
Skill file: the instructions in SKILL.md treat the connector as an optional next step and point to CONNECT_TO_CLAUDE.md. Give that file to your assistant along with SKILL.md before you start.
Back up your shop and learn the update commands
About 15 minYour admin has a one-click backup button, and your assistant can also set up automatic nightly backups and run your updates for you.
Nobody else backs up a self-hosted shop. Make your first backup today, and set a weekly reminder at the minimum.
Back up from the admin
Log in as the owner and open Data, then Backups (or go straight to /admin/downloads/). Click Download full backup (.zip). The zip holds database.json, your whole media/ folder and a short README. Keep it off the server, on your own computer or in cloud storage, and keep the last three or four.
Your .env file and ENCRYPTION_KEY are never inside a backup. Keep a copy of both in a password manager, away from the server. After a restore, the same ENCRYPTION_KEY is what makes your saved Stripe and email keys readable again.
Updates
Updates are included for 12 months from purchase, or until you use your 5-download allowance, whichever comes first. Take a backup, then ask your assistant to replace the application files with the new version, keeping your .env, your data/ folder and your media/ folder, and run the update commands.
Show me the backup and update commands
python manage.py dumpdata > backup.json
tar -czf media-backup.tar.gz media/To restore, unzip the backup and run python manage.py loaddata backup.json, copy the media/ folder back, and restart the service. Restoring replaces your current data, so try it once on a spare copy before you ever need it. For nightly automatic backups, 2_install.md has a ready-made script and cron line.
source venv/bin/activate
pip install -r requirements.txt
python manage.py migrate
python manage.py collectstatic --no-input
sudo systemctl restart ebuilderIf you track the code with git, you can run git pull origin main before the other commands instead of replacing the files.
Skill file: the instructions in SKILL.md end by confirming backups are working. Keep SKILL.md and BACKUPS.md in your docs folder so you can hand them to an assistant for any later maintenance.
What to do if something goes wrong
Almost every problem is fixed the same way: copy the error message, remove any keys from it, and paste it to your assistant. Tell it which step you were on. It reads your shop's log, finds the cause and tells you what to change.
| What you see | What to check |
|---|---|
| You cannot log in to the admin | The admin was made with plain createsuperuser. Run python manage.py verify_superusers. |
| A "CSRF verification failed" error | CSRF_TRUSTED_ORIGINS must include your domain with https://. Restart after changing it. |
| Login does nothing on a plain http address | The _COOKIE_SECURE lines are True before HTTPS is on. Set them to False locally. |
| Saving Stripe or email settings in admin gives an error | ENCRYPTION_KEY is missing or blank in .env. Add it and restart. |
| Pages look unstyled | Run python manage.py collectstatic --no-input and restart. |
| Stripe webhook returns 400 | The whsec_ value in .env is for a different endpoint or mode. |
| Orders stay pending after payment | The webhook is not reaching your shop. Check the URL ends in /shop/webhook/, it is HTTPS, and Stripe's webhook log. |
| Payments are refused and nothing is charged | Demo mode may be on. Run python manage.py setup_demo_site --disable. |
Email fails with 535 BadCredentials | Your SMTP username or password is wrong. Fix it in Admin, Shop Settings, or .env, and test with test_email. |
| Port 8000 is already in use | Run python manage.py runserver 8001, or change the gunicorn and Caddy port to match. |
| "database is locked" | Close anything else that has db.sqlite3 open. On a busy shop, consider PostgreSQL. |
On a server, read the live log with sudo journalctl -u ebuilder -f. On your own computer, look in the terminal where runserver is running.
This is a self-hosted product without personal support. If your assistant cannot resolve something, or tells you something in the product itself needs fixing, email djangify@djangify.com.
One step at a time is all it takes. This guide may look like a lot, but you never need to read it all. Take the step in front of you, tick it, and move on to the next. You cannot miss or forget a step, because every one is here in order. Your AI assistant remembers where you left off, so you can stop at any point and pick it up again in a new chat.
If your hosting and domain are ready and you use AI, the whole process takes under an hour. Finding your Stripe keys and email details usually takes longest, so start them early. At the end your shop is up and ready for your content, you own your data, and you have your own independent digital business with an ecommerce shop of your own.