A pnpm monorepo containing the Soroban smart contracts and React frontend for the Stellar Raise crowdfunding platform.
Stellar Raise is a decentralized crowdfunding application built on the Stellar network using Soroban smart contracts. This repository contains:
apps/contracts— Rust/Soroban smart contracts (crowdfund, factory, soroban_sdk_minor)apps/frontend— Vite + React + TypeScript frontend applicationscripts/— Deployment and utility shell scriptsdocs/— Project documentationspecs/— Feature specifications and design documents
| Tool | Version |
|---|---|
| Node.js | ≥ 20 |
| pnpm | ≥ 9 |
| Rust | stable (via rustup) |
| wasm32 target | rustup target add wasm32-unknown-unknown |
| Soroban CLI / Stellar CLI | latest (cargo install stellar-cli) |
Install pnpm if you don't have it:
npm install -g pnpmClone the repo and install all JS dependencies from the root:
pnpm installThis installs dependencies for all workspaces (apps/frontend, root tooling) in one pass.
Start all apps concurrently with labeled output:
pnpm devOr run each app individually:
# Frontend only
pnpm --filter @stellar-raise/frontend dev
# Contracts have no dev server — compile instead
pnpm --filter @stellar-raise/contracts buildThe frontend dev server runs at http://localhost:5173 by default.
Build all apps:
pnpm buildBuild individually:
# Frontend only
pnpm build:frontend
# Contracts only (compiles to WASM)
pnpm build:contractsThe frontend build output lands in apps/frontend/dist/. The contract WASM lands in target/wasm32-unknown-unknown/release/.
Run all tests across the workspace:
pnpm testRun per app:
# Frontend (Vitest)
pnpm --filter @stellar-raise/frontend test
# Contracts (cargo test)
pnpm --filter @stellar-raise/contracts testThe root also has a Jest-based test suite for legacy tests:
npx jestCheck for lint issues across all workspaces:
pnpm lintFix lint issues (writes changes to disk):
pnpm lint:fixlint:fix runs eslint . --fix for the frontend and cargo clippy --fix for contracts — it actually writes the fixes, not just reports them. Run it before committing if you see lint errors.
Deployment is handled via shell scripts in scripts/. Copy .env.example to .env and fill in your values first:
cp .env.example .envDeploy the crowdfund contract:
./scripts/deploy.sh <creator_address> <token_address> <goal> <deadline_unix> <min_contribution>Interact with a deployed contract:
./scripts/interact.shVerify your environment is configured correctly:
./scripts/verify_env.shSee scripts/deployment_shell_script.md and scripts/wasm_build_pipeline.md for detailed deployment documentation.
stellar-raise-contracts/
├── apps/
│ ├── frontend/ # Vite + React + TypeScript app (@stellar-raise/frontend)
│ └── contracts/ # Rust/Soroban contracts (@stellar-raise/contracts)
│ ├── crowdfund/ # Main crowdfunding contract
│ ├── factory/ # Factory contract
│ └── soroban_sdk_minor/
├── packages/ # Reserved for shared packages
├── scripts/ # Deployment and utility scripts
├── docs/ # Project documentation
├── specs/ # Feature specifications
├── Cargo.toml # Rust workspace root
├── pnpm-workspace.yaml # pnpm workspace config
├── package.json # Root workspace orchestrator
└── tsconfig.json # Root TypeScript config (references apps/frontend)
Each app is independently runnable from its own directory using the same script names (dev, build, test, lint, lint:fix).
Copy .env.example to .env at the repo root and fill in:
| Variable | Description |
|---|---|
STELLAR_RPC_URL |
Soroban RPC endpoint (testnet or mainnet) |
CONTRACT_ID |
Deployed crowdfund contract address |
The frontend may have its own .env — see apps/frontend/ for any Vite-specific env vars (prefixed VITE_).
See CONTRIBUTING.md for commit conventions, branch strategy, and PR guidelines.
Commit messages follow Conventional Commits and are enforced by commitlint on push.