A full-screen daily photo and video display featuring Dylan. Each day shows a different image with a subtle Ken Burns animation effect. Every 12.1 days, a video plays instead.
Live site: dylanaday.simonlowes.cloud
- Daily Selection: Uses seeded randomization based on the date, so everyone sees the same photo on the same day
- Ken Burns Effect: Intelligently chooses pan/zoom direction based on image and viewport aspect ratios
- Video Days: Every 12.1 days, a looping video plays instead of a static image
- 398 images and 30 videos cycle throughout the year
npm install
npm run devOpen localhost:3000
- Add images to
images/folder with sequential numbering - Update
TOTAL_IMAGESinsrc/app/page.tsx - Run
npm run optimizeto generate optimized versions
- Add videos to
images/folder (indices 0-29 have both .jpg and .mp4) - Run
npm run optimize:videosto compress for web - Videos are stored in Git LFS due to file size
npm run predeploy # Optimizes all media and buildsDeploys automatically to Dokploy VPS on push to main.
- Next.js (App Router, static export)
- TypeScript
- Tailwind CSS
- Sharp (image optimization)
- FFmpeg (video optimization)
- Git LFS (video storage)