type: decision
status: active
timestamp: 2026-06-21
tags: [decision, revenue, monetisation, distribution, omni-publish, ai-copy, nvidia-nim, openrouter, automation, channels]

Revenue channels 2026 — every product fans out to every viable channel via omni-publish

Revenue channels across 26 apps + 17 packages + 5 books + future browser-/VS-Code-extensions + CLIs + MCP servers) auto-publishes\ to as many revenue channels as 2026's API reality allows. Orchestrated by @chirag127/omni-publish\ on every tag push. AI copy via NVIDIA NIM primary + OpenRouter free-models fallback.\ Drafts for manual-only platforms (X, Reddit, LinkedIn, Medium — all dead/closed\ APIs in 2026) land in a single Telegram channel split into 4 sections. Rate-limit\ ceiling: 1 auto-post per channel per day per repo.

Revenue channels 2026 — fan-out via omni-publish

Decision summary

Every product the family ships — 26 apps + 17 packages + 5 books + future browser/VS Code extensions + CLIs + MCP servers — auto-publishes to as many revenue channels as 2026’s API reality allows. Generated and orchestrated by @chirag127/omni-publish on every tag push (v*.*.*) in every repo. AI-generated platform-specific copy uses NVIDIA NIM (primary, free 5K req/mo) with OpenRouter free models as quota-failure fallback. Channels with dead 2026 APIs (Reddit OAuth closed, X free-tier no public writes, LinkedIn /v2 sunset, Medium tokens deprecated) drop into a single Telegram drafts channel with 4 sections, not auto-posted.

Channel matrix per surface type

Web app (subdomain on *.oriz.in)

ChannelURL2026 API statusRevenueCut
oriz.in subdomainownAuto (CF Pages deploy)AdSense + affiliate + Razorpay/LemonSqueezy0% platform
Google Play (PWA via PWABuilder TWA)play.google.comAuto via r0adkll/upload-google-playIn-app billing15% (small-biz tier)
Microsoft Store (PWA via PWABuilder MSIX)apps.microsoft.comManual first publish; auto updatesMicrosoft Commerce (where enabled)12%
Chrome Web Store (for PWA bookmarklet helpers if any)chrome.google.com/webstoreAuto via chrome-webstore-upload-cli after first manual listingFree / paid extension5%
Product Huntproducthunt.comNo public submit API since 2023Indirect (traffic)n/a
Hacker News (Show HN)news.ycombinator.comNo API; manual postIndirectn/a
dev.to (release blog)dev.toAuto via REST APIIndirectn/a
Hashnode (release blog)hashnode.comAuto via GraphQLIndirectn/a
Bluesky (announcement)bsky.appAuto via AT ProtocolIndirectn/a
Mastodon (announcement)mastodon.social et alAuto via RESTIndirectn/a
Telegram (channel post)t.meAuto via Bot APIIndirectn/a

npm package

ChannelURL2026 API statusRevenueCut
npm registrynpmjs.comAuto via npm publishNone directly0%
GitHub Packagesghcr.io / npm.pkg.github.comAuto via npm publish --registryNone0%
jsr.io (Deno + universal)jsr.ioAuto via jsr publish (free, no auth-card)None0%
packages.oriz.in catalogownAuto rebuild on repository_dispatchIndirect (traffic ? app subdomains)0%
dev.to + Hashnode release postas aboveAutoIndirectn/a
Bluesky + Mastodon announcementas aboveAutoIndirectn/a
Awesome lists (manual PR)github.com/sindresorhus/awesomeNo API — manual PRIndirectn/a

Book

See full pipeline in book-publish-pipeline.md. Summary row here:

ChannelURL2026 API statusRevenueCut
Leanpub (Markua git push)leanpub.comAuto via git push to manuscript branch80% royalty - 50¢/sale20% + 50¢
Gumroadgumroad.comAuto via REST API10% flat (Gumroad fee)10%
LemonSqueezylemonsqueezy.comAuto via REST API; MoR handles VAT5% + 50¢5%+50¢
Draft2Digital (aggregator ? B&N/Kobo/Apple/Scribd)draft2digital.comNo API — manual upload~60% net royalty (channel-dependent)varies
Amazon KDPkdp.amazon.comNo public API ever existed — browser-uploader bot or manual70% (in $2.99-$9.99 range)30%
Google Play Books Partner Centerplay.google.com/books/publishManual upload (ISBN-recommended); no automated publish API70%30%

Extension (browser + VS Code)

ChannelURL2026 API statusRevenueCut
Chrome Web Storechrome.google.com/webstoreAuto after first manual listingPaid extension (5% Google fee where applicable)5%
Firefox Add-ons (AMO)addons.mozilla.orgAuto via web-ext signFree only (no built-in payments)n/a
Microsoft Edge Add-onsmicrosoftedge.microsoft.com/addonsAuto via edge-add-on-actionFree onlyn/a
VS Code Marketplacemarketplace.visualstudio.comAuto via vsce publishFree; sponsor link allowedn/a
Open VSX (JetBrains, Cursor, etc.)open-vsx.orgAuto via ovsx publishFreen/a
GitHub Releases (sideload installer)github.com//releasesAuto via gh release createDirect purchase via Gumroad/LemonSqueezy link in README0%

Dead in 2026 — do NOT propose

Documented because earlier prompts kept suggesting these:

These are listed so future prompts can recognise them as dead ends without re-grilling.

Manual-platform queue ? Telegram drafts channel

For X / Reddit / LinkedIn / Medium where automation is gone, omni-publish generates ready-to-paste drafts on every tag push and posts them to one Telegram channel (TELEGRAM_DRAFTS_BOT_TOKEN + TELEGRAM_DRAFTS_CHAT_ID) split into 4 sections by hashtag:

User copy-pastes each to its platform when convenient. No automation lies = no shadow-ban risk = no broken-link claims.

AI copy generation

Platform-specific copy (dev.to title vs Bluesky 300-char teaser vs LinkedIn 3-paragraph) is generated, not hand-written.

omni-publish picks NIM by default; falls back to OpenRouter on HTTP 429 or 5xx. If both fail, the platform’s row goes to the Telegram drafts channel with a [ai-fallback-needed] tag instead of being skipped silently.

Rate limit ceiling

Max 1 auto-post per channel per day per repo. Prevents:

omni-publish keeps a JSON state file at ~/.config/oriz/omni-publish-state.json (CI: artifact across runs via cache) tracking last-post timestamp per (channel, repo). Tag pushes that violate the ceiling are deferred to next-day cron rerun.

Trigger

Every repo’s .github/workflows/release.yml calls the omni-publish reusable workflow on tag push matching v*.*.*:

on:
  push:
    tags: ['v*.*.*']
jobs:
  cross-post:
    uses: chirag127/omni-publish-npm-pkg/.github/workflows/cross-post.yml@main
    with:
      title: "${{ github.event.head_commit.message }}"
      body_path: "RELEASE_NOTES.md"
      canonical_url: "https://github.com/${{ github.repository }}/releases/tag/${{ github.ref_name }}"
      type: "app"  # or package | book | extension
    secrets: inherit

Trigger payload

FieldRequiredUsed by
titleyesAll channels
body (or body_path)yesLong-form channels (dev.to, Hashnode, Medium draft)
canonical_urlyesAll channels (sets <link rel="canonical"> where supported)
typeyesapp | package | book | extension — selects which channel matrix applies

The type field determines which row-set from the matrix above fires. A package release never tries Play Store; a book release never tries npm.

The 5 first books

Status: planning (none have manuscripts yet). Locked names + scope in book-publish-pipeline.md:

  1. Oriz Stack — Astro 6 + Cloudflare + Firebase Spark family architecture (technical, $19/$39)
  2. Oriz Paisa: Credit Cards India 2026 — cards-app companion (Indian finance, ?499/?999)
  3. Oriz PDF: From Browser to Native — PWA ? PWABuilder ? Play Store walkthrough ($14)
  4. Oriz Janaushdhi: Generic Medicines India — janaushdhi-app companion (public health, ?299)
  5. Oriz Me: 100-Year Strategy — personal essays from oriz-cs-me-app + 100-year-strategy doc ($9 PWYW)

Cross-refs


Edit on GitHub · Back to index