- TypeScript 85.4%
- Solidity 5.2%
- Shell 5.1%
- CSS 2.2%
- JavaScript 1.6%
- Other 0.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
Harden CampaignEscrow against fee-recipient stranding and post-pledge fee changes; extend Foundry tests and payments-web3 ABI for the new campaign struct fields. Redeploy required for existing testnet instances. |
||
| .github/workflows | ||
| apps | ||
| contracts | ||
| docker | ||
| docs | ||
| env | ||
| packages | ||
| plans | ||
| scripts | ||
| vendor/steez-ui | ||
| .env.example | ||
| .gitignore | ||
| .gitmodules | ||
| .npmrc | ||
| AGENTS.md | ||
| CONTRIBUTING.md | ||
| LICENSE | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
| start.sh | ||
| tsconfig.base.json | ||
| vitest.config.ts | ||
Fund Indies
Open-source Kickstarter alternative for indie games — self-host your campaigns, accept USDC via Reown (Base + Ethereum), keep full control of your data.
Crowdfunding without the platform tax. MIT licensed.
Features
- All-or-nothing or flexible funding per campaign
- USDC pledges via Reown wallet + escrow (Base Sepolia / Base / Ethereum)
- No card processor — crypto only
- Single-tenant self-host (primary).
DEPLOY_MODE=multiis reserved but not implemented yet - Reward tiers, stretch goals, campaign updates
- Game-oriented fields (platforms, Steam / itch links, early access)
- Docker Compose one-command deploy
Quick start (local dev)
Testnet first (recommended)
./start.sh
# first run creates env/testnet.local.env — fill Reown id + deployer key, re-run
./start.sh --deploy-escrow # optional: deploy CampaignEscrow to Base Sepolia
Or step-by-step:
pnpm install
cp env/testnet.env.example env/testnet.local.env
# edit env/testnet.local.env → Reown WALLETCONNECT_PROJECT_ID, DEPLOYER_PRIVATE_KEY
pnpm testnet:doctor
pnpm testnet:up
pnpm testnet:deploy-escrow && pnpm testnet:sync-env
pnpm dev
Full runbook: docs/testnet.md · ./start.sh --help
Prerequisites
- Node 20+
- pnpm 9+
- Docker (for Postgres)
- Foundry (optional, for escrow deploy): https://getfoundry.sh
# 1. Install
pnpm install
# 2. Env (or use env/testnet.local.env + pnpm testnet:sync-env)
cp .env.example .env
# 3. Database
docker compose -f docker/docker-compose.yml up -d postgres
# 4. Build packages + migrate + seed
pnpm -r --filter './packages/*' build
pnpm db:migrate
pnpm db:seed
# 5. Run API + web
pnpm dev
- Web: http://localhost:5173
- API: http://localhost:3001/api/health
- Primary login: Reown wallet at http://localhost:5173/login (set
WALLETCONNECT_PROJECT_ID) - Email fallback (after seed):
[email protected]/changeme123 - Sample campaign: http://localhost:5173/c/neon-drifters
Docker (full stack)
cp .env.example .env
docker compose -f docker/docker-compose.yml up --build
Configuration
| Variable | Description |
|---|---|
DEPLOY_MODE |
single (default). multi logs a boot warning and is not implemented |
PLATFORM_FEE_BPS |
Platform fee in basis points (default 100 = 1%) |
USDC_ENABLED |
true to enable crypto pledges |
WALLETCONNECT_PROJECT_ID |
Reown Cloud project id |
ESCROW_CONTRACT_ADDRESS |
Deployed CampaignEscrow |
WEB3_CHAIN_IDS |
Comma-separated (e.g. 84532 Base Sepolia) |
Webhooks (local)
stripe listen --forward-to localhost:3001/api/webhooks/stripe
UI (Steez)
The web app is skinned with @steez-ui/react — a futuristic hypebeast design system (minimal cyber chrome, signal green).
- Registry: https://forgejo.thomasjvu.com · owner
steez-ui· package@steez-ui/react@^0.2.1 - UI: https://forgejo.thomasjvu.com/steez-ui/-/packages
- Vendored install (default):
apps/webdepends onfile:../../vendor/steez-ui/steez-ui-react-0.2.1.tgz
pnpm install # uses vendor/steez-ui tarball via apps/web package.json
Optional registry install (Forgejo behind Cloudflare Access): use pnpm install:with-registry with CF_ACCESS_* + FORGEJO_TOKEN set.
Monorepo layout
apps/web Vite + React UI (Steez UI)
apps/api Hono API + settlement cron
packages/db Drizzle schema + migrations
packages/shared Zod schemas, money helpers
packages/config Env parsing
packages/payments-web3
contracts/ Foundry USDC escrow
docker/ Compose + nginx
Smart contract
contracts/src/CampaignEscrow.sol holds USDC until deadline, then:
- Success → transfer to creator (minus optional fee)
- Fail → backers
claimRefund
# with Foundry installed
cd contracts && forge build
Multi-tenant mode
Not implemented. DEPLOY_MODE=multi does not enable Connect onboarding or tenant isolation; the API prints a console warning at boot. Use DEPLOY_MODE=single for production self-host. Multi-tenant is on the roadmap.
License & disclaimer
MIT. This software is infrastructure — operators and creators are responsible for local crowdfunding, consumer, and tax law. Not a securities or equity crowdfunding product.
Roadmap
- Campaigns, tiers, stretch goals, updates
- Settlement job (USDC logical + optional finalize)
- USDC escrow contract + demo pledges
- Multi-tenant marketplace mode
- Reown AppKit wallet connect + USDC pledge UI
- Email receipts (SMTP)
- Digital key fulfillment vault