eKitab is a Peer-to-Peer (P2P) eBook store that allows users to upload, download, and manage digital books. Built with modern web technologies, the platform offers seamless user authentication, a secure book management system, and a dynamic marketplace where publishers can upload their eBooks directly to readers.
- JWT Authentication with Email Verification
- Book Upload & File Management
- Peer-to-Peer Purchase Flow
- Payment Integration with eSewa
- Review & Rating System
- Publisher Dashboard
- Fully Dockerized Setup
-
Frontend:
- React.js
- Zustand (state management)
- Tailwind CSS
- Radix UI (for UI components)
-
Backend:
- Node.js
- Express.js
- PostgreSQL
- JWT Authentication
- MinIO (Cloud Storage)
-
DevOps:
- Docker
To get a local copy of eKitab up and running on your machine, follow these simple steps:
- Node.js: Ensure you have Node.js installed (LTS version recommended).
- Docker: If you're using Docker for containerization.
-
Clone the repository:
git clone https://github.com/xetri/eKitab.git
-
Install dependencies:
npm install # Frontend cd eKitab/client npm install # Backend cd eKitab/server npm install
-
Setup the database:
docker run -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=ekitab -p 5432:5432 docker.io/postgres:15.2-alpine
-
Set up Cloud Storage:
docker run -p 9000:9000 -p 9001:9001 -e "MINIO_ACCESS_KEY=minioadmin" -e "MINIO_SECRET_KEY=minioadmin" -e "MINIO_ROOT_USER=minioadmin" -e "MINIO_ROOT_PASSWORD=minioadmin" docker.io/minio/minio server --console-address ":9001" /data
-
Environment
Create a .env file inside the Server folder
CLIENT_URL=http://localhost:5173 DATABASE_URL=postgresql://postgres:postgres@localhost:5432/ekitab JWT_SECRET_KEY=weak-secret-key MINIO_URL=http://localhost:9000 MINIO_ENDPOINT=localhost MINIO_PORT=9000 MINIO_ACCESS_KEY=minioadmin MINIO_SECRET_KEY=minioadmin MINIO_BUCKET=ekitab MINIO_USE_SSL=falseCreate a .env file inside the Client folder
VITE_API_URL=http://localhost:8000/api VITE_CDN_URL=http://localhost:9000/ekitab -
Run the project:
npm install # First install the monorepo dependenices. npm run preinstall # Install all the dependencies for the whole project (client and server). npm run build npm run dev # For cloud and database in a seperate terminal, should be run through the program. npm run start # Starts the frontend & backend.
npm run dbnpm run cloudnpm run client
npm run server
The application should now be running locally at http://localhost:3000 (or your configured port).
- Integrating JWT-based authentication with access and refresh tokens for secure user sessions.
- Managing book uploads and secure storage using MinIO with public-access CDN behavior.
- Maintaining global state across authentication, uploaded books, and reviews using Zustand.
- Handling CORS issues in a full-stack environment with multiple services.
- Implementing file upload previews and validation for cover images and eBook files.
- Creating and maintaining clean, developer-friendly documentation.
This internship project was a highly enriching experience that allowed me to build a fully functional peer-to-peer eBook marketplace from scratch using modern web technologies. Through the real-world integration of secure authentication, cloud storage (MinIO), I developed a deeper understanding of full-stack application architecture and DevOps workflows.
The project not only sharpened my React and Node.js skills but also gave me practical exposure to working with authentication, database, and cloud storage.






