Inspiration

The both of us grew up in Hong Kong, which helped us realize the high leverage value of local community and supporting each other. Whether that be watching the neighbourhood children walk home from school or stopping by the local snack shop, we were able to boost everyone up both economically as well as develop a strong sense of culture.

That's why we felt so strongly when we learned that black-owned small businesses face disproportionate barriers to capital and customer retention in Canada. Traditional banks reject them at higher rates, and existing fintech solutions don't address the community-driven trust networks that have historically powered Black economic empowerment, like lending circles and mutual aid. We wanted to build something that solves both sides: access to capital through community-funded microloans, and a loyalty rewards system that drives repeat customers back to Black-owned businesses.

Most importantly, we wanted to do it without forcing anyone to learn what a wallet seed is.

What it does

LocalRoots is a platform with three user roles, each with zero crypto exposure.

  • Customers browse a directory of Black-owned businesses, pay by card, and earn reward points redeemable at any participating business. They never see any blockchain-related concepts.
  • Business owners register for free, get listed in the directory, receive revenue from customer purchases and point redemptions, and can apply for microloans through lending circles. They see USD balances in their dashboard.
  • Community lenders deposit funds into a Shared Asset Vault (SAV) via Stripe, which pools capital for microloans to vetted businesses. Loans are disbursed in milestone-gated tranches; borrowers must submit proof (receipts, photos, invoices) that circle members verify before the next tranche unlocks. Lenders earn interest on repayments, proportional to their contribution.

Behind the scenes, XRPL handles RLUSD stablecoin settlement, MPT-based loyalty token minting, on-chain credential issuance for circle membership and business verification, and lending/borrowing protocols, all invisible to the end user.

How we built it

  • Frontend: Next.js 14 (React 18) with Tailwind CSS
  • Backend: Next.js API routes handling Stripe payments, XRPL transactions, and Supabase queries
  • Database: Supabase Postgres for all application state
  • Auth: Supabase Auth (email + password) with middleware-based session management and role-based route protection
  • Blockchain: XRPL Devnet for RLUSD stablecoin payments, MPT loyalty token issuance/transfers, and on-chain credentials (CredentialCreate/CredentialAccept) for circle membership and business verification
  • Payments: Stripe (test mode) for all fiat on-ramps
  • Crypto abstraction: A full custodial model where businesses never touch XRPL wallets. The platform holds RLUSD on behalf of businesses, tracks balances in an internal ledger, and handles all on-chain operations server-side

Challenges we ran into

  • XLS-85 not active on testnet: Native XRPL token escrow went live on mainnet but wasn't available on devnet during development. We pivoted from EscrowCreate-based tranche disbursement to a custodial pattern using direct RLUSD Payments, with tranche locking managed in Supabase. This was unfortunate - ideally we would have preferred to do locking with devnet protocols.
  • DefaultRipple + NoRipple on the RLUSD issuer: XRPL token payments between non-issuer accounts must ripple through the issuer. Without DefaultRipple enabled, every trustline gets NoRipple baked in, causing tecPATH_DRY on every RLUSD transfer. We had to implement a specific setup order, enable DefaultRipple, create trustlines, then clear NoRipple on the issuer's side of each trustline.
  • Crypto abstraction at every layer: Making blockchain truly invisible required rethinking every flow. Customers earn "points" (actually MPT tokens). Businesses see "USD balances" (actually RLUSD in a custodial account). Lenders deposit via "card payment" (actually converted to RLUSD on-chain). Every user-facing string, every UI element, every error message had to be scrubbed of crypto terminology.

Accomplishments that we're proud of

  • Complete crypto abstraction: Three distinct user roles, and not a single one ever touches crypto. Customers see points and card payments. Businesses see dollar balances. Lenders see deposit amounts and earned interest. The XRPL layer is fully invisible.
  • Full lending circle lifecycle: From circle creation to credential issuance, loan application, milestone-gated tranche disbursement with proof upload and peer review, Stripe-powered repayment, interest distribution, and borrower tier upgrades: the entire Grameen-model flow works end-to-end.
  • On-chain audit trail: Despite the custodial abstraction, every RLUSD disbursement and repayment is recorded on XRPL with transaction hashes stored in the database, giving the platform full on-chain transparency for auditing.

What we learned

  • Crypto abstraction is much harder than crypto integration. The technical challenge isn't connecting to XRPL, it's ensuring that no blockchain concept leaks into the user experience. Every error message, loading state, and confirmation screen had to be designed from the user's mental model, not the system's.
  • XRPL's amendment system means testnet and mainnet have different capabilities at any given time. Building against bleeding-edge features (XLS-85 token escrow, XLS-70 credentials) requires fallback plans.
  • Community lending models like Grameen circles translate surprisingly well to software. The peer review and social guarantee mechanics map naturally to approval thresholds and credential-gated access.
  • Supabase + XRPL is a powerful combination: Supabase handles the application state that needs to be fast and queryable, while XRPL handles the financial primitives that need to be trustless and auditable.

What's next for LocalRoots

  • We wanted to implement Rust WASM smart contracts so that the framework is more reliable and trusted by the community!
  • AI-assisted proof validation for milestone submissions (receipt OCR, invoice parsing) to reduce manual review burden on circle members
  • Production Stripe integration too - we wanted to move from test mode to live payments with Stripe Connect payouts for business withdrawals and lender withdrawals

Built With

Share this project:

Updates