MCPcopy Create free account
hub / github.com/be-BOP-io-SA/be-BOP

github.com/be-BOP-io-SA/be-BOP @main

Chat with this repo
repository ↗ · DeepWiki ↗ · + Follow
930 symbols 3,375 edges 506 files ⚖ AGPL-3.0 23 documented · 2% updated 13d agorel/2026-08-19/e2c3e33 · 2026-08-19★ 180478 open issues

Browse by type

Functions 820 Types & classes 110
What it actually does AI analysis from the code graph — generated when you open this
loading…
README
<img alt="be-BOP" src="https://github.com/be-BOP-io-SA/be-BOP/raw/main/src/lib/assets/bebop-light.svg" width="140">

be-BOP

The ethical sales toolbox.

Libre and open-source monetization, from e-commerce to Point of Sale — subscriptions, peerfunding, ticketing, booking, restaurant UI, and many payment methods, Bitcoin and Lightning included.

No vendor lock-in, no paywall, no subscription, no sales commission. Ever.


Getting started

Four ways to run be-BOP.

1. Install wizard

One command on a fresh server:

curl -sfSL "https://be-bop.io/wizard/install.sh" -o be-bop-wizard.sh \
  && bash ./be-bop-wizard.sh -- --domain "your-domain.com" --email "you@example.com"

It installs and configures everything — MongoDB, Garage for object storage, web server and TLS certificate — and hands you a working shop. You do not need to clone this repository or install Node.

You need a VPS with 2 GB of RAM and 20 GB of storage, a domain name pointing at it, and an email address for the TLS certificate. Technical level — low: point a domain, connect over SSH, run one command.

📖 Step-by-step guide with screenshots →

2. Cloud

Hosted by be-BOP.io, nothing to install or maintain:

Stay tuned for new markets opening!

You need to comply with the service's terms of use, an email address, and a payment mean for the monthly subscription. Technical level — none.

To try it first, spin up a free 4-hour sandbox — no account, no card.

3. Docker

docker compose up brings up be-BOP with a MongoDB and an S3 storage. Good for local development, and for a single-host deployment you manage yourself.

You need Docker, and the environment variables from Configuration. See Docker Compose. Technical level — high: you own the containers, the backups and the reverse proxy.

4. Self install

Bring your own MongoDB replica set and S3 storage, and run be-BOP with Node.

You need everything listed in Requirements. Technical level — expert.

What you can sell

E-commerce Physical and digital products, stock, variations, delivery zones
Point of Sale In-person checkout, touchscreen interface, restaurant tabs, Z-tickets
Subscriptions Recurring memberships and plans, with reminders
Peerfunding Fund goals and projects, with progress widgets and leaderboards
Ticketing & booking Sell, schedule and validate tickets; calendar-based bookings
Donations & pay-what-you-want Customer-set pricing, deposits, partial payments

Payments.

  • Bitcoin and Lightning — your own node, or nodeless with phoenixd. Also through BTCPay Server, Swiss Bitcoin Pay or Blink.
  • Cards — Stripe, SumUp, OSB.
  • PayPal.
  • GNU Taler — digital cash.
  • At the counter — cash and custom methods.

Also built in. A CMS with embeddable widgets, a Nostr bot, multi-currency pricing, VAT profiles per country, invoicing, and an admin back-office available in 7 languages.

Documentation

The back-office documentation lives in docs/, one folder per language.

Start here Initialize be-BOP — first steps after installation
Full walkthrough Step-by-step guide
Point of Sale PoS options
CMS Required CMS pages · Customise cart & checkout
Team & access Back-office access
Delivery Delivery management
Questions FAQ

Other languages: 🇫🇷 Français (the most complete set, 62 documents, including VAT configuration, reporting, stock, subscriptions and the be-BOP manifesto) · 🇩🇪 Deutsch · 🇪🇸 Español · 🇮🇹 Italiano · 🇳🇱 Nederlands · 🇵🇹 Português


Running from source

Everything below is for contributors and for operators who prefer to deploy by hand rather than with the wizard.

Table of contents

Requirements

  • Node.js 18+, with corepack enabled: corepack enable
  • pnpm (enabled via corepack — you may need sudo corepack enable)
  • Git LFS, installed with git lfs install
  • A MongoDB replica set — run it in Docker or use MongoDB Atlas
  • An S3-compatible object storageGarage (open source, lightweight, what the wizard installs), or a paid service like AWS or Scaleway. be-BOP configures the bucket to accept CORS PUT calls automatically.

Optional, depending on what you sell and how you notify customers:

  • SMTP credentials for email — or a Nostr nsec (NOSTR_PRIVATE_KEY) to notify over Nostr instead
  • A Bitcoin node and lnd — not required: phoenixd gives you Lightning and Bitcoin nodeless, straight from the admin UI

Quick start

pnpm install
pnpm dev

be-BOP still needs a MongoDB replica set and an S3-compatible object storage. Pick one of the two setups below, add the variables to a .env.local file, then run pnpm dev.

Option A: Cloud services (minimal setup)

Use MongoDB Atlas for the database and a hosted S3 (AWS, Scaleway…) for the object storage, then put their credentials in .env.local. See Configuration for the variable names.

Option B: Docker Compose (fully local)

Runs MongoDB and an S3 storage locally. Add an S3 access key and secret to .env.local if they are not there yet:

echo "S3_KEY_ID=$(openssl rand -base64 63 | tr -d '\n')" >> .env.local
echo "S3_KEY_SECRET=$(openssl rand -base64 63 | tr -d '\n')" >> .env.local

Then start the containers:

docker compose -f docker-compose.dev.yml -f docker-compose.override.yml up -d

Configuration

Add a .env.local (or .env.{development,test,production}.local) file for secrets that should not be committed to git; these override the values in .env.

Core

Variable Description
MONGODB_URL The connection URL to the MongoDB replica set
MONGODB_DB The DB name, defaulting to bebop
MONGODB_DIRECT_CONNECTION Set to true to connect directly to a single node rather than discovering the replica set
ORIGIN The URL where be-BOP will be deployed, e.g. https://bebop.example.com
NOSTR_PRIVATE_KEY Private key (nsec…) used to send Nostr notifications
LINK_PRELOAD_HEADERS Set to true to enable the Link rel=preload header (explanation). If you do, you may need to raise nginx's proxy_buffer_size 16k (explanation)
BODY_SIZE_LIMIT Maximum upload size in bytes, e.g. 20000000 for 20 MB. Not needed for normal usage
PORT Port to listen on, defaults to 3000

S3 object storage

be-BOP automatically configures the S3 bucket to accept CORS PUT calls.

Variable Description
S3_BUCKET The bucket name for the S3-compatible object storage
S3_ENDPOINT_URL The endpoint, e.g. http://s3.fr-par.scw.cloud or http://s3-website.us-east-1.amazonaws.com
PUBLIC_S3_ENDPOINT_URL Public-facing endpoint used to build browser-visible asset URLs
S3_REGION The region of the bucket
S3_KEY_ID The access key ID
S3_KEY_SECRET The access key secret

Email and notifications

Order notifications can go out over email, over Nostr, or both. For email, set all four SMTP_* variables; for Nostr, set NOSTR_PRIVATE_KEY in Core.

Variable Description
SMTP_HOST SMTP server host — set all four SMTP_* variables to enable email notifications
SMTP_PORT SMTP server port
SMTP_USER SMTP username
SMTP_PASSWORD SMTP password
SMTP_FROM Optional sender address, def

Extension points exported contracts — how you extend this code

browse all types & interfaces →

Core symbols most depended-on inside this repo

browse all functions →

Shape

Function 808
Interface 103
Method 12
Class 6
Enum 1

Languages

TypeScript100%

Modules by API surface

src/lib/server/orders.ts29 symbols
src/lib/server/discount.ts22 symbols
src/lib/types/Order.ts16 symbols
src/lib/server/sdk/pp.ts16 symbols
src/lib/server/price-history.ts15 symbols
src/lib/server/bitcoind.ts15 symbols
src/lib/server/orderTab.ts13 symbols
src/lib/server/bitcoin-nodeless.ts13 symbols
src/lib/server/s3.ts12 symbols
src/lib/server/phoenixd.ts11 symbols
src/lib/server/lnd.ts11 symbols
src/lib/server/cart.ts11 symbols

Datastores touched

(mongodb)Database · 1 repos

For agents

$ claude mcp add be-BOP \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page