An interactive learning platform for Arbitrum Stylus smart contract development. The curriculum teaches Rust-based contract development through a wizardry theme — 51 lessons across three difficulty tiers, with XP, levels, achievement badges, and public completion certificates.
Live at stylus.academy.
| Layer | Technology |
|---|---|
| Frontend | React 19, Vite, Tailwind CSS, shadcn/ui |
| Editor | Monaco Editor with Rust syntax highlighting |
| State | Zustand (global), TanStack Query (server), useState (local) |
| Backend | Node.js, Fastify, TypeScript |
| Database | Supabase — PostgreSQL, Auth, Row Level Security |
| Code execution | Docker container — Rust 1.81, cargo-stylus |
| Monorepo | Turborepo, pnpm workspaces |
- Node 20+
- pnpm 9+
- Docker
- A Supabase project
pnpm installcp apps/web/.env.example apps/web/.env
cp apps/api/.env.example apps/api/.envapps/web/.env
VITE_API_URL=http://localhost:3001
VITE_SUPABASE_URL=your-project-url
VITE_SUPABASE_ANON_KEY=your-anon-key
apps/api/.env
PORT=3001
SUPABASE_URL=your-project-url
SUPABASE_SERVICE_KEY=your-service-role-key
DOCKER_CONTAINER_NAME=stylus-runner
pnpm db:push # push schema.sql to Supabase
pnpm db:seed # seed curriculum datadocker-compose -f docker/docker-compose.yml up -dpnpm devFrontend runs on http://localhost:3000, API on http://localhost:3001.
pnpm dev # start all apps
pnpm dev:web # frontend only
pnpm dev:api # API only
pnpm build # build all apps
pnpm lint # lint all apps
pnpm test # run all tests- User writes Rust in the Monaco editor
- Frontend posts to
/api/exercises/:id/submit - API saves the submission with status
running - API calls
docker execintostylus-runnerto compile and run tests - Results are written back to Supabase and returned to the client
The compiler container runs with no network access and strict resource limits. Each submission gets an isolated directory that is removed after compilation.
See CONTRIBUTING.md for the full guide.
The short version:
- Branch from
main— usefeature/short-descriptionorfix/short-description - Keep PRs small and focused on one change
- Run
pnpm lintandpnpm buildbefore opening a PR - For any UI change, include a screenshot in the PR description
- For curriculum changes, walk through the lesson manually on a fresh account before submitting
MIT — Tolga Yaycı