gallery

development
Last updated

Description

An alive gallery of all my projects - a collection of my journal (blends.blog), sketchbook (forbit.dev), and exhibition (thomas-materne.com)

Specification

thomas-materne.com

Personal portfolio site for Tom Materne — the gallery to forbit.dev's workshop and blends.blog's journal.

Philosophy

This site is intentionally minimal and curated. It presents finished work with quiet confidence, using a warm paper aesthetic inspired by aged photographs and darkroom tones.

Design Principles:

  • Typographic-first, list-based layouts (no cards)
  • Warm paper aesthetic (cream backgrounds, rust accents)
  • SVG grain overlay for organic, film-like texture
  • Generous whitespace — content floats, never crammed
  • No dark mode (paper doesn't have dark mode)
  • Manual curation over automation

Tech Stack

Getting Started

Prerequisites

Installation

# Clone the repository
git clone https://github.com/f0rbit/gallery.git
cd gallery

# Install dependencies
bun install

Development

# Start dev server (hot reload)
bun run dev

Open http://localhost:3000

Build

# Build static site
bun run build

Output goes to .output/public/

Preview Production Build

npx serve .output/public

Project Structure

src/
├── components/
│   ├── common/
│   │   ├── Grain.tsx          # Inline SVG grain filter overlay
│   │   ├── Divider.tsx        # Section separator
│   │   └── InProgress.tsx     # Animated hammer for WIP sections
│   ├── layout/
│   │   └── Layout.tsx         # Page wrapper with footer nav
│   └── project/
│       ├── ProjectHero.tsx    # Project detail header
│       ├── ProjectNav.tsx     # Prev/next navigation
│       └── ProjectCard.tsx    # Project list item
├── data/
│   ├── projects.ts            # Project definitions
│   └── posts.ts               # Blog post references
├── routes/
│   ├── index.tsx              # Homepage
│   ├── about.tsx              # About page
│   ├── now.tsx                # Current focus (/now page)
│   ├── colophon.tsx           # Site credits
│   └── projects/
│       ├── index.tsx          # All projects
│       └── [slug].tsx         # Project detail pages
└── styles/
    ├── variables.css          # Design tokens
    ├── typography.css         # Font definitions
    ├── grain.css              # Image texture effects
    └── global.css             # All component styles

Design System

Typography

Base size 16px with a modular scale:

| Token | Size | Use | |-------|------|-----| | --text-xs | 13px | Metadata, captions | | --text-sm | 14px | Secondary text | | --text-base | 16px | Body text | | --text-lg | 18px | Lead paragraphs | | --text-xl | 24px | Section headings | | --text-2xl | 32px | Page titles | | --text-3xl | 44px | Hero display |

Colors

Warm paper palette with earthy accents:

| Token | Value | Use | |-------|-------|-----| | --bg-cream | #FAF8F5 | Page background | | --bg-warm | #F5F1EB | Subtle sections | | --text-primary | #2C2825 | Main text | | --text-muted | #6B6560 | Secondary text | | --accent-rust | #A65D3F | Links, highlights |

Layout

| Token | Value | Use | |-------|-------|-----| | --max-width | 80rem (1280px) | Full layout container | | --content-width | 48rem (768px) | Readable content width |

Grain Effect

The signature grain texture is an inline SVG filter applied as a fixed overlay:

<svg class="grain">
  <filter id="grain-filter">
    <feTurbulence type="fractalNoise" baseFrequency="0.9" numOctaves="4" />
    <feColorMatrix type="saturate" values="0" />
  </filter>
  <rect filter="url(#grain-filter)" />
</svg>

Deployment

The site deploys automatically to Cloudflare Pages on push to main.

Cloudflare Pages Settings:

  • Build command: bun run build
  • Build output directory: .output/public
  • No deploy command needed (Pages handles it)

Content Updates

Adding a Project

  1. Add project data to src/data/projects.ts
  2. The project automatically appears on /projects and gets a detail page at /projects/[slug]

Updating /now

Edit src/routes/now.tsx — this page is updated monthly with current focus areas.

Related Properties

  • forbit.dev — Technical blog, experiments, learning posts
  • blends.blog — Personal journal, art, music, cafe reviews

License

All rights reserved. This is a personal portfolio site.

Recent Commits

docs: readme

Unify homepage and sub-page content width using --content-width

Increase font sizes to 16px base, fix link underline styling

Rename work to projects, increase sizes, unify page styling

Improve grain visibility with inline SVG filter

Redesign homepage with minimal list-based layout

Consolidate CSS into composable single-source-of-truth system

docs: plan

Initial MVP: SolidStart portfolio site with warm paper aesthetic