Postmill AI
Open-source, AI-native social media management. Schedule to 45+ channels, reply from one inbox, design in-app, and run AI on your own keys — plans from $9/mo. Start free.
Pro-rata creator campaigns on Portaldot. Brands lock a pot in any Portaldot token; creators post Shorts; the pot splits by views and pays out on-chain.
MarketingTypeScript · SolidityGitHub @lazydevproOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Pro-rata creator campaigns on Portaldot V3, funded in any native asset. Portaldot Hacker House 2026.
Translation pending
Loading the full README.
Read the full README ↗Get paid for your reach, fairly. Pro-rata creator campaigns on Portaldot V3, funded in any Portaldot native asset.
A brand locks a pot on-chain in tPOT or any native Assets token, including its own. Creators post YouTube Shorts.
When the window closes, the pot is split by views, with a per-creator cap, and paid to every creator's Portaldot
account. Creators cash out on Portaldot's native DEX, and every payout levels up a soulbound creator badge.
Live app: https://reachpot.vercel.app (Portaldot V3 testnet)
Status: deployed on Portaldot V3 testnet:
Reachpotat0xcfcdb8ccac9b95534aedbbe9c90e49a6a1d493cf(deploy tx0x437ca8659ea19af2ba7cc578e755eed2f3d1aaca4a7d1a65dada5412c6273a15, block 150,033), with the rUSD/NOVA native assets, native-DEX pools and the badge collection. The full lifecycle has run end to end on testnet against the hosted app (testnet e2e): fund → signed submissions → snapshot in TransactionStorage → root → dispute window → payouts → soulbound badges → independent verification → DEX cash-out → brand refund. Built for Portaldot Hacker House 2026, Ecosystem DApps track.
Brands pay "clippers" per view, but fixed-CPM budgets have three problems:
A pro-rata pool escrowed on-chain fixes all three. The budget is always fully and fairly spent, the brand cannot claw it back, and rejecting a creator saves the brand nothing because their share goes to the other creators. Portaldot projects get a growth tool on top: they can pay creators in their own token, and creators can cash out straight away.
Reachpot is built from Portaldot V3's native modules and its EVM working together. On a plain EVM chain you would have to deploy and trust a separate DEX, NFT contract and data-availability layer for this.
| Portaldot V3 feature | How Reachpot uses it |
|---|---|
| Revive (EVM) + native-asset ERC-20 precompiles | Reachpot.sol escrows native Assets tokens directly through their precompile (0x{assetId}000000000000000000000000 + 00010000). Any project token works, with no wrapping and no bridge. |
| H160 ↔ native account mapping | Brands fund from MetaMask (EVM). Creators use a Portaldot wallet; after revive.mapAccount, payouts sent to their H160 land in their native account. |
| AssetConversion (native DEX) | Creators swap payouts to tPOT in one tap, using live on-chain quotes. Campaigns add volume to the token's pool. |
| TransactionStorage | The keeper publishes the allocation snapshot on-chain. The contract pins its blake2-256 hash and location, so anyone can re-derive the payout root. |
| Nfts | Every payout mints or updates a soulbound creator badge whose attributes (campaigns, views, earned) are a portable on-chain résumé. |
flowchart LR
Brand -- "approve (precompile) + createCampaign" --> RP[Reachpot.sol<br/>Revive EVM]
Creator -- "mapAccount + signed Short submission" --> API[Web API]
API -- "views" --> Keeper
Keeper -- "store(snapshot)" --> TS[(TransactionStorage)]
Keeper -- "postRoot(root, total, snapshotHash)" --> RP
Guardian -. "cancelRoot (dispute window)" .-> RP
Keeper -- "payoutMany" --> RP
RP -- "ERC-20 precompile transfer" --> Assets[(Native Assets)]
Keeper -- "mint / set_attribute" --> NFT[(Nfts badge)]
Creator -- "swap to tPOT" --> DEX[(AssetConversion)]
Anyone -. "re-derive root from chain" .-> TS
createCampaign. The pool is
escrowed, and the campaign's rules (brief, min views) are hash-pinned on-chain as rulesHash.revive.mapAccount), and submit Shorts. Each
submission is signed by the creator's wallet, binding the video to the payout account.TransactionStorage, and posts the Merkle root together with the snapshot's hash and location.npm run verify does it on the CLI.payoutMany. Recipients without a native balance get the existential
deposit sponsored, and a failing recipient is skipped and retried rather than blocking the batch. Badges are minted or updated.Requirements: git, Node 22+, Foundry. pnpm is optional: without it, setup runs the pinned version through npx. macOS arm64 or Linux x86_64 for the local chain.
git clone https://github.com/lazydevpro/reachpot && cd reachpot
npm test # fetches contract libs + installs deps, then 17 allocation tests + 23 Foundry tests (fuzz, golden fixtures)
npm run chain:up # local chain with Portaldot's runtime: Parity substrate-node (kitchensink) + eth-rpc, sha256-verified
npm run deploy:local # Reachpot + rUSD/NOVA native assets + DEX pools + badge collection → deployments/local.json
npm run dev # web app + keeper on http://localhost:3000
npm run e2e # (another terminal) brand → creators → snapshot → payouts → verify → DEX cash-out → docs/e2e-local.md
This is the beginning of the README. Read the rest at the original. Read the full README ↗