Skip to content

Commit ca72a51

Browse files
skearnesclaude
andcommitted
Revamp UI: share ord-app's look-and-feel and stack; add landing page
Rebuild the search/browse SPA on the same foundation as the ord-app contribute/editor frontend so the two ORD frontends look and feel like one product, and shared code can be extracted later: - Mantine 7 with ord-app's theme and design tokens ported verbatim (marked to keep in sync until extracted to a shared package), Tabler icons, SCSS modules, and ports of ord-app's PaperButton, Pagination, DataTable, and NotFound components. - ord-schema-protobufjs bindings (same package and range as ord-app) replacing the google-protobuf ord-schema bindings; display components now type against the shared ord.I* interfaces. - wouter routing (replacing react-router-dom) and axios (replacing bare fetch), matching ord-app. - ketcher-react + ketcher-standalone from npm (lazy-loaded chunk) replacing the static Ketcher 2.5.1 iframe bundle; the manual "download Ketcher into app/public" dev step and the Docker copy step are gone (the legacy Flask editor keeps its own bundle). - New landing page: hero with natural-language search (routes to /ask), live reaction/dataset stats, action tiles, featured datasets and news curated via src/data/homeContent.ts, and a citation card. - All views rebuilt in the shared visual language: browse (DataTable), search filters (Accordion/SegmentedControl/RangeSlider), result cards, dataset view, reaction detail, selected set, NL search, About. - Drop Bootstrap, jQuery, DataTables, and Material Icons CDN tags. Fixes found during the migration: axios was transmitting protobufjs's whole shared pool buffer for /api/compound_svg (HTTP 500); peak wavelengths were formatted with Length units; yield precision displayed raw float32 noise. Verified against the in-process test backend: all routes render with no console errors; substructure search, dataset charts, and reaction detail work end-to-end. tsc -b, vite build, eslint, and prettier are green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 8cafe29 commit ca72a51

104 files changed

Lines changed: 10324 additions & 6068 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,14 +75,15 @@ ORD_INTERFACE_TESTING=TRUE uv run uvicorn ord_interface.api.main:app --port 5000
7575
7676
### 3. Run the React SPA
7777

78-
Download [Ketcher v2.5.1](https://github.com/epam/ketcher/releases/download/v2.5.1/ketcher-standalone-2.5.1.zip), extract it, and place the `standalone/` directory's contents inside `./app/public/ketcher/` (so that `app/public/ketcher/static/` and `app/public/ketcher/asset-manifest.json` exist). Then:
79-
8078
```shell
8179
cd app
8280
npm install
8381
npm run serve
8482
```
8583

84+
The molecule editor (Ketcher) is bundled from npm (`ketcher-react` +
85+
`ketcher-standalone`), so no separate download step is needed.
86+
8687
Open <http://localhost:8080>. Vite hot-reloads source changes; `npm run dev` and `npm run preview` are also available as aliases for `vite` and `vite preview` respectively.
8788

8889
## Deployment
@@ -94,7 +95,7 @@ Production deployment is managed via Pulumi/ECS in the [`ord-infrastructure`](ht
9495
### Minor changes (e.g. enum additions)
9596

9697
- Update the `ord-schema` specifier in `pyproject.toml` under `[project] dependencies`, then run `uv lock` to refresh `uv.lock`.
97-
- Update the matching `ord-schema` version in [`app/package.json`](./app/package.json), then run `npm install` to refresh `app/package-lock.json`.
98+
- Update the matching `ord-schema-protobufjs` version in [`app/package.json`](./app/package.json), then run `npm install` to refresh `app/package-lock.json`.
9899
- Contact the ORD site administrator to roll out the new version to staging.
99100

100101
### Major changes (new message types, etc.)

app/index.html

Lines changed: 6 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -50,31 +50,17 @@
5050
gtag('js', new Date());
5151
gtag('config', 'G-REEDLYB0ZJ');
5252
</script>
53-
<!-- https://datatables.net/download/ -->
5453
<link
55-
rel="stylesheet"
56-
type="text/css"
57-
href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.3/css/bootstrap.min.css"
54+
rel="preconnect"
55+
href="https://fonts.googleapis.com"
5856
/>
5957
<link
60-
rel="stylesheet"
61-
type="text/css"
62-
href="https://cdn.datatables.net/v/bs5/jq-3.6.0/dt-1.12.0/b-2.2.3/b-html5-2.2.3/fh-3.2.3/sb-1.3.3/sp-2.0.1/datatables.min.css"
58+
rel="preconnect"
59+
href="https://fonts.gstatic.com"
60+
crossorigin
6361
/>
64-
<script
65-
type="text/javascript"
66-
src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/5.1.3/js/bootstrap.bundle.min.js"
67-
></script>
68-
<script
69-
type="text/javascript"
70-
src="https://cdn.datatables.net/v/bs5/jq-3.6.0/dt-1.12.0/b-2.2.3/b-html5-2.2.3/fh-3.2.3/sb-1.3.3/sp-2.0.1/datatables.min.js"
71-
></script>
72-
<script
73-
type="text/javascript"
74-
src="https://cdn.datatables.net/plug-ins/1.12.1/dataRender/ellipsis.js"
75-
></script>
7662
<link
77-
href="https://fonts.googleapis.com/icon?family=Material+Icons"
63+
href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,100..900;1,100..900&display=swap"
7864
rel="stylesheet"
7965
/>
8066
</head>

0 commit comments

Comments
 (0)