Skip to content
On this page

Run the whole funnel yourself

oc-onboarding-examples (opens in a new tab) is the whole onboarding funnel as small sites you can fork and run, under MIT. Each one is a site with its own login that uses both pathways at once:

  • it gives each user an orangecheck account through Connect;
  • it lets them claim that account at ochk.app;
  • it signs them in with orangecheck afterwards.
ExampleStack
node-next/ (opens in a new tab)Next.js 16 (Pages Router), @orangecheck/me-client, SQLite
python-fastapi/ (opens in a new tab)FastAPI with server-rendered pages, orangecheck, SQLite

Run it with no accountLink to this section

Each example starts offline. Stand-ins in its own folder answer for the sign-in popup, the Connect API and ochk.app's claim page, in the same shapes, so you can click through the whole funnel before you have a project.

Shell
git clone https://github.com/orangecheck/oc-onboarding-examples
cd oc-onboarding-examples/node-next
npm install && npm run dev       # http://localhost:3000
Shell
cd oc-onboarding-examples/python-fastapi
uv sync && uv run python -m app  # http://localhost:8000

Sign up and tick the box. Claim the account. Confirm your password, link orangecheck, sign out, then sign in with orangecheck to land in the same account. Each example's README walks through it.

The funnel, and where each step standsLink to this section

StepWhat the person doesStatus
1Signs up with your site's own loginYours. orangecheck is not involved.
2Gets an orangecheck account through ConnectLive. First run on 2026-10-23 by the examples' own check, which runs weekly against a test project.
3Claims that account at ochk.appDeployed. A claim by a person has not been run live yet.
4Signs in with orangecheckLive.
5Moves to their own keysNot open.

orangecheck holds every key that can move funds while the system is in testing; ochk.app/custody (opens in a new tab) says who holds what, read live. Signing in with your own Bitcoin key is self-custody of that key today. It does not move what you earn. The examples are identity only: they send no events and pay nobody.

Run it liveLink to this section

Everything comes from one free project at ochk.app/me/projects (opens in a new tab), in test mode or live:

You needWhereUsed for
The project key (pk_test_…)The project's Keys & webhooks tabSign in with orangecheck and its sign-in rule
The signing secretKeys & webhooks, after a fresh identity checkRefusing sessions people ended everywhere
A verified domainThe project's Domain step (a DNS record or a meta tag)The list of ended sessions for your origin
A Connect app and its API keyThe Sign-in tab, "Your own login". The key is shown once.Provision, claim links, delete

Put them in .env as the example's .env.example names them, with SITE_ORIGIN set to the site's exact origin.

On localhost, leave the signing secret empty. A project's domain can't be localhost, so the list of ended sessions can't be read for a local origin. A local run signs in but doesn't refuse a session someone ended everywhere, and a banner says so. A deployment refuses to start without the secret.

What each step followsLink to this section

The examples follow these pages, and each one has tests for the rules they set.

StepThe ruleDocs
An account on sign-up, without asking or with an opt-in boxUnticked means no call at all; only a tick sends consent, in the SDK's wordsConnect
A claim linkMinted for the signed-in user, at the moment they ask; works once, for 15 minutesConnect
Deleting an accountDelete the orangecheck account first; one that earned stays, and its person gets a claim linkConnect
Sign in with orangecheckSpend the token once, refuse one without rh, keep rh, aud and iat with your sessionQuickstart
Sessions ended everywhereEnded there means signed out here; an unreadable list is never "signed out"SDK reference
Linking orangecheck to an account with its own loginA fresh sign-in with your own login first; one did per account; tell the account's emailQuickstart
connect.claimedVerify the signature over the raw bodyWebhooks

What you host, and what you depend onLink to this section

You host the site, its users, its sessions, the table of spent sign-in tokens and its webhook receiver. All of it is yours to run anywhere and to take with you.

orangecheck runs the rest, and none of it can be self-hosted today:

ServiceWhat the funnel uses it for
ochk.ioIssues sign-in tokens, ends them, and answers the Connect API
me.ochk.ioThe sign-in popup, your project's sign-in rule, and the list of ended sessions
ochk.appWhere a person claims their account, and where you make your project and keys

The SDKs are open, and so is checking a token offline against the published keys. "Host it yourself" means you own your integration and your users' mapping, and can leave. It does not mean you can run orangecheck without orangecheck.

How it stays currentLink to this section

  • Each example's tests run its real routes against a real database, offline, on every push.
  • A weekly job runs Connect live against a test project. Its only secret is that project's Connect key, which can't sign anyone in.
  • A day after an @orangecheck/* package or orangecheck on PyPI publishes, the bump arrives as a pull request and merges once every check passes.

More examples, across every protocol, are on Examples.