A social platform built for book lovers β discover books, track your reading journey, connect with readers, share thoughts, create reading goals, and build meaningful conversations around literature.
π https://entwined-web.vercel.app/ For reference while testing friend-related features, search for users like:
- becca
- JWT Authentication
- Google OAuth Login
- Secure Refresh Tokens
- Protected Routes
- Create and share posts
- Like and comment system
- Friend requests and connections
- Real-time messaging with Socket.IO
- Share posts in chats
- User profiles and activity tracking
- Personal library management
- Reading progress tracker
- Journal entries and reflections
- Book reviews and ratings
- Group reading goals
- Upload PDFs and EPUBs
- Image uploads
- Firebase Storage integration
- Cloudinary integration
- File sharing in chats
- Responsive design
- Dark and light themes
- Mobile-friendly layout
- Modern aesthetic interface
- React.js
- Vite
- CSS3
- Axios
- Socket.IO Client
- React Router DOM
- Node.js
- Express.js
- MongoDB
- Mongoose
- Socket.IO
- Firebase Admin SDK
- JWT Authentication
- Multer
- Cloudinary
TeaAndBooks/
β
βββ entwined-web/
β βββ public/
β βββ src/
β βββ .env
β βββ package.json
β βββ vite.config.js
β βββ eslint.config.js
β
βββ entwined-server/
β βββ config/
β βββ controllers/
β βββ middleware/
β βββ models/
β βββ routes/
β βββ socket/
β βββ uploads/
β βββ utils/
β βββ .env
β βββ firebaseKey.json
β βββ package.json
β βββ server.js
β
βββ AUTH_AND_FILE_SHARING.md
βββ CHAT_IMPLEMENTATION.md
βββ LICENSE
βββ README.mdgit clone https://github.com/your-username/TeaAndBooks.git
cd TeaAndBookscd entwined-server
npm installCreate a .env file inside the entwined-server directory.
PORT=5000
MONGO_URI=your_mongodb_uri
JWT_SECRET=your_jwt_secret
JWT_REFRESH_SECRET=your_refresh_secret
CLIENT_URL=http://localhost:5173
GOOGLE_CLIENT_ID=your_google_client_id
EMAIL_USER=your_email
EMAIL_PASS=your_email_password
CLOUDINARY_CLOUD_NAME=your_cloudinary_name
CLOUDINARY_API_KEY=your_cloudinary_key
CLOUDINARY_API_SECRET=your_cloudinary_secretPlace your firebaseKey.json file inside the entwined-server root directory.
Start the backend:
npm run devcd ../entwined-web
npm installCreate a .env file inside the entwined-web directory.
VITE_API_URL=http://localhost:5000Start the frontend:
npm run devDeploy using:
- Vercel
- Netlify
Deploy using:
- Render
- Railway
| Method | Route | Description |
|---|---|---|
| POST | /api/auth/register |
Register user |
| POST | /api/auth/login |
Login user |
| GET | /api/profile/:id |
Get profile |
| POST | /api/posts/create |
Create post |
| GET | /api/posts |
Fetch posts |
| POST | /api/chat/message |
Send message |
| GET | /api/library |
Get library |
| Variable | Description |
|---|---|
MONGO_URI |
MongoDB connection string |
JWT_SECRET |
JWT access token secret |
JWT_REFRESH_SECRET |
JWT refresh token secret |
CLIENT_URL |
Frontend URL |
GOOGLE_CLIENT_ID |
Google OAuth Client ID |
EMAIL_USER |
Email service username |
EMAIL_PASS |
Email service password |
CLOUDINARY_CLOUD_NAME |
Cloudinary cloud name |
CLOUDINARY_API_KEY |
Cloudinary API key |
CLOUDINARY_API_SECRET |
Cloudinary API secret |
FIREBASE_KEY |
Firebase service account JSON |
| Variable | Description |
|---|---|
VITE_API_URL |
Backend API URL |
- Helmet for HTTP security headers
- Express rate limiting
- Secure JWT authentication
- Protected API routes
- CORS protection
- File validation and upload limits
- Improve responsiveness and mobile UI consistency across all pages and components
- Eliminate horizontal overflow issues on smaller screen devices
- Enhance chat UI and dashboard layouts for better mobile experience
- Make shared posts clickable and navigable to the original post
- Make usernames and profile images clickable throughout the platform
- Add direct profile navigation from posts, comments, chats, and friend lists
- Enable local device upload for profile pictures instead of URL-only uploads
- Add image preview support before profile upload
- Implement real-time unread message notifications
- Add notification badges and live message indicators using Socket.IO
- Improve overall UI polish and interaction feedback
- Add browser push notifications for messages and friend activity
- Introduce advanced search and filtering for users and books
- Add AI-powered book recommendations and reading insights
- Improve accessibility and performance optimization
Contributions are welcome.
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to your branch
- Open a Pull Request
Before contributing:
- Follow clean coding practices
- Use meaningful commit messages
- Test features before creating PRs
- Keep UI responsive across devices
You may choose to add an MIT License if you want to make the project fully open source.
Mannat Berry
- GitHub: https://github.com/vie-nyx
- LinkedIn: https://linkedin.com/in/mannat-berry-416878266
If you like this project, consider giving it a star on GitHub.