A camera-inspired photo discovery and sharing platform
where every capture finds its focus.
SnapNest is a full-stack photo-sharing platform in the spirit of Pinterest.
Users can upload, explore, like, save and comment on photos — organised by categories and searchable by keyword.
The project was originally inspired by the JavaScript Mastery ShareMe tutorial, then rebuilt from the ground up with a modern tech stack, a bespoke camera-themed design system, and production-grade patterns.
Live demo: snapnest.mohitsoni.dev (if deployed)
SnapNest/
├── frontend/ # Next.js 16 web application
│ └── README.md # Frontend-specific docs
├── sanity-backend/ # Sanity CMS studio & schemas
│ └── README.md # Backend-specific docs
└── old/ # Original React + Sanity v2 prototype (archived)
| Concern | Technology |
|---|---|
| Frontend framework | Next.js 16 — App Router, React 19 |
| Styling | Tailwind CSS v4 |
| Language | TypeScript 5 |
| Content backend | Sanity CMS v3 |
| Authentication | Clerk |
| Image CDN | Sanity CDN |
| Photo grid | react-masonry-css |
| Hosting | Vercel (frontend) + Sanity Studio |
- Masonry photo grid with responsive layout
- Sign in / sign up via Clerk (Google, GitHub SSO supported)
- Upload and delete pins (image URL or file)
- Like and save pins — stored in Sanity
- Nested comment threads per pin
- Category browsing and full-text search
- User profiles showing created & saved pins
- Webhook-driven Clerk → Sanity user sync
- PWA-ready with app manifest
- Fully mobile-responsive
git clone https://github.com/sonimohit481/SnapNest.git
cd SnapNestcd sanity-backend
npm install
npm run dev # http://localhost:3333cd ../frontend
npm install
cp .env.example .env.local # fill in your keys
npm run dev # http://localhost:3000See each sub-package's README for full environment variable details.
| Variable | Where | Description |
|---|---|---|
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY |
frontend | Clerk public key |
CLERK_SECRET_KEY |
frontend | Clerk secret key |
CLERK_WEBHOOK_SECRET |
frontend | Clerk webhook signing secret |
NEXT_PUBLIC_SANITY_PROJECT_ID |
frontend | Sanity project |
NEXT_PUBLIC_SANITY_DATASET |
frontend | Sanity dataset name |
SANITY_API_TOKEN |
frontend | Sanity token with Editor rights |
- Import the
frontend/subdirectory into Vercel. - Set all environment variables in the Vercel dashboard.
- Register the Clerk webhook endpoint:
Events:
https://your-domain.vercel.app/api/webhooks/clerkuser.created,user.updated,user.deleted
cd sanity-backend
npm run deployAdd your Vercel production URL to the Sanity CORS allowlist at sanity.io/manage.
Mohit Soni — React Native & Frontend Developer
Assistant Manager – Software Development at PPFAS Mutual Fund
Specialises in building scalable fintech mobile applications and modern web interfaces using React Native, React, Next.js, and TypeScript.
| Portfolio | mohitsoni.dev |
| GitHub | github.com/sonimohit481 |
| linkedin.com/in/mohitsoni481 | |
| Twitter / X | @SoniMohitt |
| sonimohit481@gmail.com |
MIT © Mohit Soni