Role: Main developer — owned the platform end-to-end: the Next.js trading UI, the Rust indexer/backend, the on-chain integration, and CI/CD.
End-to-end ownership of a Solana DEX: Next.js 16 trading frontend and a Rust real-time indexer. Two streaming modes (mock Geyser for localnet/CI, Yellowstone gRPC for devnet/mainnet) switch via a Cargo feature flag, and a two-lane Playwright harness validates deployment coherence across frontend env, RPC, indexer, program ID, and token mints before any product assertion runs.
Key Features
- End-to-end ownership of Next.js trading frontend + Rust real-time indexer
- Two-lane Playwright E2E: deterministic test wallet + LiteSVM in-memory RPC
- Deployment-coherence pre-check across frontend env, RPC, indexer, program ID, and token mints
- dev:mock / dev:live split eliminating silent mock-fallback bugs
- Single API proxy ingress with ESLint-enforced boundary
- Streaming-mode switch (mock Geyser ↔ Yellowstone gRPC) via Cargo feature flag
Tech Stack
Frontend
Indexer
Storage & Search
Solana & Web3
Testing & Observability
Challenges & Solutions
Untrusted Browser-to-Indexer Access
A trading SPA talking directly to the indexer from the browser opens cross-origin fetch and token-leak risks, and the boundary erodes the moment any component reaches for a raw fetch.
Routed all browser-to-indexer traffic through a single API proxy as the only ingress, and enforced it with a custom ESLint rule that bans raw cross-origin fetch in the app, removing whole classes of CSRF and token-leak bugs.
Indexing High-Volume On-Chain State
Deserializing and serving 10+ Solana account types and on-chain events at trading-app latency needs more than a single database can offer.
Built a Rust indexer on Tokio over a four-backend storage layer — PostgreSQL for analytics, RocksDB for raw account state, Redis for hot cache, and Tantivy for token search — with discriminator-routed Borsh deserialization and a Cargo feature flag switching between mock Geyser and Yellowstone gRPC streaming.
Slow, Flaky Full-Stack Tests
On-chain integration tests against a live validator were slow and non-deterministic, and env drift between frontend, RPC, indexer, and on-chain program made failures hard to trust.
Built a two-lane Playwright setup — a deterministic test-wallet lane and a LiteSVM in-memory RPC lane — and added a deployment-coherence pre-check asserting frontend env, RPC, indexer URL, program ID, and token mints all match before any product assertion runs.