Self-Hosted eCommerce Builder Install Guide

Last updated: October 2026

0 of 14 steps done Start over

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.

AI friendly

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.

Claude only

This box marks the few places that need Claude. Everything else in this guide works with any AI.

Two rules

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.

Which AI should I use?

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.

1

Think about what you need

About 15 min
Your download has a documentation folder

Your 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.

AI friendly

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.

Prompt for your AI
I just bought the Djangify self-hosted eCommerce Builder and I am about to install it. In plain words, explain what I need before I start: an AI assistant, somewhere to run the shop, a domain name, a Stripe account, email sending details, and a shop name and currency. Ask me what I already have, and help me with anything I do not have yet, including choosing a host and setting up a server. Please avoid jargon.

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 --version
python3 --version
git --version

Skill 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.

2

Unzip the code and open it in your assistant

About 10 min

Keep 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.

AI friendly

An assistant that can open folders can do this for you. Open your Downloads folder in it and paste this message.

Prompt for your AI
Please make a folder called Djangify inside my Documents folder, then unzip the Djangify self-hosted eCommerce Builder ZIP file from this folder into it. Tell me the full path of the folder that contains manage.py when you are done.

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/Djangify

Files 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 + H in your file manager, or run ls -a in 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 only

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.

3

Let your assistant set up your folders and guide you

About 10 min
AI friendly

Your 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.

Prompt for your AI
I just bought the Djangify self-hosted eCommerce Builder. I have either opened its folder or uploaded README.md, .env.example and the djangify-deploy SKILL.md. Please read them, then guide me through installing it one small step at a time. First, if you can create files and folders, set up my notes folder. Next to this code folder (not inside it), create a folder called docs. Copy these into it: SKILL.md from .claude/skills/djangify-deploy/, and DEPLOY_WITH_AI.md, STRIPE_SETUP.md and BACKUPS.md from Your Documentation. Do not put any keys or passwords in it. Tell me what you created. If you cannot create folders, tell me exactly what to create myself. Also keep a running memory file for this project. In that docs folder, create a master file called OPERATIONS.md and use it as the one place for everything you will need in future chats: details about my computer, my business and shop, my domain and hosting, where my folders and files are, which steps we have finished, and any decisions we make. Whenever I tell you something new about any of these, add it to OPERATIONS.md straight away. Never put passwords, keys or secrets in it. If you cannot create files, give me the text to save myself. In a new chat I will say read OPERATIONS.md for context, and I expect you to pick up where we left off without me explaining everything again. Then ask which computer I use and whether I already have a server and a domain. Give me one step at a time. Before each step, tell me in one plain sentence what it does. Wait for me to say it worked, or to paste an error, before you move on. Never ask me to paste secret values (SECRET_KEY, ENCRYPTION_KEY, Stripe keys, email password, server or admin passwords). Tell me which file each one goes in and I will type it there myself. If something is not covered in my files, say so instead of guessing.

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.

AI friendly

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:

Documents/ Djangify/ docs/ your notes and keys OPERATIONS.md your assistant's memory SKILL.md copied here for you djangify-ebuilder/ the unzipped code manage.py README.md START-HERE.md requirements.txt .env.example (hidden) .claude/ (hidden) skills/djangify-deploy/SKILL.md Your Documentation/ the full guides
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/docs

Copy 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.

4

Find your Stripe and email details

About 20 min

These 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.

AI friendly

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.

Prompt for your AI
I need two sets of details for my Djangify shop. First, walk me through my Stripe dashboard screen by screen to find my test mode API keys. Second, tell me how to find my email (SMTP) details for my email provider, which is [NAME YOUR PROVIDER]: the host, the port, the username, the password or app password, and the from address. I will copy everything myself and will not paste any key or password into this chat.

Your Stripe test keys

  1. Sign in at dashboard.stripe.com and switch to Test mode. Stripe may call this a sandbox.
  2. Open Developers, then API keys.
  3. Copy the Publishable key. It starts with pk_test_.
  4. 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.com
Important

Never 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.

5

Get Python and git ready

About 15 min

Python 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.

AI friendly

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.

Prompt for your AI
Please check whether Python 3.11 or newer and git are installed on my computer. If either is missing, install it for me or walk me through installing it for my type of computer, then check again.
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 git

Then check both are in place. Python should report 3.11 or higher.

python --version
git --version
python3 --version
git --version

Skill 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.

6

Install the code

About 10 min

This 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.

AI friendly

Your assistant can do all of this. You do not need to know what a virtual environment is. Paste this and let it run.

Prompt for your AI
Please set up this project on my computer: create a Python virtual environment in the code folder, install everything in requirements.txt, and copy .env.example to .env. Explain what you are doing in plain words and tell me if anything fails. Do not put any secret values in .env, I will add those myself.
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 .env
cd ~/Documents/Djangify/djangify-ebuilder
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
cp .env.example .env

After 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.

7

Fill in your settings file

About 15 min

The .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.

AI friendly

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.

Prompt for your AI
Please help me fill in my .env file for running on my own computer. Fill in every setting that is not a secret. Fill in the email settings (host, port, username and from address) so the shop can send mail. For SECRET_KEY, ENCRYPTION_KEY, the Stripe keys and the email password, tell me how to generate or find each one and exactly where it goes, and I will type the values in myself. Do not ask me to paste any secret into this chat. When we finish, check the file for mistakes such as missing lines, a CSRF_TRUSTED_ORIGINS entry without https:// on a live site, or cookie flags set to True before HTTPS is working.
Back up your ENCRYPTION_KEY now

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.

Email is as important as Stripe

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.

Cookie flags

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 .env
nano .env

Generate 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_key

The 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_key

On 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=True

Email 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.com

Database: 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.

8

Set up the database, run the shop, then go live

About 30 min if your hosting is ready
AI friendly

This 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.

Prompt for your AI
Please set up the database and start the shop on my computer. Use the djangify-deploy instructions and the README, and use createsuperuser_verified for my admin login, not the plain createsuperuser. Run the default settings and default policy pages commands, but do not run setup_demo_site. Then start the development server and tell me which addresses to open. Do not ask me for any secrets, I will type my admin password myself when it asks.
Two commands to avoid

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_policies
  • createsuperuser_verified asks 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_settings fills in starter Site Settings, Dashboard Settings and Shop Settings so the admin forms are not blank.
  • create_default_policies adds draft cookie, privacy, terms and refund pages for you to edit.
  • Optional: python manage.py create_demo_product adds one draft demo product if you have none.

Then start the shop:

python manage.py runserver

Open 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.

Prompt for your AI
I want to put my Djangify shop live. My domain is YOURDOMAIN. I [have a Linux server already / do not have a server yet]. Please take me through it one small step at a time: help me choose and create a server if I need one, point my domain at it, get the code onto it, set up the .env for production, run the shop with gunicorn kept running by systemd, and add HTTPS with Caddy. Never expose /media/secure/. Check each stage works before moving on, and do not ask me for any secrets.
Paid downloads

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
  1. 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.
  2. 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 in data/db/ and your uploads in media/ with it. Then repeat steps 6 and 7 on the server, with the server .env values and the same ENCRYPTION_KEY.
  3. Test that gunicorn runs. Gunicorn is the production server, and it is already in requirements.txt.
    gunicorn ebuilder.wsgi:application --bind 127.0.0.1:8000 --workers 3
    Press Ctrl + C to stop it once it starts without errors.
  4. Keep it running with systemd. Create /etc/systemd/system/ebuilder.service. Replace youruser with 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.target
    sudo systemctl daemon-reload
    sudo systemctl enable ebuilder
    sudo systemctl start ebuilder
    sudo systemctl status ebuilder
    The app reads its own .env from the project folder, so you do not list settings in the service file. After any .env or code change, run sudo systemctl restart ebuilder.
  5. 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
    }
    sudo systemctl reload caddy
    Nginx works too, and the example is in 2_install.md in your documentation folder.
  6. Turn the cookie flags on. Once https://yourdomain.com loads, make sure DEBUG=False and both _COOKIE_SECURE lines are True, 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.

9

Check that everything is up

About 5 min

The 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.

AI friendly

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.

Prompt for your AI
Please check that my shop is running properly at YOURDOMAIN. Check the /health/ page returns 200, that the home page loads over https, and that the ebuilder service is running and set to start on reboot. If anything fails, read the log and tell me what is wrong in plain words.
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 ebuilder says active (running), and sudo systemctl is-enabled ebuilder says enabled, so it comes back after a reboot.
  • If a check fails, read the live log with sudo journalctl -u ebuilder -f.
Your shop is online

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.

Claude only

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.

10

Add the Stripe webhook

About 10 min

A 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.

AI friendly

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.

Prompt for your AI
Please walk me through adding a Stripe webhook for my Djangify shop at https://YOURDOMAIN/shop/webhook/ in test mode. The events are payment_intent.succeeded, payment_intent.payment_failed and checkout.session.completed. Tell me where to find the signing secret and which line of my .env it goes on, and how to restart the service. Do not ask me to paste the whsec_ secret into this chat.
  1. In Stripe (still in Test mode), open Developers, then Webhooks, then Add endpoint.
  2. Set the URL to:
    https://yourdomain.com/shop/webhook/
  3. Select these three events. The shop's webhook code handles all of them:
    • payment_intent.succeeded completes the order and grants access to the download.
    • payment_intent.payment_failed records the failed attempt.
    • checkout.session.completed is the safety net for free orders paid with a 100 percent coupon.
  4. Save the endpoint, open it, and reveal the Signing secret. It starts with whsec_.
  5. Put it in your .env yourself, then restart the service:
    STRIPE_WEBHOOK_SECRET=whsec_paste_yours_here
    sudo 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.

11

Set up your shop, check email and make a test purchase

About 30 min
AI friendly

Your 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.

Prompt for your AI
Please guide me through setting up my Djangify shop in the admin: Site Settings (including currency, which must match my Stripe account), Shop Settings, and adding my first product. Then run test_stripe and test_email and explain the results. Then help me make a test purchase with Stripe's test card and check the order, the email and the download all worked, and refund the test order. Do not ask me for any secrets.
Claude only

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.

Check your email first

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 your ENCRYPTION_KEY must 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.com

test_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 digits

Make 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.

12

Switch Stripe to live

About 20 min
AI friendly

Your assistant can give you a checklist for the switch and check it worked. You copy your live keys into your settings file yourself.

Prompt for your AI
I am switching my Djangify shop from Stripe test mode to live mode. Please give me a checklist for the switch: which .env lines change, where the new live webhook goes, what to restart, and how to confirm test_stripe reports LIVE. Do not ask me to paste any keys. Remind me that keys saved in Admin, Shop Settings override .env.
Before you do this

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.

  1. In Stripe, switch from Test mode to Live mode.
  2. Copy your live keys from Developers, API keys: pk_live_ and sk_live_.
  3. 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.
  4. 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
  5. Restart and check:
    sudo systemctl restart ebuilder
    python manage.py test_stripe
    test_stripe should now say LIVE.
  6. Confirm DEBUG=False, both cookie flags are True, and your currency still matches Stripe.
  7. 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.

13

Connect your shop to Claude Optional

About 30 min
Claude only

Your 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.

AI friendly

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.

Prompt for your AI
Please help me connect my live Djangify shop to Claude using the steps in CONNECT_TO_CLAUDE.md: create the OAuth client, set up the sidecar service, add the two routes to my Caddy config, and check it works. Do one step at a time and do not ask me for any secrets.

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_client

2. 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.target
sudo systemctl daemon-reload
sudo systemctl enable --now ebuilder-mcp.service

3. 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.

14

Back up your shop and learn the update commands

About 15 min
AI friendly

Your admin has a one-click backup button, and your assistant can also set up automatic nightly backups and run your updates for you.

Prompt for your AI
Please help me set up a backup routine for my Djangify self-hosted shop. Explain the admin Download / Backup centre, then help me set up the nightly backup script and cron line from 2_install.md, and a weekly reminder to copy a backup off the server. Remind me that my .env and ENCRYPTION_KEY are not inside the backup. Do not ask me to paste any secret values.
Backups are your job

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.

The backup does not include your keys

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 ebuilder

If 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

AI friendly

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 seeWhat to check
You cannot log in to the adminThe admin was made with plain createsuperuser. Run python manage.py verify_superusers.
A "CSRF verification failed" errorCSRF_TRUSTED_ORIGINS must include your domain with https://. Restart after changing it.
Login does nothing on a plain http addressThe _COOKIE_SECURE lines are True before HTTPS is on. Set them to False locally.
Saving Stripe or email settings in admin gives an errorENCRYPTION_KEY is missing or blank in .env. Add it and restart.
Pages look unstyledRun python manage.py collectstatic --no-input and restart.
Stripe webhook returns 400The whsec_ value in .env is for a different endpoint or mode.
Orders stay pending after paymentThe 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 chargedDemo mode may be on. Run python manage.py setup_demo_site --disable.
Email fails with 535 BadCredentialsYour SMTP username or password is wrong. Fix it in Admin, Shop Settings, or .env, and test with test_email.
Port 8000 is already in useRun 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.