Skip to content

Commit 9687fbf

Browse files
authored
Merge pull request #339 from rdhyee/feat/explorer-guided-tour
Guided tour of the Explorer replaces the migration-era Zenodo analysis tutorial
2 parents 00284c1 + 6a757f5 commit 9687fbf

16 files changed

Lines changed: 274 additions & 1536 deletions

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ Visit the [Quarto site](https://quarto.org/docs/guide/) for documentation on usi
1818
The `tutorials/` directory contains interactive data analysis tutorials:
1919

2020
- **`isamples_explorer.qmd`** - Interactive search and exploration of 6.7M samples
21-
- **`zenodo_isamples_analysis.qmd`** - Deep-dive DuckDB-WASM analysis tutorial
21+
- **`explorer_guided_tour.qmd`** - Guided tour of the Interactive Explorer (replaced the migration-era Zenodo deep-dive, 2026-07)
2222
- **`parquet_cesium_isamples_wide.qmd`** - Cesium-based 3D globe visualization
2323
- **`narrow_vs_wide_performance.qmd`** - Technical schema comparison
2424

SERIALIZATIONS.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ builder — a fresh build is NOT bit-for-bit identical to them (see
104104

105105
| File | Role | Size | Rows | Upstream | Consumers | Spec |
106106
|---|---|---:|---:|---|---|---|
107-
| `isamples_202601_wide_h3.parquet` | Wide with `h3_res{4,6,8}` BIGINT columns pre-joined | 292 MB | 20.7 M | wide | Deep-Dive Analysis tutorial (H3 filtering without join) | QUERY_SPEC §2.4 |
107+
| `isamples_202601_wide_h3.parquet` | Wide with `h3_res{4,6,8}` BIGINT columns pre-joined | 292 MB | 20.7 M | wide | archival/analyst convenience (former Deep-Dive tutorial, replaced 2026-07 by the Guided Tour which uses summary files) | QUERY_SPEC §2.4 |
108108
| `isamples_202601_h3_summary_res4.parquet` | Continental tier: `(h3_cell, sample_count, center_lat, center_lng, dominant_source, source_count, resolution)` | 580 KB | 38 K | wide_h3 | Interactive Explorer globe (zoomed out), Python Explorer H3 tier mode | QUERY_SPEC §2.4 |
109109
| `isamples_202601_h3_summary_res6.parquet` | Regional tier | 1.6 MB | 112 K | wide_h3 | Interactive Explorer globe (mid zoom) | QUERY_SPEC §2.4 |
110110
| `isamples_202601_h3_summary_res8.parquet` | Neighborhood tier | 2.4 MB | 176 K | wide_h3 | Interactive Explorer globe (close zoom) | QUERY_SPEC §2.4 |

_quarto.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ website:
3838
menu:
3939
- text: Overview
4040
href: how-to-use.qmd
41-
- text: Deep-Dive Analysis
42-
href: tutorials/zenodo_isamples_analysis.qmd
41+
- text: Guided Tour
42+
href: tutorials/explorer_guided_tour.qmd
4343
- text: About
4444
menu:
4545
- text: Objectives
@@ -85,8 +85,8 @@ website:
8585
contents:
8686
- href: how-to-use.qmd
8787
text: Overview
88-
- text: "Deep-Dive Analysis"
89-
href: tutorials/zenodo_isamples_analysis.qmd
88+
- text: "Guided Tour"
89+
href: tutorials/explorer_guided_tour.qmd
9090
- id: about
9191
title: "About"
9292
style: "docked"

explorer.qmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7484,5 +7484,5 @@ Pre-aggregated H3 hexagonal indices achieve near-instant globe rendering, with s
74847484

74857485
## See Also
74867486

7487-
- [Deep-Dive Analysis](/tutorials/zenodo_isamples_analysis.html)DuckDB-WASM SQL tutorial
7487+
- [Guided Tour](/tutorials/explorer_guided_tour.html)seven views of the Explorer, with the queries behind them
74887488
- [Tutorials](/tutorials/) — index of all interactive tutorials

how-to-use.qmd

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ Works in Chrome, Firefox, Edge, Safari, and Brave. No plugins, no downloads, no
3636

3737
All code is visible and foldable on tutorial pages. Want to build your own analysis?
3838

39-
- **[Deep-Dive Analysis](/tutorials/zenodo_isamples_analysis.html)**statistical exploration with Observable Plot
39+
- **[Guided Tour](/tutorials/explorer_guided_tour.html)**seven views of the Explorer and the queries behind them
4040
- **[Tutorials index](/tutorials/)** — step-by-step guides from basic exploration to advanced analysis
4141
- **[GitHub](https://github.com/isamplesorg/)** — all source code and data pipelines
4242
- **[Zenodo](https://zenodo.org/communities/isamples)** — archived datasets for reproducible research
@@ -115,16 +115,15 @@ browsers use the parquet versions.
115115

116116
### Which tutorial uses which file {.unnumbered}
117117

118-
| | Interactive Explorer | Search Explorer | Deep-Dive Analysis |
118+
| | Interactive Explorer | Search Explorer | Guided Tour |
119119
|---|:-:|:-:|:-:|
120120
| `wide.parquet` | || |
121-
| `wide_h3.parquet` | | ||
122121
| `facet_summaries.parquet` ||||
123122
| `facet_cross_filter.parquet` | || |
124123
| `sample_facets_v2.parquet` ||| |
125-
| `h3_summary_res4/6/8.parquet` || | |
124+
| `h3_summary_res4/6/8.parquet` || | ● (res4) |
126125
| `samples_map_lite.parquet` || | |
127-
| `vocab_labels.parquet` ||| |
126+
| `vocab_labels.parquet` ||| |
128127

129128
### Quick query recipes {.unnumbered}
130129

tests/test_navbar_dropdowns.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,11 @@ def test_how_to_use_dropdown_has_overview(self, page):
2929
menu = _open_dropdown(page, "How to Use")
3030
assert menu.get_by_text("Overview").count() > 0
3131

32-
def test_how_to_use_dropdown_has_deep_dive(self, page):
33-
"""And I see Deep-Dive Analysis."""
32+
def test_how_to_use_dropdown_has_guided_tour(self, page):
33+
"""And I see Guided Tour."""
3434
page.goto(SITE_URL, wait_until="domcontentloaded")
3535
menu = _open_dropdown(page, "How to Use")
36-
assert menu.get_by_text("Deep-Dive Analysis").count() > 0
36+
assert menu.get_by_text("Guided Tour").count() > 0
3737

3838

3939
class TestAboutDropdown:

tests/test_navigation.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ def test_about_sidebar_only_shows_own_items(self, page):
2424
sidebar = page.locator(".sidebar-navigation")
2525
assert sidebar.get_by_text("Objectives", exact=True).count() > 0
2626
# Should NOT show items from other sections
27-
assert sidebar.get_by_text("Deep-Dive Analysis").count() == 0
27+
assert sidebar.get_by_text("Guided Tour").count() == 0
2828
assert sidebar.get_by_text("Vocabularies", exact=True).count() == 0
2929

3030
def test_architecture_sidebar_only_shows_own_items(self, page):
@@ -33,15 +33,15 @@ def test_architecture_sidebar_only_shows_own_items(self, page):
3333
assert sidebar.get_by_text("Vocabularies", exact=True).count() > 0
3434
# Should NOT show items from other sections
3535
assert sidebar.get_by_text("Objectives", exact=True).count() == 0
36-
assert sidebar.get_by_text("Deep-Dive Analysis").count() == 0
36+
assert sidebar.get_by_text("Guided Tour").count() == 0
3737

3838
def test_research_sidebar_only_shows_own_items(self, page):
3939
page.goto(f"{SITE_URL}/pubs.html", wait_until="domcontentloaded")
4040
sidebar = page.locator(".sidebar-navigation")
4141
assert sidebar.get_by_text("Publications & Conferences").count() > 0
4242
# Should NOT show items from other sections
4343
assert sidebar.get_by_text("Objectives", exact=True).count() == 0
44-
assert sidebar.get_by_text("Deep-Dive Analysis").count() == 0
44+
assert sidebar.get_by_text("Guided Tour").count() == 0
4545

4646
def test_sidebar_does_not_show_old_information_architecture(self, page):
4747
page.goto(f"{SITE_URL}/design/index.html", wait_until="domcontentloaded")
@@ -57,10 +57,10 @@ def test_how_to_use_has_overview(self, page):
5757
sidebar = page.locator(".sidebar-navigation")
5858
assert sidebar.get_by_text("Overview", exact=True).count() > 0
5959

60-
def test_how_to_use_has_deep_dive(self, page):
60+
def test_how_to_use_has_guided_tour(self, page):
6161
page.goto(f"{SITE_URL}/how-to-use.html", wait_until="domcontentloaded")
6262
sidebar = page.locator(".sidebar-navigation")
63-
assert sidebar.get_by_text("Deep-Dive Analysis").count() > 0
63+
assert sidebar.get_by_text("Guided Tour").count() > 0
6464

6565
def test_how_to_use_has_globe_viz(self, page):
6666
page.goto(f"{SITE_URL}/how-to-use.html", wait_until="domcontentloaded")

tests/test_tutorials_landing.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@
1515
class TestHowToUseLanding:
1616
"""Scenario: Landing page lists all tutorial pathways."""
1717

18-
def test_has_deep_dive_link(self, page):
19-
"""Given I am on the How to Use page, Then I see a link to Deep-Dive Analysis."""
18+
def test_has_guided_tour_link(self, page):
19+
"""Given I am on the How to Use page, Then I see a link to the Guided Tour
20+
in the MAIN CONTENT (scoped so the permanent navbar link can't satisfy it)."""
2021
page.goto(HOW_TO_USE_URL, wait_until="domcontentloaded")
21-
link = page.locator("a:has-text('Deep-Dive')")
22+
link = page.locator("main a:has-text('Guided Tour')")
2223
assert link.count() > 0
2324

2425
def test_has_globe_viz_link(self, page):
@@ -37,14 +38,18 @@ def test_has_narrow_vs_wide_link(self, page):
3738
class TestTutorialPageLoads:
3839
"""Scenario: Each tutorial page loads without JavaScript errors."""
3940

40-
def test_deep_dive_loads(self, page):
41-
"""Given I navigate to the Deep-Dive tutorial, Then no JS errors appear."""
41+
def test_guided_tour_loads(self, page):
42+
"""Given I navigate to the Guided Tour, Then the LIVE CELLS actually render
43+
(waits for an Observable Plot SVG — DuckDB query + chart — not just DOM)."""
4244
errors = []
4345
page.on("pageerror", lambda e: errors.append(str(e)))
4446
page.goto(
45-
f"{SITE_URL}/tutorials/zenodo_isamples_analysis.html",
47+
f"{SITE_URL}/tutorials/explorer_guided_tour.html",
4648
wait_until="domcontentloaded",
4749
)
50+
# The source-counts chart is the first Plot output; its appearance proves
51+
# OJS booted, DuckDB-WASM initialized, and a remote parquet query ran.
52+
page.wait_for_selector("figure svg, svg.plot-d6a7b5", timeout=90_000)
4853
assert page.title() != ""
4954
# Allow known non-critical errors but flag unexpected ones
5055
critical = [e for e in errors if "TypeError" in e or "ReferenceError" in e]

tutorials/archive/parquet_cesium_isamples_wide.qmd

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1079,4 +1079,4 @@ html`${
10791079

10801080
- [Interactive Explorer](/tutorials/isamples_explorer.html) - Search and filter samples
10811081
- [Narrow vs Wide Performance](/tutorials/narrow_vs_wide_performance.html) - Benchmark comparison
1082-
- [Deep-Dive Analysis](/tutorials/zenodo_isamples_analysis.html) - Comprehensive DuckDB-WASM tutorial
1082+
- [Guided Tour](/tutorials/explorer_guided_tour.html) - Seven views of the Explorer, with live queries

0 commit comments

Comments
 (0)