The Learning Platform for Solana Developers
Interactive courses Β· Code challenges Β· On-chain credentials Β· Gamified learning
π Live Demo β’
Features β’
Tech Stack β’
Getting Started β’
Structure β’
Deploy β’
Contributing
Home
Course Catalog
Lesson (Code Challenge)
Dashboard
Leaderboard
Profile
Page
Description
Landing
Animated hero, stats, learning paths, testimonials
Course Catalog
Filter by difficulty, search, categories
Course Detail
Syllabus, module tree, enrollment, progress
Lesson Viewer
Video, rich content, code challenges (Monaco), quizzes
Student Dashboard
XP level, streak calendar, activity feed, enrolled courses
Leaderboard
Global & weekly rankings, XP & streak filters
Profile
Public profile, badge grid, skill radar chart, credentials
Certificates
On-chain verifiable credentials (cNFT), share & verify
Settings
Profile editing, wallet connections, preferences, privacy
Auth
Sign in with Google, GitHub, or Solana wallet
XP system with leveling curve
7-day streak tracking with bonuses
Achievement badges (Explorer, Streak Master, etc.)
Global leaderboard with real-time rankings
βοΈ On-Chain Integration (Solana Devnet)
Soulbound XP tokens (Token-2022 read)
Compressed NFT credentials (cNFTs via Bubblegum)
On-chain verification for certificates
Wallet-based authentication (Phantom, Backpack, Solflare)
π Role-Based Access Control (RBAC)
Role
Access
Admin
Full platform management (/admin/*)
Professor
Course creation & student analytics (/teach/*)
Student
Learning, progress, credentials
π Internationalization
3 languages: English, PortuguΓͺs (BR), EspaΓ±ol
Content & UI fully translated via next-intl
GA4, PostHog (heatmaps), Sentry (error tracking)
Custom event tracking for lessons, enrollments, challenges
Layer
Technology
Framework
Next.js 14 (App Router, RSC)
Language
TypeScript (strict)
Styling
Tailwind CSS 3.4 + CSS variables
Components
shadcn/ui + Radix UI
Auth
NextAuth.js + Solana Wallet Adapter
Database
Supabase (Postgres + RLS + Realtime)
CMS
Sanity v3 (structured content)
Code Editor
Monaco Editor (dynamic import, SSR-safe)
Blockchain
Solana (devnet) β @solana/web3.js, @metaplex
i18n
next-intl (type-safe)
Analytics
Google Analytics 4, PostHog, Sentry
Email
Resend
Package Manager
pnpm (workspace)
Deploy
Vercel
Node.js β₯ 18
pnpm β₯ 8
Supabase project (free tier works)
Sanity project (free tier works)
OAuth credentials (Google, GitHub) β optional for dev
# Clone
git clone https://github.com/kukaklaudio/superteam-academy.git
cd superteam-academy
# Install dependencies
pnpm install
# Configure environment
cp apps/web/.env.example apps/web/.env.local
# Edit .env.local with your credentials
# Run development server
pnpm dev
# Build for production
pnpm build
The app runs at http://localhost:3000 .
Variable
Required
Description
NEXT_PUBLIC_SUPABASE_URL
β
Supabase project URL
NEXT_PUBLIC_SUPABASE_ANON_KEY
β
Supabase anonymous key
SUPABASE_SERVICE_KEY
β
Supabase service role key (server only)
NEXTAUTH_URL
β
App URL (http://localhost:3000 for dev)
NEXTAUTH_SECRET
β
Random secret (openssl rand -base64 32)
GOOGLE_CLIENT_ID
β¬
Google OAuth client ID
GOOGLE_CLIENT_SECRET
β¬
Google OAuth client secret
GITHUB_CLIENT_ID
β¬
GitHub OAuth client ID
GITHUB_CLIENT_SECRET
β¬
GitHub OAuth client secret
NEXT_PUBLIC_SANITY_PROJECT_ID
β
Sanity project ID
NEXT_PUBLIC_SANITY_DATASET
β
Sanity dataset (production)
SANITY_API_TOKEN
β¬
Sanity write token
NEXT_PUBLIC_SOLANA_RPC
β
Solana RPC endpoint
NEXT_PUBLIC_SOLANA_NETWORK
β
devnet or mainnet-beta
NEXT_PUBLIC_GA_ID
β¬
Google Analytics 4 measurement ID
NEXT_PUBLIC_POSTHOG_KEY
β¬
PostHog API key
NEXT_PUBLIC_SENTRY_DSN
β¬
Sentry DSN
RESEND_API_KEY
β¬
Resend API key for emails
NEXT_PUBLIC_APP_URL
β¬
Public app URL (for sitemap, OG)
superteam-academy/
βββ apps/
β βββ web/ # Next.js 14 application
β β βββ public/ # Static assets, robots.txt
β β βββ src/
β β βββ app/ # App Router pages
β β β βββ (admin)/ # Admin routes (RBAC: admin)
β β β βββ (auth)/ # Authenticated routes
β β β βββ (public)/ # Public routes
β β β βββ (teach)/ # Teacher routes (RBAC: professor)
β β β βββ api/ # API routes (NextAuth)
β β β βββ error.tsx # Global error boundary
β β β βββ not-found.tsx # Custom 404
β β β βββ sitemap.ts # Dynamic sitemap
β β β βββ layout.tsx # Root layout
β β βββ components/
β β β βββ admin/ # Admin-specific components
β β β βββ certificates/ # Certificate & credential UI
β β β βββ dashboard/ # XP display, streak, activity
β β β βββ layout/ # Header, footer, sidebar, search
β β β βββ leaderboard/ # Ranking table
β β β βββ lessons/ # Code editor, quiz, video, content
β β β βββ profile/ # Badges, radar chart, credentials
β β β βββ providers/ # Theme, session, analytics
β β β βββ settings/ # Forms for settings page
β β β βββ teach/ # Course & lesson editors
β β β βββ ui/ # shadcn/ui primitives
β β βββ hooks/ # Custom React hooks
β β βββ i18n/ # Internationalization config
β β βββ lib/ # Utilities, analytics, auth
β β βββ services/ # Service interfaces (clean arch)
β β βββ types/ # TypeScript type definitions
β βββ cms/ # Sanity Studio
β βββ schemas/ # Content schemas
βββ packages/ # Shared packages (future)
βββ ARCHITECTURE.md
βββ CMS_GUIDE.md
βββ CUSTOMIZATION.md
βββ README.md
Push to GitHub
Import project in Vercel
Set Root Directory to apps/web
Add all environment variables
Deploy β Vercel auto-detects Next.js
pnpm build # Build all apps
pnpm dev # Dev server with hot reload
pnpm lint # ESLint
pnpm type-check # TypeScript compiler check
Fork the repository
Create a feature branch: git checkout -b feat/my-feature
Make your changes with tests
Ensure pnpm build passes with zero errors
Submit a pull request
Commits: Conventional Commits (feat:, fix:, docs:, chore:)
Code style: Prettier + ESLint (auto-configured)
Types: Strict TypeScript, no any
Components: shadcn/ui patterns, composable, accessible
MIT Β© Superteam Brazil