Transform your images into professional presentations with ease
Nice Shot is a modern web application that helps you create beautiful image mockups. Upload your images and transform them with customizable gradients, aspect ratios, and border radius settings to create professional-looking presentations for social media, marketing materials, or personal projects.
- Drag & Drop Upload - Easily upload images with a simple drag and drop interface
- Gradient Backgrounds - Choose from 14+ beautiful gradient backgrounds
- Aspect Ratio Control - Support for 12 different aspect ratios including social media formats
- Border Radius Customization - Adjust corner rounding to your preference
- High-Quality Export - Download your creations as PNG files
- Responsive Design - Works perfectly on desktop and mobile devices
- Dark/Light Mode - Built-in theme support
- Frontend: Next.js 15 (App Router) + TypeScript
- Styling: Tailwind CSS + shadcn/ui components
- State Management: Zustand
- Image Processing: dom-to-image for export functionality
- Authentication: Better-Auth with OAuth providers
- Database: PostgreSQL with Prisma ORM
- Deployment: Vercel-ready
niceshot/
βββ app/ # Next.js app directory
β βββ (auth)/ # Authentication pages
β βββ (landing)/ # Landing page
β βββ editor/ # Main image editor
β βββ pricing/ # Subscription pricing
β βββ success/ # Payment success page
βββ components/ # React components
β βββ ui/ # Base UI components
β βββ subscription/ # Subscription-related components
β βββ ... # Feature-specific components
βββ lib/ # Utility functions and stores
βββ constants/ # App constants (gradients, aspect ratios)
βββ prisma/ # Database schema and migrations
βββ types/ # TypeScript type definitions
-
Clone the repository
git clone https://github.com/yourusername/niceshot.git cd niceshot -
Install dependencies
bun install
-
Set up environment variables
copy the .env.example file and rename it to .env
cp .env.example .env
-
Start the database
docker compose up -d
-
Run database migrations
bun prisma:generate bun prisma:migrate
-
Start the development server
bun dev
The application will be available at
http://localhost:3000
bun dev- Start the development server with hot reloadbun build- Build the application for productionbun start- Start the production serverbun lint- Run ESLint
docker compose up -d- Start PostgreSQL containerdocker compose down- Stop the containerdocker compose down -v- Stop container and remove volumesbun prisma:migrate- Apply database migrationsbun prisma:generate- Generate Prisma clientbun prisma:studio- Open Prisma Studio for database managementbun db:push- Push schema changes directly (development only)
bun lint- Run ESLintbun format- Format code with Prettierbun check- Check code formatting
- Drag and drop interface
- Support for JPG and PNG formats
- File size validation (max 10MB)
- Instant preview
- 14+ beautiful gradient options
- Primary, sunset, fire, purple, green, blue, and more
- Real-time preview
- 16:9, 3:2, 4:3, 5:4, 1:1 (square)
- 4:5, 3:4, 2:3, 9:16 (portrait)
- 3:1, 10:21 (ultra-wide)
- 16:10 (widescreen)
- High-quality PNG export
- Transparent background support
- Automatic file naming with timestamps
The app supports OAuth authentication with:
- Go to Google Developer Console
- Click "New OAuth App"
- Fill in the details:
- Application name:
Nice Shot (Development) - Homepage URL:
http://localhost:3000/ - Authorization callback URL:
http://localhost:3000/api/auth/callback/google
- Application name:
- Copy the Client ID and Client Secret to your
.env.localfile
- Pro Tier: All gradients, high-resolution exports, priority support
The application is designed to be deployed on Vercel:
- Fork this repository
- Import the project in Vercel
- Configure environment variables in Vercel dashboard
- Deploy!
For production deployments, ensure you:
- Update OAuth callback URLs to your production domain
- Use production database instance
- Set appropriate environment variables
-
Database connection errors
- Make sure Docker is running
- Check that PostgreSQL is accessible on port 5432
- Verify DATABASE_URL is correct
-
Image upload issues
- Ensure file is under 10MB
- Check file format (JPG/PNG only)
- Clear browser cache if needed
-
Export not working
- Check browser console for errors
- Ensure image is fully loaded before export
- Try refreshing the page
We welcome contributions! Please read our Contributing Guide to learn about our development process.
- Fork the repository
- Create a new branch for your feature
git checkout -b feature/your-feature-name
- Make your changes
- Run tests and ensure code quality
bun lint bun typecheck
- Commit your changes with descriptive messages
- Push to your fork and create a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
- Built with Next.js
- UI components from shadcn/ui
- Image export powered by dom-to-image
- Icons from Lucide React
- Auth from Better-Auth