Full Ethora app engine, React.js version.
Part of the Ethora SDK ecosystem — see all SDKs, tools, and sample apps. Follow cross-SDK updates in the Release Notes.
This repository contains the React.js frontend for Ethora. It is the main web client used for Ethora-powered apps and includes authentication, chat and messaging flows, AI-related UI surfaces, admin/app settings, widgets, and integrations used by the wider platform.
This project was previously tracked in the Ethora monorepo under the client-web folder. It was moved into its own repository in November 2024.
This frontend is built on top of the Ethora chat component package:
devis the main default branch used by the team for ongoing frontend development and review.mainis kept as a stable/public branch and may lag behind current team work.- Feature and review branches should normally branch from
devand open PRs back intodevunless there is a specific reason to do otherwise.
Typical local workflow:
npm install
npm run devUseful commands:
npm run build
npm run typecheck
npm run lintThis repo also contains a Playwright e2e layer for browser-visible
public routes and for the chat-component flows that mount under
/app/chat. To list or run the suite:
npm run test:e2e -- --list
npm run test:e2e| Spec | Tests | Notes |
|---|---|---|
tests/e2e/smoke.spec.ts |
Public-page renders (login, register, 404) | Mocks /v1/apps/get-config |
tests/e2e/auth-flows.spec.ts |
Host login form validation + POST body shape | Mocks login endpoint; doesn't need full bootstrap |
tests/e2e/chat-flows.spec.ts |
Chat-component room list, send-text, attach button | test.fixme stubs until post-login bootstrap mocks land |
This repo is the Layer 2 (browser e2e) home for chat-component. The
testid constants in tests/e2e/_chatComponentTestIds.ts mirror the
public testIds exported by @ethora/chat-component and match the
Compose testTag / SwiftUI accessibilityIdentifier strings used
by the mobile SDKs and their Maestro flows.
| Layer 1 (hermetic) | Layer 2 (E2E) |
|---|---|
ethora-chat-component — Vitest + RTL + data-testid |
ethora-app-reactjs/tests/e2e/ — Playwright (this repo) |
ethora-sdk-android — Compose UI tests |
ethora-sample-android/.maestro/ — 19 Maestro flows |
ethora-sdk-swift — XCTest + accessibility-id markers |
ethora-sample-swift/.maestro/ — same 19 Maestro flows on iOS Simulator |
A Playwright spec using [data-testid="chat_input"] and a Maestro
flow using id: "chat_input" resolve the same intent — one selector
contract across all four runtime targets.