My personal photography website
steve.phot
portfolio
photography
svelte
sveltekit
1# steve.photo
2
3
4
5My personal photography website built with [SvelteKit](https://svelte.dev)
6
7## Features
8
9- Photo gallery with infinite scroll and progressive image loading
10- Automatic EXIF metadata extraction (camera, lens, aperture, ISO, etc.)
11- Admin panel for uploading, editing, and deleting photos
12- RSS feed for content syndication
13- SEO optimized with dynamic OpenGraph and Twitter card metadata
14
15## Quickstart
16
17```bash
18# Install dependencies
19bun install
20
21# Run development server
22bun run dev
23
24# Build for production
25bun run build
26
27# Deploy to Cloudflare
28bun run deploy
29```
30
31## Structure
32
33```
34src/
35├── lib/
36│ ├── auth.ts # HMAC session management
37│ ├── feed.ts # RSS feed photo retrieval
38│ ├── types.ts # TypeScript interfaces
39│ └── components/
40│ └── ProgressiveImage.svelte
41├── routes/
42│ ├── +page.svelte # Gallery with infinite scroll
43│ ├── photo/[slug]/ # Photo detail page
44│ ├── admin/ # Protected upload panel
45│ ├── login/ # Authentication
46│ ├── api/photos/ # Pagination endpoint
47│ └── rss.xml/ # RSS feed
48└── hooks.server.ts # Session verification
49```
50
51## Stack
52
53- **SvelteKit** - Full-stack framework handling routing, SSR, and API endpoints
54- **Cloudflare Workers** - Edge runtime for serverless deployment
55- **D1 Database** - SQLite database for storing photo metadata
56- **R2 Storage** - Object storage for hosting images and thumbnails