← knowledge.oriz.in

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

decision decisionrevenuemonetisationdistributionomni-publishai-copynvidia-nimopenrouterautomationchannels

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)

Channel URL 2026 API status Revenue Cut
oriz.in subdomain own Auto (CF Pages deploy) AdSense + affiliate + Razorpay/LemonSqueezy 0% platform
Google Play (PWA via PWABuilder TWA) play.google.com Auto via r0adkll/upload-google-play In-app billing 15% (small-biz tier)
Microsoft Store (PWA via PWABuilder MSIX) apps.microsoft.com Manual first publish; auto updates Microsoft Commerce (where enabled) 12%
Chrome Web Store (for PWA bookmarklet helpers if any) chrome.google.com/webstore Auto via chrome-webstore-upload-cli after first manual listing Free / paid extension 5%
Product Hunt producthunt.com No public submit API since 2023 Indirect (traffic) n/a
Hacker News (Show HN) news.ycombinator.com No API; manual post Indirect n/a
dev.to (release blog) dev.to Auto via REST API Indirect n/a
Hashnode (release blog) hashnode.com Auto via GraphQL Indirect n/a
Bluesky (announcement) bsky.app Auto via AT Protocol Indirect n/a
Mastodon (announcement) mastodon.social et al Auto via REST Indirect n/a
Telegram (channel post) t.me Auto via Bot API Indirect n/a

npm package

Channel URL 2026 API status Revenue Cut
npm registry npmjs.com Auto via npm publish None directly 0%
GitHub Packages ghcr.io / npm.pkg.github.com Auto via npm publish --registry None 0%
jsr.io (Deno + universal) jsr.io Auto via jsr publish (free, no auth-card) None 0%
packages.oriz.in catalog own Auto rebuild on repository_dispatch Indirect (traffic ? app subdomains) 0%
dev.to + Hashnode release post as above Auto Indirect n/a
Bluesky + Mastodon announcement as above Auto Indirect n/a
Awesome lists (manual PR) github.com/sindresorhus/awesome No API — manual PR Indirect n/a

Book

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

Channel URL 2026 API status Revenue Cut
Leanpub (Markua git push) leanpub.com Auto via git push to manuscript branch 80% royalty - 50¢/sale 20% + 50¢
Gumroad gumroad.com Auto via REST API 10% flat (Gumroad fee) 10%
LemonSqueezy lemonsqueezy.com Auto via REST API; MoR handles VAT 5% + 50¢ 5%+50¢
Draft2Digital (aggregator ? B&N/Kobo/Apple/Scribd) draft2digital.com No API — manual upload ~60% net royalty (channel-dependent) varies
Amazon KDP kdp.amazon.com No public API ever existed — browser-uploader bot or manual 70% (in $2.99-$9.99 range) 30%
Google Play Books Partner Center play.google.com/books/publish Manual upload (ISBN-recommended); no automated publish API 70% 30%

Extension (browser + VS Code)

Channel URL 2026 API status Revenue Cut
Chrome Web Store chrome.google.com/webstore Auto after first manual listing Paid extension (5% Google fee where applicable) 5%
Firefox Add-ons (AMO) addons.mozilla.org Auto via web-ext sign Free only (no built-in payments) n/a
Microsoft Edge Add-ons microsoftedge.microsoft.com/addons Auto via edge-add-on-action Free only n/a
VS Code Marketplace marketplace.visualstudio.com Auto via vsce publish Free; sponsor link allowed n/a
Open VSX (JetBrains, Cursor, etc.) open-vsx.org Auto via ovsx publish Free n/a
GitHub Releases (sideload installer) github.com//releases Auto via gh release create Direct purchase via Gumroad/LemonSqueezy link in README 0%

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

Field Required Used by
title yes All channels
body (or body_path) yes Long-form channels (dev.to, Hashnode, Medium draft)
canonical_url yes All channels (sets <link rel="canonical"> where supported)
type yes app | 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