"Capture memories. Organize effortlessly."
Photopia is a full-stack photo storage platform that allows users to securely upload, manage, and organize personal images through a modern web interface powered by React, Express, MySQL, and JWT authentication.
Frontend: https://photopia-one.vercel.app
Note
The frontend is publicly available on Vercel. Backend services are intended for local development.
Photopia is a personal full-stack project focused on secure image management.
Users can register, authenticate, upload images, and access their personal media through a clean and responsive interface. The project demonstrates secure authentication, protected API routes, file uploads, and relational database management using MySQL.
- User Registration
- Secure Login
- JWT Authentication
- Protected Routes
- Password Management
- Upload Images
- Personal Gallery
- User-specific Storage
- Secure File Access
- Responsive Design
- Clean Interface
- Dark Mode
- Mobile Friendly
- JWT Authentication
- Protected API Endpoints
- Password Hashing
- Authorization Middleware
Photopia provides a minimal and responsive interface designed to make uploading and managing photos simple across desktop and mobile devices.
The project follows a traditional client-server architecture with clear separation between presentation, business logic, authentication, and data persistence.
Browser
β
React + Vite
(Client)
β
Axios
β
Express API
β
JWT Middleware
β
Controllers
β
MySQL Database
Client
- React
- React Router
- Axios
- Tailwind CSS
Backend
- Express.js
- JWT Authentication
- File Upload Controller
- User Management
Database
- MySQL
- Users
- Uploaded Files
| Category | Technology |
|---|---|
| Frontend | React, Vite, Tailwind CSS |
| Backend | Node.js, Express.js |
| Database | MySQL |
| Authentication | JWT |
| HTTP Client | Axios |
| Deployment | Vercel |
photopia/
β
βββ backend/
β βββ config/
β βββ controllers/
β βββ models/
β βββ routes/
β βββ database_setup.sql
β βββ index.js
β βββ package.json
β
βββ client/
β βββ public/
β β βββ logo.png
β β βββ ui.png
β β βββ diagram.png
β β
β βββ src/
β β βββ components/
β β βββ pages/
β β βββ utils/
β β βββ App.jsx
β β βββ main.jsx
β β
β βββ package.json
β βββ vite.config.js
β
βββ LICENSE
βββ README.md
- Node.js 18+
- MySQL Server
git clone https://github.com/rsayyed591/photopia.git
cd photopiaRun the SQL script located in:
backend/database_setup.sql
This creates the required database tables for authentication and file management.
cd backend
npm installCreate a .env file.
JWT_SECRET=your_secret_key
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=user_auth_systemRun the server.
npm startcd client
npm installCreate a .env file.
VITE_API_URL=http://localhost:5000Run the development server.
npm run devJWT_SECRET=
DB_HOST=
DB_USER=
DB_PASSWORD=
DB_NAME=VITE_API_URL=http://localhost:5000| Method | Endpoint |
|---|---|
| POST | /api/register |
| POST | /api/login |
| POST | /api/change-password |
| Method | Endpoint |
|---|---|
| POST | /api/upload |
| GET | /api/files |
- Cloud Storage (Cloudinary / AWS S3)
- Album Management
- Image Search
- Drag & Drop Uploads
- Image Compression
- Shareable Links
- Profile Settings
- Docker Support
Contributions are welcome.
-
Fork the repository.
-
Create a feature branch.
git checkout -b feature/amazing-feature- Commit your changes.
git commit -m "feat: add amazing feature"- Push your changes.
git push origin feature/amazing-feature- Open a Pull Request.
Rehan Sayyed
- π Portfolio: https://iamrehan.dev
- GitHub: https://github.com/rsayyed591
- LinkedIn: https://linkedin.com/in/rehan42
This project is licensed under the MIT License.
See the LICENSE file for more information.

