Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1197 commits
Select commit Hold shift + click to select a range
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
c341cb4
🐛🤖 Admin origin URL autocomplete: treat spaces as dashes
paarriagadap Apr 17, 2026
79642a5
🐛🤖 Origin URL: stop trimming during typing so spaces are typable
paarriagadap Apr 17, 2026
09d7271
🐛🤖 Origin URL: normalize spaces to dashes on blur
paarriagadap Apr 17, 2026
68d0942
🐛🤖 (search) fix topic page results layout (#6386)
rakyi Apr 19, 2026
d59627c
Remove knexfile.ts (#6370)
rakyi Apr 19, 2026
eccfef8
Remove unused reflect-metadata package (#6378)
rakyi Apr 19, 2026
28a459d
Make ENV default to production (#6383)
rakyi Apr 19, 2026
f44c383
✨🤖 Origin URL: convert spaces to dashes as the user types
paarriagadap Apr 22, 2026
c0ed971
fix(admin): set authored version so we can know the author's "intende…
marcelgerber Apr 22, 2026
bea37d9
✨ use specific chart label tabs
sophiamersmann Apr 23, 2026
c0b2106
✨ reverse order of entities in the No data section
sophiamersmann Apr 23, 2026
9d4041b
Add .toolbox to gitignore
danyx23 Apr 23, 2026
394aafb
🐛🤖 Deduplicate lightning GDoc bake slugs (#6405)
rakyi Apr 24, 2026
6381411
Merge pull request #6402 from owid/flip-no-data-order
sophiamersmann Apr 24, 2026
4bd1c1b
Merge pull request #6400 from owid/use-specific-chart-label-tabs
sophiamersmann Apr 24, 2026
fdb5401
🔨 clarify split between interactive/static captioned chart
sophiamersmann Apr 24, 2026
bcc6af6
Improve GrapherWithFallback logic
rakyi Apr 23, 2026
ac01cf6
Fix jankiness when switching between RelatedCharts
rakyi Apr 25, 2026
a139fcf
Fix key insights chart title flash (#6410)
rakyi Apr 27, 2026
af0f3f5
Convert a few admin components to vanilla React (#6413)
rakyi Apr 28, 2026
07cb317
Cut some agents instructions to run yarn commands
rakyi Apr 28, 2026
4ec590d
Merge pull request #6407 from owid/captioned-chart-split
sophiamersmann Apr 28, 2026
a0168d6
Merge pull request #6392 from owid/fix-origin-url-space-match
paarriagadap Apr 28, 2026
304959a
🎉 data-callout-group component
ikesau Apr 28, 2026
792833c
Fix DoDs of the same level overlapping (#6418)
rakyi Apr 29, 2026
53d7941
Lazy-load multi-dim gdoc embeds
rakyi Apr 16, 2026
872b601
Remove multi-dims from MultiEmbedder
rakyi Apr 17, 2026
b0a6849
Simplify ChartStory component
rakyi Apr 20, 2026
599fe8a
Fix ChartStory multi-dim slide change
rakyi Apr 20, 2026
379406e
Always hide controls of charts in ChartStory
rakyi Apr 27, 2026
06e4cc4
Simplify article chart sizing (#6412)
rakyi Apr 29, 2026
c27e54e
🔨🤖 use familiar nested syntax over `&` selector in AllCharts
mlbrgl Apr 29, 2026
47f8427
Merge branch 'master' into all-charts-ltp-article
mlbrgl Apr 29, 2026
9323fc3
Reserve height for multi-dim with controls (#6425)
rakyi Apr 29, 2026
5313528
Merge pull request #6330 from owid/all-charts-ltp-article
mlbrgl Apr 29, 2026
ac5dc91
Add .mjs to shouldSkipExperiments
rakyi Apr 29, 2026
20fb64d
🐛 drop rounding mode for percentage columns
sophiamersmann Apr 29, 2026
1492a39
✨ use matching settings popup title
sophiamersmann Apr 30, 2026
d98b4b2
🤖 style: format code
sophiamersmann Apr 30, 2026
13882f1
Merge pull request #6426 from owid/fix-rounding-in-admin
sophiamersmann Apr 30, 2026
886e692
🐛 (admin) always show time annotation toggle
sophiamersmann Apr 29, 2026
6734fd5
Merge pull request #6435 from owid/grapher-settings-menu-title
sophiamersmann Apr 30, 2026
98c8daa
🔨 (typescript) check for unused locals
sophiamersmann Apr 30, 2026
4459466
Merge pull request #6424 from owid/fix-admin-time-suffix-toggle
sophiamersmann Apr 30, 2026
322681b
🐛 (search) skip picking regions for scatters and marimekkos
sophiamersmann Apr 30, 2026
1421f64
✨ (slope) add outlines to value labels
sophiamersmann Apr 29, 2026
de9fbfd
🔨 drop grapher background color where possible
sophiamersmann Apr 29, 2026
2b97e4d
🔨 simplify Halo outline widths
sophiamersmann Apr 29, 2026
d9c9e2e
🐛 fix OWID_ERROR_COLOR
sophiamersmann Apr 30, 2026
f88c366
✨ (slope) add outlines to value labels (#6427)
sophiamersmann Apr 30, 2026
5780594
Remove bulk CSV download from admin (#6437)
rakyi Apr 30, 2026
fac0b69
🔨 🤖 Group data-callout-group match arms with data-callout
mlbrgl Apr 30, 2026
dba69a2
📜 🤖 Document checkShouldProfileRender's clearing precondition
mlbrgl Apr 30, 2026
5f8e865
Merge pull request #6421 from owid/data-callout-group
mlbrgl Apr 30, 2026
69c3c7f
🔨🤖 Restrict fetchAllWork to article/topic-page types and include titles
mlbrgl Apr 28, 2026
d94eef7
Pass isPreviewing to more places for multi-dims
rakyi May 1, 2026
ee0ee40
chore(oxfmt & oxlint): rename config files json -> jsonc
marcelgerber May 4, 2026
823aa86
chore(oxfmt): don't use trailing commas for jsonc files
marcelgerber May 4, 2026
25b9dc0
🤖 style: format code
marcelgerber May 4, 2026
5c7ef6c
chore(vscode): change oxfmt config path
marcelgerber May 4, 2026
dd4d95a
Allow Codex to run yarn query outside the sandbox
rakyi May 4, 2026
7b5356d
chore(oxlint): change oxfmt file back to normal json
marcelgerber May 4, 2026
7ee4aad
Merge pull request #6433 from owid/fix-search-scatter-marimekko-entities
sophiamersmann May 4, 2026
a06c065
chore(deps): update aws s3 client
marcelgerber May 4, 2026
2b26286
chore(deps): update vite & vitest
marcelgerber May 4, 2026
10ab2d4
chore(deps): update oxlint & oxfmt
marcelgerber May 4, 2026
1443d15
chore(deps): upgrade typescript
marcelgerber May 4, 2026
91869f7
chore(ts): remove "old" typescript package
marcelgerber May 4, 2026
0fd8e07
✨ emphasize single line in a line chart
sophiamersmann May 4, 2026
f27ad63
chore(ts): alias `tsc` to `tsgo`
marcelgerber May 4, 2026
d8cd682
🤖 style: format code
marcelgerber May 4, 2026
9ce73be
chore(deps): update sentry packages
marcelgerber May 4, 2026
41ff21a
chore(deps): update schema-dts
marcelgerber May 4, 2026
2158a6e
Merge pull request #6441 from owid/line-chart-stroke-width
sophiamersmann May 4, 2026
fa7b0d6
Prevent Grapher initial bounds flash (#6409)
rakyi May 4, 2026
4c67982
✨ increase marker radius for single line charts
sophiamersmann May 4, 2026
ac806da
Merge pull request #6444 from owid/line-chart-marker-radius
sophiamersmann May 4, 2026
c966f08
Merge pull request #6416 from owid/restrict-fetch-all-work-types
mlbrgl May 4, 2026
110285a
chore(deps): update react-aria (#6443)
marcelgerber May 5, 2026
ceb793c
build(deps): bump axios from 1.15.0 to 1.16.0 (#6446)
dependabot[bot] May 5, 2026
b7a1c0b
chore(deps): update figma-api
marcelgerber May 5, 2026
5eede40
chore(deps): update @slack/web-api
marcelgerber May 5, 2026
39ad4a5
chore(deps): update google-auth-library
marcelgerber May 5, 2026
34151f4
🔨 simplify Halo outline widths
sophiamersmann Apr 29, 2026
8ff2679
✨ hide tick marks when x-axis is shared
sophiamersmann Apr 28, 2026
1d12b2e
✨ (facet) share x-axis for line charts and stacked area charts
sophiamersmann Apr 28, 2026
375656a
🔨 drop outdated comment
sophiamersmann May 4, 2026
47477d2
Merge pull request #6436 from owid/ts-noUnusedLocals
sophiamersmann May 5, 2026
94f48fc
enhance(archive): use dedicated chart thumbnail for archive (#6449)
marcelgerber May 5, 2026
e7ddf6f
Use full grapher config for multi-dim datapage metadata (#6439)
rakyi May 5, 2026
8ff8a9d
chore(yarn): increase yarn minimal age gate to 3 days (#6450)
marcelgerber May 6, 2026
eddc799
chore: change yml indentation to 2 spaces
marcelgerber May 6, 2026
717b30a
chore(yarn): fix typechecking of yarn constraints file
marcelgerber May 6, 2026
efe6129
build(deps): bump simple-git from 3.32.3 to 3.36.0 (#6456)
dependabot[bot] May 6, 2026
e6535b2
Mirror analytics fixes from cloudflare-workers PR #27 (#6445)
Marigold May 6, 2026
033ff68
chore: update yarn (#6457)
marcelgerber May 6, 2026
86716d0
enhance: add script to harden .npmrc file
marcelgerber May 6, 2026
1591dab
enhance(npmrc): write what we're doing
marcelgerber May 6, 2026
8e0cdb9
🔨 refactor row series labels
sophiamersmann May 5, 2026
ccb04b2
🔨 standardise AxisView components
sophiamersmann May 7, 2026
d98d036
Merge pull request #6419 from owid/facet-shared-x-axis
sophiamersmann May 7, 2026
0fb6e6b
chore(vscode): remove eslint from vscode settings
marcelgerber May 7, 2026
f189a8a
Merge pull request #6461 from owid/cleanup-axis-views
sophiamersmann May 7, 2026
a1459a1
🎉 (admin) add last edited note for map brackets
sophiamersmann May 7, 2026
13b8cf1
Merge pull request #6462 from owid/map-brackets-last-edited
sophiamersmann May 7, 2026
8f8d51e
✨ (facet) shared slope chart x-axis
sophiamersmann Apr 29, 2026
b4d0c79
🔨 update regions file
sophiamersmann May 8, 2026
a313518
Merge pull request #6465 from owid/update-regions
sophiamersmann May 8, 2026
ff07a24
✨ (facet) shared slope chart x-axis (#6428)
sophiamersmann May 8, 2026
af252b2
✨ use shared start and end time positions across facets
sophiamersmann Apr 29, 2026
35d15ef
chore(deps): deduplicate
marcelgerber May 11, 2026
221c931
build(deps): bump fast-xml-builder from 1.1.5 to 1.1.8 (#6467)
dependabot[bot] May 11, 2026
58be15b
chore(deps): update node-gyp
marcelgerber May 11, 2026
68bba37
chore(deps): update uuid
marcelgerber May 11, 2026
5c5a844
enhance: use `uuid` package for uuidv7 (#6469)
marcelgerber May 11, 2026
68f1c88
✨ (slope) prevent value labels from overlapping with the zero label
sophiamersmann May 11, 2026
059258c
Switch useTopicTagGraph to useQuery (#6438)
rakyi May 11, 2026
3076979
🐛 strip dod links from metadata.json
sophiamersmann May 11, 2026
e5840ab
Merge pull request #6470 from owid/strip-dod-in-metadata
sophiamersmann May 11, 2026
eb3b1fa
Backfill and constrain createdAt/updatedAt timestamps (#6368)
rakyi May 11, 2026
a25c677
Fix useTopicTagGraph in admin preview (#6472)
rakyi May 11, 2026
bb35ed0
enhance(bespoke): show error for missing `VARIANTS` export
marcelgerber May 12, 2026
56da880
✨ use shared start and end time positions across facets (#6429)
sophiamersmann May 12, 2026
e80e729
Fix useTopicTagGraph in admin preview, no. 2 (#6473)
rakyi May 12, 2026
d25b332
🔨 trigger CI
sophiamersmann May 12, 2026
9d1b932
Merge pull request #6478 from owid/trigger-ci
sophiamersmann May 12, 2026
4c01c18
✨ choose facet label font size based on cell width
sophiamersmann Apr 17, 2026
b1d1b50
✨ simplify choosing facet font sizes
sophiamersmann Apr 28, 2026
88d8c94
✨ update facet label font size
sophiamersmann Apr 28, 2026
cd858d0
✨ (slope facets) reduce padding between label and chart
sophiamersmann Apr 29, 2026
63b118c
Merge pull request #6387 from owid/facet-label-font-size
sophiamersmann May 12, 2026
3e87699
Remove auto-author-assign.yml
rakyi May 12, 2026
0f4f86b
🐛 add charts index shrinking to fit algolia's max record size
ikesau May 12, 2026
d692b04
📜🤖 switch to proprietary licence and add contributor agreement
danyx23 May 12, 2026
754c233
✨ 🤖 Add fragment IDs to team people
danyx23 May 13, 2026
6d43fce
Merge pull request #6481 from owid/add-team-person-fragment-ids
danyx23 May 13, 2026
2f7d5e4
📜🤖 disable CLA Assistant workflow
danyx23 May 13, 2026
c6ed633
Merge pull request #6403 from owid/licensing-change-proprietary
danyx23 May 13, 2026
77451b6
🐝 fix link target
danyx23 May 13, 2026
38034e1
🐛 fix prominent links to explorers in country profiles
ikesau Apr 10, 2026
9e9796d
✨ update explorer thumbnails
ikesau Apr 10, 2026
b8e0a28
🔨 remove old explorer thumbnail code
ikesau Apr 10, 2026
be4a10a
Replace deprecated React types (#6486)
rakyi May 14, 2026
c90c9b7
Put typeToIcon outside SocialLink
rakyi May 14, 2026
5970870
🎉 add codemirror markdown dependencies
ikesau May 5, 2026
4f682ab
🎉 add slideshow types
ikesau May 5, 2026
e3e298f
🎉 add slideshow migration and table docs
ikesau May 5, 2026
b9a4ba1
✨ add color syntax to SimpleMarkdownText
ikesau May 5, 2026
fd34334
🎉 add OWID wordmark logo variant
ikesau May 5, 2026
550fa51
🔨 extract Header hasContent computed
ikesau May 5, 2026
3876ba0
🎉 useImages admin hook
ikesau May 5, 2026
8162ef2
🎉 add ImageSelectorModal component
ikesau May 5, 2026
c7d66e9
🎉 add MarkdownEditor component
ikesau May 5, 2026
62fb221
🎉 add slideshow CRUD API routes
ikesau May 5, 2026
fde076f
🎉 add slideshow rendering components
ikesau May 5, 2026
aaabafc
🎉 add slideshow editor UI
ikesau May 5, 2026
bae57cf
🎉 add slideshow baking, preview, and sitemap
ikesau May 5, 2026
a22f71f
✨ slideshow code review fixes
ikesau May 14, 2026
98614da
✨ slideshow code review fixes round 2
ikesau May 14, 2026
7f38275
✨ slideshow query params
ikesau May 14, 2026
122e697
✨ slideshow show images in use
ikesau May 14, 2026
a10eedd
✨ (auto map brackets) pick log scales less often
sophiamersmann May 13, 2026
f2cbbbf
Merge pull request #6482 from owid/auto-binning-threshold
sophiamersmann May 15, 2026
572798c
Improve isSlugUsedInRedirect validation message
rakyi May 15, 2026
8a4c8fc
🎉 (bespoke) demography viz
sophiamersmann Mar 18, 2026
7e7f1ae
chore(deps): deduplicate
marcelgerber May 15, 2026
bd68a9a
Merge pull request #6255 from owid/bespoke-demography
sophiamersmann May 15, 2026
6663c90
Modernize deprecated code (#6488)
marcelgerber May 15, 2026
8722858
✨ (demography) drop nocache flag
sophiamersmann May 15, 2026
4b5cc96
Merge pull request #6492 from owid/demography-drop-nocache
sophiamersmann May 15, 2026
c2fc8ed
Remove query echo from yarn query
rakyi May 15, 2026
895ab44
Bump node to 22.22.3 (#6499)
rakyi May 18, 2026
61e90d6
🐛 disable keyboard shortcuts in article embeds
sophiamersmann May 18, 2026
c1a55bb
Drop approved-by field from data insights (#6498)
edomt May 18, 2026
a7c1198
build(deps): bump brace-expansion from 5.0.5 to 5.0.6 (#6502)
dependabot[bot] May 19, 2026
0f1d8f7
Merge pull request #6500 from owid/disable-shortcuts-embed
sophiamersmann May 19, 2026
d469d95
🐛 correctly adjust time selection switching from Marimekko to Line
sophiamersmann May 19, 2026
dfb4cff
🎉 test page for charts with chart type switching
sophiamersmann May 19, 2026
0a48e7d
Merge pull request #6506 from owid/add-chart-type-switcher-filter
sophiamersmann May 19, 2026
19d018f
Merge pull request #6507 from owid/fix-marimekko-to-line
sophiamersmann May 19, 2026
cc1a843
🐛 (admin) avoid resetting entity selection on switching to the Basic tab
sophiamersmann May 19, 2026
a1feddb
🐛 (admin) overwrite indicator-level rounding mode
sophiamersmann May 19, 2026
561efe5
Merge pull request #6509 from owid/fix-admin-rounding-mode
sophiamersmann May 19, 2026
90e57fb
Merge pull request #6508 from owid/fix-admin-selection
sophiamersmann May 19, 2026
88bdc23
✨🤖 (demography) allow wider value range in manual parameter entry
danyx23 May 16, 2026
27f2287
🔨🤖 (demography) allow fertility rate to go down to 0
danyx23 May 16, 2026
b4f69cf
🐛🤖 (demography) keep source migration values in chart domain
danyx23 May 19, 2026
33a1070
🐛🤖 (demography) relax manual migration entry range
danyx23 May 19, 2026
882f329
🐝🤖 Bump node to 24.15.0 (#6514)
Marigold May 20, 2026
098bb05
chore(deps): update typeorm
marcelgerber May 20, 2026
aa08fc2
chore(deps): update zod
marcelgerber May 20, 2026
58c83ec
chore(deps): update openai
marcelgerber May 20, 2026
ca270d9
chore(deps): update vite & vitest
marcelgerber May 20, 2026
695c0a6
refactor: use zod mini for slideshow types (#6517)
marcelgerber May 20, 2026
60244f8
fix: replace deprecated typeorm property
marcelgerber May 20, 2026
f8cb6d4
chore(deps): update oxfmt & oxlint
marcelgerber May 20, 2026
419b5e4
🐛🤖 (demography) keep migration entry range at ±20
danyx23 May 20, 2026
cd4eac8
Merge pull request #6494 from owid/demography-wider-manual-entry
danyx23 May 21, 2026
d827933
Show entity picker for embedded charts at `size: widest` (#6521)
marcelgerber May 21, 2026
e2ed8bb
🐛 🤖 center narrative chart in articles
mlbrgl May 6, 2026
110b2d0
fix: handle modal click outside when popover is open (#6522)
marcelgerber May 21, 2026
9ae5949
🐛 fix external indicators in the entity selector
sophiamersmann May 20, 2026
778bff0
🐛 fix time label of year columns in charts with daily data
sophiamersmann May 21, 2026
2d2e3ad
🐛 🤖 let archive narrative charts size to their image
mlbrgl May 21, 2026
735be2f
🔨 (analytics) add viewConfigId to more events
sophiamersmann May 21, 2026
59057ca
Merge pull request #6518 from owid/fix-entity-selector-external-indic…
sophiamersmann May 22, 2026
9521100
Merge pull request #6524 from owid/analytics-viewConfigId
sophiamersmann May 22, 2026
08d9c2e
Merge pull request #6460 from owid/narrative-chart-centering
mlbrgl May 22, 2026
a07775c
🎉🤖 Enrich PagesChronological Algolia index with rich card data
mlbrgl Apr 15, 2026
5c1963c
🔨🤖 Convert /latest page from SSR to SPA shell
mlbrgl Apr 15, 2026
17e242a
🎉🤖 Add search utilities and Latest filter helpers
mlbrgl Apr 16, 2026
ada3b4b
🎉🤖 Add LatestSearch, topic facets, and search wrapper components
mlbrgl Apr 16, 2026
9b2f750
🎉🤖 Add ExpandableText component for truncated excerpts
mlbrgl Apr 16, 2026
e75aa23
🎉🤖 Add LatestHitMetadata component for authors and date display
mlbrgl Apr 16, 2026
dde0c48
🎉🤖 Add LatestArticleHit card component
mlbrgl Apr 16, 2026
effa82f
🎉🤖 Add LatestDataInsightHit card component
mlbrgl Apr 16, 2026
273024e
🎉🤖 Add LatestAnnouncementHit card component
mlbrgl Apr 16, 2026
1eca96c
🔨🤖 Wire up LatestHit dispatcher and SCSS imports
mlbrgl Apr 16, 2026
d8001e1
✨🤖 Replace /latest "Loading…" text with pulsing card skeleton
mlbrgl May 1, 2026
705b876
🔨🤖 Flatten /latest type dimension into a single latestType field
mlbrgl Apr 17, 2026
7bb0ea7
🎉🤖 Wire homepage navigation to /latest feed
mlbrgl Apr 30, 2026
d7ce978
🔨🤖 Consolidate retired SSR routes onto /latest
mlbrgl Apr 30, 2026
a21f6f9
🔨🤖 Sanitize unknown query params on /latest, mirror /search
mlbrgl May 4, 2026
496aea5
🔨🤖 Use feed URLs as Atom feed ids
mlbrgl May 4, 2026
31a4aac
🔨🤖 Tighten /latest typing with LatestFeedGdoc and ts-pattern dispatch
mlbrgl May 7, 2026
cd0c034
📜🤖 Document /latest architecture in README
mlbrgl May 8, 2026
c976b36
🎉🤖 Add analytics to /latest
mlbrgl May 8, 2026
5f35dff
🔨🤖 Rename logSiteSearchResultClick to logSearchResultClick
mlbrgl May 8, 2026
84a7fa3
✨🤖 Relabel footer/resources links to "Data Insights"
mlbrgl May 13, 2026
86c881c
🎉🤖 Validate latest-excerpt as text-only
mlbrgl May 15, 2026
7d43188
🔨🤖 Drop pagination from data insights feed query
mlbrgl May 15, 2026
7b90319
💄🤖 Tighten comments
mlbrgl May 15, 2026
172ff80
🔧🤖 Revamp launch configurations for admin dev server
mlbrgl May 15, 2026
5732e0d
🔨🤖 Rename latest feed override fields
mlbrgl May 15, 2026
d5ae398
🎉🤖 Support latest types in dynamic atom feed
mlbrgl May 15, 2026
941297a
🔨🤖 Use ~ separator for atom feed multi-value params
mlbrgl May 15, 2026
3390739
🔨🤖 Use Set.intersection to whitelist /latest topics
mlbrgl May 15, 2026
7b75907
🐛🤖 Track repeated filter analytics
mlbrgl May 15, 2026
1e85770
🔨🤖 Validate latest chronological records
mlbrgl May 18, 2026
6c88d64
🔨🤖 Rename latest page path helper
mlbrgl May 18, 2026
75ba098
🔨🤖 Add keyed Cloudflare image helper
mlbrgl May 18, 2026
3d1b35d
🔨🤖 Use react-aria Select for latest type dropdown
mlbrgl May 20, 2026
9cb772e
🔨🤖 Tidy topic/type filter accessibility & mobile arrow
mlbrgl May 20, 2026
c1bd286
🔨🤖 Drop useless useCallback in LatestSearch
mlbrgl May 20, 2026
982be48
🐛🤖 Stop iOS Safari zoom on newsletter email input
mlbrgl May 20, 2026
f4fe2b0
Merge pull request #6259 from owid/auto-claude/001-revamp-latest-page…
mlbrgl May 22, 2026
90752a5
Revert "Merge pull request #6259 from owid/auto-claude/001-revamp-lat…
mlbrgl May 22, 2026
ecfc9a6
Update Zed settings
rakyi May 22, 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
14 changes: 14 additions & 0 deletions .codex/rules/default.rules
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Allow read-only OWID database queries.
prefix_rule(
pattern = ["yarn", "query"],
decision = "allow",
justification = "OWID documents yarn query as the read-only database query helper for this repository.",
match = [
"yarn query SELECT 1",
"yarn query -s SELECT 1",
],
not_match = [
"yarn createDbMigration",
"yarn test",
],
)
1 change: 1 addition & 0 deletions .codex/skills
1 change: 1 addition & 0 deletions .dev.vars.example
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# env vars for local development of /functions/donation/donate.ts Cloudflare pages function
# rename to .dev.vars and fill in the values from the homonymous "(dev)" keys in 1Password

# Should be set to "production" in prod deployment. Defaults to "production" if unset.
ENV=development

# https://dashboard.stripe.com/test/apikeys
Expand Down
2 changes: 1 addition & 1 deletion .devcontainer/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
ARG VARIANT=22
ARG VARIANT=24
FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:dev-${VARIANT}

COPY .tmux.conf /home/node/.tmux.conf
Expand Down
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
5 changes: 4 additions & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,10 @@ 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

[*.{yaml,yml}]
indent_size = 2
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: 1 addition & 2 deletions .env.devcontainer
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
TZ=utc

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

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

# Essential settings
SECRET_KEY='fejwiaof jewiafo jeioa fjieowajf isa fjidosajfgj'
# Should be set to "production" in prod deployment. Defaults to "production" if unset.
ENV=development

# Instance configuration (for running multiple parallel dev environments)
TMUX_SESSION_NAME=grapher # optional; tmux session name to avoid conflicts
Expand Down Expand Up @@ -69,9 +69,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
4 changes: 2 additions & 2 deletions .env.example-grapher
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
TZ=utc

# Essential settings
SECRET_KEY='fejwiaof jewiafo jeioa fjieowajf isa fjidosajfgj'
# Should be set to "production" in prod deployment. Defaults to "production" if unset.
ENV=development

# Instance configuration (for running multiple parallel dev environments)
TMUX_SESSION_NAME=grapher # optional; tmux session name to avoid conflicts
Expand Down
57 changes: 31 additions & 26 deletions .github/actions/setup-node-yarn-deps/action.yml
Original file line number Diff line number Diff line change
@@ -1,33 +1,38 @@
name: Set up node and dependencies
description: Runs all the setup steps required to have the proper Node version and all dependencies installed
inputs:
runPostinstallScripts:
description: "Whether to run postinstall scripts during dependency installation. Usually only needed for native packages, like esbuild, sharp or wranglerd."
required: false
default: "true"
runPostinstallScripts:
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:
# Corepack must be enabled _before_ running setup-node, otherwise the caching setup will error
- name: Enable corepack
run: corepack enable
shell: bash
using: composite
steps:
# Corepack must be enabled _before_ running setup-node, otherwise the caching setup will error
- name: Enable corepack
run: corepack enable
shell: bash

- name: Use Node.js (.nvmrc)
uses: actions/setup-node@v6
with:
node-version-file: ".nvmrc"
cache: "yarn"
- name: Use Node.js (.nvmrc)
uses: actions/setup-node@v6
with:
node-version-file: ".nvmrc"
cache: "yarn"
cache-dependency-path: ${{ inputs.cacheDependencyPath }}

- name: List versions
run: |
echo "Versions:"
echo "Node `node --version`"
echo "yarn `yarn --version`"
shell: bash
- name: List versions
run: |
echo "Versions:"
echo "Node `node --version`"
echo "yarn `yarn --version`"
shell: bash

- name: Install dependencies
env:
YARN_ENABLE_HARDENED_MODE: ${{ (github.event.pull_request && github.event.pull_request.head.repo.full_name != 'owid/owid-grapher' && '1') || '0' }}
run: yarn --immutable ${{ inputs.runPostinstallScripts != 'true' && '--mode=skip-build' || '' }}
shell: bash
- name: Install dependencies
env:
YARN_ENABLE_HARDENED_MODE: ${{ (github.event.pull_request && github.event.pull_request.head.repo.full_name != 'owid/owid-grapher' && '1') || '0' }}
run: yarn --immutable ${{ inputs.runPostinstallScripts != 'true' && '--mode=skip-build' || '' }}
shell: bash
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
14 changes: 0 additions & 14 deletions .github/workflows/auto-author-assign.yml

This file was deleted.

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
Loading