The premier gallery experience for your NFTs.
This repository is a public snapshot of the Gallery web and mobile frontend codebase. It does not include Gallery's former private backend infrastructure, indexing services, or production secrets.
- Architecture Overview — monorepo structure, build system, auth, GraphQL/Relay, feature flags, CI/CD
- Known Issues & Technical Debt — consolidated TODOs and known bugs
- Third-Party Dependencies — external services, API keys, and subscriptions
At Gallery, we use a monorepo tool called moon.
Every time you want to run a task in our repo, it will follow the format moon {command-here}.
Before moving forward with this README, please install moon using these instructions
You'll notice there are different apps and packages in the repo, each with its own moon.yml file. The files list the relevant moon commands to run for each target. If you're unsure about which command to run to boot a specific app or package, refer to the associated moon.yml.`
Install our node version:
nvm install && nvm useInstall correct yarn version (3.4.1):
yarn set version 3.4.1Install dependencies:
yarn installCreate a local .env file by copying values from .env.sample:
cp apps/web/.env.sample apps/web/.envStart app:
moon run web:devThe app will be running at http://localhost:3000.
See apps/mobile/README.md for the full guide. Quick start:
# Requires Xcode 16.4 — download from https://developer.apple.com/download/all/?q=Xcode%2016.4
DEVELOPER_DIR="/path/to/Xcode-16.4.app/Contents/Developer" moon run mobile:ios# Android
moon run mobile:android/packages/shared contains shared code that can be utilized by both web and mobile. When developing here, you'll need to run codegen specific to that package, such as moon run shared:codegen-watch. In other words, just having the web or mobile app running won't automatically handle codegen for shared – that will need to be a separate process.
Cypress CI is configured as a Github workflow in .github/workflows.
Some workflows and features require third-party credentials that are not included in this repository. Expect to provide your own local environment configuration for auth providers, RPC services, analytics, and error reporting.
Feature flags are defined in two places:
- Static flags in
packages/shared/src/utils/featureFlags.ts-- used in pre-auth contexts (login screens, onboarding routing) where no RelayqueryRefis available. - Relay-based flags in
apps/web/src/utils/graphql/isFeatureEnabled.tsxandapps/mobile/src/utils/isFeatureEnabled.tsx-- used in authenticated contexts with ADMIN role overrides.
| Flag | Default | Description |
|---|---|---|
SHOW_SOCIAL_CONNECTIONS |
false |
Controls X/Farcaster/Lens connection UI, Farcaster auth, and social pills on profiles |
Admins (ADMIN role) see all features regardless of flag values.
moon run web:testfor testsmoon run web:relay-codegento run relay compilermoon run web:relay-watchto run relay compiler in watch modemoon run web:lintfor lintingmoon run web:typecheckfor checking type validitymoon run web:synpress-runto run e2e testsmoon run web:synpress-opento open cypressyarn fetch-schemato pull a graphql schema from a locally configured API