White-Labelled Community AI Chat on a Productized LibreChat Fork
A startup-community hub + digital loyalty-wallet platform
Overview
A member-facing AI chat for the community-hub platform, built by forking the open-source LibreChat project and customizing it rather than writing a chat product from scratch. The studio’s work sits on top of upstream: brand theme, Romanian locale, SSO against the hub’s identity provider, a native-shell mode that the companion iOS and Android apps drive, and the full deployment stack. Upstream merges continue to flow in underneath.
Why It Exists
The hub wanted its members to compare and use open-source models under its own brand, logged in with the account they already have, in Romanian, on the phone as much as on the desktop. LibreChat already covers the hard chat surface (streaming, agents, artifacts, memory, model menus). What it did not cover was being this product: product-mode settings, external account management, a specific visual identity, and an installed-app experience that cooperates with a native wrapper.
What We Built
Measured from the fork point, the studio’s commits touch roughly a hundred files, grouped as follows.
- Branding and theme. An
ambasadatheme shipped as a versioned, data-only theme definition (client/src/theme/ambasada.ts, with tests), brand accent on submit and composer badges, the “at-glyph” mark used as model icon and as the single loader everywhere (packages/client/src/svgs/glyph.ts,Spinner), new favicon/OG/maskable assets, a per-deployment social share card rendered server-side (packages/api/src/html/social.ts), and removal of upstream naming from titles. - Localization. A Romanian (
ro) locale plus aninterface.defaultLanguageconfig option carried throughdata-schemas,data-providerand auseConfiguredLanguagehook, with shorter labels for the high-contrast themes. - Identity and product mode. Clerk OpenID as the default login,
modelSelectoff in favour of curated model specs, prompts/groups/roles hidden, an externalaccountManagementUrl, and an erasure middleware (packages/api/src/middleware/erasure.ts) so the hub can delete a chat user whose main account was closed. - Models and tools.
librechat.yamllists open-source models only (DeepSeek and Nemotron variants) through an inference gateway, each spec annotated for members to compare; web search is on by default via a Parallel-backed route (packages/api/src/web/parallel.ts,api/server/routes/parallel.js); memory and artifacts are pinned on; Romanian-language activity labels replace phase summaries. - Mobile and native shell. A
NativeBridge/NativeSessionlayer announces session and theme to the wrapping app, accepts sync/sign-out, lets the shell toggle tools and attach files, reserves safe areas and the native composer area, turns menus into bottom sheets on phones, and reaches Android through aJavascriptInterface.assetlinks.jsonand a Smart App Banner route chat links into the installed apps. HTML artifacts preview in a local sandboxed frame. - Infrastructure.
infra/terraformprovisions a single Hetzner server with cloud-init, SSH-only firewall, andcloudflaredpublishing the app through a Cloudflare Tunnel so no application port is exposed.infra/deployholds the Compose bundle, env generation and R2 backups;infra/novuruns a self-hosted Novu alongside, with an idempotent providers script and an APNs gateway that follows the build channel, serving the hub’s web push and the wallet route.
Upstream’s CLAUDE.md, CONTEXT.md and AGENTS.md were kept as the working conventions
(TypeScript in packages/api, /api as wiring only) and the studio’s additions follow them,
including spec files next to each new module.
Technologies & Approach
LibreChat’s monorepo (Express api/, React/Vite client/, TypeScript packages/*,
MongoDB and Redis) is left structurally intact; customizations are additive and configured
through librechat.yaml wherever upstream allows, so upstream dev can be merged
repeatedly. Theming goes through the upstream theme-definition mechanism instead of CSS
overrides. The native bridge is a thin, typed message contract (client/src/types/native.ts)
shared with the sibling iOS and Android repos. Hosting deliberately stays small: one
Terraform-managed VM, Docker Compose, Cloudflare Tunnel for ingress, R2 for backups.
Outcome / Impact
A branded, Romanian-first chat product running on the hub’s own infrastructure and identity, usable in the browser and inside the companion mobile apps, with push and account-lifecycle hooks tied back into the rest of the platform. The fork approach meant the studio spent its effort on product fit and operations rather than reimplementing an LLM chat client.
Capabilities Demonstrated
- Forking and productizing a large open-source codebase while staying mergeable with upstream
- White-label theming via a versioned theme definition, not ad-hoc CSS
- Adding a full locale and a configurable default language across shared packages
- OpenID (Clerk) SSO and external account-management integration
- Account-erasure endpoint so a parent platform can cascade user deletion
- Native-shell bridge for iOS and Android wrappers: session, theme, safe areas, tools, files
- Curated open-source model catalogue with web search and memory on by default
- Terraform + cloud-init + Docker Compose deployment behind a Cloudflare Tunnel
- Self-hosted Novu push infrastructure with APNs and web-push providers