Learn together, grow together - Join or build study groups tailored to your syllabus.
AcadNet is a comprehensive academic collaboration platform designed to connect students through structured study groups, resource sharing, and interactive discussions. Built with modern web technologies, it facilitates seamless academic collaboration and knowledge sharing.
- Create & Join Groups: Form study groups with custom syllabi and course structures
- Public & Private Groups: Control group visibility and access
- Anonymous Participation: Join groups without revealing your identity
- Role-based Access: Admin and member roles with different permissions
- File Upload & Management: Share notes, assignments, and study materials
- Content Moderation: Admin approval system for shared resources
- Topic Organization: Categorize resources by syllabus topics and subtopics
- Like/Dislike System: Community-driven content rating
- Group Forums: Dedicated discussion spaces for each study group
- Threaded Conversations: Organized discussions with replies and nested comments
- Pinned Threads: Highlight important discussions
- Moderation Tools: Lock threads and manage conversations
- Profile System: Complete user profiles with educational background
- Authentication: Secure login with OAuth integration (GitHub)
- User Reporting: Community moderation and safety features
- Admin Dashboard: System administration tools
- Framework: Express.js
- Database: PostgreSQL with Sequelize ORM
- Authentication: JWT + Passport.js (GitHub OAuth)
- File Storage: Local file system with organized structure
- Email: Nodemailer for OTP verification
- Framework: React 19 with TypeScript
- Build Tool: Vite
- Styling: Tailwind CSS
- UI Components: Radix UI + Shadcn/UI
- State Management: React Context API
- Routing: React Router DOM
- Node.js (v18 or later)
- PostgreSQL
- npm
-
Clone the repository
git clone https://github.com/anishkn04/AcadNet.git cd AcadNet -
Install dependencies
npm install
-
Database Setup
# Create PostgreSQL database createdb acadnet -
Environment Configuration Create a
.envfile in the root directory:# PostgreSQL Database Configuration PG_HOST=localhost PG_PORT=5432 PG_USER=your_postgres_user PG_PASSWORD=your_postgres_password PG_DATABASE=acadnet # JWT Secrets JWT_ACCESS_SECRET=your_jwt_access_secret JWT_REFRESH_SECRET=your_jwt_refresh_secret # GitHub OAuth Credentials (Optional) GITHUB_CLIENT_ID=your_github_client_id GITHUB_CLIENT_SECRET=your_github_client_secret # Email Configuration EMAIL=your_email@example.com EMAIL_PASSWORD=your_email_password # Server Configuration BACKEND_PORT=3000
-
Start the Application
# Backend server (Terminal 1) npm start # Frontend development server (Terminal 2) npm run dev
-
Access the Application
- Frontend:
http://localhost:5173 - Backend API:
http://localhost:3000 - API Documentation:
http://localhost:3000/api-docs
- Frontend:
AcadNet/
βββ backend/
β βββ controllers/ # Route handlers
β βββ models/ # Database models (Sequelize)
β βββ routes/ # API route definitions
β βββ services/ # Business logic layer
β βββ middlewares/ # Express middlewares
β βββ config/ # Database & app configuration
β βββ passport/ # OAuth strategies
β βββ utils/ # Utility functions
β βββ validator/ # Input validation
βββ frontend/
β βββ src/
β β βββ components/ # React components
β β βββ pages/ # Page components
β β βββ services/ # API service functions
β β βββ hooks/ # Custom React hooks
β β βββ types/ # TypeScript type definitions
β β βββ utils/ # Utility functions
β β βββ data/ # Static data & constants
β βββ public/ # Static assets
βββ package.json
# Development
npm start # Start backend server with nodemon
npm run dev # Start frontend development server
npm run build # Build frontend for production
npm run preview # Preview production build
npm run lint # Run ESLint on frontend
# Testing
npm test # Run tests (not yet configured)| Method | Endpoint | Description | Protected |
|---|---|---|---|
POST |
/signup |
Register new user | No |
POST |
/login |
User login | No |
GET |
/github |
GitHub OAuth login | No |
POST |
/logout |
Logout user | No |
POST |
/refresh-token |
Refresh JWT token | Yes |
POST |
/otp-auth |
Send OTP verification | No |
POST |
/otp-verify |
Verify OTP | No |
POST |
/password-reset |
Reset password | No |
| Method | Endpoint | Description | Protected |
|---|---|---|---|
GET |
/ |
Get all groups | Yes |
POST |
/create |
Create new group | Yes |
GET |
/:groupCode |
Get group details | Yes |
POST |
/:groupCode/join |
Join a group | Yes |
POST |
/:groupCode/leave |
Leave a group | Yes |
POST |
/:groupCode/resources |
Upload resources | Yes |
| Method | Endpoint | Description | Protected |
|---|---|---|---|
GET |
/groups/:groupCode/forum |
Get group forum | Yes |
POST |
/groups/:groupCode/threads |
Create thread | Yes |
GET |
/threads/:threadId |
Get thread details | Yes |
POST |
/threads/:threadId/replies |
Create reply | Yes |
- Create Account - Register with email and complete profile
- Browse Groups - Discover existing study groups or create custom ones
- Join/Create - Join groups matching your courses or create new groups
- Collaborate - Share resources, participate in discussions
- Moderate - Admins manage content and members
- Upload study materials with topic categorization
- Admin approval system for quality control
- Community rating system (likes/dislikes)
- Organized storage by group and topic structure
- Real-time forum discussions within study groups
- Threaded conversations for organized communication
- Moderation tools (pin/lock threads)
- Anonymous participation options
- JWT Authentication: Secure token-based authentication
- CSRF Protection: Cross-site request forgery protection
- Input Validation: Comprehensive validation using express-validator
- File Upload Security: Safe file handling with type validation
- Privacy Controls: Anonymous participation and private groups
- Rishav Chapagain
- Anish Kumar Neupane
- Rushab Risal
- Nishan Paudel
- Issues: Bug Reports & Feature Requests
Built with β€οΈ for academic collaboration