feat: portfolio with subpages, hero homepage, and obfuscated asset URLs
This commit is contained in:
77
README.md
77
README.md
@@ -1,36 +1,73 @@
|
||||
This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app).
|
||||
# Immich Folio
|
||||
|
||||
## Getting Started
|
||||
A self-hosted photography portfolio powered by [Immich](https://immich.app). Turns your Immich albums into a beautiful, public-facing gallery — no database required.
|
||||
|
||||
First, run the development server:
|
||||
## Features
|
||||
|
||||
- **Portfolio-style navigation** — horizontal nav bar with all your collections
|
||||
- **Split hero homepage** — configurable hero image with navigation links
|
||||
- **Subpage grouping** — organize albums under named collections (e.g. `/japan/tokyo-2023`)
|
||||
- **Image proxy** — serves Immich assets without exposing your server or API key
|
||||
- **Obfuscated URLs** — asset IDs are encrypted, never exposed to the public
|
||||
- **Masonry photo grid** — responsive layout with lightbox viewer
|
||||
- **EXIF metadata** — camera, lens, and settings displayed on demand
|
||||
- **Aggressive caching** — configurable TTL for fast repeat loads
|
||||
|
||||
## Quick Start
|
||||
|
||||
```bash
|
||||
# Clone and install
|
||||
git clone https://github.com/YOUR_USER/immich-lightbox.git
|
||||
cd immich-lightbox
|
||||
npm install
|
||||
|
||||
# Configure
|
||||
cp .env.local.example .env.local
|
||||
# Edit .env.local with your Immich server details
|
||||
|
||||
# Run
|
||||
npm run dev
|
||||
# or
|
||||
yarn dev
|
||||
# or
|
||||
pnpm dev
|
||||
# or
|
||||
bun dev
|
||||
```
|
||||
|
||||
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
||||
## Configuration
|
||||
|
||||
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
|
||||
All configuration is done via environment variables in `.env.local`:
|
||||
|
||||
This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
|
||||
```env
|
||||
# Required
|
||||
IMMICH_API_URL=http://your-immich-server:2283
|
||||
IMMICH_API_KEY=your-api-key
|
||||
|
||||
## Learn More
|
||||
# Albums to publish (comma-separated UUIDs, optional labels)
|
||||
LIGHTBOX_ALBUMS=Wedding:uuid-1, Vacation:uuid-2
|
||||
|
||||
To learn more about Next.js, take a look at the following resources:
|
||||
# Group albums into subpages (one per line, wrap in quotes)
|
||||
LIGHTBOX_SUBPAGES="
|
||||
Japan > uuid-tokyo, uuid-kyoto
|
||||
Italy > uuid-rome, uuid-florence
|
||||
"
|
||||
|
||||
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
|
||||
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
|
||||
# Optional
|
||||
SITE_TITLE=My Portfolio
|
||||
SITE_SUBTITLE=Photography
|
||||
HERO_IMAGE=asset-uuid-for-homepage
|
||||
CACHE_TTL=300
|
||||
```
|
||||
|
||||
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
|
||||
## Tech Stack
|
||||
|
||||
## Deploy on Vercel
|
||||
- **Next.js 16** (App Router)
|
||||
- **React 19**
|
||||
- **TypeScript**
|
||||
- **Vanilla CSS** (no framework)
|
||||
|
||||
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
|
||||
## Docker
|
||||
|
||||
Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
|
||||
```bash
|
||||
docker build -t immich-lightbox .
|
||||
docker run -p 3000:3000 --env-file .env.local immich-lightbox
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
Private — all rights reserved.
|
||||
|
||||
Reference in New Issue
Block a user