Artist Portfolio cover

Artist Portfolio

Released: Jun 2026

Description

A dark, cinematic portfolio site for Emaad's art, with a look borrowed from JoJo's Bizarre Adventure. It has three pages: a home page with a hero and a strip of selected pieces, a Works page with a filterable masonry grid, and an About page. Emaad runs it without me. They log into a Decap CMS dashboard with GitHub, drop in an image, fill out a form, and hit Publish, and the site rebuilds on its own. The whole setup costs nothing to run.

Key Responsibilities

Built a three-page React 19 and Vite site with React Router and Motion animations


Integrated Decap CMS with a GitHub backend so a non-technical artist can publish artwork through a web form


Wrote a dependency-free YAML frontmatter parser that loads CMS markdown files at build time through import.meta.glob


Self-hosted a GitHub OAuth proxy for Decap as serverless functions on an existing Vercel project, after public proxies kept shutting down


Configured a GitHub Actions workflow that builds and deploys to GitHub Pages on every push, deriving the Vite base path from the repo name


Wrote a post-build Node script that injects CMS-editable title and Open Graph tags into the static HTML for social link previews


Built a reusable auto-scrolling carousel hook that only activates on overflow and respects prefers-reduced-motion

Technology Used

React

Vite

JavaScript

Decap CMS

Motion

GitHub Actions

GitHub Pages

Vercel

Features

No-Code Artist Dashboard

Emaad visits /admin, logs in with GitHub, and gets a form for each artwork: image, title, description, year, medium, dimensions, categories, and whether it is for sale. Publishing commits the file to the repo and the site redeploys.

Masonry Gallery & Fullscreen Lightbox

The Works page lays pieces out in a Pinterest-style masonry grid. Visitors can filter by category and change the sort order. Clicking a piece opens a fullscreen lightbox with its full details, and the arrow keys and Escape work inside it.

Every Word Editable from the CMS

The site name, tagline, hero statement, About text, portraits, category list, and social links all live in one settings file that the dashboard edits. Social links take any number of entries, each with an icon picked from a dropdown of 12 options.

Curated Auto-Scrolling Selected Strip

Emaad picks which works appear on the home page with a searchable picker. If more are picked than fit on one row, the strip turns into a looping carousel that pauses on hover or touch and stays still for visitors who prefer reduced motion.

Link Previews That Actually Work

Because it is a single-page app, crawlers from Discord, Slack, iMessage and X would only see an empty HTML shell. A post-build script writes the editable title and description into the static index.html so shared links show the right preview.

Screenshots

Additional Information

I built this for free for Emaad, who is family, so their art would have one place to live.


The code took about five days, June 11 to 15, 2026. After that I transferred the repo to their GitHub account so the site belongs to them.


Since launch Emaad has made over 110 commits through the dashboard without touching code, and the site had 68 artworks on it as of September 2026.


Hosting is free end to end. GitHub Pages serves the site, GitHub Actions builds it, and the OAuth login runs on a Vercel project I already had for NanoRewind.

Get in Touch:

Copyright2025 - 2026 | All rights reserved