A simple personal website that displays my favorite photos directly from an Immich album
  • TypeScript 43.7%
  • Svelte 22.3%
  • CSS 22.2%
  • Dockerfile 6.2%
  • JavaScript 4%
  • Other 1.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
wnbe ea2ab4cfac
All checks were successful
CI / lint-and-build (push) Successful in 1m33s
fix(ci): enable automatic Forgejo checks
2026-09-11 20:01:31 +03:00
.forgejo/workflows fix(ci): enable automatic Forgejo checks 2026-09-11 20:01:31 +03:00
.github/workflows feat: add linting, security headers, caching and fix CI/CD issues 2026-04-22 18:32:23 +03:00
src fix(build): update image and dependencies 2026-09-11 19:56:26 +03:00
static initial commit 2026-02-02 17:38:19 +03:00
.dockerignore feat: add CI/CD with docker 2026-02-02 22:41:56 +03:00
.env.example initial commit 2026-02-02 17:38:19 +03:00
.gitignore initial commit 2026-02-02 17:38:19 +03:00
.npmrc initial commit 2026-02-02 17:38:19 +03:00
.prettierignore feat: add linting, security headers, caching and fix CI/CD issues 2026-04-22 18:32:23 +03:00
.prettierrc feat: add linting, security headers, caching and fix CI/CD issues 2026-04-22 18:32:23 +03:00
compose.yaml fix: load album assets from current Immich API 2026-09-11 14:14:06 +03:00
Dockerfile fix(build): update image and dependencies 2026-09-11 19:56:26 +03:00
eslint.config.js feat: add linting, security headers, caching and fix CI/CD issues 2026-04-22 18:32:23 +03:00
package.json fix(build): pin pnpm and update release workflow 2026-09-11 19:45:00 +03:00
pnpm-lock.yaml fix(build): update image and dependencies 2026-09-11 19:56:26 +03:00
pnpm-workspace.yaml fix(build): update image and dependencies 2026-09-11 19:56:26 +03:00
README.md feat: add linting, security headers, caching and fix CI/CD issues 2026-04-22 18:32:23 +03:00
svelte.config.js initial commit 2026-02-02 17:38:19 +03:00
tsconfig.json style: apply prettier formatting 2026-04-22 18:33:16 +03:00
vite.config.ts style: apply prettier formatting 2026-04-22 18:33:16 +03:00

Gallery

A self-hosted photo gallery powered by Immich. Displays a single album as a clean, minimal gallery with light/dark theme support.

Requirements

  • An Immich instance with at least one album
  • An Immich API key
  • Docker (for production) or Node.js 20+ (for development)

Configuration

All configuration is done via environment variables:

Variable Description Example
IMMICH_URL Base URL of your Immich instance http://192.168.1.10:2283
IMMICH_API_KEY Immich API key (Profile → API Keys) abc123...
IMMICH_ALBUM_ID ID of the album to display uuid-of-album

Copy .env.example to .env and fill in the values.

Running with Docker Compose

# compose.yaml — set IMMICH_API_KEY and IMMICH_ALBUM_ID before starting
IMMICH_API_KEY=your_key IMMICH_ALBUM_ID=your_album_id docker compose up -d

Or edit compose.yaml directly and run:

docker compose up -d

The gallery will be available at http://localhost:3000.

Note: IMMICH_URL in compose.yaml defaults to http://host.docker.internal:2283, which reaches a service running on the host machine. Change this if your Immich instance is elsewhere.

Running with Docker

docker build -t gallery .
docker run -p 3000:3000 \
  -e IMMICH_URL=http://your-immich-host:2283 \
  -e IMMICH_API_KEY=your_key \
  -e IMMICH_ALBUM_ID=your_album_id \
  gallery

Development

# Install dependencies
pnpm install

# Copy and fill in environment variables
cp .env.example .env

# Start dev server
pnpm dev

Other commands:

pnpm check    # TypeScript + Svelte type check
pnpm lint     # ESLint
pnpm format   # Prettier
pnpm build    # Production build

Deployment

The Docker image is built and pushed to GHCR automatically on version tags:

git tag v1.0.0
git push --tags

Images are published to ghcr.io/<owner>/gallery:<version>.