R RubyUp / self-hosted rails apps
v1.0.0 One-time license · $199 USD

Discode 2

Discode 2 — Sell self-hosted Rails apps, now API-first Discode 2 is the next iteration of Discode: the self-hosted platform for selling and distributing your o…

§ 01 · Overview

What you get when you click buy.

Discode 2 — Sell self-hosted Rails apps, now API-first

Discode 2 is the next iteration of Discode: the self-hosted platform for selling and distributing your own Ruby on Rails applications. Same one-time-purchase model, same universal CLI installer, same built-in Stripe checkout — now with a full REST API, custom marketing pages, and image content scanning baked in.

Pass on SaaS. Keep the business model simple, the infrastructure under your control, and the feedback loop tight.


What's new in Discode 2

A bearer-token REST API for everything

Manage apps, releases, purchases, and marketing pages from any tool, script, or pipeline. Mint long-lived access tokens from the admin UI and automate the whole publishing workflow — create a release, push the image, promote it as the current release — in CI.

curl -X POST -H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"release": {"version": "1.2.0", "price_cents": 4900}}' \
https://your-discode/api/v1/apps/1/releases

Custom marketing pages, per app

Drop in your own HTML + assets and host arbitrary landing or docs pages directly under each app's slug. Upload an HTML file, attach images and downloads, set a path — Discode 2 serves it from /<your-app>/<path> and exposes uploaded assets at predictable URLs you can reference from inside the markup. Build a sales page that doesn't look like everyone else's.

Release image scanning

Every pushed image is automatically scanned for files that shouldn't ship to customers — credentials, dotfiles, accidental secrets — with vendored dependency directories sensibly skipped. Catch the mistake before a customer pulls the image, not after.

Promote releases via the API

Set current_release_id with a single PATCH and the new version becomes the default for installs and updates. Discode 2 verifies the release belongs to the app and that its image has been pushed before flipping the switch.


Everything Discode already does

  • Built-in Docker registry — push multi-arch (amd64/arm64) images straight to Discode; customers pull through the same endpoint with read-only purchase credentials.
  • Universal Go CLI installer — your customers run discode install <app> and the tool handles Docker setup, registry auth, TLS via Let's Encrypt, persistent storage, and zero-downtime updates via kamal-proxy.
  • Stripe-powered checkout — Products and Prices stay in sync with your apps and releases automatically.
  • Multi-app from day one — sell as many separate Rails apps as you want from one Discode 2 install.
  • Sales page + verified purchases — public marketing site, email verification, and per-purchase install keys handled out of the box.

How it works

  1. Buy and install Discode 2
    You'll receive a one-line install command. Deploy it on your own Linux server with Docker.
  2. Add your Rails app
    Use the admin UI or the API to create the app, push your container image to the built-in registry, and mark it as the current release.
  3. Sell and ship
    Customers buy through Stripe and receive a CLI install command. Updates ship through discode update <app>.

System Requirements

  • A Linux server (Ubuntu, CentOS, etc.) with Docker.
  • Minimum: 2 GB RAM, 2 CPU cores, 20 GB disk space.
  • A Stripe account, a domain name, and SMTP credentials for outbound email.

Application Requirements

Most standard Rails applications are distributable as-is. Each app should provide:

  • A Dockerfile that builds a production-ready image.
  • An exposed port 80 from the container.
  • A /up health route.

Application Provisions

  • A TLS certificate via Let's Encrypt.
  • A persistent Docker volume mounted at /rails/storage.
  • Securely generated secrets injected as environment variables:
    SECRET_KEY_BASE
    ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY
    ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY
    ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT

Frequently Asked Questions

I'm already running the original Discode — should I upgrade?

Discode 2 is for you if you want to script your release pipeline, host bespoke marketing pages, or get image scanning on every push. The core selling and installation experience stays the same; everything new is additive.

How do customer updates work?

The discode CLI handles updates. When you promote a new release, customers run:

discode update <app_slug>

Can I use Discode 2 for SaaS products?

No. Discode 2 is built specifically for self-hosted, one-time-purchase applications. No recurring billing, no multi-tenancy.

Do you offer support?

Yes — email support@rubyup.dev for installation, configuration, and troubleshooting.

Can I white label or resell Discode 2?

No. Discode 2 is licensed for selling your own Rails apps. Rebranding and resale aren't permitted.

Title
Discode 2
Version
v1.0.0
Distribution
Docker image
Hosting
Self-hosted
License
One-time
Publisher
RubyUp
Ready to ship

Run Discode 2 on a server you control.

One container. One license. The app lives on your hardware and answers to no one but you.