A modern web application for uploading, managing, and sharing digital images. Built with React, TypeScript, and Tailwind CSS, featuring dark/light theme support, adaptive image modals, and a REST API backend with Cloudinary storage.
π https://ui-pixel-vault.vercel.app
- JWT-based registration and login
- Password visibility toggle
- Password strength meter on registration
- Protected routes with automatic redirect
-
Drag-and-drop or file picker upload
-
Client-side validation (type, size)
-
Image preview before upload
-
Metadata extraction (dimensions, file size)
-
Title, description, keywords, and privacy (public/private) settings
-
Cloud storage via Cloudinary
- Two grid modes: masonry and uniform grid
- Full-text search by title or keywords
- Pagination with page navigation
- Privacy badges (π Private / π Public) on library cards
- Public Gallery β browse all public images shared by users
- My Library β view only your own uploads with privacy filters (All / Public / Private)
-
Adaptive layout based on image dimensions (portrait vs landscape)
-
Full-size image display without wasted space
-
View metadata: dimensions, size, upload date, keywords
-
Copy image URL to clipboard
-
Open image in new tab or download
-
Edit title, description, and keywords inline
-
Toggle privacy between public and private
-
Delete images with confirmation dialog
-
Hero banner with avatar displaying user initials
-
View account info and upload statistics
-
Edit profile (first name, last name, gender)
-
Change password with real-time strength indicator
-
Quick-action grid: Edit Profile, Change Password, Upload, My Library
- Toggle between dark and light themes from the navbar
- Preference persisted in localStorage
- Full design-token support for both modes
- Mobile-friendly layout across all pages
- Accessible UI components via shadcn/ui
| Layer | Technology |
|---|---|
| Framework | React 18 + TypeScript |
| Build Tool | Vite |
| Styling | Tailwind CSS |
| UI Components | shadcn/ui |
| Routing | React Router v6 |
| HTTP Client | Axios |
| State | TanStack React Query |
| Notifications | Sonner |
| Icons | Lucide React |
| Backend | REST API on Render |
| Storage | Cloudinary |
git clone https://github.com/Ajay-Maury/Pixel-Vault.git
cd Pixel-Vault
npm installCreate a .env file:
VITE_BASE_URL= <Backend Service URL>The backend service for this application is available here: π https://github.com/Ajay-Maury/Pixel-Vault-Backend
npm run devOpen http://localhost:5173.
| Method | Endpoint | Description |
|---|---|---|
| POST | /user/register |
Register a new user |
| POST | /user/login |
Login and receive JWT |
| PUT | /user/change-password |
Change Password |
| GET | /user/profile |
Get Logged-in user profile |
| PUT | /user/profile |
Update user profile |
| POST | /image/search |
Search images (title/keywords) |
| POST | /image/minio-upload |
Upload image file |
| POST | /image/save |
Save image metadata |
| PUT | /image/:id |
Update image (title, description, keywords, privacy) |
| DELETE | /image/:id |
Delete an image |
All /image/* and /user/* (instead of register and login) all endpoints require Authorization: Bearer <token> header.
src/
βββ components/
β βββ ui/ # shadcn/ui components
β βββ ImageDetailModal.tsx
β βββ Navbar.tsx
β βββ NavLink.tsx
β βββ ThemeProvider.tsx # Dark/light mode context
βββ hooks/
β βββ use-mobile.tsx
β βββ use-toast.ts
βββ lib/
β βββ api.ts # Axios client & API functions
β βββ auth.ts # Auth helpers (token, userId)
β βββ utils.ts
βββ pages/
β βββ Index.tsx # Landing / home page
β βββ Gallery.tsx # Public gallery + My Library
β βββ Login.tsx
β βββ Register.tsx
β βββ Upload.tsx
β βββ Profile.tsx
β βββ NotFound.tsx
βββ App.tsx
βββ main.tsx
βββ index.css # Design tokens (light + dark)
Contributions welcome! Open issues or pull requests for improvements. For major changes, discuss in an issue first.
MIT β see LICENSE for details.