The File Cloud Project is a modern web application designed to allow users to securely store and access their files from anywhere. It features user authentication (signup and login) powered by JSON Web Tokens (JWT), a live-searchable file display interface, and file upload functionality. The frontend is built using ReactJS and TailwindCSS, while the backend utilizes ExpressJS, AWS DynamoDB, and AWS S3.
The backend is deployed on AWS Lambda with an additional fallback server endpoint hosted on a personal server, ensuring reliable availability. The project follows a classic client-server architecture, making it easy to understand and extend.
-
User Authentication:
- Secure login and signup functionality using JWT-based authentication.
-
File Display and Search:
- Displays a list of files stored in the cloud.
- Features a live-search box to filter and find files instantly.
-
File Upload:
- Upload files to the cloud securely using AWS S3 storage.
-
Backend Reliability:
- Primary backend deployed on AWS Lambda.
- Fallback endpoint hosted on a personal server for backup.
-
Frontend:
- Built with ReactJS and styled with TailwindCSS for a modern, responsive design.
- Deployed on Vercel for a fast and seamless experience.
-
Backend:
- Node.js/ExpressJS for API development.
- AWS DynamoDB for managing metadata.
- AWS S3 for file storage.
root
┣ client
┃ ┣ dist
┃ ┃ ┣ assets
┃ ┃ ┃ ┣ index-C_IEStdK.css
┃ ┃ ┃ ┗ index-CggijX_O.js
┃ ┃ ┣ index.html
┃ ┃ ┗ vite.svg
┃ ┣ node_modules
┃ ┃ ┗ .package-lock.json
┃ ┣ public
┃ ┃ ┗ vite.svg
┃ ┣ src
┃ ┃ ┣ assets
┃ ┃ ┃ ┣ favicon.png
┃ ┃ ┃ ┗ react.svg
┃ ┃ ┣ components
┃ ┃ ┃ ┣ FileCard.jsx
┃ ┃ ┃ ┣ Loader.jsx
┃ ┃ ┃ ┣ Navbar.jsx
┃ ┃ ┃ ┣ SearchBar.jsx
┃ ┃ ┃ ┣ Sidebar.jsx
┃ ┃ ┃ ┗ UploadFiles.jsx
┃ ┃ ┣ router
┃ ┃ ┃ ┗ PrivateRoute.jsx
┃ ┃ ┣ screens
┃ ┃ ┃ ┣ AuthPage.jsx
┃ ┃ ┃ ┗ Dashboard.jsx
┃ ┃ ┣ styles
┃ ┃ ┃ ┗ Loader.css
┃ ┃ ┣ App.css
┃ ┃ ┣ App.jsx
┃ ┃ ┣ index.css
┃ ┃ ┗ main.jsx
┃ ┣ .gitignore
┃ ┣ eslint.config.js
┃ ┣ index.html
┃ ┣ package-lock.json
┃ ┣ package.json
┃ ┣ postcss.config.js
┃ ┣ README.md
┃ ┣ tailwind.config.js
┃ ┣ vercel.json
┃ ┗ vite.config.js
┗ server
┣ node_modules
┃ ┗ .package-lock.json
┣ src
┃ ┣ .env
┃ ┗ app.js
┣ .gitignore
┣ package-lock.json
┗ package.json
The .env file should have the following format:
AWS_REGION=your-aws-region
AWS_ACCESS_KEY_ID=your-aws-access-key-id
AWS_SECRET_ACCESS_KEY=your-aws-secret-access-key
JWT_SECRET=your-jwt-secret
S3_BUCKET_NAME=your-s3-bucket-name
PORT=your-backend-port
- Node.js and npm installed on your system.
- AWS account and credentials for S3 and DynamoDB setup.
.envfile with the required environment variables.- Vercel account for deploying the frontend (optional).
- Navigate to the client directory:
cd client - Install dependencies:
npm install
- Start the development server:
npm run dev
- Open the app in your browser at:
http://localhost:5173
- Navigate to the server directory:
cd server - Install dependencies:
npm install
- Run the server locally:
npm start
- The backend will be available at:
http://localhost:PORT
- Deploy the frontend on Vercel:
- Connect your GitHub repository to Vercel.
- Deploy the
clientfolder directly. - Configure environment variables in the Vercel dashboard.
-
Deploy on AWS Lambda:
- Package your backend code and dependencies in a
.zipfile. - Upload the file to an AWS Lambda function.
- Configure the API Gateway for HTTPS access.
- Ensure your Lambda has access to your S3 and DynamoDB resources.
- Package your backend code and dependencies in a
-
Set up a fallback server:
- Host your backend code on a personal server (e.g., using an Express app with PM2).
- Update the frontend to handle fallback requests automatically.
- Sign up and log in to access your account.
- Upload files using the Upload button.
- View your files in the live-searchable file display.
- Search for specific files in the search bar.
- Frontend: ReactJS, TailwindCSS, Vercel.
- Backend: ExpressJS, AWS Lambda, DynamoDB, S3.
- Database: AWS DynamoDB (metadata).
- Storage: AWS S3.
- Authentication: JSON Web Tokens (JWT).
This project is licensed under the MIT License. You are free to use, modify, and distribute this software under the terms of the MIT License.