Return to archiveCase StudyMobile App & Web Platform

Manywalls

Artists working with physical media -- painters, sculptors, installation artists -- have been poorly served by portfolio tools designed for graphic designers and photographers. Grid-based galleries flatten their work into thumbnails. Social feeds reduce it to content. I built manywalls to give them something closer to what they actually need: a way to present work as an exhibition, wall by wall, with intention.

Case StudyPRJ/EN/MANYWALLS
Mobile App & Web Platform

Manywalls is a digital exhibition platform for artists, combining a mobile creation tool with a full-screen web viewer built around walls, pacing, and presentation.

Live system

manywalls.art

Type
Mobile + Web App
Stack
Expo, Convex, TanStack
Platforms
iOS, Android, Web
Status
Live at manywalls.art

The problem

When a painter applies to a residency, submits work to a jury, or shares a portfolio with a gallery, they are sending a link to a website. That website is usually a grid of images on Squarespace, Format, or Cargo. The viewer scrolls, clicks a thumbnail, glances at a larger version, and moves on. The sequence the artist intended is gone. The relationship between pieces is invisible. The context -- the text that should sit between two works, the breathing room, the deliberate pacing -- does not exist.

This is not a niche frustration. It is the default experience for visual artists online. And it gets worse: over 60% of professional artists have started pulling work offline because AI companies scrape published images to train generators -- without permission, payment, or credit. The portfolio platforms they rely on either ignore this entirely or push the burden onto individual artists to configure per-image tags.

I built manywalls because I believed the format itself was wrong, and because artists deserved a platform that took their concerns about presentation and protection seriously by default.

The concept

The core idea behind manywalls is radical simplicity: an exhibition is a sequence of walls, and a wall is a single full-screen moment. A wall can hold one artwork, shown at proper scale, a block of text such as an artist statement, a description, or a quote, or intentional emptiness. That is it. No grids, no sidebars, no thumbnails.

Every wall has a tone -- a curated background color with an optional texture -- that shapes how the work reads. The same painting feels different on charcoal than it does on bone. This is deliberate: the wall is not just a background, it is part of the exhibition's meaning. Artists choose from a named palette, not free hex colors, because constraint breeds intention.

The viewer experience is linear. You scroll through walls one by one, full-screen, the way you would walk through a gallery. There is no random browsing, no jumping ahead, no distractions. The artist controls the pacing, the sequence, the tension.

The product philosophy in one line:

"Art should be encountered, not consumed." This guided every technical and design decision I made, from the scroll-snap viewing experience to the refusal to add likes, comments, or engagement metrics.

What I built

Manywalls is a dual-platform product. The mobile app for iOS and Android, built with Expo, is the creation tool where artists photograph their work, compose walls, arrange sequences, and publish exhibitions. The web experience at manywalls.art and artist subdomains is the contemplation layer, where viewers, galleries, and juries experience exhibitions in a full-screen, linear format.

Every artist gets a public page at yourname.manywalls.art with their exhibitions, bio, and social links. It loads fast, works on any device, and requires no sign-up to view. The entire creation-to-sharing pipeline runs through the phone -- there is no web editor, no template builder, no page designer. You compose an exhibition the way you would hang work on a wall.

Behind both apps sits Convex as the backend -- a serverless real-time database that gave me type-safe queries and mutations with zero infrastructure to manage. On top of that, I built an image processing pipeline for artwork photography, an AI-powered background removal feature, a subscription system through RevenueCat, and an analytics layer that gives artists insight into how their exhibitions are experienced.

The tech stack

Mobile App

Expo SDK 55, React Native, Expo Router, Reanimated for gestures and animation, and a custom drag-and-drop library for wall reordering.

Web / Marketing

TanStack Start with React 19, Vite 7, Tailwind CSS 4, deployed on Cloudflare Workers for edge performance.

Backend

Convex for a serverless real-time backend, Cloudflare R2 for image storage, Resend for transactional email, and Better Auth with Google, Apple, and email sign-in.

AI & Image Processing

Google Gemini for background removal, Cloudflare Workers AI as a fallback, Fast OpenCV for on-device image detection, and expo-image-manipulator.

Monetization

RevenueCat for iOS and Android subscriptions, plus a virtual currency system for metered AI features such as background removal credits.

Infrastructure

Turborepo monorepo, pnpm workspaces, Sentry, PostHog, Paraglide JS for i18n in English, French, and Spanish, and EAS for mobile CI/CD.

// Monorepo structure
apps/
  mobile            # Expo -- iOS/Android creation tool
  marketing         # TanStack Start -- manywalls.art + exhibition viewer
  admin             # Internal dashboard (tone sets, frames, announcements)
packages/
  backend           # Convex schema, queries, mutations, actions
  core              # Value objects (Slug, Handle, Color, WallTone, Frame)
  web-ui            # Shared React component library
  painting-lens-editor # Custom image editing (crop, perspective, bg removal)
  react-native-reanimated-dnd # Custom drag-and-drop for wall reordering
  video-editor      # Remotion-based marketing video generation
  markdoc           # Blog/docs content rendering
  # ...and more

Technical challenges worth mentioning

Building a painting-first image pipeline. Most image upload flows are designed for photographs or design assets. Artists working with physical paintings need something different: perspective correction, because phone cameras distort canvas edges, precise cropping, and the ability to remove the background behind a framed piece. I built @manywalls/painting-lens-editor, a custom React Native package that handles quadrilateral perspective correction using Fast OpenCV on-device, then offers AI-powered background removal through Google Gemini, with Cloudflare Workers AI as a fallback. The background removal is metered through a virtual credit system managed by RevenueCat, which keeps costs predictable without introducing payment friction in the app.

Wall reordering that feels physical. Rearranging walls in an exhibition should feel like moving canvases on a studio floor -- direct, tactile, immediate. The existing React Native drag-and-drop libraries did not meet my performance bar, so I wrote @manywalls/react-native-reanimated-dnd from scratch, built on Reanimated for 60fps gesture-driven animation. It handles the ordered-list constraint, because walls must maintain a strict sequence, while giving the interaction a weight and responsiveness that generic list-sorting libraries could not.

AI protection as a platform default. Sixty percent of professional artists have reduced what they share online because of AI scraping. I partnered with Cloudflare to block recognized AI crawlers, GPTBot, Google-Extended, CCBot, and others, at the network infrastructure level before a bot ever reaches a page. This is not a per-artist toggle or an opt-out tag. It is a platform-wide policy that applies automatically to every artist page and every artwork file from the moment they go live. I am honest about the limits, screenshots and disguised bots, but the default matters.

A domain model built around exhibition semantics. The data model reflects the product philosophy. An Exhibition is an ordered sequence of Walls. A Wall has a type -- artwork, text, or empty -- a position, and a tone. An Artwork belongs to a Wall -- one per wall, never compared side-by-side. Wall tones come from curated sets with entitlement gating for premium tones. Frames are configurable with face color, edge color, highlight and shadow composition, padding, and texture. Every entity has deliberate constraints that enforce the product's opinionated view of how art should be presented.

Why Convex?

For a real-time product with relatively straightforward relational data and no legacy SQL to migrate, Convex gave me type-safe queries, automatic reactivity, built-in file storage, and zero infrastructure management. The tradeoff is vendor coupling, but for the speed of iteration it enabled, especially working solo, it was the right call.

The frame rendering system

One feature that surprised me with its complexity was frames. Artists can apply a customizable frame to any artwork wall -- selecting from families like painted, wood, or metal, each with configurable face color, edge color, highlight and shadow colors, inner lip color, padding, and thickness. The frame is not a static image overlay. It is rendered dynamically, compositing color, texture, and bevel to produce a realistic frame appearance around the artwork at any aspect ratio. The admin dashboard includes a full frame editor with live preview, color pickers with alpha awareness, and texture management backed by Cloudflare R2.

What I shipped

Manywalls launched on both the App Store and Google Play, with a full web experience at manywalls.art. The product includes a mobile creation tool, a web exhibition viewer with scroll-snap full-screen walls, artist portfolio pages with custom subdomains, an admin dashboard for content and catalog management, AI-powered background removal, a premium subscription tier with RevenueCat, analytics for artists including exhibition views, completion rates, and dwell time per wall, built-in AI scraping protection, and internationalization in English, French, and Spanish.

The codebase runs as a Turborepo monorepo with over a dozen packages sharing code across mobile, web, and backend. I built two custom React Native packages from scratch, the painting lens editor and the drag-and-drop library, a Remotion-based video editor for marketing assets, and an announcement system that delivers rich content across mobile and web with scheduling, revision tracking, and per-user dismissal receipts.

Manywalls is an example of what happens when the product concept drives the architecture rather than the other way around. Every technical decision -- the wall model, the constrained palette, the linear viewer, the image pipeline -- exists because the product demanded it.

What this means for your project

Building manywalls required navigating the intersection of opinionated product design and complex cross-platform engineering. A custom image processing pipeline with AI integration. Native mobile performance for gesture-driven interactions. A real-time serverless backend with subscription monetization. Cloudflare edge deployment. App Store and Play Store releases with automated CI/CD.

If you are building a product that demands attention to craft -- where the user experience is not just functional but intentional -- I know how to translate that vision into software that ships across platforms and scales.

Build with Basaltbytes

Building a product with strong opinions? Good.

I build mobile apps, web platforms, and cross-platform products for teams who care about the details.

Book a scoping call

Let’s discuss your software

Book a 30-minute scoping call, with no obligation.

About Basaltbytes

Basaltbytes is the fractional-CTO practice of Philippe L'ATTENTION: an independent, fixed-price technical diagnostic to take back control of your software.