My personal photography website steve.phot
portfolio photography svelte sveltekit
at main 56 lines 1.6 kB view raw view rendered
1# steve.photo 2 3![cover](./cover.jpg) 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