Global map for immutable, geo-referenced visual evidence anchored on XRPL.
- React + Vite single-page app showing a dark MapLibre map with neon markers.
- Multi-wallet XRPL connect (Xaman, Crossmark, GemWallet, WalletConnect) via
xrpl-connect. - Upload images/videos/PDF to IPFS (Pinata), then submit an XRPL Payment with a JSON Memo tagged
TRANSPARENCE_V1. - Read on-chain proofs from a journal XRPL account to rebuild the evidence feed.
- Geographic filtering by country polygons or adjustable-radius circle.
- Light AI helpers (stubbed) to prefill metadata and “verify” context.
- React 19, TypeScript, Vite 6.
- MapLibre GL 4, Natural Earth GeoJSON, Carto dark tiles.
- XRPL SDK +
xrpl-connectfor wallet connection/signing. - IPFS via Pinata.
- Tailwind CDN plus custom glass/neon components (
components/UI).
pnpm install
pnpm devOther scripts: pnpm build (production bundle) and pnpm preview (serve the build).
VITE_PINATA_JWT(required): Pinata JWT forpinFileToIPFS.VITE_XRPL_JOURNAL_ADDRESSr9SdkAXpbfcw4aDBixXSMoV3v7Aa3XYZmVVITE_XRPL_ENDPOINTwss://s.altnet.rippletest.net:51233VITE_XRPL_EXPLORERhttps://testnet.xrpl.org/transactions/
- Connect wallet with
XRPLWalletConnector(Xaman/Crossmark/GemWallet/WalletConnect). Address and status live inWalletProvider. - Explore/filter: click a country to filter, or click the map to set a circle center and adjust radius (km). The sidebar list applies the filter; map markers stay visible.
- Submit evidence: FAB “NEW EVIDENCE” → pick map location → upload image/video/PDF. File goes to Pinata; then an XRPL Payment is submitted with Memo JSON (cid, url, lat/lon, title, tags, etc.).
- Inspect: clicking a list item or marker opens
DetailModal(media, coords, IPFS hash, XRPL hash with explorer link, tags, verified flag). “Run Analysis” returns the stubbed response fromgeminiService.
- IPFS:
services/ipfsService.tsposts to Pinata and returnscid+ gateway URL. - XRPL:
services/walletService.tssigns/submits a Payment with MemoTRANSPARENCE_V1;services/xrplService.tsreadsaccount_txonVITE_XRPL_JOURNAL_ADDRESSand parses memos intoEvidenceItem. - Geolocation: MapLibre clicks, Natural Earth country polygons with Turf
booleanPointInPolygon, circle viaturf.circle. Reverse geocode (OpenStreetMap Nominatim) inUploadModal. - AI (stub):
services/geminiService.tsreturns fixed values (no key needed).