Overview
Collage is an interactive photographer portfolio by SonoJS (demo: Noor Halberg, Copenhagen). Built with Vite, React 19, TypeScript, custom CSS, and Jost Variable. An endless contact-sheet table of 16 film prints (Interiors, Architecture, Travel, Still life, Portrait) with drag momentum, random/linear layout modes, category labels, lightbox full stills, about/contact popovers, and live Copenhagen clock. Demo portfolio chrome only - no booking backend. Vite build ready for Cloudflare Workers.
Highlights
- 01
Drag contact sheet
Endless tiled prints with momentum drag, depth sizing, and throw physics.
- 02
Random / linear modes
Switch layouts with gliding transitions across all 16 film stills.
- 03
Category + lightbox
Interiors–Portrait filters, full WebP lightbox, about/contact chrome.
- 04
Vite and fork-ready
Vite 7 + React 19 + TypeScript + Jost Variable - npm run build to dist/.
You get
- Full Vite + React 19 + TypeScript source (Collage / Noor Halberg)
- App.tsx collage stage, drag physics, lightbox, about/contact
- Custom style.css (no Tailwind)
- 16 thumb + 16 full WebP prints
- @fontsource-variable/jost
Details
- Version
- v1.0.0
- Last update
- Nov 10, 2026
- Pages
- 1
- Category
- Portfolio
You need
- Node.js 20 or newer
- Vite 7
- React 19
- TypeScript 5+



