Skip to content

Condenser — Reference

The complete reference for the web front-end: its architecture, how it talks to the stack, the main views, configuration, and how signing works. For a gentle introduction, start with the Quick guide.

Condenser (blurt/condenser) is the React.js web interface to Blurt. It is a server-side-rendered single-page app: a Koa server renders the first response, and the browser hydrates and takes over.

Architecture

text
  browser  ◄──►  Koa SSR server  ──►  RPC proxy  ──►  nexus-go / blurtd
   React            (first paint,        (one URL)      (social / consensus)
   Redux + saga      sessions)
  • React renders the UI. Redux holds application state; redux-saga runs all side effects — the RPC reads, transaction signing, and broadcasts.
  • react-router resolves routes on both server and client (ResolveRoute, RootRoute).
  • Koa is the SSR server: it renders the initial HTML, serves assets, and manages server sessions (keyed by SDC_SESSION_SECRETKEY).
  • blurtjs (@blurtfoundation/blurtjs) is the chain client and crypto library — it builds, signs, and broadcasts transactions.
  • i18n: the UI is translated into many locales through Translator and the locales/ catalogs.

The app code lives under src/app (components/, redux/, utils/, client_config.js, routing, and locales).

How it talks to the stack

Condenser never talks to a database or holds chain state; it uses one RPC endpoint and lets the RPC proxy fan the calls out:

  • Browser calls go to SDC_CLIENT_BLURTD_URL; SSR server calls go to SDC_SERVER_BLURTD_URL. Both point at the RPC proxy.
  • Social reads (feeds, communities, profiles, discussions) resolve to nexus-go; consensus reads and broadcasts go to blurtd.
  • Drafts use a draft API endpoint (SDC_DRAFT_API_ENDPOINTS), served by nexus-go.
  • Images are fetched through an image proxy (SDC_IMAGE_PROXY_PREFIX) and uploaded to an image service (SDC_UPLOAD_IMAGE_URL).

Signing and accounts

Keys never leave the user's device. Condenser signs transactions client-side with blurtjs and then broadcasts them through the proxy to blurtd. Users sign in with a posting key or through a keychain extension (e.g. WhaleVault); the front-end never sees or stores private keys server-side. The worst a compromised front-end can do is show wrong data — it cannot move funds without the user's key.

Main views

  • Feeds — trending, hot, new, promoted, and per-community timelines.
  • Post & comments — the discussion view with threaded replies and voting.
  • Editor — markdown post/comment composer, with community targeting.
  • Communities — community home pages, subscriber and role views.
  • Profile — account pages (blog, posts, replies, wallet summary).
  • Wallet views — balances, history, and transfers (the standalone wallet app is the dedicated tool).
  • Notifications, search, settings.

Configuration

Condenser is configured with SDC_* environment variables (mapped in config/custom-environment-variables.json). The ones that wire it to a network:

VariablePurpose
SDC_SESSION_SECRETKEYserver session secret; must stay constant across restarts
SDC_CLIENT_BLURTD_URLRPC endpoint the browser uses (the RPC proxy)
SDC_SERVER_BLURTD_URLRPC endpoint the SSR server uses
SDC_USE_APPBASEuse the appbase JSON-RPC calling convention
SDC_CHAIN_IDchain id to sign against
SDC_ADDRESS_PREFIXpublic-key address prefix (BLT)
SDC_DRAFT_API_ENDPOINTSdraft API (nexus-go)
SDC_ALT_API_ENDPOINTSalternative RPC endpoints
SDC_IMAGE_PROXY_PREFIX / SDC_UPLOAD_IMAGE_URLimage proxy and upload service
SDC_PRICE_INFO_URLprice feed for wallet displays
SDC_COAL_URL / SDC_NSFW_URL / SDC_PHISHING_URLmoderation/safety lists
WALLET_URL / DAPPS_URL / SPECIAL_POSTS_URLlinks to the wallet app and related surfaces

Base defaults live in config/default.json / config/production.json; the SDC_* variables override them at runtime.

Build and run

Condenser builds the React bundle and runs the Koa server (npm run build, then npm run production; npm start for development). It ships as a Docker image (registry.gitlab.com/blurt/blurt/condenser, plus an -arm64 variant). Provide a stable SDC_SESSION_SECRETKEY and point the SDC_*_BLURTD_URL variables at your RPC endpoint. See the repository for the current build and deployment details.

Where it fits

Condenser is the flagship read/write UI at the top of the stack. It consumes nexus-go and blurtd through the proxy — the same fusion every other page in this manual describes, seen from the browser's side: one URL in, the right backend serving each call.

Released under the MIT License.