- ๐ค Instant Upload - Drag & drop or click to upload images effortlessly
- ๐ Quick Sharing - Get shareable links instantly with one-click copying
- ๐๏ธ Image Preview - Preview images before finalizing uploads
- ๐ฑ Responsive Design - Works perfectly on desktop, tablet, and mobile devices
- ๐ Progress Tracking - Real-time progress indicators for each upload
- ๐ฅ Multiple File Support - Upload multiple images simultaneously
- ๐ Secure Storage - Images are stored securely on Cloudinary
- ๐พ Local Gallery - View and manage your uploaded images even after page refresh
The application follows a clean, simple architecture:
my-image-uploader/
โโโ frontend/ # React/TypeScript frontend
โ โโโ src/ # Source code
โ โโโ public/ # Static assets
โ โโโ ... # Configuration files
โโโ server/ # Go backend API
โ โโโ main.go # Entry point
โ โโโ ... # Additional modules
โโโ ... # Project files
- Node.js (v22+)
- Go (v1.24+)
- Cloudinary account (for image storage)
- Docker (optional, for containerized deployment)
# Navigate to frontend directory
cd frontend
# Install dependencies
npm install
# Start development server
npm run dev
The backend uses Go with Gin framework and Cloudinary for image storage.
# Navigate to server directory
cd server
# Install dependencies
go mod tidy
# Set up environment variables
# On Windows
set CLOUDINARY_CLOUD_NAME=your_cloud_name
set CLOUDINARY_API_KEY=your_api_key
set CLOUDINARY_API_SECRET=your_api_secret
# On Linux/Mac
export CLOUDINARY_CLOUD_NAME=your_cloud_name
export CLOUDINARY_API_KEY=your_api_key
export CLOUDINARY_API_SECRET=your_api_secret
# Run the Go server
go run main.go
You can easily deploy the application using Docker:
# Build the Docker image
docker build -t image-uploader .
# Run the container
docker run -p 8080:8080 \
-e CLOUDINARY_CLOUD_NAME=your_cloud_name \
-e CLOUDINARY_API_KEY=your_api_key \
-e CLOUDINARY_API_SECRET=your_api_secret \
image-uploader
Or use Docker Compose:
# Create a .env file with your Cloudinary credentials first
# Then run:
docker-compose up -d
The server includes CORS configuration to allow cross-origin requests. If you're experiencing CORS issues:
- Ensure the frontend URL is added to the allowed origins in
main.go
:
router.Use(cors.New(cors.Config{
AllowOrigins: []string{"http://localhost:3000", "http://localhost:5173", "https://your-frontend-domain.com"},
AllowMethods: []string{"GET", "POST", "OPTIONS"},
AllowHeaders: []string{"Origin", "Content-Type", "Accept", "Authorization"},
ExposeHeaders: []string{"Content-Length"},
AllowCredentials: true,
MaxAge: 12 * 60 * 60,
}))
- Restart the server after making changes.
- Upload - Drag and drop or select images from your device
- Process - Images are processed and uploaded to Cloudinary via the Go backend
- Share - Copy the generated links to share your images instantly
- Manage - View your uploaded images in the gallery (persisted in localStorage)
- User accounts for persistent image management
- Image editing capabilities
- Custom link customization
- Album creation and organization
- Enhanced security features
- Support for additional file types
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature
) - Commit your changes (
git commit -m 'Add some amazing feature'
) - Push to the branch (
git push origin feature/amazing-feature
) - Open a Pull Request
Mohammed Farhan - GitHub Profile
Made with โค๏ธ for the love of simple, effective solutions