Skip to content

Todo App (React)

A complete React todo app demonstrating all REP features. Source code at examples/todo-react/.

FeatureComponent/FileREP API
Public variable accessApp.tsxuseRep('APP_TITLE')
Enum validationHeader.tsxuseRep('ENV_NAME')
URL variableTodoList.tsxuseRep('API_URL')
Number constraintTodoList.tsxuseRep('MAX_TODOS')
Sensitive variableAnalytics.tsxuseRepSecure('ANALYTICS_KEY')
Payload metadataFooter.tsxrep.meta()
VariableTierTypeDefaultDescription
APP_TITLEpublicstring"Todo App"Page title
ENV_NAMEpublicenumdevelopment, staging, production
API_URLpublicurlBackend API endpoint
MAX_TODOSpublicnumber100Maximum todo items
ANALYTICS_KEYsensitivestringAnalytics tracking key
Terminal window
# From the repo root
pnpm install
# Validate the manifest
cd examples/todo-react
npx @rep-protocol/cli validate
# Generate TypeScript types
npx @rep-protocol/cli typegen
# Start Vite dev server
pnpm dev
# In another terminal: start REP gateway proxy
npx @rep-protocol/cli dev --proxy http://localhost:5173

Open http://localhost:8080 to see the app with REP-injected variables.

Terminal window
cd examples/todo-react
docker build -t rep-todo .
# Run with staging config
docker run -p 8080:8080 \
-e REP_PUBLIC_APP_TITLE="Todo - Staging" \
-e REP_PUBLIC_ENV_NAME=staging \
-e REP_PUBLIC_API_URL=https://api.staging.example.com \
-e REP_PUBLIC_MAX_TODOS=50 \
-e REP_SENSITIVE_ANALYTICS_KEY=UA-XXXXX-staging \
rep-todo
# Same image, production config
docker run -p 8080:8080 \
-e REP_PUBLIC_APP_TITLE="Todo" \
-e REP_PUBLIC_ENV_NAME=production \
-e REP_PUBLIC_API_URL=https://api.example.com \
-e REP_SENSITIVE_ANALYTICS_KEY=UA-XXXXX-prod \
rep-todo

With the CLI dev server running, edit .env.local and send SIGHUP to the gateway:

Terminal window
# Edit .env.local, then:
kill -HUP $(pidof rep-gateway)

Components using useRep() re-render automatically.

The example uses a 3-stage multi-stage build:

  1. Download gateway: Alpine + curl fetches the pre-built binary from GitHub Releases
  2. Build app: Node + pnpm builds SDK, React adapter, and the app in dependency order
  3. Final image: FROM scratch with just the gateway binary and static files