A community-driven project directory for the Stellar Wave Program. Discover every project built through the program, spotlight new entries, rate them across multiple dimensions, and track each project's live on-chain financial activity directly from its Stellar account or Soroban smart contract.
Think of it as Product Hunt meets a Stellar blockchain explorer, scoped to the Wave ecosystem.
- Overview
- Architecture
- Project Structure
- Prerequisites
- Getting Started
- Environment Variables
- API Reference
- Smart Contract
- Data Models
- Contributing
Stellar Wave Hub solves three gaps in the current Wave ecosystem:
| Gap | Solution |
|---|---|
| Discovery | Public directory of all approved Wave projects with search, filters, and categories |
| Quality signal | Multi-dimensional rating system (Overall, Purpose, Innovation, Usability) |
| Transparency | Live on-chain financial tracker via Stellar Horizon API |
User roles:
- Contributor β Browse, submit, and rate projects
- Admin β Review and approve/reject submissions, mark projects as featured
- Visitor (stretch) β Read-only access without registration
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Browser / Client β
β Next.js App Router + Tailwind CSS β
ββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββ
β Server Components + REST
ββββββββββββββββββββββββΌββββββββββββββββββββββββββββ
β Next.js Route Handlers β
β Auth Β· Projects Β· Ratings Β· Financials β
βββββββββββββ¬βββββββββββββββββββββββ¬ββββββββββββββββ
β β
βββββββββββββΌβββββββββββ ββββββββββΌββββββββββββββββ
β SQLite (better- β β Stellar Horizon API β
β sqlite3) database β β (read-only, cached) β
ββββββββββββββββββββββββ ββββββββββββββββββββββββββ
β
ββββββββββββΌβββββββββββββββ
β Soroban Smart Contract β
β (wave_hub_registry) β
β Rust Β· soroban-sdk β
βββββββββββββββββββββββββββ
Tech stack:
| Layer | Technology |
|---|---|
| Frontend | Next.js (App Router), React 18, Tailwind CSS |
| Backend | Next.js Route Handlers (app/api/*) |
| Database | SQLite via better-sqlite3 (upgradeable to PostgreSQL) |
| Auth | JWT bearer tokens, bcrypt password hashing |
| Blockchain | @stellar/stellar-sdk, Stellar Horizon REST API |
| Smart Contract | Rust, soroban-sdk |
| Security | Next.js middleware, route-level auth checks, rate limiting |
stellar-wave-hub/
βββ frontend/ # Next.js full-stack application
β βββ public/
β βββ app/
β β βββ api/ # Backend endpoints in Next.js
β β β βββ auth/
β β β βββ projects/
β β β βββ ratings/
β β β βββ financials/
β β βββ (pages)/ # Route-level UI pages
β β βββ layout.jsx
β β βββ page.jsx
β β βββ globals.css
β βββ components/ # Reusable UI components
β βββ context/ # Global auth state
β βββ lib/
β β βββ db.js # SQLite setup + schema
β β βββ auth.js # JWT utilities
β β βββ stellarService.js # Horizon API wrapper
β βββ package.json
β βββ next.config.js
β βββ tailwind.config.js
β βββ middleware.js
β
βββ contracts/ # Soroban smart contracts (Rust)
βββ wave_hub_registry/
βββ Cargo.toml
βββ
βββ lib.rs # WaveHubRegistry contract
| Tool | Version | Notes |
|---|---|---|
| Node.js | 18+ | Next.js app tooling (frontend + backend) |
| npm / yarn | 9+ | Package manager |
| Rust | 1.74+ | Smart contract compilation |
| Stellar CLI | latest | Contract deployment |
| Git | any | Version control |
Install the Stellar CLI:
cargo install --locked stellar-cli --features optThe steps below assume the Next.js migration is in place.
cd frontend
# Install dependencies
npm install
# Create local environment file and add the variables below
touch .env.local
# Start development server
npm run dev
# Build and start production server
npm run build
npm startThe web app will be available at http://localhost:3000.
All backend endpoints are served from the same Next.js app under http://localhost:3000/api/*.
First admin account: Register normally, then manually update the role column in the SQLite database:
UPDATE users SET role = 'admin' WHERE email = 'your@email.com';cd contracts/wave_hub_registry
# Build the contract
cargo build --target wasm32-unknown-unknown --release
# Or use the Stellar CLI build command
stellar contract build
# Run tests
cargo test
# Deploy to Stellar Testnet
stellar contract deploy \
--wasm target/wasm32-unknown-unknown/release/wave_hub_registry.wasm \
--source <YOUR_SECRET_KEY> \
--network testnet| Variable | Default | Description |
|---|---|---|
PORT |
3000 |
Next.js server port |
JWT_SECRET |
β | Secret for signing JWT tokens (change in production) |
STELLAR_HORIZON_URL |
https://horizon.stellar.org |
Horizon endpoint (https://horizon-testnet.stellar.org for testnet) |
STELLAR_NETWORK |
public |
public or testnet |
DB_PATH |
./data/stellar_wave_hub.db |
SQLite database file path |
NEXT_PUBLIC_APP_URL |
β | Public app URL (e.g., http://localhost:3000) |
All API routes are implemented as Next.js Route Handlers under frontend/app/api/*.
All authenticated routes require the header:
Authorization: Bearer <jwt_token>
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/auth/register |
β | Register a new contributor |
| POST | /api/auth/login |
β | Login and receive JWT |
| GET | /api/auth/me |
Required | Get current user profile |
| PUT | /api/auth/me |
Required | Update profile |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /api/projects |
Optional | List approved projects (supports ?category, ?search, ?sort, ?page, ?limit) |
| POST | /api/projects |
Required | Submit a new project |
| GET | /api/projects/pending |
Admin | Pending approval queue |
| GET | /api/projects/my |
Required | Current user's submissions |
| GET | /api/projects/:slug |
Optional | Project detail page |
| PUT | /api/projects/:id |
Required | Edit own project |
| PUT | /api/projects/:id/approve |
Admin | Approve (optionally feature) |
| PUT | /api/projects/:id/reject |
Admin | Reject with optional reason |
| DELETE | /api/projects/:id |
Admin | Delete a project |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| POST | /api/ratings |
Required | Submit or update a rating |
| GET | /api/ratings/project/:projectId |
β | Get all ratings for a project |
| DELETE | /api/ratings/:id |
Required | Delete own rating |
| Method | Endpoint | Auth | Description |
|---|---|---|---|
| GET | /api/financials/:projectId/summary |
β | Account balances + payment summary |
| GET | /api/financials/:projectId/transactions |
β | Recent transactions (last 20) |
| GET | /api/financials/:projectId/contract-ops |
β | Soroban contract invocations |
The wave_hub_registry Soroban contract (Rust) provides an on-chain registry of approved Stellar Wave projects. It serves as a trustless source of truth complementing the off-chain database.
Contract interface:
// Register a new project (admin only)
fn register_project(env: Env, admin: Address, project_id: Symbol, account_id: Address)
// Remove a project (admin only)
fn remove_project(env: Env, admin: Address, project_id: Symbol)
// Check if a project is registered
fn is_registered(env: Env, project_id: Symbol) -> bool
// Get the Stellar account ID for a project
fn get_account(env: Env, project_id: Symbol) -> Option<Address>
// Get all registered project IDs
fn get_projects(env: Env) -> Vec<Symbol>Deployment addresses:
| Network | Contract ID |
|---|---|
| Testnet | (deploy and update here) |
| Mainnet | (TBD β post-MVP) |
users β id, username, email, password_hash, role, stellar_address, github_url, bio
projects β id, name, slug, description, category, status, stellar_contract_id, stellar_account_id, tags
ratings β id, project_id, user_id, score, purpose_score, innovation_score, usability_score, review_text
financial_snapshots β id, project_id, balances, total_received, total_sent, snapshot_at
contract_invocations β id, project_id, contract_id, transaction_hash, function_name, invoker, ledger
Project status lifecycle:
submitted β pending β approved / rejected
β
featured (admin promotes)
We welcome contributions from everyone! See CONTRIBUTING.md for the full guide.
Quick start:
- Pick an open issue and claim it
- Fork the repo and create a feature branch:
git checkout -b feat/my-feature - Make your changes
- Run checks:
npm run lint(web app) /cargo test(contract) - Add yourself to CONTRIBUTORS.md
- Open a pull request
See the Contributors list for everyone who has helped build this project.
This project is licensed under the MIT License β see the LICENSE file for details.
Built for the Stellar Wave Program community.