← All websitesWebsite & branding
Website and branding · Aberdeen, UK

Rafa.

Rafa is a photographer in Aberdeen. I built his website and branding, with a gallery system and an admin panel so he can run the whole site himself, and adapted the design to his logo.

Year
2026
Place
Aberdeen, UK
Scope
Website and branding for a photographer: gallery system, admin panel with full control without my intervention, design adapted to his logo
Engagement
Freelance, paid
Built with
Vinext, React 19, Tailwind 4 · Cloudflare Workers, D1, R2
5 parts

What is in the site.

Five parts, built so a photographer can run his own site. Scroll to follow along.

  1. Brand · Look and feel

    Design adapted to his logo

    Website and branding for a photographer in Aberdeen, with the design adapted to his logo and his feel.

    BrandingLogo-matched design
    1
    BrandLook and feel
  2. Gallery · His work

    A gallery system

    A gallery system built for a photographer’s work.

    Gallery system
    2
    GalleryHis work
  3. Admin · Control

    An admin panel he runs himself

    An admin panel with full control of the site, so he can run the whole site himself without my intervention.

    Admin panelFull control
    3
    AdminControl
  4. Booking · Calendar

    A booking calendar for first calls

    A three-step calendar (a day, a time, confirmed) holds the slot on Google Calendar and sends the invite. Rafa sets his own hours in the admin.

    Booking calendarGoogle Calendar
    4
    BookingCalendar
  5. Live · Online

    Live on its own address

    The site is live at meikleslens.merwe.dev.

    meikleslens.merwe.dev
    5
    LiveOnline
Design

The design system.

Colour, type, principles and the decisions behind the site, from the design document.

Design system · Meikle’s Lens

Paper, ink and one sage accent.

A cinematic portfolio and booking site where the photographs lead and the interface stays quiet. The palette is drawn from the things the work is about: paper, ink, and the muted green of Scottish stone and moss.

Colour

Sage is the only accent: the preloader’s percent sign, the booking calendar’s selected state and small highlights. Select a swatch to copy its value.

Typography
Display · Cormorant Garamond
Made to be looked at.
Text · Manrope
A calm presence and an attentive eye. Body copy and buttons stay clear on small screens.
Labels and data · DM Mono
Portfolio / Weddings · 01 / 05
Principles
01

The image is the authority

Photos are never cropped to fit a layout. Galleries keep each image’s native aspect ratio, and hero and portfolio images are served as the original files.

02

Quiet interface, confident type

Warm paper tones, a single sage accent, hairline rules and small monospaced labels. A large serif carries the voice, so the chrome around the photographs can stay out of the way.

03

Motion that can be switched off

Movement is slow and purposeful, and every decorative animation respects reduced-motion settings. Pause, drag and keyboard control are kept wherever something moves.

04

The owner is the editor

Anything a photographer would change monthly lives in the admin panel, not in code: work, order, categories, videos and availability.

Page sequence

The homepage reads like a short story: a statement, proof, prices, process, the person, other voices, and an invitation.

Preloader

Wordmark with an outlined “LENS”, a percent counter and a sage panel. It shows once per session and is skipped for reduced-motion visitors.

Decisions
Native-ratio galleries

Project pages show images at full width with automatic height. No crop, no masonry. The motion galleries share a common height and let each image keep its natural width.

Why: A mix of portrait and landscape work only looks right if the photographer’s own framing survives.

Sideways project pages

A project opens as one horizontal rail. The cover sits on the left with category, title and description over the dark page, with no card. Vertical wheel movement is eased into horizontal movement, and touch, trackpad and keyboard scrolling all work natively.

Why: It reads like turning through a print set, and it makes each image the whole screen.

Curator-managed categories

Categories are created in the admin. Each project belongs to one or two, “All” is a permanent view, and removing a category archives it without unassigning projects.

Why: The photographer’s work changes. A fixed list of genres would have needed a developer.

Two independent motion galleries

The small and large galleries each have their own image list, selected and ordered in the admin. The public versions have no heading, arrows, pause button or scrollbar, only images.

Why: The two placements do different jobs, so one shared list would compromise both.

Video as a channel

Video sits beside the categories but opens its own page instead of filtering photos. Players load only when the visitor presses Load video, and nothing autoplays.

Why: YouTube embeds are heavy and set cookies. Click-to-load keeps the page fast and respects privacy.

Booking policy lives in the site

Recurring hours, duration, time zone, lead time, buffers, daily limits and date exceptions are edited in the admin. Google Calendar is the source of truth for conflicts and receives confirmed events and invitations.

Why: It gives Rafa full control of his availability without exposing a third-party scheduler’s branding or tracking.

Built with
VinextReact 19Tailwind 4Cloudflare WorkersD1 and DrizzleR2 mediaGoogle Calendar OAuthFramer Motion
Details

What is included.

WebsiteBrandingGallery systemAdmin panelBooking calendarLogo-matched design
Next project Neide. Website & branding2026 · Netherlands

Do you have a project in mind?

Bring the rough version. A sentence, a sketch or a deadline is enough to start.

Let’s talk ↗