# Web Configurator 2.3.3 — Unfolded.Tools modified build

This directory is the complete corresponding source for the unofficial
`2.3.3-unfoldedtools.8` build used by the Unfolded.Tools Remote Simulator. It is based on
the complete Web Configurator 2.3.3 source snapshot published by Unfolded Circle ApS and
is licensed under `GPL-3.0-only`. See `MODIFICATIONS.md` for the dated change list.

The untouched official archive and extracted source are published alongside this directory.
The modified build replaces the archive's Font Awesome Free compatibility layer with the
locally hosted Apache-2.0 Material Symbols Sharp variable font and adds the simulator-specific
source changes. It does not contain or depend on the compiled Web Configurator extracted from
a physical Remote.

The following upstream status and provenance information is retained because it explains the
origin and scope of the official 2.3.3 snapshot.

## Status

Archived and read-only. We are not maintaining this code, tracking issues, or accepting
contributions. It is published so that anyone working with the Web-Configurator has a clear
and unambiguous basis to work from, not as the start of an open-source project.

This is the source the Web-Configurator 2.3.3 build was made from, with the deviations listed
under [Differences from the shipped bundle](#differences-from-the-shipped-bundle). Everything
needed to build, modify and run the application is here.

## Provenance

The official 2.3.3 snapshot contains a small, deliberate set of later upstream changes: the
Font Awesome Pro stylesheets were replaced with the Free edition, and the third-party licence
information in Settings was backported together with its translations. This modified tree then
applies the additional Unfolded.Tools changes documented in `MODIFICATIONS.md`.

Internal tooling, CI configuration and internal documentation are not included; none of it
is needed to build, run or modify the application.

Archived on 2026-08-03.

## Differences from the shipped bundle

**Icons.** The build shipped on the device used Font Awesome Pro under a commercial licence.
The official GPL source snapshot replaced it with Font Awesome Free. The Unfolded.Tools modified
build removes Font Awesome entirely and maps the legacy icon identifiers to the locally hosted
Material Symbols Sharp variable font. Thin, Light and Regular usages map to weights 100, 300
and 400; Solid maps to weight 400 with fill enabled.

**The Licences page in Settings.** Settings → Licences, and the `public/licenses.md`
attribution page behind it, are backported from a later development state; the shipped 2.3.3
build does not have them. They are included because they are the clearest statement of what
this software is made of, and of the licence this snapshot is under.

**Translations.** The UI translations are a later snapshot than 2.3.3 shipped with. Text may
differ from the device; behaviour does not.

**Unfolded Circle artwork.** The Unfolded Circle logo has been replaced with a neutral
placeholder mark. The favicon set (`public/favicon/`) and the login page background images
(`public/images/background/`) are not included, so the login page renders without its
background and browsers fall back to their default tab icon. The remaining product artwork
under `public/images/` is included — see [Licensing](#licensing).

**Version string.** An archive carries no git metadata, so the version comes from
`version.txt` rather than from `git describe`.

## Tests

`npm run test:unit` passes. Two tests are skipped, with a warning on the console: they check
the proprietary licence notice, and that template is not part of this archive.

The end-to-end suites are a different matter. `npm run test:e2e:visual` compares against
screenshots taken from the shipped build, so every baseline containing a Pro icon, the
Unfolded Circle logo or the login background fails here by design, and the `npm run test:e2e`
specs that assert on those assets fail for the same reason. We have not rebaselined them —
this is an archived snapshot, not a maintained tree.

## Licensing

| What                      | Licence                                                        |
| ------------------------- | -------------------------------------------------------------- |
| source code, and all else | GPL-3.0-only — [`LICENSE`](LICENSE)                            |
| `public/images/**`        | CC BY 4.0 — [`LICENSES/CC-BY-4.0.txt`](LICENSES/CC-BY-4.0.txt) |
| `public/fonts/**`         | SIL Open Font License — see `public/licenses.md`               |
| npm dependencies          | reproduced in full in `public/licenses.md`                     |

The artwork under `public/images/` is Unfolded Circle's own work and is licensed CC BY 4.0
rather than under the GPL, so it can be reused with attribution outside this program too;
`public/images/LICENSE` has the details. None of this licenses our trademarks — see below.

## Running this software

You can build and serve this web app anywhere — your own machine, a container, any web
server. It is not tied to Unfolded Circle hardware, and nothing here restricts where you
run it.

## Installing a custom build on a Remote

A Remote can be configured to serve a custom web application in place of the shipped Web
Configurator. This is a documented feature of the Core API; see the
[REST Core-API documentation](https://github.com/unfoldedcircle/core-api). It needs no
signing keys, unlocking, or firmware modification.

Two things to know before you do it:

- We cannot support or diagnose a Remote running a modified Web-Configurator, and faults
  caused by a modified build are not covered by our warranty. Your statutory rights in
  respect of the hardware itself are unaffected. See
  <https://www.unfoldedcircle.com/legal/warranty>.
- To go back to the shipped version: see `DELETE /api/system/install/web_configurator`
  endpoint in the [REST Core-API documentation](https://github.com/unfoldedcircle/core-api).

## Trademarks

"Unfolded Circle", the Unfolded Circle logo and Unfolded Circle product names are
trademarks of Unfolded Circle ApS. The GPL covers copyright, not trademarks; no trademark
rights are granted here.

We cannot and do not impose conditions beyond the GPL. We would ask, though: if you
publish a modified build, please make clear that it is unofficial and not affiliated with
or supported by Unfolded Circle.

## Building

Requires Node 22 (see `.nvmrc`).

```shell
# Install the exact dependency graph
npm ci

# Start the development server
npm run dev

# Generic production build
BASE_URL=/configurator/ npm run build
```

The Material Symbols Sharp variable font is included at
`src/assets/fonts/material-symbols-sharp.woff2`; no external font download or CDN is required.
For the Unfolded.Tools project, use the canonical project-level build command instead of the
generic command above:

```shell
node remote-simulator/tools/build-web-configurator-2.3.3.mjs
```

### Development without a Device

The [Remote-Core Simulator](https://github.com/unfoldedcircle/core-simulator) serves the same
Core-APIs from Docker, so most work needs no hardware:

```shell
npm run sim:up     # start it (Docker is the only prerequisite)
npm run dev:sim    # dev server on :3000, pointed at the simulator
```

Log in with PIN `1234`.

### Development with a Real Device

Needed for real IR/dock hardware, touch input, OTA and the full IR code database.
Create or edit `env/.env.local` with the IP address of your Remote, e.g.:

```env
VITE_API_PROXY=http://192.168.1.100
```

Then run `npm run dev` — API and WebSocket requests will proxy to your device.


## Unfolded.Tools session base

The canonical project build sets `BASE_URL=__UCVR_SESSION_BASE__/configurator/`. The
Unfolded.Tools server replaces that placeholder in text assets with the isolated simulator
session path before sending them to the browser.
