An institute's website already holds a great deal of what it would want to say about itself: which themes its research units return to, what it has published and with whom. That material is spread across hundreds of pages and readable only one page at a time. These two apps read it computationally instead. Both are built for the Leibniz-Zentrum Moderner Orient (ZMO) in Berlin, published in English and German, and both draw on data scraped from zmo.de rather than maintained by hand.

The word cloud

The most frequent terms in each research unit's own description and project abstracts. Pick one of the three units or view them combined, set how many words to show, hover a word for its frequency, and export the result as a PNG. Both language pages accept URL parameters, so a specific unit and word count can be linked to or embedded directly.

The scraper follows each unit's overview page to every linked project, and also picks up the umbrella projects whose descriptions are printed on the listing page rather than linked. Missing those would quietly drop several hundred words per unit. Researcher bylines are stripped so that personal names do not become terms.

The publications dashboard

Everything in ZMO's publication register1,962 publications, 656 authors, 1994 to 2026 — as five linked views: output per year stacked by document type, the document types themselves, the most-published authors, where ZMO publishes, and who publishes with whom, over the full list underneath.

Every chart is also a filter. Click a column, a bar, a legend entry or an author node and the whole dashboard narrows to it. Choices stack, each appearing as a chip that can be removed. Every chart counts against all the active filters except its own, so selecting one document type leaves the others visible to switch to rather than collapsing the panel to a single bar.

Rankings run to hundreds of entries, so the ranked charts page rather than truncating at a top-ten: there are 656 authors and 526 journals, and a top-N would hide most of them. The co-authorship network opens on the 60 most-published authors and grows on request.

Decisions the data forced

The year chart is stacked by document type, and eight is the ceiling for a categorical palette that stays distinguishable, including to a colourblind reader — so seven types are drawn as their own series and the smallest are grouped. The eight hues were checked against the page's white surface (worst adjacent pair ΔE 9.1 under protanopia) and their order is what makes that hold, so slots are assigned in sequence rather than shuffled. Three of the eight sit below 3:1 contrast on white, which is why every series is named in the legend instead of being left to colour alone.

"Where ZMO publishes" ranks journals and publishers, and deliberately omits the register's series field: it is filled on 187 of 1,962 records and holds 175 distinct values among them, so ranking it produced a list of ones. The field still names the venue on a working paper in the list below, and is still searched. A field can be worth keeping without being worth charting.

How it's built

Neither app has a build step: plain ES modules loaded straight by the browser, drawn with D3, no bundler and no install. Python pipelines fetch from zmo.de and write JSON into each app's data directory, and GitHub Actions rerun them monthly and commit the result, so both refresh without anyone touching them. The raw scraper output is committed too, which means a scrape produces a readable diff of exactly what changed on the website. The unit scraper fails loudly when a page yields no abstract or no projects, since the selectors it depends on come from ZMO's TYPO3 theme: a redesign should surface as a visible error rather than as a quietly shrinking word cloud.

Word cloud

The most frequent terms across ZMO's three research units. Pick a unit or view them combined, and adjust how many words are shown.

Publications dashboard

1,962 publications across five linked views. Click any column, bar, legend entry or author node to filter the whole dashboard; the choices stack.