router.push(`/preview/${photo.id}`)}
>
{/* Thumbhash placeholder */}
{photo.blurhash &&
}
{/* Image with hover zoom */}
{/* Hover overlay — bottom gradient + info */}
{/* Title */}
{photo.title}
{/* EXIF grid — 2x2 frosted badges */}
{photo.exif && (
{photo.exif.f_number && (
)}
{/* Same pattern for shutter_speed, focal_length_35mm, iso_speed_rating */}
)}
{/* Live Photo badge */}
{photo.type === 2 && (
Live
)}
```
**Default Gallery** — CSS columns-based masonry:
```tsx
{/* Main image area */}
{/* Close button — top left */}
{/* Previous / Next arrows */}
{/* Image */}
{/* Inspector panel — desktop only */}
```
Keyboard: `←` `→` navigate, `Escape` close, `i` toggle inspector.
---
### Task 2.2: Build Inspector Panel
**Files:**
- Create: `components/viewer/inspector-panel.tsx`
- Refactor from: `components/album/preview-image.tsx` and `preview-image-exif.tsx`
Right-side panel (320px) containing:
- Photo title (font-display, text-xl)
- Camera + lens badge
- 2x2 EXIF grid (frosted glass cards matching hover overlay style)
- Date & location
- Collapsible histogram / tone analysis
- Download original link
- Tags
Mobile: Same content in a bottom Drawer (using Vaul or existing Drawer component).
---
### Task 2.3: Integrate WebGL Viewer
**Files:**
- Modify: `components/viewer/photo-viewer.tsx`
- Keep: `components/album/progressive-image.tsx` (WebGL logic)
Integrate existing WebGL viewer into the new fullscreen shell. Double-click or pinch to zoom.
---
### Task 2.4: Left/Right Navigation with Transition
**Files:**
- Modify: `components/viewer/photo-viewer.tsx`
- Create: `hooks/use-photo-navigation.ts`
Hook that manages:
- Current photo index in album
- Keyboard arrow navigation
- Touch swipe detection
- Preload adjacent images
- `AnimatePresence` with `translateX` + opacity transition
---
## Phase 3: Login/Signup Redesign
### Task 3.1: Split-Screen Login Page
**Files:**
- Rewrite: `app/login/page.tsx`
- Rewrite: `components/login/user-from.tsx`
**Desktop layout:**
```tsx
{/* Left: Featured photo */}
{/* Right: Login form */}
```
**Mobile:** Background image (darkened) + overlaid form.
---
### Task 3.2: Split-Screen Signup Page
**Files:**
- Rewrite: `app/sign-up/page.tsx`
- Rewrite: `components/sign-up/sign-up-from.tsx`
Same split-screen pattern as login.
---
## Phase 4: Admin Dashboard Redesign
### Task 4.1: Streamline Admin Layout
**Files:**
- Modify: `app/admin/layout.tsx`
- Modify: `components/layout/admin/app-sidebar.tsx`
Collapse sidebar to icon-only (48px) by default, expand on hover/click. Content area gets more room.
---
### Task 4.2: Redesign Dashboard Page
**Files:**
- Rewrite: `app/admin/page.tsx`
Key metrics row (3 cards: photos / albums / storage) + recent uploads grid (masonry thumbnails).
---
### Task 4.3: Image Management — Grid/List Toggle
**Files:**
- Rewrite: `components/admin/list/list-image.tsx`
- Modify: `components/admin/list/image-view.tsx`
- Modify: `components/admin/list/image-edit-sheet.tsx`
Add view toggle (grid | list). Grid = dense thumbnails with checkbox overlay. List = table rows with inline expand-to-edit.
---
### Task 4.4: Upload Page Enhancement
**Files:**
- Modify: `app/admin/upload/page.tsx` (or relevant upload page)
- Modify: `components/admin/upload/simple-file-upload.tsx`
- Modify: `components/admin/upload/livephoto-file-upload.tsx`
Larger drag zone, inline progress bars, preview thumbnails during upload.
---
## Execution Order
| Phase | Tasks | Impact | Est. Files |
|-------|-------|--------|------------|
| 1. Gallery | 4 tasks | Highest — what users see first | ~10 files |
| 2. Viewer | 4 tasks | High — core photo experience | ~8 files |
| 3. Auth | 2 tasks | Medium — first-time impression | ~4 files |
| 4. Admin | 4 tasks | Lower — admin only | ~10 files |
Start with Phase 1 for maximum visual impact.