Due to NDAs with our clients, we cannot show the live product. This is a demonstration of what we delivered.← Back to Ultravi0let
Rotating credit · reinvented

Money you grow
together, not alone.

An ancient practice — the gameya, the chit fund, the ROSCA — rebuilt for 2026. Pool funds with a trusted circle. Take your turn at the front of the line. No interest, no banks, no collateral.

Custody secured by audited smart contracts on Base
Open circles · this week
See all
  • Layali Family Circle
    8 members · EGP 1,500/mo
    3 / 8
    Next 12 days
  • Founders Group · Dubai
    12 members · EGP 5,000/mo
    Joining
    Forming
  • Sherouq Engineers
    6 members · EGP 4,000/mo
    5 / 6
    Next 8 days
EGP 38M
Pooled across circles
11,400
Members
98.4%
On-time contribution rate
Zero
Defaults to date
How it works

Old idea. New plumbing.

Circles of six to twenty

Form a circle with friends, family, or strangers we've vetted. Everyone contributes monthly; one member receives the pot each month.

Smart-contract custody

Funds are held by an audited Solidity contract on Base, not by us. Payouts execute automatically. No human can divert the pot.

KYC for every member

Sumsub-powered identity, sanctions screening, and reputation scoring. Late-payers get rate-limited; defaulters cannot rejoin.

Double-entry ledger

Every contribution and payout is a balanced journal entry. Audit your full position at any time, down to the wei.

Smart contracts · audit

The pot is never in our hands.

Every active circle is a Solidity contract deployed on Base mainnet. Contributions go straight from your wallet into the contract escrow; payouts execute automatically on the agreed date. We cannot pause, divert, or freeze your funds — and we wouldn't want to be able to.

Read the OpenZeppelin audit
CircleEscrow.sol · v3.2 · audited
function contribute(uint256 circleId) external payable {
  Circle storage c = circles[circleId];
  require(block.timestamp >= c.cycleStart);
  require(msg.value == c.monthlyAmount, "amount");
  c.balances[msg.sender] += msg.value;
  emit Contribution(circleId, msg.sender, msg.value);

  if (totalThisCycle(c) == c.fullPot) {
    address payable winner = c.queue[c.position];
    c.position++;
    winner.transfer(c.fullPot);
    emit Payout(circleId, winner, c.fullPot);
  }
}

Ready to take your turn?

Browse open circles and pick one that fits your monthly contribution. KYC takes about three minutes.