Skip to content
/ photos Public

Photography portfolio featuring albums, galleries, and globes. ๐Ÿ”ง Built with Next.js, ThreeJS, and Tailwind. ๐ŸŒŽ Hosted on Contentful and Pages.

Notifications You must be signed in to change notification settings

agarun/photos

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

98 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

My photography portfolio with galleries, tags, folders, and a globe ๐ŸŒŽ

Setup

The prerequisites are Node >= 20 and pnpm >= 8.

First, install the dependencies:

pnpm install

Run the development server:

pnpm dev

Open http://localhost:3000 to see the app!

Technologies

Development

The project is written in TypeScript, using Zod, Tailwind, and Next.js.

Visualization

Globe.GL for the homepage globe and cobe for the about page globe

d3-geo for globe data

three for scene creation

Images

PhotoSwipe for image lightboxes

Masonic for masonry layouts

Pig for image grid layouts

cwebp for compressing .jpg to .webp images. See scripts/webp.sh for details regarding image optimization.

Hosting

The Next site is statically exported and hosted on a GitHub Pages site using GitHub Actions.

All assets are stored on Contentful and fetched from their GraphQL endpoint.

Schema

Photo Albums

This model refers to the albums featured on the front page, titled by their region.

Special albums on the front page like Music can exist without coordinate data if using type: custom.

Field Contentful Type
title Short text
photos Media
color Short text
type Short text: Enum<[location, custom]>
description Long text
date Short text
lat Decimal
lng Decimal
locations JSON: Array<{ lat, lng, description }>
order Decimal

For more information, see the album types. Note this field originally had ID photoGallery.

Photo Folders

This model refers to the optional folders feature available at the /folders route.

Field Contentful Type
title Short text
parent_title Short text
photos Media
description Long text
date Short text
order Decimal