SkillForge is a full-stack AI learning planner that turns a user's goal, experience level, and learning style into a personalized roadmap with trackable milestones, direct resources, and progress monitoring.
SkillForge is built for learners who want a structured path instead of random tutorials. The app generates a roadmap, stores it per user, and lets users track completion module by module.
- JWT-based authentication
- Personalized roadmap generation from user input
- User-owned saved roadmaps
- Module completion tracking and progress stats
- Free and paid learning resources per milestone
- Provider fallback chain:
- Gemini
- additional Gemini keys
- OpenRouter free backup
- local failsafe generation
- Server-side resource URL normalization and repair
- React
- Axios
- Custom CSS design system
- Java 17
- Spring Boot 3
- Spring Security
- Spring Data JPA
- RestTemplate
- JJWT
- MySQL
- Google Gemini API
- OpenRouter free fallback
- Local failsafe roadmap generator
backend/ Spring Boot REST API
frontend/ React application
- The user signs up or logs in.
- The frontend sends the roadmap goal, level, and learning preference.
- The backend tries Gemini first.
- If Gemini is unavailable, it rotates through backup providers.
- The roadmap is saved to MySQL with user ownership.
- The frontend renders the modules and tracks completion progress.
- Java 17
- Node.js 18+
- MySQL 8+
- Maven 3.9+
Copy the local config template:
copy backend\local-dev.cmd.example backend\local-dev.cmdSet these values in backend/local-dev.cmd:
DB_URLDB_USERNAMEDB_PASSWORDJWT_SECRETGEMINI_API_KEYorGEMINI_API_KEYSOPENROUTER_API_KEYif you want the cloud fallback layer
Reference files:
Inside frontend/.env:
REACT_APP_API_URL=http://localhost:8080Reference:
Create the database once:
CREATE DATABASE skillforge;Hibernate uses ddl-auto=update, so tables are created automatically on first run.
start-backend.cmdstart-frontend.cmdThen open:
http://localhost:3000
POST /auth/registerPOST /auth/loginPOST /ai/generate-roadmapGET /ai/roadmapsGET /modules/{roadmapId}PUT /modules/{id}/completeGET /progress/{roadmapId}
- JWT is stored in
localStorageassf_token - All non-
/auth/**endpoints are protected - Roadmaps and modules are validated against the logged-in user
- Keep secrets in
backend/local-dev.cmd - Do not commit real API keys
- Build output, local logs, and local tools are ignored through
.gitignore
- Verified resource discovery from trusted domains
- Better provider quality scoring
- Roadmap editing and sharing
- Deployment-ready environment setup