Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
948 commits
Select commit Hold shift + click to select a range
5d0aa24
🎉 (bespoke) add shared components and example chart (#6247)
sophiamersmann Mar 19, 2026
b18d0d3
Fix invalid Algolia autocomplete CSS vars (#6258)
rakyi Mar 19, 2026
fe7d858
🔨🤖 forward env vars to tmux subshells in Makefile
mlbrgl Mar 20, 2026
635cbbf
Merge pull request #6260 from mlbrgl/makefile-forward-env-vars-to-tmux
mlbrgl Mar 20, 2026
788aada
✨ country-profile-selector anchor tag
ikesau Mar 20, 2026
0570f8e
Update to Vite 8 (#6245)
marcelgerber Mar 23, 2026
fa6ebf1
chore: remove unused `Bounds.ctx`
marcelgerber Mar 23, 2026
c6bb26d
✨🤖 Clean up search synonyms: group by theme, add entries
edomt Mar 23, 2026
75c12aa
Merge pull request #6268 from owid/cleanup-search-synonyms
edomt Mar 23, 2026
a9f98df
refactor(css): replace `column-gap`, `row-gap` mixins with native css…
marcelgerber Mar 23, 2026
de5d34a
build(deps): bump flatted from 3.4.1 to 3.4.2 (#6263)
dependabot[bot] Mar 23, 2026
4b76324
✨ Harmonize homepage copy to sentence case
edomt Mar 23, 2026
a5be626
Merge pull request #6271 from owid/sentence-case-homepage
edomt Mar 23, 2026
9cedba8
chore(oxlint): enable vitest rules
marcelgerber Mar 23, 2026
f009317
🤖 style: format code
marcelgerber Mar 23, 2026
7ba69ba
chore(deps): update itty-router & get rid of manual response-cloning …
marcelgerber Mar 23, 2026
7877747
chore(deps): update aws s3 client
marcelgerber Mar 23, 2026
6fef947
chore(deps): update typescript
marcelgerber Mar 24, 2026
f381ff9
🔨 Remove unused ETL API metadata editing from variable edit page (#6270)
Marigold Mar 24, 2026
e47ab80
✨ add sizing to demo page for testing
sophiamersmann Mar 24, 2026
cd6b3e3
🐛 fix reference to demo config
sophiamersmann Mar 24, 2026
0dce35e
✨ (bespoke) improve chart footer
sophiamersmann Mar 24, 2026
3040a9d
✨ (bespoke) improve Header if subtitle is missing
sophiamersmann Mar 24, 2026
86b2570
docs(bespoke): add section on sizing
marcelgerber Mar 24, 2026
c39af90
enhance(bespoke): automatically run `yarn install` in devServer
marcelgerber Mar 24, 2026
ada3663
Merge pull request #6272 from owid/bespoke-demo-sizes
sophiamersmann Mar 24, 2026
994cdb5
use explicit polyfills (#6269)
marcelgerber Mar 24, 2026
391378f
update supported browsers (#6266)
marcelgerber Mar 24, 2026
54636e7
fix(archive): load polyfills in archive, too
marcelgerber Mar 25, 2026
2d8c2a5
chore(polyfill): use `proposals` for polyfills, thereby not polyfilli…
marcelgerber Mar 25, 2026
701526b
chore(polyfill): add polyfills for set methods
marcelgerber Mar 25, 2026
cbac556
refactor: use modern set methods
marcelgerber Mar 25, 2026
da8298c
chore(polyfill): add polyfills for `Object.groupBy`, `Map.groupBy`
marcelgerber Mar 25, 2026
b4f42eb
refactor: use `Map.groupBy`
marcelgerber Mar 25, 2026
ec71ea1
chore(polyfills): add polyfills for iterator helpers
marcelgerber Mar 25, 2026
b6c5fcf
refactor: use iterator helpers
marcelgerber Mar 25, 2026
138d9bc
docs: update browser support doc
marcelgerber Mar 25, 2026
d4121e4
refactor: nicer code
marcelgerber Mar 25, 2026
b500c0a
Merge pull request #6274 from owid/more-polyfills
marcelgerber Mar 25, 2026
55e5920
🔨🤖 support Auto Claude worktree embedded in main working copy
mlbrgl Mar 20, 2026
b5ad9af
🤖 style: format code
mlbrgl Mar 20, 2026
3cbfad2
🤖 style: format code
mlbrgl Mar 25, 2026
9ccf268
🔨 support Auto Claude worktree embedded in main working copy (#6262)
mlbrgl Mar 25, 2026
1af0faa
🐛 only adjust time when scatter is a secondary tab
sophiamersmann Mar 25, 2026
b461f65
build(deps): bump picomatch from 2.3.1 to 2.3.2 (#6283)
dependabot[bot] Mar 26, 2026
8862c02
🤖 Update regions [2026-03-26] (#6286)
owidbot Mar 26, 2026
8d941ca
build(deps): bump picomatch from 4.0.3 to 4.0.4 in /bespoke/projects/…
dependabot[bot] Mar 26, 2026
dc8cb0d
chore(deps): update vite
marcelgerber Mar 26, 2026
a10d1ac
chore(deps): update yaml
marcelgerber Mar 26, 2026
71e0f57
chore(deps): update @swc/types
marcelgerber Mar 26, 2026
7f7ca9a
chore(deps): update react-diff-viewer-continued
marcelgerber Mar 26, 2026
4808280
chore(deps): update old yaml
marcelgerber Mar 26, 2026
6938501
Merge pull request #6285 from owid/fix-scatter-sensible-time
sophiamersmann Mar 26, 2026
b006453
🐛 (thumbnail) skip zero line for log axis
sophiamersmann Mar 26, 2026
ba5d05f
Merge pull request #6287 from owid/skip-zero-line-on-log-axis
sophiamersmann Mar 26, 2026
7e00414
run bespoke viz dev server on staging servers (#6281)
marcelgerber Mar 26, 2026
7e6bdf0
fix(bespoke): only incorporate the base url when url is relative
marcelgerber Mar 26, 2026
5678ad3
🎉 (peers) add dataRange strategy for target country
sophiamersmann Mar 18, 2026
e0d1834
🎉 (admin) add data range button for a country
sophiamersmann Mar 18, 2026
dec926d
🐛 fix dataRange strategy for charts with projections
sophiamersmann Mar 26, 2026
7e1cbe2
🐛 fix renderSingleGrapherOnGrapherPage call
sophiamersmann Mar 26, 2026
4654b57
🐛 fix image usage for images with multiple versions
ikesau Mar 26, 2026
4f37422
Fix fallback data-page image size
rakyi Mar 27, 2026
9948270
Merge pull request #6252 from owid/default-peer-country-datarange
sophiamersmann Mar 27, 2026
3c328a6
🔨 remove chart intro animations
ikesau Mar 26, 2026
06a1e84
build(deps): bump brace-expansion from 2.0.2 to 2.0.3 (#6295)
dependabot[bot] Mar 29, 2026
41e6293
build(deps-dev): bump happy-dom from 20.8.4 to 20.8.8 (#6292)
dependabot[bot] Mar 29, 2026
454173f
build(deps): bump handlebars from 4.7.8 to 4.7.9 (#6297)
dependabot[bot] Mar 29, 2026
f6df1ea
build(deps): bump brace-expansion from 5.0.4 to 5.0.5 in /bespoke/pro…
dependabot[bot] Mar 30, 2026
f39d764
build(deps-dev): bump happy-dom from 20.8.8 to 20.8.9 (#6296)
dependabot[bot] Mar 30, 2026
3617fa6
chore(deps): update to resolve Dependabot warnings
marcelgerber Mar 30, 2026
6b77a8c
Fix URL encoding of dataset search URL
rakyi Mar 30, 2026
81abda0
feat(bespoke): add `dev-only-global-css`
marcelgerber Mar 30, 2026
5b703cc
feat(bespoke): inject styles into shadow dom
marcelgerber Mar 30, 2026
18c93bd
docs(bespoke): add docs on `dev-only-global-css` and `vite-plugin-css…
marcelgerber Mar 30, 2026
6606528
refactor(bespoke): make css file optional
marcelgerber Mar 30, 2026
d5945c5
docs(bespoke): mark css file as optional
marcelgerber Mar 30, 2026
2f30357
feat(bespoke): get rid of no-shadow-dom mode, as we can now use CSS HMR
marcelgerber Mar 30, 2026
4dc30b7
chore(scss): move typography constants to own file
marcelgerber Mar 30, 2026
24f8fac
refactor(bespoke): change scss imports
marcelgerber Mar 30, 2026
248065a
feat(bespoke): add build mode to dev server
marcelgerber Mar 30, 2026
081fd4e
feat(bespoke): run shared vite instance for serving common files
marcelgerber Mar 30, 2026
14caca8
docs(bespoke): update documentation
marcelgerber Mar 30, 2026
80f4a29
🤖 style: format code
marcelgerber Mar 30, 2026
f8276e4
fix(bespoke): serve dev-only styles in build mode
marcelgerber Mar 30, 2026
6ae8dd9
Merge pull request #6299 from owid/bespoke-dev-css
marcelgerber Mar 30, 2026
58bc10e
chore(ts): remove `baseUrl`
marcelgerber Mar 30, 2026
8999c07
Add download section to data pages (#6277)
rakyi Mar 31, 2026
7dd3d10
🔨🤖 remove animation-only clipPaths from line, stacked area, and stack…
marcelgerber Mar 31, 2026
8224223
chore(deps): update oxlint & oxfmt
marcelgerber Mar 31, 2026
5b9a2bc
chore: mark readonly class members as `readonly`
marcelgerber Mar 31, 2026
26c2b83
🤖 style: format code
marcelgerber Mar 31, 2026
8ed49df
chore(ci): get consistent bundlemon sizes by disabling sentry sourcemaps
marcelgerber Mar 31, 2026
7fee24f
chore: lower bundlemon limits
marcelgerber Mar 31, 2026
b3f9598
refactor(map): round stroke width
marcelgerber Mar 31, 2026
556145a
🤖 style: format code
marcelgerber Mar 31, 2026
536df67
refactor: use zod mini for static viz (#6304)
marcelgerber Mar 31, 2026
e915436
refactor(map): round MapTopology to 2 decimal places (#6303)
marcelgerber Mar 31, 2026
f3ec3ab
cleanup: get rid of unused import
marcelgerber Mar 31, 2026
a75890a
refactor(map): round scale
marcelgerber Mar 31, 2026
00b04cd
🎉 mobile feedback form
ikesau Mar 13, 2026
538ba63
✨ add subscribe button to site footer
ikesau Mar 31, 2026
cd450ca
Build & CI for bespoke projects (#6301)
marcelgerber Mar 31, 2026
c07f41f
enhance: properly use `BESPOKE_BASE_URL`
marcelgerber Mar 31, 2026
f732fd7
fix(bake): mark bespoke assets optional
marcelgerber Mar 31, 2026
1aba253
🔨🤖 Fix .pi skills path for repo-local agent config (#6308)
Marigold Apr 1, 2026
3d26da1
Add JSON-LD to data insight (#6302)
rakyi Apr 1, 2026
ce1fd84
enhance(bespoke): use MarkdownTextWrap in example project
marcelgerber Apr 1, 2026
8977f4d
chore(claude): whitelist read-only `gh` cli uses
marcelgerber Apr 1, 2026
ea96fe6
fix(bespoke): resolve node modules inside bespoke/components, too
marcelgerber Apr 1, 2026
6e3089e
fix(bespoke): fix oxlint error
marcelgerber Apr 1, 2026
55070d3
Add "Copy for social" button to Data Insight pages
edomt Apr 1, 2026
739ee89
🤖 style: format code
edomt Apr 1, 2026
1e6843a
Fix chart text leaking into copy, trailing em dash, double punctuation
edomt Apr 1, 2026
aea980e
🎉 add hideFullscreenButton
ikesau Mar 31, 2026
c0b1447
🎉 add hideDownloadButton directive
ikesau Apr 1, 2026
d9a3533
chore(make): update banner for `make up`
marcelgerber Apr 2, 2026
1a066ff
fix(bespoke): allow for absolute component url
marcelgerber Apr 2, 2026
52b18a5
🎉 include license info in alt text
ikesau Apr 2, 2026
7e97dc2
chore: fix claude settings file
marcelgerber Apr 3, 2026
9abc764
Fix extractUrl for input with whitespace (#6313)
rakyi Apr 3, 2026
dbaa8f3
🎉 add hide controls directive
ikesau Apr 3, 2026
de8283e
✨ (bespoke) improve BezierArrow component
sophiamersmann Mar 24, 2026
cf65b39
🔨 replace react-aria tooltip with tippy
sophiamersmann Mar 25, 2026
32495bc
✨ small typography improvements
sophiamersmann Mar 26, 2026
a7291c4
🐛 import tippy styles
sophiamersmann Apr 1, 2026
5bc5d7d
✨ (bespoke) improve shared components (#6273)
sophiamersmann Apr 7, 2026
6703bd8
🎉 (bespoke) causes of death treemap
sophiamersmann Mar 17, 2026
a43f4df
🧪 (bespoke) drop causes of death test suite with real data
sophiamersmann Apr 2, 2026
374e183
🎉 (bespoke) causes of death treemap (#6248)
sophiamersmann Apr 7, 2026
e571354
style: use default assignment in spread
marcelgerber Apr 7, 2026
8338676
chore(deps): update vite
marcelgerber Apr 7, 2026
d59a536
chore(deps): update lodash
marcelgerber Apr 7, 2026
0426c0e
chore(deps): update vitest
marcelgerber Apr 7, 2026
56235f3
style: clean up code & don't use DOM content
marcelgerber Apr 7, 2026
3a8aeb9
Merge pull request #6310 from owid/copy-for-social
edomt Apr 7, 2026
95ba113
fix: don't force-include dash in DI copy text
marcelgerber Apr 7, 2026
2fa9973
🐛 (mdim) adjust entity selection when switching between views
sophiamersmann Apr 7, 2026
1a0ac20
✨ add vertical margins around bespoke component
sophiamersmann Apr 7, 2026
6c77a22
Merge pull request #6321 from owid/bespoke-component-margins
sophiamersmann Apr 8, 2026
abf340c
✨ (causes of death) lowercase income countries in text
sophiamersmann Apr 8, 2026
af12555
Merge pull request #6319 from owid/fix-mdim-entities-on-switch
sophiamersmann Apr 8, 2026
56e27eb
Merge pull request #6325 from owid/causes-of-death-title
sophiamersmann Apr 8, 2026
5baf815
✨ (bespoke) smaller title and subtitle font sizes on mobile
sophiamersmann Apr 8, 2026
a1a8dfc
chore(deps): update oxlint & oxfmt
marcelgerber Apr 9, 2026
2a652e7
fix: ensure Promise.all is given promises
marcelgerber Apr 9, 2026
ad95a0e
style: sort oxlint rules
marcelgerber Apr 9, 2026
6eb2cbd
✨ nudge edge tick marks inside chart area
sophiamersmann Apr 8, 2026
a818fd4
style: use optional chaining where sensible
marcelgerber Apr 9, 2026
aa14712
🤖 style: format code
marcelgerber Apr 9, 2026
f6b56bd
chore(deps): update typescript
marcelgerber Apr 9, 2026
a38e41d
Merge pull request #6326 from owid/bespoke-chart-header-mobile
sophiamersmann Apr 9, 2026
7cc90c9
🎉🤖 Add small-chart block type definitions and gdoc pipeline
mlbrgl Apr 2, 2026
12cdeb8
🎉🤖 Add SmallChart React component and integrate into article layout
mlbrgl Apr 2, 2026
09ccede
✨🤖 Improve guided chart scroll-to-chart behavior
mlbrgl Apr 2, 2026
b7c2e0f
🔨🤖 Split small-chart into pull-chart and chart-rows block types
mlbrgl Apr 3, 2026
34e780a
🐛🤖 Fix guided-chart children not extracted in posts_gdocs_components
mlbrgl Apr 3, 2026
45ed14b
✨🤖 Warn when non-text blocks are used in chart-rows/pull-chart content
mlbrgl Apr 3, 2026
29ce7f3
✨🤖 Include kicker, title, and source in chart-rows markdown output
mlbrgl Apr 7, 2026
ca35e21
🔨🤖 Use parseText directly for chart-rows/pull-chart content
mlbrgl Apr 7, 2026
74d468e
🔨🤖 Rename ChartRowItem to EnrichedChartRowItem for consistency
mlbrgl Apr 7, 2026
3262048
🔨🤖 Improve chart-rows/pull-chart parsing consistency
mlbrgl Apr 7, 2026
b5cd7f6
🔨🤖 Replace <strong> with CSS bold for source label
mlbrgl Apr 7, 2026
5ce2edb
💄🤖 Replace SCSS parent selector nesting with expanded class names
mlbrgl Apr 8, 2026
d39230f
🔨🤖 Refactor chart-rows SCSS: separate classes, remove :has, use span …
mlbrgl Apr 8, 2026
6d88f40
✨🤖 Add aria-label and aria-describedby to chart thumbnail links
mlbrgl Apr 8, 2026
44287b0
Merge pull request #6323 from owid/edge-ticks-marks
sophiamersmann Apr 9, 2026
6d5d938
✨ use explicit white background
sophiamersmann Apr 9, 2026
0722476
chore(deps): update lint-staged & tinyexec
marcelgerber Apr 9, 2026
3396d49
🐛 (causes of death) import fontawesome styles
sophiamersmann Apr 9, 2026
b48b321
Improve no-JS multi-dim data page
rakyi Apr 2, 2026
74c7aa2
Rewrite baked download URLs to match live request
rakyi Apr 2, 2026
bc32b60
Merge pull request #6329 from owid/causes-of-death-treemap-touchups
sophiamersmann Apr 9, 2026
a597f18
📜🤖 Document SCSS no-nesting convention in CLAUDE.md
mlbrgl Apr 9, 2026
8fcc2e7
🐛🤖 Fix author roles not showing for authors without a published autho…
edomt Apr 9, 2026
71fa687
cleanup: remove `script` gdoc block (#6334)
marcelgerber Apr 10, 2026
7be2b77
Merge pull request #6294 from owid/small-chart
mlbrgl Apr 10, 2026
e83daac
📊🤖 Update GDP per capita indicator to WDI 2026-02-27
paarriagadap Apr 10, 2026
476bbb2
Merge pull request #6335 from owid/update-gdp-per-capita-indicator-id
sophiamersmann Apr 10, 2026
821d0c3
✨ (bespoke) dismiss pinned tooltip on click
sophiamersmann Apr 9, 2026
53bd81e
✨ (bespoke) dismiss pinned tooltip on click (#6331)
sophiamersmann Apr 10, 2026
465b1b2
✨ (causes of detah) small loading spinner next to value
sophiamersmann Apr 10, 2026
440a7f0
🐛 (causes of death) skip annotation for invisible categories
sophiamersmann Apr 10, 2026
b02886f
🔨 (causes of death) simplify annotation placement
sophiamersmann Apr 10, 2026
bc75340
✨ (causes of death) misc improvements (#6336)
sophiamersmann Apr 10, 2026
e829cf7
🎉🤖 Add /add-synonym skill for non-developers to manage search synonyms
edomt Apr 10, 2026
c106504
🤖 style: format code
edomt Apr 10, 2026
5cf6dd3
🎉🤖 Add "infant" / "one year old" search synonyms
edomt Apr 10, 2026
71af2b4
✨🤖 Refine add-synonym skill: always use existing groups, inline commi…
edomt Apr 10, 2026
ff5c50f
Remove robots.txt from the archive
rakyi Apr 10, 2026
83da4ec
chore: add zed settings file
marcelgerber Apr 10, 2026
da37c18
refactor: move `useElementBounds` into grapher package
marcelgerber Apr 9, 2026
76163d2
enhance: add font measurement for `‰`
marcelgerber Apr 10, 2026
280053a
chore: sort string width file, and add measurement script
marcelgerber Apr 10, 2026
292d60e
style: get rid of duplicate imports
marcelgerber Apr 10, 2026
7d30d52
🔨 (explorer) respect column description
sophiamersmann Apr 13, 2026
b2b754e
Merge pull request #6351 from owid/fix-explorer-column-descriptions
sophiamersmann Apr 13, 2026
f7bfc1e
✨ add focus state to bespoke time slider
sophiamersmann Apr 13, 2026
358474b
Merge pull request #6352 from owid/time-slider-focus
sophiamersmann Apr 13, 2026
18f67f4
🐛 (causes of death) fix baseline for Safari
sophiamersmann Apr 13, 2026
3ed44bb
🤖 style: format code
sophiamersmann Apr 13, 2026
6f0028a
Merge pull request #6354 from owid/fix-baseline-safar
sophiamersmann Apr 13, 2026
5f6e789
✨🤖 Update add-synonym skill to create PRs instead of pushing to master
edomt Apr 13, 2026
2f1ecbd
✨🤖 Add confirmation step to add-synonym skill before committing
edomt Apr 13, 2026
9b8cbca
✨🤖 Add AI synonyms: claude, gemini, gpt, deep learning, large languag…
edomt Apr 13, 2026
345b8e9
✨🤖 (pull-chart) clean up trailing margin and BEM naming
mlbrgl Apr 13, 2026
6cc4670
build(deps): bump axios from 1.13.6 to 1.15.0 (#6349)
dependabot[bot] Apr 14, 2026
b2369ef
Add JSON-LD to grapher and data pages (#6322)
rakyi Apr 14, 2026
c3d63c3
🔨 add datapages view
sophiamersmann Apr 13, 2026
2e9f6a6
Merge pull request #6350 from owid/datapages-view
sophiamersmann Apr 14, 2026
d77e265
🎉 stacked bar chart switching
sophiamersmann Apr 8, 2026
2575312
🔨 refactor onChartSwitching and add tests
sophiamersmann Apr 9, 2026
c31485d
🐛 avoid hard-coding years when switching between views
sophiamersmann Apr 10, 2026
29b33e6
Merge pull request #6324 from owid/stacked-charts-grouping
sophiamersmann Apr 14, 2026
bac83a8
Merge pull request #6327 from owid/refactor-on-chart-switching
sophiamersmann Apr 14, 2026
2b99205
Merge pull request #6338 from owid/fix-hard-coded-years
sophiamersmann Apr 14, 2026
d6b4cb7
🐛 fix CaptionedChart chartHeight calculation
ikesau Apr 3, 2026
6d05c1e
🐛 fix overlapping vertical comparison labels
sophiamersmann Apr 14, 2026
e6c53f6
🔨 remove empty comparisonLines from configs
sophiamersmann Apr 14, 2026
d8733d9
🐛 (regions updater) avoid empty strings written into members array
sophiamersmann Apr 15, 2026
4ea7f9f
🐛 key catalog data by the final url
sophiamersmann Apr 1, 2026
b304365
🐛 pick better time for dataRange strategy
sophiamersmann Apr 2, 2026
ea409c3
Merge pull request #6365 from owid/fix-regions-updater
sophiamersmann Apr 15, 2026
b1d92bf
Merge pull request #6359 from owid/fix-overlapping-vertical-lines
sophiamersmann Apr 15, 2026
7b191a7
Merge pull request #6360 from owid/remove-empty-comparison-lines
sophiamersmann Apr 15, 2026
a9fbe31
Merge pull request #6288 from owid/search-peer-countries-default
sophiamersmann Apr 15, 2026
61131ce
🔨 add new tab options to config schema
sophiamersmann Apr 16, 2026
1051607
🐛 (sources modal) avoid skipping projected indicators
sophiamersmann Apr 16, 2026
b91ec0b
Merge pull request #6373 from owid/add-tab-options
sophiamersmann Apr 16, 2026
5c3b953
build(deps): bump dompurify from 3.3.2 to 3.4.0 (#6372)
dependabot[bot] Apr 16, 2026
aa52cb1
Move Typescript packages to devDependencies (#6369)
rakyi Apr 16, 2026
1b89e76
Mark all skills as internal to prevent external indexing (#6377)
Marigold Apr 16, 2026
6a135a4
Merge pull request #6374 from owid/fix-sources-projections
sophiamersmann Apr 16, 2026
fb6cd78
🐛 fix missing resolved multi-dims
ikesau Apr 15, 2026
bd4c926
✨ hide legend for single-item stacked discrete bars
sophiamersmann Apr 17, 2026
db0bb5f
Merge pull request #6380 from owid/hide-single-item-legend
sophiamersmann Apr 17, 2026
9170f12
Make `yarn query` read-only
rakyi Apr 17, 2026
ff659ca
Allow more Claude commands
rakyi Apr 17, 2026
06cf7e0
build(deps): bump follow-redirects from 1.15.11 to 1.16.0 (#6375)
dependabot[bot] Apr 17, 2026
ed9ce96
🐛 (explorer) fix display settings not being inherited
sophiamersmann Apr 17, 2026
c43f7a4
🎉 (explorer) add rounding options
sophiamersmann Apr 17, 2026
0ebcf71
Merge pull request #6382 from owid/fix-explorer-display-inheritance
sophiamersmann Apr 17, 2026
ac0dcc4
Merge pull request #6384 from owid/explorer-rounding-settings
sophiamersmann Apr 17, 2026
b660244
✨ (search) use dataRange as default peer strategy
sophiamersmann Mar 18, 2026
ee45661
Show chart view rank in admin editor (#6381)
edomt Apr 17, 2026
41cb5b2
Merge pull request #6366 from owid/search-peer-countries-default-2
sophiamersmann Apr 17, 2026
d9a3abe
🔨 add CATALOG_URL env to prod/staging env
sophiamersmann Apr 17, 2026
f88f760
Merge pull request #6390 from owid/add-catalog-url
sophiamersmann Apr 17, 2026
3a54c52
🐛 (search) don't fallback to default entities as peers
sophiamersmann Apr 17, 2026
e30e0e1
Merge pull request #6391 from owid/fix-search-default-fallback
sophiamersmann Apr 17, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .bundlemonrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
"files": [
{
"path": "owid.mjs",
"maxSize": "820kB",
"maxPercentIncrease": 5
"maxSize": "785kB",
"maxPercentIncrease": 2
},
{
"path": "owid.css",
Expand Down
8 changes: 0 additions & 8 deletions .claude/commands/commit.md

This file was deleted.

22 changes: 21 additions & 1 deletion .claude/settings.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,26 @@
{
"permissions": {
"allow": ["Bash(grep:*)", "Bash(yarn typecheck)", "Bash(git log:*)"],
"allow": [
"Bash(git log:*)",
"Bash(grep:*)",
"Bash(yarn typecheck:*)",
"Bash(yarn testLintChanged:*)",
"Bash(yarn fixLintChanged:*)",
"Bash(yarn testFormatChanged:*)",
"Bash(yarn fixFormatChanged:*)",
"Bash(yarn query:*)",

"Bash(gh issue list:*)",
"Bash(gh issue view:*)",
"Bash(gh pr checks:*)",
"Bash(gh pr diff:*)",
"Bash(gh pr list:*)",
"Bash(gh pr view:*)",
"Bash(gh repo view:*)",
"Bash(gh run list:*)",
"Bash(gh run view:*)",
"Bash(gh search:*)"
],
"deny": []
}
}
64 changes: 64 additions & 0 deletions .claude/skills/add-synonym/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
---
name: add-synonym
description: Add search synonyms to the Algolia synonym list. Use when someone wants to add, update, or extend synonym groups for site search.
metadata:
internal: true
---

# Add Search Synonyms

Add or update synonym entries in `site/search/synonymUtils.ts` so that our Algolia-powered site search returns better results.

## Assumptions

- The user is on a macOS (Apple) laptop.
- The user may not be a developer — they may not have Node.js, Yarn, or even Homebrew installed. Guide them through any setup with clear explanations.

## Steps

1. **Start from a clean, up-to-date main branch and create a feature branch.** Run:
- `git checkout master` to switch to the main branch.
- `git pull` to get the latest changes.
- If either command fails (e.g. uncommitted changes), explain clearly what's happening and help resolve it. For uncommitted changes, `git stash` is usually the right fix.
- Create and checkout a new branch: `git checkout -b add-synonym-<username>-<date>` where `<username>` is the GitHub username and `<date>` is today's date as YYYYMMDD (e.g. `add-synonym-bastianherre-20260413`).

2. Ask the user what synonyms they want to add. They can describe it in natural language (e.g. "add WHO as a synonym for World Health Organization" or "make 'EV' and 'electric vehicle' synonyms").

3. Read `site/search/synonymUtils.ts` to see the current synonym groups and section comments.

4. Determine which existing synonym group the new terms belong in:
- Find the group where the requested terms best fit and add the new terms to it.
- Never create a new synonym group — always add to an existing one.
- Preserve the existing formatting: each group is an array of strings, groups are separated by blank lines between sections.

5. Edit the file. Use double quotes for all strings. Keep entries in the same style as surrounding code.

6. Validate the change. Before running any commands, check that the environment is ready:
- Run `which yarn` to check if Yarn is available.
- If Yarn is not found, explain to the user: "I need to install a couple of tools to validate the changes. This is a one-time setup." Then:
- Check if Node.js is installed (`which node`). If not, install it via `brew install node` (install Homebrew first via its install script if `which brew` fails).
- Install Yarn via `corepack enable && corepack prepare yarn@stable --activate`. If corepack is not available, fall back to `npm install -g yarn`.
- Run `yarn install` to install project dependencies.
- If Yarn is found but `node_modules` doesn't exist, run `yarn install` first.
- Then run:
- `yarn fixFormatChanged > /dev/null 2>&1 && yarn typecheck` and fix any errors.
- `yarn testLintChanged` and fix any errors.
- `yarn test run --reporter dot site/search/synonymUtils.test.ts` and fix any errors.

7. **Pause and ask the user to confirm** the changes look correct before proceeding. Show them what was added and wait for their go-ahead.

8. Commit to the feature branch with a message in this exact format:
- Prefix: `✨🤖`
- Followed by a short description, e.g. `✨🤖 Add "WHO" synonym for "World Health Organization"`
- Add `Co-Authored-By: Claude <noreply@anthropic.com>` as a trailer.

9. Push the branch and create a PR:
- Push with `git push -u origin HEAD`.
- Create a PR with `gh pr create --title "<same as commit message>" --body "" --reviewer edomt`.

## Important notes

- Each synonym group is an array of equivalent terms — all terms in a group are treated as interchangeable for search.
- Country name synonyms are handled separately via the `countries` utility and should NOT be added to this file. If the user asks for a country synonym, explain this and point them to the country data instead — unless it's a geographic term not covered by the countries list (like "gaza", "palestine" which are already in the file).
- The synonyms in this file are pushed to Algolia during deployment via `baker/algolia/configureAlgolia.ts`. No manual Algolia action is needed.
- Common typos can be included as synonyms (see existing examples like "happyness", "c02").
20 changes: 20 additions & 0 deletions .claude/skills/create-migration/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
---
name: create-migration
description: Create a new database migration file for the OWID MySQL database. Use when the user needs to create a database schema change or migration.
metadata:
internal: true
---

# Create Database Migration

Create a new database migration file for the OWID MySQL 8 database.

## Steps

1. Run `yarn createDbMigration db/migration/<NewMigrationName>` where `<NewMigrationName>` is a descriptive name for the migration
2. The generated filename will contain a timestamp prefix, so scan the `db/migration/` directory to find the actual path of the new file
3. Report the new file path to the user

## Naming Guidelines

Choose a descriptive name for the migration that clearly indicates what schema change is being made (e.g., `AddUserEmailIndex`, `CreateAuditLogTable`, `RemoveDeprecatedColumns`).
4 changes: 2 additions & 2 deletions .clinerules/GENERAL-RULES.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

- yarn typecheck: runs the typescript typechecker across all files
- yarn testLintChanged: run eslint on changed files
- yarn testPrettierChanged: run prettier on changed files
- yarn fixPrettierChanged: attempt to fix prettier issues on changed files
- yarn testFormatChanged: check formatting on changed files
- yarn fixFormatChanged: fix formatting on changed files
- yarn test run --reporter dot: run unit tests. Uses vitest, can take one or more test filenames to only run a subset.
- make migrate: apply migrations
- make dbtest: run database and api tests
Expand Down
1 change: 1 addition & 0 deletions .codex/skills
2 changes: 1 addition & 1 deletion .devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
// },

// Add the IDs of extensions you want installed when the container is created.
"extensions": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"],
"extensions": ["dbaeumer.vscode-eslint", "oxc.oxc-vscode"],

// Use 'forwardPorts' to make a list of ports inside the container available locally.
// "forwardPorts": [3000, 27017],
Expand Down
2 changes: 1 addition & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ charset = utf-8
indent_size = 4
indent_style = space
trim_trailing_whitespace = true
insert_final_newline = true # somehow required for prettier to add a new line at the end of composer.json
insert_final_newline = true

[*.md]
trim_trailing_whitespace = false
2 changes: 2 additions & 0 deletions .env.archive
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
IS_ARCHIVE=true
ARCHIVE_BASE_URL=https://archive.ourworldindata.org
WIKIPEDIA_ARCHIVE_BASE_URL=https://wikipedia-archive.ourworldindata.org
ENVIRONMENT=production
BAKED_BASE_URL=
GRAPHER_DYNAMIC_THUMBNAIL_URL=
BESPOKE_BASE_URL=
3 changes: 0 additions & 3 deletions .env.devcontainer
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
TZ=utc

# Essential settings
SECRET_KEY='fejwiaof jewiafo jeioa fjieowajf isa fjidosajfgj'

GRAPHER_DB_NAME=grapher
GRAPHER_DB_USER=grapher
GRAPHER_DB_PASS=grapher
Expand Down
6 changes: 3 additions & 3 deletions .env.example-full
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
TZ=utc

# Essential settings
SECRET_KEY='fejwiaof jewiafo jeioa fjieowajf isa fjidosajfgj'

# Instance configuration (for running multiple parallel dev environments)
TMUX_SESSION_NAME=grapher # optional; tmux session name to avoid conflicts
COMPOSE_PROJECT_NAME=owid-grapher # optional; docker compose project name for isolated volumes
Expand Down Expand Up @@ -69,9 +66,12 @@ DATA_API_URL= # optional

SLACK_BOT_OAUTH_TOKEN= # optional
SLACK_DI_PITCHES_CHANNEL_ID= # optional; #data-insight-pitches channel id
SLACK_ALGOLIA_INDEXING_CHANNEL_ID= # optional; channel for Algolia indexing failure reports

# for remote dev on tailscale without localhost + port forwarding
ADMIN_SERVER_HOST= # optional; e.g: YOURMACHINE.TAILXXX.ts.net (find this in the tailscale admin panel)
ADMIN_BASE_URL= # optional; e.g: http://YOURMACHINE.TAILXXX.ts.net
VITE_HOST= # optional; e.g: YOURMACHINE.TAILXXX.ts.net
VITE_DEV_URL= # optional; e.g: http://YOURMACHINE.TAILXXX.ts.net:8090 (should match VITE_PORT if set)

BESPOKE_BASE_URL= # optional; base URL for bespoke component assets, e.g. "http://localhost:8089" for local dev server
3 changes: 0 additions & 3 deletions .env.example-grapher
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
TZ=utc

# Essential settings
SECRET_KEY='fejwiaof jewiafo jeioa fjieowajf isa fjidosajfgj'

# Instance configuration (for running multiple parallel dev environments)
TMUX_SESSION_NAME=grapher # optional; tmux session name to avoid conflicts
COMPOSE_PROJECT_NAME=owid-grapher # optional; docker compose project name for isolated volumes
Expand Down
5 changes: 5 additions & 0 deletions .github/actions/setup-node-yarn-deps/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ inputs:
description: "Whether to run postinstall scripts during dependency installation. Usually only needed for native packages, like esbuild, sharp or wranglerd."
required: false
default: "true"
cacheDependencyPath:
description: "Path to the yarn.lock file used for cache key generation."
required: false
default: "yarn.lock"
runs:
using: composite
steps:
Expand All @@ -18,6 +22,7 @@ runs:
with:
node-version-file: ".nvmrc"
cache: "yarn"
cache-dependency-path: ${{ inputs.cacheDependencyPath }}

- name: List versions
run: |
Expand Down
3 changes: 1 addition & 2 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,9 @@ Step-by-step instructions on how to test this change

If DB migrations exists:

- [ ] If columns have been added/deleted, all necessary views were recreated
- [ ] If columns have been added/deleted, all necessary views were recreated and ETL and Analytics team members have been informed of the incoming changes
- [ ] The DB type definitions have been updated
- [ ] The DB types in the ETL have been updated
- [ ] If tables/views were added/removed, the Datasette export has been updated to take this into account
- [ ] Update the documentation in db/docs

### After merging
Expand Down
46 changes: 46 additions & 0 deletions .github/workflows/bespoke.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Bespoke

on:
pull_request:
push:
branches:
- master

defaults:
run:
working-directory: bespoke

jobs:
bespoke-typecheck:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v5

- uses: ./.github/actions/setup-node-yarn-deps
with:
runPostinstallScripts: false
cacheDependencyPath: bespoke/yarn.lock

- name: Install bespoke dependencies
run: yarn --immutable

- name: Typecheck
run: yarn typecheck

bespoke-build:
runs-on: ubuntu-latest
steps:
- name: Clone repository
uses: actions/checkout@v5

- uses: ./.github/actions/setup-node-yarn-deps
with:
runPostinstallScripts: false
cacheDependencyPath: bespoke/yarn.lock

- name: Install bespoke dependencies
run: yarn --immutable

- name: Build
run: yarn build
4 changes: 2 additions & 2 deletions .github/workflows/check-default-grapher-config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,8 @@ jobs:
yarn tsx --tsconfig tsconfig.tsx.json devTools/schema/generate-default-object-from-schema.ts $json.name --save-ts packages/@ourworldindata/grapher/src/schema/defaultGrapherConfig.ts })
shell: nu {0}

- name: Run prettier
run: yarn fixPrettierAll
- name: Run formatter
run: yarn fixFormatAll

- uses: stefanzweifel/git-auto-commit-action@v7
with:
Expand Down
32 changes: 24 additions & 8 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
name: CI
on: [push, pull_request]
on:
pull_request:
push:
branches:
- master

jobs:
# Checks for prettify errors, TypeScript errors and runs vitest tests.
Expand Down Expand Up @@ -45,8 +49,21 @@ jobs:

- name: Run typecheck
run: yarn typecheck
typecheck-legacy:
runs-on: ubuntu-latest

steps:
- name: Clone repository
uses: actions/checkout@v5

- uses: ./.github/actions/setup-node-yarn-deps
with:
runPostinstallScripts: false

- name: Run typecheck (legacy)
run: yarn tsc -b

prettier:
format:
runs-on: ubuntu-latest

steps:
Expand All @@ -57,10 +74,10 @@ jobs:
with:
runPostinstallScripts: false

- name: Run prettier
run: yarn testPrettierAll
- name: Check formatting
run: yarn testFormatAll

eslint:
oxlint:
runs-on: ubuntu-latest

steps:
Expand All @@ -71,9 +88,8 @@ jobs:
with:
runPostinstallScripts: false

- name: Run eslint
# the --max-warnings makes eslint exit with non-zero exit code even for warnings
run: yarn testLint --max-warnings=0
- name: Run oxlint
run: yarn testLint

# Runs `bundlemon` on the code to see if our Vite build assets exceed a given file size.
bundlemon:
Expand Down
12 changes: 6 additions & 6 deletions .github/workflows/prettify.yml → .github/workflows/format.yml
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
name: Prettify
name: Format
on:
push:
branches: [master]
pull_request:
branches: [master]

# Runs `prettier` on a pull request so everything is nice and pretty!
# Runs `oxfmt` on a pull request so everything is nice and formatted!
# If something's wrong, a new commit fixing the issues will automatically be pushed to the PR branch.

jobs:
prettify:
format:
runs-on: ubuntu-latest

steps:
Expand All @@ -22,9 +22,9 @@ jobs:
with:
runPostinstallScripts: false

- name: Run prettier
run: yarn fixPrettierAll
- name: Run formatter
run: yarn fixFormatAll

- uses: stefanzweifel/git-auto-commit-action@v7
with:
commit_message: "🤖 style: prettify code"
commit_message: "🤖 style: format code"
Loading