Skip to content

Roadmap · Codeology TRN suite ​

This is a working plan for the apps under the trn.codeology.co.nz umbrella. It is not TRN's roadmap; that's the chain's stewards' to publish. This is Codeology's roadmap against TRN: what's already built, what's actively in progress, and what's queued — laid out in the order that makes the most sense to actually implement in, given dependencies, blast radius, and time-to-value.

Apps live as siblings in the trn/ workspace and deploy as separate subdomains. The umbrella architecture is documented in the repo's CLAUDE.md.

Reading this page ​

Each row is one shippable unit of work. The order is the recommended build order — earlier rows either unblock later rows or pay back more for less work. Status legend:

  • Shipped — live in production.
  • Active — partially live, currently being iterated on.
  • Queued — designed and prioritised, not started.
  • Backlog — known want, not designed.
  • Open question — depends on a decision before it can start.

Each row also includes the primary TRN primitive it lights up, so it's clear which pallet/precompile is the source of truth and what would have to change on chain to break it.

Now (shipped & in active polish) ​

#StatusWhatTRN primitiveNotes
1Shippedhomepage (landing)noneStatic holding page.
2Shippedfuturepass dashboardpallet-futurepass + FP precompileEVM + Substrate balances, FP resolution, NFT thumbnails, activity.
3Shippedtokenspallet-assets + ERC-20 precompileBalances, transfers, LP token display.
4Shippeddexpallet-dex + DEX precompileSwap + LP.
5Shippedtradepallet-nft + ERC-721 precompileNFT marketplace, buy/sell flows.
6Shippedstakingpallet-staking + Vortex distributionValidators, delegation, Vortex.
7Shippedrootcom (chat)own lightcone transport (not Sylo)P2P channels, DMs, sync protocol v2, paywall scaffold.
8Shippedlightcone (in-browser P2P transport)none (off-chain)JSON-LD-over-SSE mesh; the substrate rootcom runs on.
9Shippeddocsn/a (this site)Comprehensive TRN reference.
10Activerootcom paywall (Stripe + tier gates)off-chain StripeCode shipped behind subscriptionEnabled flag; blocked on Lambda backend to accept tier and create the three Stripe products.
11Activerootcom Tier C secure DMsoff-chain (Yjs-synced keypair)Wire & key path shipped; activates when the user has a Tier-C subscription AND the peer has published secureDmPub in their directory entry.
11aShipped@gen3labs/futurepass-* deps wiredgen3labs-hosted FuturePass stackfuturepass/composables/useTrnBuilder.ts and useFutureverseSigner.ts were dynamically importing @gen3labs/futurepass-transact and @gen3labs/futurepass-signer but neither was in package.json — runtime would have thrown on the first submit-extrinsic call. Now declared (signer ^1.8.0, transact ^0.8.0). See the migration playbook for the wider context of moving off Futureverse-hosted infra.

Next (small, foundational — start here) ​

These are short, useful by themselves, and unblock most of what's below. Do them in this order even if you only have an evening.

12. Maintenance-mode banner (shared) ​

  • Status: Queued.
  • TRN primitive: pallet-maintenance-mode.
  • Why first: zero dependencies; useful in every app; one-evening lift.
  • What to build: a small composable + banner component (read maintenance state from the chain RPC, surface a non-dismissable banner when active). Lives once in a shared place — easiest is to put the composable in futurepass/composables/useChainMaintenance.ts and re-implement the trivial banner in each app, or publish a tiny shared package.
  • Acceptance: every app shows a visible banner within ~30s of chain entering maintenance mode; banner disappears within ~30s of exit.

13. Token-gating module (shared) ​

  • Status: Queued.
  • TRN primitive: derived from pallet-nft / pallet-sft ownership + ERC-20 balances via precompiles.
  • Why second: unlocks gated rootcom channels (Tier-A-paid users gating their channels by NFT ownership), unlocks asset-bound trade discounts, and any later "do you hold X to see Y" pattern.
  • What to build: useTokenGate.ts composable that takes a gate spec ({ kind: 'nft' | 'sft' | 'erc20', collection?, assetId?, threshold }) and an EOA/FP, returns reactive passes: boolean. One shared implementation; consumed first by rootcom's channel access list (extend the access body with an optional gate so the receiver-side filter can drop non-holders).
  • Acceptance: a rootcom channel can be configured to drop posts from anyone not holding a specified collection/SFT/ERC-20 minimum.

14. Soulbound flag in createnft + trade ​

  • Status: Queued.
  • TRN primitive: NFT/SFT pallet soulbound flag + ERC-5484 precompile (added v10.67.0, Mar 2025).
  • Why third: trivial extension once trade is in shape; signals you're current with chain primitives.
  • What to build: add a "soulbound (cannot be transferred)" checkbox to the mint flows in createnft/ and (if scoped) trade/. Add a small SBT badge on listings.
  • Acceptance: a minted soulbound token is visibly badged in trade/ and rejects transfer attempts client-side; the chain rejects them too.

Soon (medium lifts, high real-world value) ​

15. XRPL bridge UI (bridge-xrpl/ — new app) ​

  • Status: Queued.
  • TRN primitive: pallet-xrpl-bridge + relayer; XRPL IssuedCurrency.
  • Why before Ethereum bridge: most recently topical (Oct 17 2025 stuck-tx incident, ongoing infra fix per Shen). XRPL ↔ TRN is also the bridge users notice most because XRP is the network's gas-side asset.
  • What to build:
    • New Nuxt SPA bridge-xrpl/ mirroring the futurepass layout (same EIP-6963 + FP plumbing).
    • Deposit flow (XRPL → TRN): show user's XRPL address (they connect a wallet that signs an XRPL Payment); poll the bridge for confirmation; surface the resulting TRN asset balance.
    • Withdraw flow (TRN → XRPL): user picks asset, signs the TRN-side extrinsic, watches relayer status.
    • Stuck-tx escape hatch UI: surface the bridge state per tx, link out to the bridge contract on rootscan, give clear "still stuck → DM Shen" copy.
  • Dependencies: tokens/ already wraps asset balances — reuse those composables.
  • Acceptance: end-to-end deposit + withdraw, with a status screen that doesn't lie to the user when the bridge is unhealthy.

16. Ethereum bridge UI (bridge-eth/ — new app) ​

  • Status: Queued.
  • TRN primitive: pallet-ethy + Ethereum-side bridge contracts.
  • Why now: structural parallel to the XRPL bridge once that's done; lots of reusable code in the deposit/withdraw shells; growing demand as TRN's ROOT economics tie in to Ethereum L1.
  • What to build: same shape as bridge-xrpl/, but talking to the Ethereum-side relayer and the corresponding pallet-ethy extrinsics on the TRN side. Reuse the deposit/withdraw status component built in #15.
  • Acceptance: end-to-end deposit + withdraw across an ETH/ROOT pair.

17. SFT (ERC-1155) creation + trade ​

  • Status: Queued.
  • TRN primitive: pallet-sft + ERC-1155 precompile.
  • Why: trade/ is NFT-only today; SFTs are how editioned/quantity-bearing items live on TRN. The NFI ecosystem leans on SFTs heavily.
  • What to build: an SFT mint flow (collection, token-id, max supply, max-per-holder, soulbound flag from #14) — likely lives under createnft/ reworked, or its own sft/ app. Trade flow extends trade/ to filter and display SFT listings alongside NFTs (separate tab or unified list with a "supply" column).
  • Acceptance: mint a 100-edition SFT, list 10 for sale at a price, buyer can purchase a quantity, balances reconcile.

Later (niche, larger, or dependent on product direction) ​

18. Doughnut issuance / management UI (doughnut/ — new app) ​

  • Status: Queued.
  • TRN primitive: pallet-doughnut (delegated-authority capability tokens).
  • Why later: powerful but esoteric; user demand is small until there's a flagship consumer flow needing it. Most useful for app-builders wanting to do gasless/proxied action on behalf of an EOA.
  • What to build: a UI to mint a doughnut (specify holder, expiry, capability set), display active outgoing/incoming doughnuts, revoke an issued one. Acceptance is per-spec — the chain enforces the cap.

19. Marketplace royalty + admin in trade/ ​

  • Status: Backlog.
  • TRN primitive: pallet-marketplace (admin flows + royalty config).
  • Why later: the buy/sell flow exists; what's missing is the creator-side of trade — setting royalties, managing offers, accepting/rejecting bids in bulk. Comes after the gateway features above.

20. Validator-operator console (validator-ops/ — new app, or extend staking/) ​

  • Status: Queued.
  • TRN primitive: pallet-staking (operator-side extrinsics).
  • Why later: staking/ is delegator-side; running a node is a CLI workflow per current TRN docs. With Gen3Labs and TRN Labs bringing new operators online (per the handover timeline), there's a small but real audience for a web operator console: configure commission, set rewards destination, signal upgrades, watch slashing risk.
  • What to build: a thin admin UI that calls the validator-side extrinsics; doesn't replace the CLI but covers the day-to-day.

21. Partner Attribution dashboard ​

  • Status: Queued.
  • TRN primitive: pallet-partner-attribution (added v10.65.0, Feb 2025) + the FeeProxy split (v10.67.0).
  • Why later: only matters when you have partner accounts earning a fee share. If/when Codeology operates one, build a small partner/ view: signed-up partners, attribution stats, fee accumulation, withdrawal flow.

22. Crowdsale participation UI ​

  • Status: Open question — depends on whether anyone is running crowdsales on TRN that you want to support.
  • TRN primitive: pallet-crowdsale.
  • Why open: no current product driver; only worth doing once there's a live sale to participate in.

23. TRN RPC redundancy (config-level fallback or self-hosted node) ​

  • Status: Backlog.
  • TRN primitive: the public RPC endpoints — wss://root.rootnet.live/archive/ws + HTTP equivalent for mainnet, wss://porcini.rootnet.app/archive/ws for Porcini testnet.
  • Why later: every Codeology app reads chain state by JSON-RPC against single URLs. If either endpoint dies, all apps simultaneously lose on-chain reads. The migration playbook calls these the lowest-risk dependency (validator partners run them with skin in the game), but architecturally they're a single point of failure.
  • What to build: two options, smallest-first.
    • (a) Config fallback — store a list of RPC URLs per network in a shared runtimeConfig. The provider constructor (@polkadot/api's WsProvider + viem's http()) iterates the list and retries on connect-failure. Requires identifying 1–2 alternate public endpoints (rootscan, Subscan, gen3labs) per network. One-evening lift; no infrastructure work.
    • (b) Self-hosted full-archive TRN node — runs alongside the static AWS stack. Stronger but operationally non-trivial: ~4–8 cores, 200+ GB SSD, snapshot management, version upgrades that track the runtime. Defer unless (a) proves insufficient.
  • Acceptance for (a): kill the primary endpoint in DevTools network blocking; apps fall through to the secondary within a few seconds; reads keep working.

24. Mobile / React Native companion (open question) ​

  • Status: Open question — out of scope today.
  • TRN primitive: all of the above, accessed from a native shell.
  • Why open: the migration playbook flags that @futureverse/auth-react-native has no gen3labs fork as of capture. If a mobile companion ever lands, the options are: (a) author the RN auth glue against @gen3labs/futurepass-auth (~300 LOC upstream), (b) wait for someone in the community to fork it, or (c) skip Pass entirely on mobile and use injected wallets / WalletConnect. Currently no driver — no need to decide.

25. Pass-OIDC sign-in path (contingency) ​

  • Status: Open question — not wired anywhere today.
  • TRN primitive: OAuth2 against the gen3labs-hosted FuturePass issuer at https://futurepass.gen3labs.tech.
  • Why open: every Codeology app signs in via EIP-1193 wallets or the in-browser wallet. None use Pass OIDC. If that ever changes (e.g. an app needs "sign in with Google/X/email" to onboard non-crypto users), the prerequisite is registering an OAuth2 client at https://futurepass.gen3labs.tech/manageclients — old fv-issued client IDs do not work against the gen3labs issuer. Recording this here so future-you doesn't get stuck looking for the registration endpoint.

26. Sylo migration / coexistence ​

  • Status: Open question.
  • TRN primitive: pallet-sylo, pallet-sylo-data-verification.
  • Why open: rootcom is your own design and doesn't use Sylo. If Sylo gets active community development post-handover, decide whether to wrap it (a separate sylo/ app) or stay on lightcone. Doing both adds complexity for no clear win.

Order rationale (one-paragraph version) ​

Maintenance banner and token-gating module first because they're cheap and unlock features in everything you already ship. Soulbound flag next because it's a trivial mint-time checkbox once the gating module is in place. Then XRPL bridge because it's the most-cited public concern on the chain right now and it has clear deposit/withdraw user flows you can ship end-to-end. Ethereum bridge follows because most of the code is the same. SFT trade rounds out the asset story so trade/ covers TRN's full collectibles primitive. Everything below that is niche or dependent on a specific business decision and can wait until a real driver shows up.

What this page deliberately doesn't do ​

  • Doesn't put dates on anything. Estimating is a lie; this is an order, not a schedule.
  • Doesn't claim TRN's stewards have committed to any of these on their side. The chain primitives exist (or are landing) per the changelog and features docs; how soon they're production-grade is on the network, not on Codeology.
  • Doesn't try to be the master list of every TRN pallet. For that, see /reference/appendix-d-pallets and the runtime release notes in /changelog.

See also ​

Last updated:

Curated independently by Codeology. Source-attributed reference for The Root Network. Not affiliated with Futureverse / TRN Labs.