mirror of
https://github.com/th30d4y/OpenLearnX.git
synced 2026-05-26 19:26:33 +00:00
Add development guide (dev.md)
Comprehensive development documentation including: - Quick start guide (5 minutes setup) - Complete setup instructions for all services - MongoDB, Anvil, Backend, and Frontend setup - Service overview and status checks - Common development tasks - Environment variable configuration - Testing guidelines - Debugging tips - Dependency management - Troubleshooting guide - Development checklist This file helps new developers get started quickly with the project.
This commit is contained in:
@@ -0,0 +1,526 @@
|
||||
# OpenLearnX Development Guide
|
||||
|
||||
**Last Updated:** May 12, 2026
|
||||
**Status:** All services operational
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Quick Start (5 minutes)
|
||||
|
||||
### Prerequisites
|
||||
- Node.js 18+
|
||||
- Python 3.10+
|
||||
- MongoDB 4.4+
|
||||
- Foundry (Anvil)
|
||||
|
||||
### One-Command Setup
|
||||
```bash
|
||||
# Terminal 1: Start MongoDB
|
||||
mongod --dbpath ~/mongodata
|
||||
|
||||
# Terminal 2: Start Anvil blockchain
|
||||
export PATH="/home/w4nn4d13/.foundry/bin:$PATH"
|
||||
anvil
|
||||
|
||||
# Terminal 3: Start Backend
|
||||
cd backend
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
pip install -r ../requirements.txt
|
||||
python3 main.py
|
||||
|
||||
# Terminal 4: Start Frontend
|
||||
cd frontend
|
||||
pnpm install
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 Complete Setup Guide
|
||||
|
||||
### Step 1: MongoDB Setup
|
||||
|
||||
```bash
|
||||
# Start MongoDB (local development)
|
||||
mongod --dbpath ~/mongodata --logpath /tmp/mongodb.log
|
||||
|
||||
# Verify connection
|
||||
mongosh
|
||||
> use openlearnx
|
||||
> db.stats()
|
||||
```
|
||||
|
||||
### Step 2: Blockchain Setup
|
||||
|
||||
```bash
|
||||
# Install Foundry (if not installed)
|
||||
curl -L https://foundry.paradigm.xyz | bash
|
||||
source ~/.bashrc # or ~/.zshrc
|
||||
foundryup
|
||||
|
||||
# Start Anvil local blockchain
|
||||
export PATH="/home/w4nn4d13/.foundry/bin:$PATH"
|
||||
anvil
|
||||
|
||||
# You'll see test accounts printed:
|
||||
# Account 0: 0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266
|
||||
# Private Key: 0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
|
||||
```
|
||||
|
||||
### Step 3: Backend Setup
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
|
||||
# Create virtual environment
|
||||
python3 -m venv venv
|
||||
source venv/bin/activate
|
||||
|
||||
# Install dependencies
|
||||
pip install -r ../requirements.txt
|
||||
|
||||
# Create .env file
|
||||
cat > .env << 'EOF'
|
||||
FLASK_ENV=development
|
||||
SECRET_KEY=dev-secret-key-change-in-production
|
||||
MONGODB_URI=mongodb://localhost:27017/openlearnx
|
||||
WEB3_PROVIDER_URL=http://127.0.0.1:8545
|
||||
DEPLOYER_PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
|
||||
JWT_SECRET_KEY=jwt-secret-key
|
||||
CONTRACT_ADDRESS=0x5FbDB2315678afecb367f032d93F642f64180aa3
|
||||
EOF
|
||||
|
||||
# Deploy smart contract
|
||||
python3 scripts/deploy.py
|
||||
|
||||
# Start backend
|
||||
python3 main.py
|
||||
# Should see: Running on http://127.0.0.1:5000
|
||||
```
|
||||
|
||||
### Step 4: Frontend Setup
|
||||
|
||||
```bash
|
||||
cd frontend
|
||||
|
||||
# Install dependencies
|
||||
pnpm install
|
||||
|
||||
# Create .env.local
|
||||
cat > .env.local << 'EOF'
|
||||
NEXT_PUBLIC_API_URL=http://localhost:5000/api
|
||||
NEXT_PUBLIC_CHAIN_ID=31337
|
||||
NEXT_PUBLIC_CONTRACT_ADDRESS=0x5FbDB2315678afecb367f032d93F642f64180aa3
|
||||
NEXT_PUBLIC_RPC_URL=http://127.0.0.1:8545
|
||||
EOF
|
||||
|
||||
# Start development server
|
||||
pnpm dev
|
||||
# Should see: Local: http://localhost:3000
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📊 Services Overview
|
||||
|
||||
### Available Services
|
||||
|
||||
| Service | Port | URL | Status |
|
||||
|---------|------|-----|--------|
|
||||
| MongoDB | 27017 | localhost:27017 | Database |
|
||||
| Anvil | 8545 | http://127.0.0.1:8545 | Blockchain |
|
||||
| Backend | 5000 | http://localhost:5000 | Flask API |
|
||||
| Frontend | 3000 | http://localhost:3000 | Next.js UI |
|
||||
|
||||
### Service Status Check
|
||||
|
||||
```bash
|
||||
# Check all services
|
||||
echo "MongoDB:" && pgrep mongod >/dev/null && echo "✅ Running" || echo "❌ Stopped"
|
||||
echo "Anvil:" && pgrep anvil >/dev/null && echo "✅ Running" || echo "❌ Stopped"
|
||||
echo "Backend:" && curl -s http://localhost:5000/api/health >/dev/null && echo "✅ Running" || echo "❌ Stopped"
|
||||
echo "Frontend:" && curl -s http://localhost:3000 >/dev/null && echo "✅ Running" || echo "❌ Stopped"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔧 Common Development Tasks
|
||||
|
||||
### Backend Development
|
||||
|
||||
#### Run tests
|
||||
```bash
|
||||
cd backend
|
||||
python3 -m pytest tests/ -v
|
||||
```
|
||||
|
||||
#### Rebuild smart contracts
|
||||
```bash
|
||||
cd backend
|
||||
export PATH="/home/w4nn4d13/.foundry/bin:$PATH"
|
||||
forge build
|
||||
```
|
||||
|
||||
#### Deploy contract to Anvil
|
||||
```bash
|
||||
cd backend
|
||||
python3 scripts/deploy.py
|
||||
```
|
||||
|
||||
#### View backend logs
|
||||
```bash
|
||||
tail -f /tmp/openlearnx_backend.log
|
||||
```
|
||||
|
||||
#### API Health Check
|
||||
```bash
|
||||
curl http://localhost:5000/api/health
|
||||
```
|
||||
|
||||
### Frontend Development
|
||||
|
||||
#### Hot reload mode (automatic)
|
||||
```bash
|
||||
cd frontend
|
||||
pnpm dev
|
||||
```
|
||||
|
||||
#### Build for production
|
||||
```bash
|
||||
cd frontend
|
||||
pnpm build
|
||||
```
|
||||
|
||||
#### Build and start production build
|
||||
```bash
|
||||
cd frontend
|
||||
pnpm build
|
||||
pnpm start
|
||||
```
|
||||
|
||||
#### Lint and format
|
||||
```bash
|
||||
cd frontend
|
||||
pnpm lint
|
||||
pnpm format
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📝 Environment Variables
|
||||
|
||||
### Backend (.env)
|
||||
```env
|
||||
# Flask
|
||||
FLASK_ENV=development
|
||||
DEBUG=True
|
||||
SECRET_KEY=dev-secret-key
|
||||
|
||||
# Database
|
||||
MONGODB_URI=mongodb://localhost:27017/openlearnx
|
||||
|
||||
# Blockchain
|
||||
WEB3_PROVIDER_URL=http://127.0.0.1:8545
|
||||
CONTRACT_ADDRESS=0x5FbDB2315678afecb367f032d93F642f64180aa3
|
||||
DEPLOYER_PRIVATE_KEY=0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80
|
||||
|
||||
# JWT
|
||||
JWT_SECRET_KEY=jwt-secret-key
|
||||
|
||||
# Admin
|
||||
ADMIN_TOKEN=admin-token-change-this
|
||||
```
|
||||
|
||||
### Frontend (.env.local)
|
||||
```env
|
||||
NEXT_PUBLIC_API_URL=http://localhost:5000/api
|
||||
NEXT_PUBLIC_CHAIN_ID=31337
|
||||
NEXT_PUBLIC_CONTRACT_ADDRESS=0x5FbDB2315678afecb367f032d93F642f64180aa3
|
||||
NEXT_PUBLIC_RPC_URL=http://127.0.0.1:8545
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🧪 Testing
|
||||
|
||||
### Backend Tests
|
||||
```bash
|
||||
cd backend
|
||||
source venv/bin/activate
|
||||
python3 -m pytest tests/ -v
|
||||
python3 -m pytest tests/ -v --cov= # With coverage
|
||||
```
|
||||
|
||||
### API Testing with curl
|
||||
```bash
|
||||
# Health check
|
||||
curl http://localhost:5000/api/health
|
||||
|
||||
# Dashboard stats
|
||||
curl http://localhost:5000/api/dashboard/comprehensive-stats
|
||||
|
||||
# List courses
|
||||
curl http://localhost:5000/api/courses
|
||||
|
||||
# List quizzes
|
||||
curl http://localhost:5000/api/quizzes
|
||||
```
|
||||
|
||||
### Frontend Testing
|
||||
```bash
|
||||
cd frontend
|
||||
pnpm test # Run tests
|
||||
pnpm test:watch # Watch mode
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🔍 Debugging
|
||||
|
||||
### Backend Debugging
|
||||
|
||||
#### Enable verbose logging
|
||||
```python
|
||||
# In main.py
|
||||
import logging
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
```
|
||||
|
||||
#### Check database
|
||||
```bash
|
||||
mongosh
|
||||
use openlearnx
|
||||
db.users.find()
|
||||
db.quizzes.find()
|
||||
```
|
||||
|
||||
#### Check blockchain
|
||||
```bash
|
||||
# If Anvil is running, check accounts
|
||||
curl -X POST http://127.0.0.1:8545 \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}'
|
||||
```
|
||||
|
||||
### Frontend Debugging
|
||||
|
||||
#### Chrome DevTools
|
||||
- Open http://localhost:3000
|
||||
- Press F12 to open DevTools
|
||||
- Check Console, Network, and Application tabs
|
||||
|
||||
#### Next.js Debug Mode
|
||||
```bash
|
||||
NODE_DEBUG_SKIP_TYPES=*-skip pnpm dev
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📦 Dependency Management
|
||||
|
||||
### Backend
|
||||
|
||||
#### Add Python package
|
||||
```bash
|
||||
cd backend
|
||||
source venv/bin/activate
|
||||
pip install package-name
|
||||
pip freeze > ../requirements.txt
|
||||
```
|
||||
|
||||
#### Update all dependencies
|
||||
```bash
|
||||
cd backend
|
||||
source venv/bin/activate
|
||||
pip install --upgrade pip
|
||||
pip install -U -r ../requirements.txt
|
||||
```
|
||||
|
||||
### Frontend
|
||||
|
||||
#### Add npm package
|
||||
```bash
|
||||
cd frontend
|
||||
pnpm add package-name
|
||||
```
|
||||
|
||||
#### Add dev dependency
|
||||
```bash
|
||||
cd frontend
|
||||
pnpm add -D package-name
|
||||
```
|
||||
|
||||
#### Update packages
|
||||
```bash
|
||||
cd frontend
|
||||
pnpm update
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🛑 Stop Services
|
||||
|
||||
### Stop Individual Services
|
||||
```bash
|
||||
# Backend
|
||||
pkill -f "python3.*main.py"
|
||||
|
||||
# Frontend
|
||||
pkill -f "next dev"
|
||||
|
||||
# Anvil
|
||||
pkill anvil
|
||||
|
||||
# MongoDB
|
||||
killall mongod
|
||||
```
|
||||
|
||||
### Stop All Services
|
||||
```bash
|
||||
pkill mongod && pkill anvil && pkill -f "python3.*main.py" && pkill -f "next dev"
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🐛 Troubleshooting
|
||||
|
||||
### MongoDB Connection Error
|
||||
```bash
|
||||
# Kill any stuck processes
|
||||
killall mongod
|
||||
|
||||
# Remove lock file
|
||||
rm -f ~/mongodata/mongod.lock
|
||||
|
||||
# Restart MongoDB
|
||||
mongod --dbpath ~/mongodata
|
||||
```
|
||||
|
||||
### Port Already in Use
|
||||
```bash
|
||||
# Find process using port
|
||||
lsof -i :5000 # Backend
|
||||
lsof -i :3000 # Frontend
|
||||
lsof -i :8545 # Anvil
|
||||
lsof -i :27017 # MongoDB
|
||||
|
||||
# Kill process
|
||||
kill -9 <PID>
|
||||
```
|
||||
|
||||
### Backend Won't Start
|
||||
```bash
|
||||
cd backend
|
||||
source venv/bin/activate
|
||||
|
||||
# Reinstall dependencies
|
||||
pip install -r ../requirements.txt
|
||||
|
||||
# Check Python version
|
||||
python3 --version # Should be 3.10+
|
||||
|
||||
# Try running with more verbose output
|
||||
python3 main.py -v
|
||||
```
|
||||
|
||||
### Frontend Won't Build
|
||||
```bash
|
||||
cd frontend
|
||||
|
||||
# Clear cache
|
||||
rm -rf .next node_modules pnpm-lock.yaml
|
||||
|
||||
# Reinstall
|
||||
pnpm install
|
||||
|
||||
# Try building again
|
||||
pnpm build
|
||||
```
|
||||
|
||||
### Anvil Issues
|
||||
```bash
|
||||
# Check if Foundry is installed correctly
|
||||
forge --version
|
||||
anvil --version
|
||||
|
||||
# Reinstall Foundry
|
||||
curl -L https://foundry.paradigm.xyz | bash
|
||||
source ~/.bashrc
|
||||
foundryup
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📚 Useful Resources
|
||||
|
||||
- **Backend Framework**: Flask - https://flask.palletsprojects.com/
|
||||
- **Frontend Framework**: Next.js - https://nextjs.org/
|
||||
- **Database**: MongoDB - https://www.mongodb.com/
|
||||
- **Blockchain**: Foundry - https://book.getfoundry.sh/
|
||||
- **API Testing**: Postman - https://www.postman.com/
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Deployment
|
||||
|
||||
For production deployment, see:
|
||||
- [PRODUCTION_DEPLOYMENT.md](./PRODUCTION_DEPLOYMENT.md)
|
||||
- [DEPLOYMENT_GUIDE.md](./DEPLOYMENT_GUIDE.md)
|
||||
|
||||
---
|
||||
|
||||
## 📞 Getting Help
|
||||
|
||||
### Check Logs
|
||||
```bash
|
||||
# Backend logs
|
||||
tail -f /tmp/mongodb.log
|
||||
pm2 logs openlearnx-backend
|
||||
|
||||
# Frontend logs
|
||||
pm2 logs openlearnx-frontend
|
||||
```
|
||||
|
||||
### View Git History
|
||||
```bash
|
||||
git log --oneline -10
|
||||
git diff HEAD~1
|
||||
```
|
||||
|
||||
### Report Issues
|
||||
1. Check [GitHub Issues](https://github.com/th30d4y/OpenLearnX/issues)
|
||||
2. Create new issue with:
|
||||
- Description of problem
|
||||
- Steps to reproduce
|
||||
- Expected vs actual behavior
|
||||
- Environment (OS, versions, etc.)
|
||||
|
||||
---
|
||||
|
||||
## ✅ Development Checklist
|
||||
|
||||
- [ ] MongoDB running
|
||||
- [ ] Anvil running
|
||||
- [ ] Backend running (http://localhost:5000)
|
||||
- [ ] Frontend running (http://localhost:3000)
|
||||
- [ ] Can connect to MetaMask
|
||||
- [ ] Can create account
|
||||
- [ ] Can browse courses
|
||||
- [ ] Can take quiz
|
||||
- [ ] Can mint certificate
|
||||
- [ ] Database has test data
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Next Steps
|
||||
|
||||
1. **Understand Architecture**: Read [ARCHITECTURE.md](./ARCHITECTURE.md)
|
||||
2. **Explore API**: Check [Backend Routes](./backend/routes/)
|
||||
3. **Explore Components**: Check [Frontend Components](./frontend/components/)
|
||||
4. **Review Smart Contracts**: Check [Contracts](./backend/contracts/)
|
||||
5. **Read Tests**: Check [Test Files](./backend/tests/) and [Frontend Tests](./frontend/__tests__/)
|
||||
|
||||
---
|
||||
|
||||
**Happy developing! 🎉**
|
||||
Reference in New Issue
Block a user