A modern, professional image compression and optimization web application with beautiful animated geometric UI effects.
- Quality Compression: Reduce file size while maintaining image dimensions
- Pixel Reduction: Resize images by reducing pixel count for thumbnails and bandwidth optimization
- Real-time Processing: Live progress tracking with detailed status updates
- Before/After Comparison: Visual comparison of original vs processed images
- Batch Processing: Handle multiple compression scenarios efficiently
- Animated Geometric Background: Beautiful floating shapes, orbiting elements, and gradient effects
- Drag & Drop Interface: Intuitive file upload with visual feedback
- Dark Theme: Professional dark UI with green accent colors
- Responsive Design: Works seamlessly on desktop and mobile devices
- Toast Notifications: Real-time feedback for user actions
- Serverless Architecture: Optimized for Vercel deployment
- Memory-based Processing: No file system dependencies
- Persistent Job Storage: KV storage with in-memory fallback
- High-performance Processing: Sharp.js for fast image manipulation
- TypeScript: Full type safety throughout the application
- React 18 with TypeScript
- Vite for fast development and building
- Tailwind CSS for styling
- React Router for navigation
- Lucide React for icons
- Sonner for toast notifications
- Express.js with TypeScript
- Sharp.js for image processing
- Multer for file uploads
- UUID for job identification
- Vercel KV for persistent storage
- Vercel serverless functions
- Vercel KV for Redis-based storage
- GitHub for version control
- Node.js 18+
- npm or yarn
- Git
- Clone the repository:
git clone https://github.com/ambershen/image-processor.git
cd image-processor- Install dependencies:
npm install- Start the development server:
npm run dev- Open your browser and navigate to
http://localhost:5173
The application runs with Vite's development server on the frontend and proxies API requests to the Express backend.
- Frontend:
http://localhost:5173 - Backend API:
http://localhost:3001(proxied through Vite)
- Connect your GitHub repository to Vercel
- Configure environment variables if needed
- Deploy with automatic builds on push
The application is optimized for Vercel's serverless environment with:
- Serverless function handlers
- Memory-based file processing
- KV storage integration
- Automatic scaling
The application can also be deployed on:
- Railway: Full-stack deployment with persistent storage
- Render: Web services with automatic deployments
- DigitalOcean App Platform: Container-based deployment
- Heroku: Traditional PaaS deployment
- Select "Quality Compression" processing type
- Adjust quality level (10-100%)
- Upload a JPG/JPEG image (up to 50MB)
- Click "Start Processing"
- Monitor real-time progress
- Download the optimized image
- Select "Pixel Reduction" processing type
- Choose resize method:
- Percentage reduction: Reduce by percentage (10-90%)
- Maximum dimensions: Set max width/height in pixels
- Configure output quality (10-100%)
- Optional: Disable aspect ratio maintenance
- Upload and process your image
POST /api/upload- Upload image filePOST /api/process/:jobId- Start image processingGET /api/status/:jobId- Get processing statusGET /api/download/:jobId- Download processed imageGET /api/original/:jobId- Get original image for comparisonGET /api/preview/:jobId- Get processed image preview
├── api/ # Backend API
│ ├── app.ts # Express application
│ └── index.ts # Vercel entry point
├── src/ # Frontend source
│ ├── pages/ # React pages
│ │ ├── Home.tsx # Main upload interface
│ │ ├── Processing.tsx # Progress tracking
│ │ └── Results.tsx # Results and download
│ ├── styles/ # CSS styles
│ └── components/ # Reusable components
├── public/ # Static assets
├── vercel.json # Vercel configuration
└── package.json # Dependencies and scripts
- Fork the repository
- Create a feature branch:
git checkout -b feature-name - Make your changes
- Commit your changes:
git commit -m 'Add feature' - Push to the branch:
git push origin feature-name - Submit a pull request
This project is licensed under the MIT License - see the LICENSE file for details.
For support, please open an issue on GitHub or contact the maintainers.
Built with ❤️ using React, TypeScript, and Sharp.js