DEV Community

Cover image for From the Roadside to the Web: Building a Portfolio Platform for Independent Artists
andre byukusenge
andre byukusenge

Posted on

From the Roadside to the Web: Building a Portfolio Platform for Independent Artists

DEV Weekend Challenge: Community

The Community

In my country, it's common to see artists roaming the streets, paintings tucked under their arms, trying to sell their work to passersby. It's a hustle born of passion β€” but also of necessity, because there simply isn't a better way for many of them to reach buyers.
This became personal for me because my own brother was one of those artists. I watched him walk the streets, talented work in hand, with no platform and no audience beyond whoever happened to walk by.
That image never left me. Artelier was built for him β€” and for every independent painter, illustrator, and creator like him β€” who deserves a professional space to showcase their work, sell their art, and receive commissions, without giving up a cut to a faceless marketplace or being limited to the reach of a sidewalk.

The goal: give street-level talent a world-class online home they truly own.

What I Built

Artelier is a modern, full-stack artist portfolio and e-commerce platform. It's not just a gallery β€” it's a complete creative ecosystem for artists and their audiences.

πŸ–ΌοΈ For Visitors / Art Collectors

  • Browse curated galleries and collections with smooth animations and skeleton loaders
  • Image lightbox with zoom in/out and download support
  • Favorites system β€” heart artworks and revisit them from a dedicated favorites page (persisted via localStorage)
  • Social sharing β€” share artwork to Twitter, Facebook, LinkedIn, or copy a direct link
  • Purchase artwork β€” buy originals or order prints in multiple sizes; payment is confirmed directly by the artist
  • Commission requests β€” fill out a detailed form to request a custom piece directly from the artist ### 🎨 For Artists / Admins
  • Upload artworks (via Supabase Storage, Cloudinary, or local) with titles, tags, pricing, and descriptions
  • Gallery management β€” create named collections and organize artworks into them
  • Print options manager β€” set print sizes and formats per artwork
  • Order dashboard β€” view and update order statuses (Pending β†’ Paid β†’ Fulfilled β†’ Canceled)
  • Commission inbox β€” manage incoming commission requests with a full status workflow (New β†’ In Review β†’ Invoice Sent β†’ Paid β†’ Rejected)
  • Artist profiles β€” public-facing profile with bio, avatar, contact links, with full CRUD in the admin panel
  • Forgot password with dev-mode URL display and dark mode support ### ✨ Design Highlights
  • Glass morphism UI with backdrop blur effects
  • Teal-to-emerald gradient accent system
  • Custom palette & paintbrush SVG logo
  • Smooth micro-animations: fade-in-up, slide-in-left, scale-in
  • Fully responsive and mobile-first

- Custom styled scrollbar matching the theme

Demo

Code

🎨 Artelier - Artist Portfolio & Marketplace

A modern, full-featured art portfolio and e-commerce platform built with Next.js 15, featuring artwork galleries, favorites system, print sales, and admin management.

Next.js React TypeScript Prisma Tailwind CSS

✨ Features

πŸ–ΌοΈ Gallery & Artwork Management

  • Dynamic Galleries: Browse curated collections with smooth animations
  • Advanced Search & Filtering: Filter by tags, search by title, sort by date/title
  • Image Lightbox: Click-to-zoom with controls (zoom in/out, download, ESC to close)
  • Related Artworks: Smart recommendations based on tags and categories
  • Loading States: Elegant skeleton loaders for better UX

⭐ Favorites System

  • Persistent Favorites: LocalStorage-based favorites that persist across sessions
  • Favorites Counter: Real-time badge showing favorite count in header
  • Sorting Options: Sort by newest/oldest, alphabetically (A-Z/Z-A)
  • Bulk Actions: Clear all favorites with confirmation dialog
  • Dedicated Page: View and manage all favorited artworks

πŸ›’ E-Commerce Features

  • Original Artwork Sales: Sell unique, one-of-a-kind pieces
  • Print…

How I Built It

πŸ› οΈ Tech Stack

Layer Technology
Framework Next.js 15 (App Router)
UI React 19, Tailwind CSS 4.x, Lucide React
Type Safety TypeScript
Forms React Hook Form + Zod validation
Database MySQL + Prisma ORM
File Storage Supabase Storage (server-side upload via service role)
Image Optimization Cloudinary + next-cloudinary
Auth Custom JWT + cookie-based admin sessions
State React Context API (FavoritesContext) + localStorage

πŸ—οΈ Architecture

One of the most interesting challenges was bridging two separate auth systems:

  1. Admin login uses a custom password β†’ cookie (admin_session)
  2. Supabase Storage RLS expects a native Supabase Auth session (auth.uid()) The solution was a server-side upload proxy endpoint (POST /api/uploads/supabase) that:
  3. Validates the admin_session cookie (keeping existing admin auth)
  4. Uses the Supabase service_role key server-side (never exposed to the client)
  5. Performs file type/size validation before forwarding to Supabase This keeps security airtight while making the upload experience seamless. ### πŸ—„οΈ Database Schema Key models in Prisma:
  6. Artwork β€” title, images, tags, pricing, gallery association
  7. Gallery β€” named collections containing many artworks
  8. Artist β€” profile info, bio, avatar URL
  9. PrintOption β€” print sizes and prices per artwork
  10. Order / OrderItem β€” customer purchases
  11. CommissionRequest β€” custom artwork requests with status tracking ### πŸ”’ Security
  12. All admin API routes check the admin_session cookie before responding
  13. Zod schemas validate every POST/PATCH body
  14. HTTPS enforced in development with self-signed certificates

Top comments (0)