# `apps/web` — SHARP-ER front end React Router 8 in **framework mode** with `ssr: true`, React 19, Vite 8 and Tailwind CSS 4. It renders the bilingual (EN / AR) SHARP-ER website and reads its content from the Strapi CMS in `apps/cms`. Setup, the database, Docker and everything else that spans both applications is in the [repository README](../../README.md). This file covers the web application only. ## Run it Always install from the repository root (`pnpm install`) — this is a pnpm workspace with a hoisted `node_modules`. ```bash pnpm --filter web dev # http://localhost:5173, HMR (or: pnpm dev:web) pnpm --filter web build # build/client + build/server pnpm --filter web start # react-router-serve, http://localhost:3000 pnpm --filter web typecheck # react-router typegen && tsc ``` The server reads three variables from its process environment, all optional in development: `STRAPI_URL` (default `http://localhost:1337`), `STRAPI_TOKEN` and `SITE_URL` (unset means the canonical URL is derived from the request). ## Layout ``` app/ ├── root.tsx HTML shell: , canonical + hreflang, ,