# Technology Stack

**Analysis Date:** 2026-05-21

## Languages

**Primary:**
- JavaScript (ES2015+ / JSX) — React frontend in `src/`, cloud-browser bundler in `cloud-browser-static/`
- Sass (`.sass` indented syntax + CSS Modules) — Styles in `src/styles/` and co-located `*.module.sass`

**Secondary:**
- Python 3 — Shopify/Klaviyo admin tooling in `ipynb_shopify/api.py` and `*.ipynb` notebooks
- HTML — `public/index.html`, `public/beyondIndex.html`, `cloud-browser-static/src/index.html`

## Runtime

**Environment:**
- Node.js — minimum 18.17.1 (declared in `cloud-browser-static/README.md`)
- Build hint in repo history: "Fixme website build errors in Node 22"
- Browser runtime targets defined in `package.json` `browserslist`:
  - Production: `>0.2%`, `not dead`, `not op_mini all`
  - Development: last 1 chrome / firefox / safari version

**Package Manager:**
- Yarn (classic) — `yarn.lock` present at root and in `cloud-browser-static/`
- `.yarnrc.yml`: `nodeLinker: node-modules`
- Lockfile: present (root `yarn.lock` ~619 KB, `cloud-browser-static/yarn.lock`)

## Frameworks

**Core (root `package.json`):**
- `react` ^17.0.1 + `react-dom` ^17.0.1 — UI framework (rendered with legacy `ReactDOM.render` in `src/index.js`)
- `react-router` / `react-router-dom` ^6.0.2 — Client-side routing (`<BrowserRouter>` wrapping `<App>` in `src/index.js`)
- `react-scripts` 5.0.1 — Create React App tooling (webpack/babel/jest under the hood)
- `@builder.io/react` ^3.0.6 + `@builder.io/widgets` ^1.2.24 — Visual CMS rendering most marketing pages via `src/components/BuilderIoPage/index.js`
- `sass` ^1.99.0 — Sass compilation through CRA

**Testing:**
- `@testing-library/react` ^11.1.0 — Component testing (`src/App.test.js`)
- `@testing-library/jest-dom` ^5.11.4 — Custom DOM matchers, wired in `src/setupTests.js`
- `@testing-library/user-event` ^12.1.10 — User interaction simulation
- Jest — Provided transitively by `react-scripts`; invoked via `yarn test`

**Build/Dev:**
- `react-scripts` 5.0.1 — `start`, `build`, `test`, `eject` scripts (`package.json`)
- Babel — `.babelrc` adds `@babel/plugin-proposal-optional-chaining`
- `http-proxy-middleware` ^2.0.1 (devDep) — Available for dev proxy
- `live-server` ^1.2.2 (devDep)
- `watchpack` ^1.7.5 (devDep, version-pinned alongside CRA)
- Dev proxy: `package.json` `"proxy": "http://localhost:3001"` forwards API requests during `yarn start`

**cloud-browser-static build (separate sub-project):**
- `esbuild` ^0.21.5 — JS bundling (replaces webpack in `cloud-browser-static/build.js`)
- `webpack` ^5.92.1 + `webpack-obfuscator` ^3.5.1 + `terser-webpack-plugin` ^5.3.10 — Legacy / alternative path
- `cheerio` ^1.0.0-rc.12 — HTML rewriting in `build.js`
- `html-minifier-terser` (referenced) / `html-minifier` ^4.0.0
- `postcss` ^8.4.38 + `postcss-url` ^10.1.3 — CSS asset rewriting
- `javascript-obfuscator` ^4.1.1, `uglify-js` ^3.18.0, `terser` ^5.31.1 — Output obfuscation/minification
- `nodemon` ^3.1.4 — `yarn watch` rebuild loop

## Key Dependencies

**Critical (root):**
- `@stripe/react-stripe-js` ^1.6.0 + `@stripe/stripe-js` 1.21.2 — Card capture / tokenization in `src/screens/Purchase/Payment/CardForm/index.js`
- `superagent` ^8.0.9 — HTTP client used throughout `src/api.js` to call Bigscreen APIs
- `@hyperbeam/web` ^0.0.37 (devDep) — Cloud browser embedding in `src/screens/SocialBrowser.js`
- `lodash` ^4.17.21 — Utility functions, imported pervasively
- `react-ga` ^3.3.0 — Google Analytics integration (`ReactGA.initialize('UA-154139246-1')` in `src/App.js` and `src/BeyondApp.js`)
- `classnames` ^2.2.6 — `cn(...)` utility used by virtually every component
- `react-cookies` ^0.1.1 — Cookie access alongside the custom cookie helpers in `src/api.js`
- `date-fns` ^2.29.3 + `date-fns-tz` ^2.0.0 — Date formatting (orders, tickets)

**UI / interaction:**
- `react-slick` ^0.28.1 — Carousels (Features, Programs, Platforms, etc.)
- `react-player` ^2.9.0 — Video embeds (`src/components/VideoEmbed`)
- `react-parallax-tilt` ^1.5.23, `react-animate-on-scroll` ^2.1.5 — Visual effects
- `react-outside-click-handler` ^1.3.0 — Dropdown / modal dismissal
- `react-infinite-scroll-component` ^6.1.0 — Movie library scroll (`src/screens/MovieLibrary`)
- `react-countdown` ^2.3.2 — Countdown UI
- `body-scroll-lock` ^3.1.5 — Modal/overlay scroll management
- `fuse.js` ^6.4.6 — Fuzzy search (Movie search)
- `use-dark-mode` ^2.3.1 — Dark mode toggle
- `reactcss` ^1.2.3 — Inline style utility
- `history` ^5.3.0 — Browser history (`createBrowserHistory` in `src/components/Header/index.js`)
- `prop-types` ^15.8.1 — Prop validation

**Infrastructure / unusual:**
- `@npmcli/fs` ^2.1.0 — Listed as a dependency at root (low-level fs helper, atypical for a CRA frontend)
- `dependenciesMeta.isolated-vm@4.6.0.built: false` — Yarn metadata suppressing native build of a transitive `isolated-vm`

## Configuration

**Environment:**
- `.env` file (gitignored) loaded at build-time by CRA; documented in `README.md` step 2
- Required CRA env vars (compiled into bundle, read in `src/config.js` and `src/api.js`):
  - `REACT_APP_API_SERVER_URL` — Bigscreen auth/main API host
  - `REACT_APP_CLOUD_API_URL` — Bigscreen cloud API host
  - `REACT_APP_API_KEY` — Bearer token sent with every request (`Authorization: Bearer <apiKey>`)
  - `REACT_APP_RDC_SERVER_HOST` — Remote desktop config host
- `cloud-browser-static/src/api/config.js` ships **hardcoded** dev values for `apiServerUrl`, `cloudApiServerUrl`, `apiKey`, `rdcServerHost`
- `src/index.js` hardcodes `BUILDER_IO_API_KEY = '64dd5478e25746bf9db3b6c0319905f6'`
- `src/screens/Purchase/Payment/CardForm/index.js` hardcodes Stripe publishable keys (`STRIPE_LIVE_PUBLIC_KEY`, `STRIPE_TEST_PUBLIC_KEY`), selected at runtime by `window.location.hostname`
- `src/App.js` and `src/BeyondApp.js` hardcode `ReactGA.initialize('UA-154139246-1')`
- `public/index.html` embeds Reddit Pixel, Twitter conversion pixel (`twq('config','ond1m')`), Meta Pixel (`fbq('init','9362178413841771')`), Google AdSense (`ca-pub-1838810760934258`)

**Build:**
- `package.json` — root build config (CRA scripts, ESLint preset `react-app`, browserslist)
- `.babelrc` — `@babel/plugin-proposal-optional-chaining`
- `cloud-browser-static/build.js` — custom esbuild + cheerio inliner producing a single self-contained HTML
- `cloud-browser-static/package.json` — nodemon watch config (`src/`, ext `js,html,css`)
- `.gitignore` — excludes `node_modules`, `build/`, `.env*`, `cloud-browser-static/dist`, `cloud-browser-static/node_modules`
- `.gitattributes` — present
- `start` script in `README.md` uses `SKIP_PREFLIGHT_CHECK=true yarn start` to bypass CRA dep checks

## Platform Requirements

**Development:**
- Node 18.17.1 or newer (see `cloud-browser-static/README.md`); known build issue on Node 22 referenced in recent commit
- Yarn classic
- Local `.env` file copied from `Server_Keys/local/webapps/website` per `README.md`
- Dev server at `http://localhost:3000`, API proxy expected at `http://localhost:3001`
- Python 3 + `dotenv`, `requests`, `ShopifyAPI` (per inline `%pip install` cells) for the Shopify notebooks

**Production:**
- Hosting target: serves CRA static build (`build/` artifact via `react-scripts build`)
- `cloud-browser-static` `dist/` is intended for upload to an S3 bucket fronted by CloudFront (per `cloud-browser-static/README.md`)
- No CI configuration files (`.github/workflows`, `.circleci`, etc.) detected in repo

---

*Stack analysis: 2026-05-21*
