Open Small Shop
A small online shop you own completely – for people for whom Shopify is too expensive, eBay too generic and WordPress/WooCommerce too complicated.
It runs on ordinary, cheap web hosting (PHP and SQLite, no database server), takes payments with PayPal, speaks five languages and ships worldwide. It was built by a non-programmer together with an AI assistant (Claude) for a real shop that sells motorcycle parts from India to the whole world – and it is meant to be adapted the same way.
Provided as is, without support. I am not a programmer and I do not answer coding questions. Get a Claude subscription (or another AI coding assistant) and adapt it yourself: the file
CLAUDE.mdgives your assistant the map of the code. If you improve it, publish your own version – the MIT licence allows it.
New here? Read the owner's manual – what the shop does and how you run it.
See it live: himalayan-tools.com runs on this code. · Project page: https://opensmallshop.m31.de/
What it does
For your buyers
- Product pages with photos, categories, sale prices, stock and "back in stock in about n weeks"
- Cart and checkout with PayPal (PayPal account or card, without PayPal account)
- Five languages: English, German, French, Spanish, Portuguese – shop, emails and invoices
- Worldwide shipping prices by country group, a flat price for letters (e.g. stickers)
- Prepaid US import duty (optional), customs notes for other countries
- Customer accounts (optional): order history, invoices, saved addresses, password reset
- Digital products: a personal download link after payment
For you
- Admin: orders (WooCommerce-like list), order page with status, tracking number and "shipped" email
- Products: edit prices, texts and photos, add new products – in the browser
- Stock, backorders, a monthly overview (orders, revenue, visitors), CSV export for your accountant
- PDF invoice for every order; postal customs forms (CN22 / CN23) and address labels made automatically
- Announcement bars ("Summer sale!", "Holiday break until …") in all languages
- Maintenance mode, automatic backups after every new order, a "Server check" page
- No cookies for tracking, a cookie-free visitor count, no external scripts except PayPal
What it does not have (see the FAQ): VAT/sales-tax calculation, card payment without PayPal (e.g. Stripe), product variants (sizes/colours), a page editor in admin, newsletters, coupons.
What it costs
The software is free (MIT licence). You pay for: web hosting with PHP 8.2+ and SQLite (typically €3–10 per month), your domain, and PayPal's fees per sale. No monthly shop fee.
Installation (about one afternoon with your AI assistant)
You need: web hosting with PHP 8.2 or newer (extensions pdo_sqlite, gd, curl, mbstring, openssl, zip; intl recommended), Apache with .htaccess, an email mailbox at your host (SMTP), a PayPal business account, and an FTP program (e.g. FileZilla or WinSCP).
- Download the zip from https://opensmallshop.m31.de/ and unpack it on your computer.
- Try it on your computer first (optional, needs PHP installed):
cp config.example.php private/config.php, setadmin_initial_password, thenphp -S 127.0.0.1:8080 index.phpand open http://127.0.0.1:8080. - Make it yours – with your AI assistant: shop details in
data/site.json, logo, products (or later in Admin → Products), the texts indata/pages/– the terms and the privacy policy are only templates: write your own. Shipping prices and rules:data/zones.json(see "Adapting"). - Upload everything to a folder on your host (e.g.
shop), and point your domain to it. Folder permissions 755, files 644. The folderprivate/stays as it is: its.htaccesslocks it. - Config: on the server, copy
config.example.phptoprivate/config.phpand fill in:env(testfirst),base_url, your mailbox (SMTP), PayPal sandbox keys andadmin_initial_password. Never put this file anywhere public. - Admin: open
https://your-shop/admin/, log in withadmin_initial_password, choose your own password, then deleteadmin_initial_passwordfrom config.php. Open Server check. - PayPal webhook: in developer.paypal.com → your app → Webhooks → add
https://your-shop/api/paypal-webhook.phpwith the events Checkout order approved, Payment capture completed / denied / refunded / reversed, Customer dispute created. Put the webhook ID into config.php. - Cron job: in your host's control panel, run
lib/cron.phpevery hour (it finishes interrupted payments, cleans up and makes the backups). - Test with PayPal sandbox accounts: orders in several languages and countries, cancel, close the
tab after paying, customer account, admin "Completed" with tracking. Then go live:
env→live, live PayPal keys and a live webhook, one real order.
Adapting it to your shop
The demo is set up like the original shop: a seller in India, India Post, prices in euros. What you
will most likely change – ask your AI assistant, pointing it to CLAUDE.md:
-
Shipping: country groups and prices in
data/zones.json(the demo prices are India Post rupee prices converted with a daily exchange rate). Replace them with your carrier's prices. -
US import duty: the demo prepays it for US orders – keep, change or remove.
-
Customs forms: CN22/CN23 on India Post templates (
data/shipping/); your post may use the same forms, or you remove the module. -
Currency, taxes, payment methods, languages – see
CLAUDE.md, section "Typical adaptations".
Files
index.php, .htaccess the shop (front controller, Apache rules)
admin/ the admin pages
api/ checkout and PayPal endpoints
lib/ the code (one file per topic) and two small libraries
templates/ the HTML of the pages
assets/ CSS, JavaScript, fonts
data/ your shop: site.json, products, pages, translations, shipping zones
images/demo/ demo pictures (replace)
private/ config.php, database, invoices, backups – never public, never shared
tools/ small command-line helpers
Version
1.0 – 1 November 2026: first public release.
Licence and credits
MIT licence – see LICENSE. Use it, change it, sell with it. No warranty. Third-party parts and their licences: THIRD-PARTY.md. Made by sam2019 with Claude (Anthropic), 2026.