Receipts
signals with proof.
Everything you need to install, configure, brand and run your own signal marketplace where every signal is sealed and every result is computed from the market. Read it top to bottom the first time. After that, press / and search.
01What you bought
Receipts is a self-hosted signal marketplace. Every signal is sealed the second it is published, every result is computed from the market at the price a follower could actually get, and anyone can verify a record without trusting your server.
| Who | What they do |
|---|---|
| You, the operator | Run the site on your own server, set the rules in the Admin console and take an optional commission and fees. |
| Providers | Publish trade signals (market, side, entry, stop, targets, expiry) from the web Studio, from the Telegram bot, or from TradingView alerts by webhook. |
| Members | Follow providers for free, subscribe to paid ones, get each signal in their feed, as a notification, in chat or on Discord. |
AI tools were used to assist with parts of the code, documentation and graphics of this item. The author directed the work and reviewed the code before release. What was tested for version 1.1.0, on Node.js 22: pnpm check runs the TypeScript type check (the app and the bundled Admin Kit), ESLint and Prettier on the app's own code (the bundled Admin Kit and the chart library in public/lib are not linted) and 194 automated tests in 15 files, and all 194 pass; pnpm build compiles the app and the Admin Kit to dist/ and pnpm start runs it with plain node; and the release ZIP was unzipped into an empty folder, installed, built, tested and started. The item itself has no AI features: it does not call any AI model or AI service.
Every revenue stream starts switched off, the commission is capped at 50 % in code, and the package ships with no keys or accounts of any kind. You connect your own Stripe, Telegram bot and wallets, and turn on what you need.
02What makes it different
- Sealed at issue. Each signal is hashed (SHA-256) and chained to the provider's previous signal. The database refuses to change or delete sealed rows. Edits (move stop, close, cancel) are new sealed events.
- Timestamped on Bitcoin. Every 10 minutes by default, new seals are grouped into a Merkle tree and the root is submitted to the free public OpenTimestamps calendars. Receipts then show the Bitcoin block height. No wallet or coins are needed.
- Results from the market. Public 1-minute candles and a fixed, deliberately pessimistic follower model. Providers cannot type in their own results.
- Signed by the provider (optional). An Ed25519 key made in the provider's browser; anything published in their name without it shows as unsigned.
- Anyone can check.
/verifyrecomputes a proof in the browser; an offline script and the referenceotstool check it without the website.
What it does not do
- It never places trades and never connects to anyone's exchange account.
- It never holds money. Stripe pays into your Stripe account; bank and stablecoin payments go straight to you and you confirm them.
- It invents no data. The demo mode uses labelled strategy bots on live prices; a real install starts empty.
03How it fits together
One program on your server does all of it. A provider publishes a signal; the app seals it (a SHA-256 fingerprint chained to the provider's previous one) into a database that refuses edits. Background jobs read public market candles and compute the result a follower could really have got. Every 10 minutes the new seals are grouped into one fingerprint (a Merkle root) and timestamped through the free OpenTimestamps calendars, which later confirm it in a Bitcoin block.
04Pick your path
05What is in the package
| Folder or file | What it is |
|---|---|
src/core/ | Pure logic: sealing, results, statistics, OpenTimestamps. |
src/services/, src/workers/ | State and background jobs: prices, payments, Stripe, Telegram bot, Discord, push, anchoring. |
src/web/ | Server-rendered pages (Hono JSX, no client framework). |
src/admin/, packages/admin-kit/ | The operator console (MIKODES Admin Kit 0.6.0, with its source and LICENSE.md) and its settings manifest. |
src/db/ | SQLite schema; applied automatically at start. |
dist/ | Not in the download: created by pnpm build, the compiled JavaScript that pnpm start runs. |
public/ | Styles, browser scripts (verifier, signing), service worker, icons, the fonts in public/fonts/, and TradingView Lightweight Charts in public/lib/. |
scripts/verify-bundle.mjs | The offline, dependency-free verifier. |
.env.example, SPEC.md, SOURCES.md, LICENSE.md | Configuration template, behaviour spec, sources and licences, your licence. |
A server (1 vCPU, 1 GB RAM is enough), a domain with HTTPS, and optionally a Stripe account, a Telegram bot, a bank account or stablecoin wallets for payments. None of these are part of the purchase.
06Try it before you install
The live demo is at receipts-demo.mikodes.com: a click-through showcase with a static copy of the 1.1.0 site (sample data), the running demo install with one-click Operator, Provider and Subscriber roles at /login, and a read-only operator console at /admin (the e-mail and password are in the item's Demo instructions). Your own install runs on your own accounts and keys. The Quick start takes about ten minutes: pnpm install, cp .env.example .env with PUBLIC_URL=http://localhost:8787, pnpm build, pnpm start, then claim the site with the setup code the log prints.
For sample data, start a test copy once with DEMO_MODE=1: one-click demo logins as operator, provider or subscriber, a labelled demo checkout that moves no money, and labelled strategy bots that publish real, sealed signals from live prices. The screenshots in these docs and on the item page were captured in that mode. Never use DEMO_MODE=1 or DEMO_PUBLIC=1 on a live site.
07How to read these docs
- Dark boxes are commands. Press Copy in the corner and paste them into a terminal.
- Grey text after
#is an explanation. The Copy button leaves it out. - Replace
signals.example.comwith your own domain everywhere. - Operating system. Commands are written for a macOS or Linux terminal (bash or zsh). On Windows, run them in WSL (Ubuntu) or Git Bash; the production server itself is assumed to be Ubuntu.
- These docs describe release 1.1.0. The automated checks named here (
pnpm check: type check, lint and 194 tests) are part of the download, so you can run them on your own machine.