EduVault is an educational content marketplace that helps educators, students, and creators publish, license, sell, and manage access to learning materials.
The project combines a modern Next.js application with off-chain file storage, searchable marketplace data, and a planned Stellar/Soroban payment and entitlement layer for low-cost educational content transactions.
Many educational resources are shared through informal channels such as WhatsApp groups, Telegram communities, and manual file transfers. This makes it difficult for creators to earn fairly, buyers to verify ownership, and institutions to manage trusted access.
EduVault provides a creator-first marketplace where learning materials can be uploaded, listed, discovered, purchased, and accessed securely.
- Creator profiles connected to wallet-based onboarding
- Educational material upload flow with thumbnail support
- IPFS-backed file and metadata storage through Pinata
- MongoDB-backed catalog and profile persistence
- Marketplace discovery and material detail pages
- Usage-rights and pricing metadata for each resource
- Planned Stellar-native checkout with XLM or supported Stellar assets
- Planned Soroban-based entitlement checks for protected downloads
- A creator creates a profile and connects a wallet.
- The creator uploads a learning material and optional cover image.
- The file and metadata are pinned to IPFS.
- The listing is stored in MongoDB and displayed in the marketplace.
- A buyer discovers the resource and completes the checkout flow.
- The app verifies access rights before allowing protected downloads.
- Next.js 16
- React 19
- Tailwind CSS 4
- MongoDB
- Pinata/IPFS
- Nodemailer
- wagmi and RainbowKit
- Hardhat and OpenZeppelin for the archived EVM prototype
- Soroban smart contracts written in Rust
- Stellar SDK and RPC/Horizon clients
- Stellar wallet integration
- XLM and Stellar-based stable asset payments
- On-chain purchase entitlement records
Creator / Buyer
|
v
Next.js Frontend
|
v
Next.js API Routes
|---------------------> MongoDB
|---------------------> Pinata / IPFS
|---------------------> Email Service
|
v
Planned Stellar Layer
|
v
Soroban Contracts + Stellar RPC/Horizon
- Frontend: Next.js App Router, React, Tailwind CSS
- Backend: Next.js route handlers for uploads, profiles, and catalog operations
- Storage: MongoDB for profiles and marketplace metadata
- File persistence: IPFS pinning through Pinata
- Wallet prototype: wagmi, RainbowKit, WalletConnect, and Coinbase Wallet support
- Legacy contract: archived Solidity proof of concept in
archive/legacy-evm/
The repository includes an archived Solidity/Celo proof of concept under archive/legacy-evm/.
This legacy code is kept for historical reference and testing only. New blockchain work should target Stellar and Soroban.
- Node.js 20+
- npm 10+ or pnpm
- MongoDB 7+ or Docker
- Pinata credentials for file uploads
- Wallet credentials for testing wallet-based flows
git clone https://github.com/Obiajulu-gif/eduvault.git
cd eduvault
npm install
cp .env.example .env.localStart MongoDB locally with Docker:
docker compose up -d mongodbStart the development server:
npm run devOpen the app at:
http://localhost:3000
Use .env.example as the main reference for local configuration.
| Variable | Required | Purpose |
|---|---|---|
MONGODB_URI |
Yes | MongoDB connection string |
MONGODB_DB |
No | MongoDB database name. Defaults to eduvault |
JWT_SECRET |
Yes | Signs session cookies for authenticated routes |
NEXT_PUBLIC_APP_URL |
Yes | Public app URL used in links and emails |
PINATA_JWT |
Yes | Pinata authentication for uploads |
NEXT_PUBLIC_GATEWAY_URL |
Yes | Gateway URL for pinned content |
EMAIL_USER / EMAIL_PASS |
Optional | Simple email transport configuration |
SMTP_HOST / SMTP_PORT / SMTP_USER / SMTP_PASS |
Optional | SMTP email configuration |
EMAIL_FROM |
Optional | Custom sender address |
NEXT_PUBLIC_WALLETCONNECT_PROJECT_ID |
Optional | Enables current wallet prototype |
NEXT_PUBLIC_STELLAR_NETWORK |
Planned | Target Stellar network |
NEXT_PUBLIC_STELLAR_RPC_URL |
Planned | Stellar/Soroban RPC endpoint |
NEXT_PUBLIC_HORIZON_URL |
Planned | Horizon endpoint for account and event indexing |
NEXT_PUBLIC_SOROBAN_CONTRACT_ID |
Planned | Contract ID for entitlement and payment logic |
NEXT_PUBLIC_ACCEPTED_ASSET |
Planned | Default accepted asset such as XLM or USDC |
npm run dev
npm run build
npm run start
npm run lint
npm test
npm run test:contracts
npm run test:backend
npm run audit:deps
npm run scan:secretsRun the full test suite:
npm testRun backend tests:
npm run test:backendRun archived Solidity prototype tests:
npm run test:contracts- Production deployments must use real values for required secrets.
- Placeholder secrets should not be used in preview or production environments.
- Required production values include
JWT_SECRET,MONGODB_URI,PINATA_JWT,NEXT_PUBLIC_APP_URL, andNEXT_PUBLIC_GATEWAY_URL. - Once Stellar features are enabled, production must also include valid Stellar RPC, Horizon, and contract configuration.
- Clean up stale chain-specific UI references
- Improve creator onboarding and material publishing flows
- Finalize Soroban contract interfaces for registry and entitlement logic
- Add Stellar wallet support
- Deploy Soroban contracts to Stellar testnet
- Support XLM and USDC-based checkout
- Gate downloads based on on-chain entitlement state
- Add creator payout accounting
- Educator and institution verification
- Bulk licensing for schools and learning communities
- Institution-issued access assets and scholarship credits
- Creator analytics and reporting
- Mobile-first purchase flow for low-bandwidth environments
Contributions are welcome. Please read CONTRIBUTING.md before opening a pull request.
Good areas to contribute include:
- Stellar wallet integration
- Soroban contract design
- Marketplace UI improvements
- Security reviews for access control and entitlement logic
- Documentation and developer experience improvements
This project is licensed under the MIT License.
Maintained by Obiajulu-gif.