Back to Projects
§01

StellaChat

A complete messaging protocol built entirely on Solana: public rooms, invite-only groups with admin roles, and direct-message requests, with zero backend and zero database. Every room, membership, and message exists as a program account under one custom Anchor smart contract, and your wallet is your entire identity.

SolanaRustAnchorBlockchainFull-StackNext.js

This runs live on Solana's public devnet cluster: a real test network, not a simulation. Connecting a devnet-configured wallet costs nothing real to try.

Technologies

  • Solana + Anchor (Rust) program
  • Next.js 16 (App Router), TypeScript, Tailwind
  • @solana/web3.js, @coral-xyz/anchor
  • Base UI
  • Playwright, verified against real devnet transactions

On-Chain Architecture

  • One deployed Anchor program, not one contract per group
  • Profiles, rooms, groups, and messages as PDAs
  • Public rooms + invite-only groups with member/admin roles
  • Join-request / approval flow, plus DM requests

Session-Key Signing

Signing every chat message with your wallet doesn't scale, so the first message in a room or group authorizes a locally-generated, ephemeral "session key" with one signature. Every message after that signs itself instantly, client-side, with zero wallet popups.

Every identity-changing action still always requires the real wallet: joining, requesting, approving, promoting, or removing a member. The session key is scoped on-chain so it can never do anything but post messages as you, enforced by a custom Rust authorization check, not just trusted on the client.

Built & Shipped Solo

Built solo, end-to-end: PRD, Rust program, 21 passing local integration tests, devnet deploy, and a full Next.js frontend wired straight to the live program. Verified against real signed devnet transactions, not mocks, using Playwright with an actual funded keypair.

Group and DM content uses client-side, wallet-signature-derived encryption. Building on a public RPC also meant solving real-world constraints head-on: request caching and deduplication, rate-limit resilience, and optimistic UI with on-chain reconciliation.