# Mischkomposition Photography Portfolio This is the code repository for the photography portfolio of Tom Misch ("Mischkomposition"). The project features a fast static frontend (based on HTML5 UP Multiverse) powered by a robust **Node.js + SQLite backend** and **Nextcloud integration**. ## Features - **Nextcloud Integration:** Photos placed into the Nextcloud directory are automatically detected. - **Client Separation:** Guests see the public portfolio, while logged-in clients see their designated, private sub-folders. - **Auto-Thumbnails:** Automatic resizing and EXIF extraction (shutter speed, ISO, aperture) for fast loading times. - **Admin Dashboard:** Manage users, roles, private folders, access rights, account security, and deployment status. - **Light/Dark Mode:** Dynamic theme toggle saving preferences in the browser. ## Deployment Setup (Docker) This repository is automatically built into a Docker container via Gitea Actions and pushed to the local Gitea container registry. To deploy on a NAS or Linux server, adjust the `docker-compose.yml` to match your Nextcloud mount: ```yaml services: photography: image: git.mischlabs.de/mrdiderot/photography:latest container_name: photography-website ports: - "8090:8090" environment: - JWT_SECRET=replace-with-a-long-random-secret - FULLS_DIR=/app/public/images/fulls - THUMBS_DIR=/app/public/images/thumbs volumes: - /path/to/nextcloud/data:/app/public/images/fulls:ro - thumbs:/app/public/images/thumbs - database:/app/data ``` Run `docker compose up -d` to launch the site. For a fresh installation, create the initial admin with explicit environment variables only once. Use a bcrypt hash instead of storing a plain password in `docker-compose.yml`: ```bash node -e "const bcrypt = require('bcryptjs'); console.log(bcrypt.hashSync('your-admin-password', 10));" ``` Then start once with `INITIAL_ADMIN_USERNAME=MrDiderot` and `INITIAL_ADMIN_PASSWORD_HASH=`. Existing installations keep their SQLite users in the persistent `database` volume. Container updates are handled by Watchtower, which pulls from `git.mischlabs.de/mrdiderot/photography:latest`. ## Credits & License - Originally based on a Jekyll template. - UI Design by [AJ / HTML5 UP](https://html5up.net). - Enhanced with Node.js authentication, SQLite database management, and Docker integrations by Tom Misch.