Artist portfolio + AI attendant

FerrisSmith.Art

Georgia, US · Live since 2026

Quality

95Performance100Accessibility95Best practices100SEO
0–49 50–89 90–100

Case study

The challenge

A 2D character artist's portfolio lived on WordPress — heavy, slow, and hard to make match the artist's own visual identity. The rebuild had to preserve every existing URL and piece of content, add a print shop without taking on PCI scope, and do one thing no template offers: put the artist's own mascot character on the site as a working AI attendant, in voice, without runaway API costs.

The approach

A ground-up Astro 6 rebuild on Bun, static-first: every page prerenders, and client JavaScript exists only as small islands for the starfield, parallax, and mascot console. WordPress content came through a deterministic importer — slugs, dates, and taxonomy preserved, with a generated redirect map covering every legacy URL. The shop uses Stripe hosted Checkout with prices read from Stripe at build time. And D-6401, the artist's mascot, answers visitors via a streaming AI route hardened with same-origin checks, signed stateless history, per-IP rate limits, and a hard monthly spend cap.

Infrastructure

2 dedicated services on private infrastructure.

  • App

    Astro on Bun

  • KV

    Redis

The evidence

Live screenshots, not mockups.

ferrissmith.art
Homepage hero of ferrissmith.art with animated starfield, bold display typography, and character artwork
Homepage hero — starfield and parallax islands render over a fully static page; client JS ships only where motion lives.
ferrissmith.art
Full-length homepage of ferrissmith.art from hero through work grid, story stage, and contact footer
Full-length homepage — every section prerendered at build time, fonts self-hosted, zero third-party requests.
Mobile viewport of ferrissmith.art at 390px
Mobile at 390 pixels — a CSS-only menu sheet replaces the desktop nav below the breakpoint.
ferrissmith.art
Portfolio grid of ferrissmith.art showing character art pieces with category tags
The portfolio grid — covers use per-piece focal-point crops so faces stay in frame at every tile size.

Stack proof

Every claim is verifiable.

  • Astro 6Verified

    Static-first build — every page prerenders; SSR exists only for the API routes. Confirmed via the Astro v6.4.8 generator meta on the live site and hashed /_astro/* asset bundles.

  • Bun runtime

    Runs on Bun with the astro-bun-adapter. One service, one process, serving prerendered pages plus the streaming API routes.

  • Stripe hosted Checkout

    Shop prices are read from Stripe at build time by price ID — never typed into content frontmatter. Checkout hands off to Stripe's hosted flow; no card data touches the site.

  • AI mascot attendant

    D-6401, the artist's mascot character, answers visitors over server-sent events — same-origin locked, HMAC-signed stateless history, per-IP rate limits, and a monthly spend cap enforced in Redis.

  • MoonFactory-hosted

    Deployed from a Dockerfile on private infrastructure we own and operate, Cloudflare-fronted. We own the uptime commitment.

  • Astro 6
  • Bun
  • Stripe Checkout
  • AI Mascot
Next projectHudson Valley Luxury Resorts