FotoFlick is a full-stack image-sharing web application where users can upload, explore, like, comment on, download, and even lock their images. Designed with a smooth and responsive UI, it brings a modern, community-driven experience for showcasing and interacting with visual memories.
π Live Site (Vercel)
- Landing Page β Introduces the platform with CTA buttons (upload, explore)
- Gallery β Explore all uploaded images, filter by category or date
- Image Card β Like, comment, and preview each image
- Upload Page β Authenticated users can upload and categorize images
- Image Lock β Image owners can lock their images (blurred view for others)
- Image Modal β Displays full-sized preview with lock info, comments, and sharing
- π Clerk Authentication (Email, Google, GitHub)
- π€ Upload and categorize images
- πΌοΈ Gallery with filtering and sorting
- β€οΈ Like/Unlike functionality
- π¬ Comment on images
- π Lock/Unlock images by owners (blurred for others)
- π₯ Download feature
- π² Mobile-Responsive UI
- β‘ Performance optimized with SSR/ISR and Tailwind utility classes
| Category | Tech Used |
|---|---|
| Frontend | Next.js 14, TypeScript, Tailwind CSS |
| Backend | API Routes (App Router) |
| Auth | Clerk |
| Database | PostgreSQL with Prisma ORM |
| Image Hosting | Cloudinary |
| UI Icons | Lucide React |
git clone https://github.com/sumitnjmsingh/fotoflick.git
cd capturexmemorisenpm installCreate a .env file in the root directory and add the following environment variables:
# Prisma DB URL (PostgreSQL)
DATABASE_URL=postgresql://<username>:<password>@<host>:<port>/<dbname>?schema=public
# Cloudinary
CLOUDINARY_CLOUD_NAME=your-cloud-name
CLOUDINARY_API_KEY=your-api-key
CLOUDINARY_API_SECRET=your-api-secret
# Clerk
CLERK_SECRET_KEY=your-clerk-secret-key
CLERK_PUBLISHABLE_KEY=your-clerk-publishable-key
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=your-clerk-publishable-key
NEXT_PUBLIC_CLERK_FRONTEND_API=your-clerk-frontend-api
NEXT_PUBLIC_CLERK_SIGN_IN_URL=/sign-in
NEXT_PUBLIC_CLERK_SIGN_UP_URL=/sign-up
npx prisma migrate dev --name init
npm run devYour app should now be running at: http://localhost:3000
- Owners can toggle lock/unlock for their uploaded images.
- When locked, the image is shown with a blur effect and a lock icon.
- Only the owner can see the unblurred version and unlock it again.
Sumit Singh
π B.Tech CSE @ IIT Mandi
π» GitHub
π§ sumitjfsingh1111@gmail.com
If you like this project, consider giving it a β on GitHub!