README.md 1.6 K raw
1
# steve.photo
2
3
![cover](./cover.jpg)
4
5
My 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
19
bun install
20
21
# Run development server
22
bun run dev
23
24
# Build for production
25
bun run build
26
27
# Deploy to Cloudflare
28
bun run deploy
29
```
30
31
## Structure
32
33
```
34
src/
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