A simple cloud-based file storage and management platform.
Store, organize, manage, and share your files securely from one place.
Storely is a full-stack cloud file management application built with React, Node.js, Express, MongoDB, and Cloudinary.
It allows users to securely upload, organize, manage, and share files through a modern web interface. Storely also supports Google and GitHub OAuth authentication, role-based access control, directories, file sharing, and an administrative dashboard.
Built with ❤️ using React, Node.js, MongoDB and Cloudinary.
- Email/password authentication
- Google OAuth login
- GitHub OAuth login
- JWT/session-based authentication
- Protected routes
- Secure password hashing
- Upload files
- View uploaded files
- Update file information
- Delete files
- File metadata management
- Cloudinary-based file storage
- Create directories
- Organize files into folders
- Navigate directory contents
- Nested directory support
- Share files with other users
- Guest/shared file access
- Public file viewing through share links
Administrators can:
- Manage users
- View users
- Manage files
- Delete files
- Assign user roles
- Authentication middleware
- Authorization middleware
- Protected API endpoints
- JWT/session validation
- OAuth authentication
- Environment-based secrets
- Input validation
- Owner-level file authorization
- Role-based permission checks
Storely/
│
├── folderDriver client/
│ ├── public/
│ │ └── icon.png
│ │
│ └── src/
│ ├── admin/
│ ├── components/
│ ├── hook/
│ ├── models/
│ ├── pages/
│ ├── store/
│ ├── App.jsx
│ └── main.jsx
│
├── server/
│ ├── config/
│ ├── controllers/
│ ├── middleware/
│ ├── models/
│ ├── routes/
│ └── server.js
│
├── docs/
│ └── screenshots/
│ ├── home.png
│ ├── login.png
│ └── dashboard.png
│
├── .env
├── .gitignore
├── package.json
└── README.md
Create a .env file in the appropriate project directory and configure the following variables:
VITE_API_URL=
GOOGLE_CLIENT_ID=
GOOGLE_CLIENT_SECRET=
CLOUDNARY_NAME=
CLOUDNARY_API_KEY=
CLOUDNARY_API_SECRET=
SECRET_KEY=
MONGODB_URI=
GITHUB_CALLBACK_UR=
GITHUB_CLIENT_ID=
GITHUB_CLIENT_SECRET=| Variable | Description |
|---|---|
VITE_API_URL |
Base URL of the backend API used by the frontend |
GOOGLE_CLIENT_ID |
Google OAuth client ID |
GOOGLE_CLIENT_SECRET |
Google OAuth client secret |
CLOUDNARY_NAME |
Cloudinary cloud name |
CLOUDNARY_API_KEY |
Cloudinary API key |
CLOUDNARY_API_SECRET |
Cloudinary API secret |
SECRET_KEY |
Secret used for authentication/token security |
MONGODB_URI |
MongoDB connection string |
GITHUB_CALLBACK_UR |
GitHub OAuth callback URL |
GITHUB_CLIENT_ID |
GitHub OAuth client ID |
GITHUB_CLIENT_SECRET |
GitHub OAuth client secret |
⚠️ Security: Never commit.envfiles or expose API secrets, OAuth secrets, database credentials, or other sensitive environment variables publicly.
Recommended .gitignore entries:
.env
.env.local
.env.*.localgit clone https://github.com/monushah108/Storely.gitcd Storelynpm installcd "folderDriver client"
npm installcd ../server
npm installStorely consists of two applications:
- Frontend — React/Vite
- Backend — Node.js/Express
From the frontend directory:
cd "folderDriver client"
npm run devThe frontend will normally be available at:
http://localhost:5173
Open another terminal:
cd server
npm run devThe backend will normally run at:
http://localhost:8000
| Route | Description |
|---|---|
/ |
Storely home page |
/login |
User login |
/auth/register |
User registration |
/dashboard |
User file dashboard |
/dirItem/:id |
Directory contents |
/file/:id |
File view |
/guest/:id |
Shared/guest file |
/admin/* |
Admin dashboard |
Storely
│
▼
┌─────────────────┐
│ Login / Register│
└────────┬────────┘
│
┌────────────┼────────────┐
│ │ │
▼ ▼ ▼
Email Google GitHub
Login OAuth OAuth
│ │ │
└────────────┼────────────┘
▼
┌─────────────────┐
│ Authentication │
└────────┬────────┘
▼
┌─────────────────┐
│ Session / JWT │
└────────┬────────┘
▼
┌─────────────────┐
│ Protected Routes│
└────────┬────────┘
▼
┌─────────────────┐
│ Dashboard │
└─────────────────┘
User
│
▼
Select File
│
▼
Upload Request
│
▼
Authentication Check
│
▼
File Validation
│
▼
Cloudinary
│
▼
File URL + Metadata
│
▼
MongoDB
│
▼
Storely Dashboard
{
_id: ObjectId,
name: String,
email: String,
image: String,
role: "user" | "admin",
provider: String,
createdAt: Date,
updatedAt: Date
}{
_id: ObjectId,
name: String,
extension: String,
size: Number,
url: String,
ownerId: ObjectId,
createdAt: Date,
updatedAt: Date
}{
_id: ObjectId,
name: String,
ownerId: ObjectId,
parentId: ObjectId,
createdAt: Date,
updatedAt: Date
}["manage_users", "view_users", "manage_files", "delete_files", "assign_roles"];[
"upload_files",
"create_directories",
"update_own_files",
"delete_own_files",
"view_own_files",
"share_files",
];Storely uses multiple layers of security to protect users and their files:
- Authentication middleware
- Authorization middleware
- Protected API endpoints
- Password hashing
- JWT/session validation
- OAuth authentication
- Environment-based secrets
- Input validation
- Protected database operations
- User-level file authorization
- Admin-level permission checks
The React/Vite frontend can be deployed using:
- Vercel
- Other platforms supporting Vite applications
The Node.js/Express backend can be deployed using:
- Render
- Other Node.js-compatible hosting platforms
Use:
- MongoDB Atlas
Use:
- Cloudinary
Before deploying, configure all required environment variables in your hosting provider.
For production, update the frontend environment variable:
VITE_API_URL=https://your-production-api-url.com Storely
│
┌───────────┴───────────┐
│ │
▼ ▼
Guest User Auth User
│
▼
┌───────────┐
│ Dashboard │
└─────┬─────┘
│
┌──────────────────┼──────────────────┐
│ │ │
▼ ▼ ▼
Files Folders Sharing
│ │
└────────┬─────────┘
▼
Cloudinary
│
▼
MongoDB
Potential improvements for future versions include:
- File preview support
- Drag-and-drop uploads
- File search and filtering
- Storage usage analytics
- File versioning
- Trash/recycle bin
- Advanced sharing permissions
- Email notifications
- Activity history
- Improved admin analytics
- Responsive mobile experience
For local development, make sure:
- MongoDB is accessible.
- Cloudinary credentials are configured.
- Google OAuth credentials are configured if Google login is enabled.
- GitHub OAuth credentials are configured if GitHub login is enabled.
- Frontend and backend environment variables are correctly configured.
- Both frontend and backend servers are running.
This project is currently available for educational and development purposes.
Frontend Developer | React Developer | Full-Stack Developer
GitHub: monushah108/Storely
Built with ❤️ using React, Node.js, MongoDB and Cloudinary.


