# PickArt: Art-Hospitality Marketplace Platform

Hotels become galleries. Guests buy the art off the wall.

A marketplace that puts artists' work on hotel walls and lets guests buy the piece they are looking at: hosts get free curation, artists get a sales channel, guests take the art home.

## Tags

Next.js, TypeScript, Supabase, Stripe, React PDF, Next-intl, Drizzle, TanStack Query

![PickArt marketplace: curated artworks placed in hotel properties, browsable and buyable online](https://lxbpjvrr41.ufs.sh/f/6KZjuRTQYJxH9okZVs2xjQzHBernlc5XPgJyfGihb2KZvNIp)

## At a glance

- **Role:** Lead full-stack engineer
- **Timeline:** Feb 2025 - Jul 2026
- **Scope:** Three sides, two legal entities

## Outcomes

- **15K** — monthly active users
- **200+** — artworks on walls
- **100K+** — events a month
- **2 months** — from zero to launch

Live platform figures at the end of the engagement, July 2026.

## What each side gets

### Guests

Scan the QR code next to a piece, read its details and provenance, buy it without leaving the page. Take it off the wall at checkout or have it shipped home, ownership documents issued automatically.

### Property hosts

Free curation and placement, a commission on every sale, nothing to maintain. Hosts manage their properties, the spots on each wall, and what kind of work they want hanging there.

### Artists

Work hangs in hotels instead of a storage unit. Direct sales with no gallery cut, logistics and paperwork handled by the platform, and analytics on what sells in which venue.

![PickArt Art Gallery](https://lxbpjvrr41.ufs.sh/f/6KZjuRTQYJxHbT9pwgcRvA78qju1XTLEHeDhY3SOdnGI2VKr)

## The model behind a wall

Artists, artworks, properties, spots, orders and QR codes are all related records. Every artwork moves through one lifecycle: `Draft → Approval → Allocation → Live → Sold`. Status is what the rest of the platform reacts to: a live piece appears in the gallery, a sold one comes off it, a refund puts it back.

## QR codes on the wall

Each placement gets its own code. A scan loads the artwork, its provenance and the room it hangs in, then keeps checkout in the same flow. Inventory is checked against live status so a piece cannot be sold twice.

![PickArt QR Code Scanning Interface](https://lxbpjvrr41.ufs.sh/f/6KZjuRTQYJxHzMDCltpa2t7UITxhGFHeYuQZmnVvk96KR0CD)

## Money, shipping and documents

Payments run through Stripe, and webhooks drive the order forward: `Pending → Processing → Shipped → Delivered`, with email to every side at each step. Prices show in CHF, EUR or USD. Shipping cost comes from the artwork's dimensions and its destination, and an on-site pickup transfers ownership on the spot instead of shipping anything.

Then the paperwork: release voucher, certificate of authenticity, customs declaration where the piece crosses a border. React PDF renders each one from the order data.

## Rendering per page, not per app

Galleries and property pages are generated statically and revalidate when an artwork's status changes, so the public side stays fast on hotel wifi. The admin platform renders on the server per request, because the people running the operation need current data.

## Three languages

English, German and Italian, every locale pre-rendered and its metadata generated per artwork. Translation keys are typed, so a missing one fails the build instead of surfacing as a raw key in production. Terms and privacy copy change by country.

## Stack

Next.js app router with server components on the front, TypeScript from the database schema to the UI. Supabase for PostgreSQL, storage and its CDN, Drizzle for schema and queries, TanStack Query for client state. Backend services are written in Effect.ts. Zod validates anything crossing a boundary, row-level security keeps each user inside their own data, and Resend sends transactional email as React components.

The repository is laid out for coding agents to work in: clear module boundaries and one obvious way to do each thing, so a task can be handed off without a tour of the codebase first.

## Links

- Project page: https://andrey-markin.com/projects/pickart
- All projects: https://andrey-markin.com/projects.md
- Live site: https://www.pickart.com
- Contact: https://andrey-markin.com/#contact
