Project · Art Gallery Website

SmitsArtStudio — a digital gallery that feels like a real room

Live gallery

Browse the full SmitsArtStudio site with all current paintings, mockups, and contact details.

Open SmitsArtStudio
SmitsArtStudio homepage

SmitsArtStudio is a Next.js art gallery site built to feel like walking through a calm, minimal studio — warm off-white walls, mint accents, and paintings staged inside interior mockups instead of just flat thumbnails.

The site is split into a focused set of pages — home, works, about, locations (India & Vancouver), and contact — with a single scrollable landing page that highlights the four main series: figurative, landscapes, abstract, and prints on demand.

Role

Design, frontend architecture, asset pipeline

Stack

Next.js · TypeScript · Tailwind · container queries

Focus

Visual storytelling & smooth browsing

Status

Frontend live, backend & CMS planned

Gallery first, UI second

Every decision starts from the paintings: generous whitespace, muted UI chrome, and typography that stays out of the way so the colors in the pieces carry the page.

Category-driven layout

Home is a vertical strip of four hero sections — Figurative, Landscape, Abstract, Prints. Each section pulls from the same artwork data model and routes to a filtered works grid.

Two cities, one studio

Location content splits between India and Vancouver. The layout uses the same component shell but swaps copy, images, and map embeds while keeping the brand consistent.

Artwork data & file organisation

Behind the soft visuals is a rigid structure. Each piece has a single source of truth — title, size, price, series, and media — defined in TypeScript, then mapped to a folder in public/artworks/<slug>/.

Every folder can include a full painting, an interior mockup, and a looping texture video. The works page pulls from that manifest so adding a new painting is just: drop files in the right folder, add one object to the array.

  • • Consistent naming keeps imports simple and type-safe.
  • • Assets are heavy now (>1GB) but structured for later compression & CDN.
  • • Layout uses container queries so grids adapt cleanly from phone to 4K without special cases.
lib/artworks.ts typed manifest
export type ArtworkSeries = "figurative" | "landscape" | "abstract" | "prints";

export interface Artwork {
  slug: string;            // "mist-over-darjeeling"
  title: string;
  series: ArtworkSeries;
  size: string;            // "24" × 18""
  medium: string;         // "Acrylic on canvas"
  price?: string;         // optional, hides if not for sale
  year?: number;
}

export const artworks: Artwork[] = [
  {
    slug: "mist-over-darjeeling",
    title: "Mist over Darjeeling",
    series: "landscape",
    size: "24" × 18"",
    medium: "Acrylic on canvas",
    year: 2024,
  },
  // …
];

Browsing experience

The goal was to avoid the “e-commerce grid of thumbnails” feeling. Instead, each section on the homepage reads like a wall in a gallery: one hero mockup, a short curatorial blurb, and a single CTA into the works page.

Transitions are simple but deliberate — gentle parallax on mockups, hover lifts on paintings, and subtle color shifts in the beige / mint palette so everything feels tactile without being noisy.

Landscape Section
Landscape Section
Contact Form
Contact Form