A layer-by-layer plan to take GistPin from "three good halves that don't touch" to a living, end-to-end, decentralized app.
Strategy: Build bottom-up. Solidify each layer — fully tested and deployed — before building the layer above it consumes it. The contract becomes the source of truth, the backend indexes and serves it, and the frontend consumes the backend.
Wave 1: Contract ──► Wave 2: Backend ──► Wave 3: Frontend
(source of truth) (index & serve) (consume & interact)
Tradeoff we're accepting: no working end-to-end UI until Wave 3 — but every layer is provably done (tested + deployed) before the next one builds on it.
Goal: A production-ready, fully tested GistRegistry exposing a documented interface + event schema for the backend (Wave 2) to integrate against.
Status: All feature code written and unit-tested (26 tests passing), merged to main. The one remaining item — the actual testnet deploy — is tracked in Wave 2 as #1022 (it needs a funded keypair) and also gates the WASM release-build verification.
- Cleanup — removed stray
vault.rs/multi.rs/ops.rs/rollback.rs(#864) - Canonical
gist_postedevent (#873) + 6 more (edited/deleted/hidden/unhidden/removed/reported) - Signed authorship via
require_auth; anonymous still supported (#874) - Per-cell secondary index — no more O(n) scan;
cursoris now an index offset (#875) - Expiry:
expires_at+ttl_secs(24h default / 7d max) +is_active()(#876) - Per-author-per-cell 60s cooldown; anonymous exempt (#877)
- Moderation:
initialize+hide/unhide/remove/report, moderatorrequire_auth(#878) - Author
edit_gist/delete_gist; anonymous gists immutable (#879) - 26 tests covering every rule + rejection path (#880)
- Deploy script + full ABI/event/error spec in
contracts/README.md(#881) - Live testnet deploy + WASM build verified → moved to Wave 2 #1022
Tipping / staking (incentives) are intentionally deferred to a later wave.
Goal: Connect the backend to the deployed Wave 1 contract, run the indexer for real, exit mock mode, and expose the contract's capabilities over the REST API.
Definition of done: Backend runs against the real testnet contract (out of mock mode) · indexer keeps Postgres in sync with on-chain state · integration tests pass against the live contract.
Key decision — signed posts (option A / wallet-direct): the backend only ever submits anonymous posts and reports; all require_auth writes (signed posts, edit/delete, moderation) are signed and submitted by the user's/moderator's wallet (Wave 3) and reach the backend via the indexer.
Tracked issues (build order):
- #1022 — Deploy to testnet + verify WASM build (gate; needs a funded keypair)
- #1023 — Update
soroban.service.tsto the new ABI - #1024 — Exit mock mode; connect to the deployed contract
- #1025 — Wire the indexer → Postgres (all 7 events)
- #1026 — Reflect
hidden/expiry in the DB + query filtering - #1027 — Read + report endpoints; surface moderation/expiry state
- #1028 — Write path anonymous-only (no unverified authorship)
- #1029 — API auth model (default: open for MVP)
- #1030 — Integration tests against the real contract path
- #1031 — Contracts CI + frontend build check (do early)
Goal: Turn the prototype UI into the real product — live data, wallet-based authorship, and interaction with everything the backend now serves.
Definition of done: A user can post a gist that anchors on-chain and appears on another user's map, with optional signed authorship — no mock data anywhere.
- Build an API client; replace mock
useStategists and the fakesetTimeoutpost with realPOST /v1/gistsandGET /v1/gists?lat&lon&radius - Loading / error / empty states for real network calls
- Stellar wallet integration (Freighter / Stellar Wallets Kit) — replaces the removed EVM wagmi/viem
- Sign posts for verifiable authorship (optional; anonymous still supported)
- Display authorship, expiry, and tip counts on gists
- Tipping UI · report/moderation UI
- Finalize the landing page (issue #872) and metadata (issue #871)
- Real-time / polling updates on the map
- Off-chain storage bridging (IPFS/Arweave) for larger payloads and images
- Staking / reputation systems for quality contributors
- Richer gist types, notifications, and discovery
This roadmap tracks direction, not commitments. Concrete work lives in GitHub issues. Done so far: fixes #860–#873 and Wave 1 contract #874–#881 (all merged). In progress: Wave 2 #1022–#1031.