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.
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.