Savage Summit is a Starknet king-of-the-hill game. Players send Beast NFTs to contest the summit, use consumables, and earn tokenized rewards.
- Summit control rotates through onchain combat.
- Beast progression combines XP, stat upgrades, and consumable token usage.
- Realtime UX is driven by
Indexer -> PostgreSQL NOTIFY -> API WS -> Client.
Client (React SPA) -> Summit Contract (Cairo on Starknet)
^ |
| v
+-- API (Hono REST + WS) <- Indexer (Apibara DNA)
^ |
+------ PostgreSQL <-----+
| Layer |
Stack |
| Client |
React 18, TypeScript, Vite, MUI, Zustand |
| Contracts |
Cairo 2.15.0, Scarb 2.15.1, Starknet Foundry 0.56.0 |
| Indexer |
Apibara DNA, TypeScript, Drizzle ORM, PostgreSQL |
| API |
Hono, TypeScript, PostgreSQL, WebSocket |
- Rust
1.89.0
- Scarb
2.15.1
- Starknet Foundry (
snforge) 0.56.0
- Node.js
22
- pnpm
10
- PostgreSQL (local or hosted)
Toolchain versions come from .tool-versions and .github/workflows/pr-ci.yml.
- Install dependencies per Node component:
cd client && pnpm install
cd indexer && pnpm install
cd api && pnpm install
- Configure environment variables for each component (see each component README).
- Start PostgreSQL and verify
DATABASE_URL connectivity.
- Start services in separate terminals:
- Indexer first run/schema change:
cd indexer && pnpm db:migrate
- Indexer daily start:
cd indexer && pnpm dev
- API:
cd api && pnpm dev
- Client:
cd client && pnpm dev
- Run contract checks when changing Cairo logic:
cd contracts && scarb fmt --check && scarb test
- Optional coverage: install
cairo-coverage v0.6.0 from the official releases page (https://github.com/software-mansion/cairo-coverage/releases/tag/v0.6.0), then run scarb test --coverage
PR CI is path-filtered and runs component-specific checks:
| Component |
Trigger Paths |
CI Steps |
| Contracts |
contracts/** |
scarb fmt --check -> scarb test --coverage -> Codecov |
| Client |
client/**, contracts/src/models/beast.cairo |
pnpm lint -> pnpm build -> pnpm test:parity -> pnpm test:coverage -> Codecov |
| Indexer |
indexer/**, contracts/src/models/beast.cairo |
pnpm exec tsc --noEmit -> pnpm build -> pnpm test:parity -> pnpm test:coverage -> Codecov |
| API |
api/** |
pnpm exec tsc --noEmit -> pnpm build |