Superteam Brazil is building the ultimate learning platform for Solana-native developers -- an open-source, interactive education hub that takes builders from zero to deploying production-ready dApps.
Think a complete and engaging learning experience for Solana: gamified progression, interactive coding challenges, on-chain credentials, and a community-driven hub built for crypto natives.
This platform is a production-ready learning management system (LMS) for Solana development. Features include:
- Interactive Code Editor: Split-pane Markdown mixed with live code challenge validation for Rust, TypeScript, and JSON.
- Robust Authentication: Powered by Better Auth allowing wallet linking to Web2 identities (Google/GitHub).
- Multi-Wallet Support: Full integration with Solana Wallet Adapter to connect any Solana wallet.
- On-chain Credentials (cNFTs): Soulbound Metaplex Core NFTs represent the completion of courses mapping to the user's progress.
- Gamification (XP System): Earn on-chain XP tokens (Token-2022) as you progress through lessons and challenges.
- Dynamic Badges & Achievements: Unlock custom Metaplex Core NFT achievements based on platform activity.
- Streak Tracking: Build up consecutive daily coding streaks to earn multipliers and maintain engagement.
- CMS Managed Content: Completely flexible and dynamic courses managed via Sanity CMS.
- Bounties Integration: Directly integrate and display active developer bounties for learners to tackle.
- Internationalization (i18n): Deep translation support for 15 languages across the entire UI (English, Portuguese, Spanish, German, French, Hindi, Indonesian, Italian, Japanese, Korean, Nepali, Russian, Turkish, Vietnamese, and Chinese).
- Local Environment Support: Easy integration for running local Solana validators and mimicking mainnet/devnet environments.
- Live Execution Feedback: Real-time terminal emulation and pass/fail feedback for embedded coding exercises.
- Global Leaderboards: Competitive ranking system filtering by week, month, or all-time XP earned.
- User Dashboards: Comprehensive user profiles mapping connected wallets, completed courses, and skill graphs.
- Dark Mode by Default: A polished, developer-focused aesthetic built on Tailwind CSS v4 and Shadcn UI.
superteam-academy/
├── app/ # Next.js 16 App Router pages and API routes
├── components/ # Reusable React UI components (Shadcn, custom)
├── i18n/ # Internationalization configuration
├── lib/ # Shared utilities, constants, and database schemas
├── locales/ # Translation JSON files for 15 languages (EN, PT-BR, ES, DE, FR, HI, ID, IT, JA, KO, NE, RU, TR, VI, ZH)
├── public/ # Static assets and images
├── sanity/ # Sanity CMS schemas and studio configuration
├── scripts/ # Utility scripts (e.g., collection generation)
└── wallets/ # Local wallet keypairs for on-chain scripting
Our technical implementation has been fully optimized to leverage the latest ecosystem tools:
- Frontend Framework: React 19 + Next.js 16 (App Router)
- Language: Strict TypeScript
- Styling: Tailwind CSS v4, PostCSS, Shadcn UI, Framer Motion
- Headless CMS: Sanity CMS
- Database: PostgreSQL with Drizzle ORM
- Auth: Better Auth, Solana Wallet Adapter
- Blockchain: Solana Web3.js, Anchor Framework, Metaplex Core
- Analytics: PostHog, Google Analytics
- Error Tracking: Sentry
The platform's logic connects to an Anchor program at github.com/solanabr/superteam-academy.
- XP: A soulbound fungible token (Token-2022). Level =
floor(sqrt(xp / 100)). - Credentials: Metaplex Core NFTs, soulbound via PermanentFreezeDelegate. They upgrade as the learner progresses.
- Achievements: Represented on-chain through
AchievementTypeandAchievementReceiptPDAs, backing soulbound Metaplex Core NFTs. - Streaks: A frontend-managed daily activity tracker.
Before you begin, ensure you have the following installed on your system:
- Node.js (v20 or higher) - Download
- Bun (latest version) - Install Guide
- Rust & Cargo - Install via rustup
- Solana CLI - Installation Guide
- Anchor CLI (v0.32+) - Installation Guide
- PostgreSQL (v14+) - Download
- Git - Download
git clone https://github.com/exyreams/superteam-academy.git
cd superteam-academybun installThis will install all required npm packages including Next.js, React, Solana libraries, and development tools.
Create a new PostgreSQL database for the project:
# Connect to PostgreSQL
psql -U postgres
# Create database
CREATE DATABASE superteam_academy;
# Exit psql
\qCopy the example environment file and configure it:
cp .env.example .env.localOpen .env.local and configure the following required variables:
Database Configuration:
DATABASE_URL="postgresql://user:password@localhost:5432/superteam_academy"Solana Configuration:
NEXT_PUBLIC_PROGRAM_ID="YOUR_PROGRAM_ID"
NEXT_PUBLIC_XP_MINT="YOUR_XP_MINT_ADDRESS"
NEXT_PUBLIC_AUTHORITY="YOUR_AUTHORITY_ADDRESS"
NEXT_PUBLIC_CLUSTER="devnet"Backend Signer (Required for on-chain operations):
BACKEND_SIGNER_KEYPAIR="[124,56,12,...]" # Your wallet private key as JSON array
XP_MINT_KEYPAIR="[124,56,12,...]" # XP mint authority keypairSanity CMS:
NEXT_PUBLIC_SANITY_PROJECT_ID="YOUR_SANITY_PROJECT_ID"
NEXT_PUBLIC_SANITY_DATASET="production"
SANITY_API_TOKEN="YOUR_SANITY_API_TOKEN"Better Auth:
BETTER_AUTH_SECRET="YOUR_BETTER_AUTH_SECRET" # Generate with: openssl rand -base64 32
BETTER_AUTH_URL="http://localhost:3000"
BETTER_AUTH_TRUSTED_ORIGINS="http://localhost:3000"OAuth Providers (Optional):
GOOGLE_CLIENT_ID="YOUR_GOOGLE_CLIENT_ID"
GOOGLE_CLIENT_SECRET="YOUR_GOOGLE_CLIENT_SECRET"
GITHUB_CLIENT_ID="YOUR_GITHUB_CLIENT_ID"
GITHUB_CLIENT_SECRET="YOUR_GITHUB_CLIENT_SECRET"Admin Access:
ADMIN_WALLETS="YOUR_WALLET_ADDRESS"
ADMIN_EMAILS="your-email@example.com"Analytics (Optional):
NEXT_PUBLIC_POSTHOG_KEY="YOUR_POSTHOG_KEY"
NEXT_PUBLIC_POSTHOG_HOST="https://us.i.posthog.com"
NEXT_PUBLIC_GOOGLE_ANALYTICS_ID="G-XXXXXXXXXX"Create a wallets directory and generate keypairs for local development:
mkdir -p wallets
solana-keygen new --outfile wallets/signer.json --no-bip39-passphraseConvert the keypair to the format needed for environment variables:
# Display keypair as JSON array
cat wallets/signer.jsonCopy the output array and paste it into your .env.local for BACKEND_SIGNER_KEYPAIR.
Push the Drizzle ORM schema to your PostgreSQL database:
bun run db:pushThis creates all necessary tables and relationships in your database.
If you want to manage course content:
- Create a Sanity project at sanity.io
- Copy your project ID and dataset name to
.env.local - Generate an API token with write permissions
- Navigate to the Sanity studio (if included) or use the Sanity CLI
Run the initialization endpoint to set up on-chain accounts:
# Start the dev server first
bun run dev
# In another terminal, call the init endpoint
curl http://localhost:3000/api/initThis creates the necessary on-chain accounts for XP tokens and achievements.
bun run devThe application will be available at http://localhost:3000.
- Open your browser to
http://localhost:3000 - Connect a Solana wallet (Phantom, Backpack, etc.)
- Sign in with wallet or OAuth provider
- Check that the dashboard loads correctly
Database Management:
bun run db:studio # Open Drizzle Studio to view/edit database
bun run db:generate # Generate migration files
bun run db:migrate # Run migrations
bun run db:pull # Pull schema from databaseCode Quality:
bun run check # Run Biome checks (format + lint)
bun run format # Format code with Biome
bun run lint # Lint code with Biome
bun run lint:fix # Fix linting errors automatically
bun run typecheck # Run TypeScript type checkingProduction Build:
bun run build # Build for production
bun run start # Start production serverFor the credentialing system to work correctly, Metaplex Core collections must be generated for each Learning Track in our system. We provide an easy-to-use script for this.
Before running the script, ensure you have a standard keypair file configured as the signer:
- Create a
walletsfolder in the root project directory (if it doesn't already exist). - Save your wallet's
signer.jsonbyte array insidewallets/signer.json.# Example format [54, 21, 65, ...]
To generate the track collections:
Run the script using Bun from the root of your project:
bun run scripts/create-track-collections.tsOutput:
- The script will connect to the Solana Devnet.
- It derives the needed authority PDA and issues collections using your explicit signer.
- The derived track-to-address mapping is logged to the console and simultaneously written to
track-collections-output.jsonin your root directory. - Use this mapping to update the
TRACK_COLLECTIONSobject inlib/constants/leaderboard.tswith your newly generated collection public keys.
bun run check: Check code formatting and linting (Biome).bun run typecheck: Run strict TypeScript checks.bun run format: Auto-format codebase.bun run lint:fix: Fix linting errors.
- Repository URL: https://github.com/exyreams/superteam-academy
- Contact Email: exyreams@gmail.com
- Twitter: @SuperteamBR
- Discord: discord.gg/superteambrasil
Feel free to read through our Contributing Guidelines and Code of Conduct.
If you discover a security vulnerability, please refer to our Security Policy and email us at exyreams@gmail.com.
This project is distributed under the MIT License. See LICENSE for more information.


