Professional image hosting service built with Next.js 14
A modern image hosting platform with drag & drop uploads, API access, password protection, and user management. Built with Next.js 14, TypeScript, MongoDB, and AWS S3.
- Drag & drop image upload with progress tracking
- Multiple image upload (up to 10 images)
- Custom file naming and password protection
- Retention policies (1h, 24h, 7d, 30d, or custom)
- User authentication with JWT
- RESTful API for programmatic uploads
- Dark mode and multi-language support (EN, FR, TR)
- QR code generation and bulk download
- Admin panel for user and image management
- Rate limiting and storage limits
- SEO optimized with structured data
- Node.js 18.x or later
- MongoDB (local or Atlas)
- AWS S3 bucket with IAM credentials
- Clone the repository:
git clone https://github.com/yourusername/image-cloud.git
cd image-cloud- Install dependencies:
npm install- Create
.env.local:
MONGODB_URI=mongodb://localhost:27017/image-cloud
AWS_ACCESS_KEY_ID=your_access_key_id
AWS_SECRET_ACCESS_KEY=your_secret_access_key
AWS_S3_BUCKET_NAME=your_bucket_name
AWS_REGION=us-east-1
NEXT_PUBLIC_BASE_URL=http://localhost:3000
BASE_URL=http://localhost:3000
JWT_SECRET=jwt_key
JWT_EXPIRES_IN=7d- Run development server:
npm run devcurl -X POST http://localhost:3000/api/upload \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@/path/to/image.jpg" \
-F "customFileName=my-image" \
-F "retentionTime=86400" \
-F "password=secure_password"curl http://localhost:3000/api/image/my-image-abc123.jpgcurl http://localhost:3000/api/user/images \
-H "Authorization: Bearer YOUR_JWT_TOKEN"npm run dev # Start development server
npm run build # Build for production
npm start # Start production server
npm run lint # Run linterapp/ # Next.js App Router
├── api/ # API routes
├── image/ # Image viewing page
├── my-images/ # User dashboard
└── ...
components/ # React components
lib/ # Utilities (JWT, MongoDB, S3, etc.)
models/ # Mongoose models
- Push to GitHub
- Import repository in Vercel
- Add environment variables
- Deploy
The application can also be deployed to Netlify, Railway, AWS Amplify, or any platform supporting Next.js.
| Variable | Description | Required |
|---|---|---|
MONGODB_URI |
MongoDB connection string | Yes |
AWS_ACCESS_KEY_ID |
AWS S3 access key | Yes |
AWS_SECRET_ACCESS_KEY |
AWS S3 secret key | Yes |
AWS_S3_BUCKET_NAME |
S3 bucket name | Yes |
AWS_REGION |
AWS region | Yes |
NEXT_PUBLIC_BASE_URL |
Public-facing URL | Yes |
BASE_URL |
Server-side URL | Yes |
JWT_SECRET |
JWT signing secret | Yes |
JWT_EXPIRES_IN |
JWT expiration (default: 7d) | No |
MAX_BUCKET_SIZE_GB |
Global bucket size limit | No |
NEXT_PUBLIC_GOOGLE_ANALYTICS_ID |
Google Analytics ID | No |
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'feat: Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is proprietary software. All rights reserved.
See LICENSE for more details.
For support, contact: p@evoise.dev
Made with ❤️ by evoise

