A modern, full-stack skill-sharing and learning community platform built with Spring Boot and React. SkillZone empowers users to share their learning journey, showcase skills, engage with peers through posts and comments, and build a professional network.
-
Registration & Authentication
- Email-based user registration with secure password handling
- Email/password login
- Google OAuth2 integration for seamless sign-up
- User profile management with bio and personal information
-
Social Networking
- Follow/unfollow users
- User discovery and profile viewing
- User activity tracking
-
Full CRUD Operations
- Create, read, update, and delete posts
- Rich content support with titles and descriptions
- Media attachments (images, files up to 50MB)
-
Engagement Features
- Like system with user tracking
- Comment functionality with nested support
- Post filtering (all posts, personal posts)
-
Skill Documentation
- Track learning progress by skill with detailed descriptions
- Document start and end dates for learning goals
- Categorize skills by field/domain
- Attach supporting materials (images, PDFs)
-
Progress Management
- View all community learning progress
- Track personal learning journey
- Update and monitor skill development
- Real-time Alerts
- Activity-based notifications (likes, comments, follows)
- Read/unread status tracking
- Notification badge in navigation bar
- Instant notification updates
| Technology | Version | Purpose |
|---|---|---|
| Spring Boot | 3.4.4 | Web framework & API |
| Java | 24 | Programming language |
| MongoDB | Latest | Primary document database |
| MySQL | Latest | Relational data support |
| Spring Security | 3.x | Authentication & authorization |
| Spring OAuth2 | 3.x | OAuth2 client integration |
| Maven | 3.x | Build & dependency management |
| Technology | Version | Purpose |
|---|---|---|
| React | 19.1.0 | UI framework |
| React Router DOM | 7.4.1 | Client-side routing |
| Axios | 1.8.4 | HTTP client |
| React Icons | 5.5.0 | Icon library |
| React Modal | 3.16.3 | Modal components |
| Jest & React Testing Library | Latest | Testing framework |
SkillZone/
βββ backend/ # Spring Boot application
β βββ src/
β β βββ main/
β β β βββ java/backend/
β β β β βββ SkillZoneApplication.java
β β β β βββ config/
β β β β β βββ CorsConfig.java
β β β β β βββ SecurityConfig.java
β β β β β βββ WebConfig.java
β β β β βββ controller/
β β β β β βββ UserController.java
β β β β β βββ PostManagementController.java
β β β β β βββ LearningProgressController.java
β β β β β βββ NotificationController.java
β β β β β βββ OAuthController.java
β β β β βββ model/
β β β β β βββ UserModel.java
β β β β β βββ PostManagementModel.java
β β β β β βββ LearningProgressModel.java
β β β β β βββ NotificationModel.java
β β β β β βββ Comment.java
β β β β βββ repository/
β β β β β βββ UserRepository.java
β β β β β βββ PostManagementRepository.java
β β β β β βββ LearningProgressRepository.java
β β β β β βββ NotificationRepository.java
β β β β βββ exception/
β β β β βββ UserNotFoundException.java
β β β β βββ PostManagementNotFoundException.java
β β β β βββ LearningProgressNotFoundException.java
β β β βββ resources/
β β β βββ application.properties
β β βββ test/
β β βββ java/backend/
β βββ pom.xml
β βββ mvnw / mvnw.cmd
β
βββ frontend/ # React application
β βββ src/
β β βββ Pages/
β β β βββ UserManagement/
β β β β βββ UserLogin.js
β β β β βββ UserRegister.js
β β β β βββ UserProfile.js
β β β β βββ UpdateUserProfile.js
β β β βββ PostManagement/
β β β β βββ AllPost.js
β β β β βββ AddNewPost.js
β β β β βββ MyPost.js
β β β β βββ UpdatePost.js
β β β βββ LearningProgress/
β β β β βββ AllLearningProgress.js
β β β β βββ AddLearningProgress.js
β β β β βββ MyLearningProgress.js
β β β β βββ UpdateLearningProgress.js
β β β βββ NotificationManagement/
β β β βββ NotificationsPage.js
β β βββ Components/
β β β βββ NavBar/
β β β βββ NavBar.js
β β β βββ NavBar.css
β β βββ App.js
β β βββ index.js
β β βββ App.css
β βββ public/
β β βββ index.html
β βββ package.json
β
βββ README.md
- Java 24+ (JDK)
- Node.js 18+ & npm
- MongoDB Atlas account (or local MongoDB)
- MySQL (optional, for secondary database)
- Git (for version control)
-
Navigate to backend directory:
cd backend -
Create Environment Configuration:
- Copy the example environment file:
cp .env.example .env
- Edit
.envwith your actual credentials:
MONGODB_URI=mongodb+srv://<username>:<password>@<cluster>.mongodb.net/ MONGODB_DATABASE=<your_database_name> GOOGLE_CLIENT_ID=<your_google_client_id> GOOGLE_CLIENT_SECRET=<your_google_client_secret>
-
Configure Application Properties:
- Environment variables are now automatically loaded via Spring Boot
- The
application.propertiesfile uses${VARIABLE_NAME}syntax - No need to edit
application.properties- just set environment variables
-
Set Environment Variables (Windows PowerShell):
$env:MONGODB_URI="mongodb+srv://<username>:<password>@<cluster>.mongodb.net/" $env:MONGODB_DATABASE="your_database_name" $env:GOOGLE_CLIENT_ID="your_client_id" $env:GOOGLE_CLIENT_SECRET="your_client_secret"
-
Set Environment Variables (Linux/macOS):
export MONGODB_URI="mongodb+srv://<username>:<password>@<cluster>.mongodb.net/" export MONGODB_DATABASE="your_database_name" export GOOGLE_CLIENT_ID="your_client_id" export GOOGLE_CLIENT_SECRET="your_client_secret"
-
Build the project:
mvn clean install
-
Run the application:
mvn spring-boot:run
Backend runs on
http://localhost:8080
-
Navigate to frontend directory:
cd frontend -
Install dependencies:
npm install
-
Start the development server:
npm start
Frontend runs on
http://localhost:3000 -
Build for production:
npm run build
| Method | Endpoint | Description |
|---|---|---|
| POST | /user |
Register new user |
| POST | /login |
User login (email & password) |
| GET | /user/{id} |
Get user profile |
| PUT | /user/{id} |
Update user profile |
| GET | /user/follow/{userId} |
Follow a user |
| GET | /user/unfollow/{userId} |
Unfollow a user |
| Method | Endpoint | Description |
|---|---|---|
| GET | /posts |
Get all posts |
| POST | /posts |
Create new post |
| GET | /posts/{id} |
Get post details |
| PUT | /posts/{id} |
Update post |
| DELETE | /posts/{id} |
Delete post |
| GET | /posts/user/{userId} |
Get user's posts |
| POST | /posts/{id}/like |
Like a post |
| POST | /posts/{id}/comment |
Add comment to post |
| Method | Endpoint | Description |
|---|---|---|
| GET | /learningProgress |
Get all learning progress |
| POST | /learningProgress |
Create learning progress |
| GET | /learningProgress/{id} |
Get progress details |
| PUT | /learningProgress/{id} |
Update progress |
| DELETE | /learningProgress/{id} |
Delete progress |
| GET | /learningProgress/user/{userId} |
Get user's progress |
| Method | Endpoint | Description |
|---|---|---|
| GET | /notifications/{userId} |
Get user notifications |
| PUT | /notifications/{id}/read |
Mark notification as read |
| DELETE | /notifications/{id} |
Delete notification |
| Method | Endpoint | Description |
|---|---|---|
| GET | /oauth2/success |
OAuth2 callback handler |
# Application Name
spring.application.name=backend
# MongoDB Configuration
spring.data.mongodb.uri=mongodb+srv://<user>:<pass>@cluster.mongodb.net/
spring.data.mongodb.database=test
# File Upload Configuration
media.upload.dir=uploads/media
spring.servlet.multipart.max-file-size=50MB
spring.servlet.multipart.max-request-size=50MB
# Google OAuth2 Configuration
spring.security.oauth2.client.registration.google.client-id=<your_id>
spring.security.oauth2.client.registration.google.client-secret=<your_secret>
spring.security.oauth2.client.registration.google.scope=email,profile
# Security
spring.main.allow-bean-definition-overriding=trueCORS is configured to allow requests from http://localhost:3000 in SkillZoneApplication.java:
registry.addMapping("/**")
.allowedOrigins("http://localhost:3000")
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("*")
.allowCredentials(true);For production, update the allowedOrigins value accordingly.
- NEVER commit
.envfiles to Git - They are automatically gitignored - Always use environment variables for sensitive data:
- Database credentials
- API keys
- OAuth secrets
- API tokens
- JWT secrets
- Implement password hashing using bcrypt:
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; new BCryptPasswordEncoder().encode(password)
If credentials are accidentally committed:
- Immediately rotate the credentials in your service provider
- Force push corrected history (only if not yet public):
git filter-branch --tree-filter 'rm -f <sensitive_file>' HEAD git push origin main --force - Monitor access logs for unauthorized activity
- Update all dependent systems with new credentials
- Enable HTTPS in production
- Use valid SSL certificates
- Enforce HTTPS redirects
- Update
SkillZoneApplication.javafor production:.allowedOrigins("https://yourdomain.com") // Not localhost in production
- Implement JWT tokens instead of sessions
- Use secure token signing
- Set appropriate token expiration times
- Add
@Validannotations to request parameters - Use validation annotations:
@NotNull, @NotBlank, @Email, @Size, etc.
- Use MongoDB Atlas IP Whitelist
- Enable MongoDB authentication
- Use read-only roles where appropriate
- Enable audit logging
- Implement rate limiting
- Add request validation
- Use API keys for sensitive endpoints
- Log security events
- Keep client secrets secret (use environment variables)
- Implement PKCE for mobile apps
- Validate redirect URIs
- Use secure state parameter handling
- Regularly update dependencies:
mvn dependency:update-check npm audit
- Monitor for CVEs
- Use dependency scanning tools
- All credentials are environment variables
- No secrets in version control
- HTTPS enabled
- CORS properly configured
- Input validation implemented
- Database backups configured
- Monitoring and logging enabled
- Security headers configured
- Rate limiting implemented
- Regular security audits scheduled
curl -X POST http://localhost:8080/user \
-H "Content-Type: application/json" \
-d '{
"fullname": "John Doe",
"email": "john@example.com",
"password": "password123",
"phone": "1234567890"
}'curl -X POST http://localhost:8080/posts \
-H "Content-Type: application/json" \
-d '{
"userID": "user_id",
"title": "My First Post",
"description": "This is my first post on SkillZone",
"media": ["image1.jpg"]
}'curl -X POST http://localhost:8080/learningProgress \
-H "Content-Type: application/json" \
-d '{
"postOwnerID": "user_id",
"skillTitle": "React.js",
"description": "Learning React fundamentals",
"field": "Web Development",
"startDate": "2026-01-01",
"endDate": "2026-03-31"
}'cd backend
mvn testcd frontend
npm test- Build JAR:
mvn clean package - Deploy to cloud platforms (AWS, Azure, Heroku, etc.)
- Set environment variables for database and OAuth credentials
- Build:
npm run build - Deploy to:
- Vercel: Push to GitHub and connect
- Netlify: Drag & drop build folder or Git integration
- AWS S3 + CloudFront: Manual upload
- GitHub Pages: Configure for production build
- Spring Boot Documentation
- React Documentation
- MongoDB Documentation
- Spring Security OAuth2
- React Router Documentation
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
SkillZone Development Team
For questions, feedback, or collaboration opportunities, please reach out through the project repository.
- Verify MongoDB URI in
application.properties - Check network access in MongoDB Atlas (whitelist IP)
- Ensure cluster is running
- Verify frontend URL in
SkillZoneApplication.java - Ensure backend is running on port 8080
- Verify Google OAuth2 credentials are correct
- Check redirect URI configuration in Google Console
- Ensure credentials are set in
application.properties
- Delete
node_modulesandpackage-lock.json - Run
npm installagain - Clear npm cache:
npm cache clean --force
- Real-time notifications using WebSockets
- Advanced search and filtering
- User messaging/chat feature
- Gamification (badges, points)
- Mobile app (React Native)
- API documentation (Swagger/OpenAPI)
- Advanced analytics dashboard
- User recommendation system
- Video content support
- AI-powered skill suggestions