Skip to content

feat: Add About/Help tab with markdown-rendered informational page#5

Merged
jrkasprzyk merged 2 commits into
mainfrom
copilot/add-instructional-page-app
May 6, 2026
Merged

feat: Add About/Help tab with markdown-rendered informational page#5
jrkasprzyk merged 2 commits into
mainfrom
copilot/add-instructional-page-app

Conversation

Copilot AI commented May 5, 2026

Copy link
Copy Markdown
Contributor

The app had no in-app documentation — no explanation of the tool, how to use it, or what CART classification vs. regression means. This adds an About tab that renders a user-editable Markdown file, addressing all four points from the issue.

Changes

New tab UI

  • Added Visualizer | About tab navigation to the header with full ARIA roles (tablist, tab, tabpanel)
  • Existing visualizer layout wrapped in #panel-visualizer; new #panel-about panel toggled on tab switch via activateTab()

Markdown rendering

  • loadAbout() fetches /about.md at startup, parses with marked, sanitizes with DOMPurify, and injects into the article element
  • Absolute fetch path (/about.md) avoids breakage under subdirectory deployments

Default content (public/about.md)

Covers the four areas from the issue:

  1. What ArborView is
  2. Step-by-step usage instructions
  3. CART type descriptions — classification (Gini, majority-class prediction) and regression (MSE, mean response prediction)
  4. Node statistics reference table + predictor variable guidance

Footer note instructs users to replace the file with model-specific content (custom response variable description, predictor definitions, data source, etc.).

Styling

  • Tab nav and About panel prose styles added to styles.css, matching the existing design tokens (--accent, --muted, --mono, etc.)

@vercel

vercel Bot commented May 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
arborview Ready Ready Preview, Comment May 5, 2026 7:52pm

Copilot AI changed the title [WIP] Add instructional and informational page on the app feat: Add About/Help tab with markdown-rendered informational page May 5, 2026
Copilot AI requested a review from jrkasprzyk May 5, 2026 19:54
@jrkasprzyk jrkasprzyk marked this pull request as ready for review May 5, 2026 19:56
@jrkasprzyk jrkasprzyk requested a review from zaca1902 May 5, 2026 19:57

Copilot AI commented May 5, 2026

Copy link
Copy Markdown
Contributor Author

Just as a heads up, I was blocked by some firewall rules while working on your feedback. Expand below for details.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • accounts.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4298 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/com.google.Chrome.scoped_dir.fvf07H --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,16361085383702849178,3645478312965773704,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,6182504362366162928,16002067704899312520,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --headless --disable-gpu --screenshot=/tmp/arborview-visualizer.png --window-size=1400,800 --no-sandbox http://localhost:3002/ (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4459 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/com.google.Chrome.scoped_dir.h9EloD --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,6181942181876124942,2464409993571740834,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,12175579747163990673,1875623205444866390,4 --trace-process-track-uuid=3190708989122997041 (dns block)
  • clients2.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4298 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/com.google.Chrome.scoped_dir.fvf07H --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,16361085383702849178,3645478312965773704,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,6182504362366162928,16002067704899312520,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --headless --disable-gpu --screenshot=/tmp/arborview-visualizer.png --window-size=1400,800 --no-sandbox http://localhost:3002/ (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4459 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/com.google.Chrome.scoped_dir.h9EloD --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,6181942181876124942,2464409993571740834,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,12175579747163990673,1875623205444866390,4 --trace-process-track-uuid=3190708989122997041 (dns block)
  • clientservices.googleapis.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4298 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/com.google.Chrome.scoped_dir.fvf07H --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,16361085383702849178,3645478312965773704,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,6182504362366162928,16002067704899312520,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --headless --disable-gpu --screenshot=/tmp/arborview-visualizer.png --window-size=1400,800 --no-sandbox http://localhost:3002/ (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4459 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/com.google.Chrome.scoped_dir.h9EloD --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,6181942181876124942,2464409993571740834,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,12175579747163990673,1875623205444866390,4 --trace-process-track-uuid=3190708989122997041 (dns block)
  • redirector.gvt1.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4298 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/com.google.Chrome.scoped_dir.fvf07H --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,16361085383702849178,3645478312965773704,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,6182504362366162928,16002067704899312520,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --headless --disable-gpu --screenshot=/tmp/arborview-visualizer.png --window-size=1400,800 --no-sandbox http://localhost:3002/ (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4459 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/com.google.Chrome.scoped_dir.h9EloD --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,6181942181876124942,2464409993571740834,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,12175579747163990673,1875623205444866390,4 --trace-process-track-uuid=3190708989122997041 (dns block)
  • safebrowsingohttpgateway.googleapis.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4298 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/com.google.Chrome.scoped_dir.fvf07H --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,16361085383702849178,3645478312965773704,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,6182504362366162928,16002067704899312520,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --headless --disable-gpu --screenshot=/tmp/arborview-visualizer.png --window-size=1400,800 --no-sandbox http://localhost:3002/ (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4459 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/com.google.Chrome.scoped_dir.h9EloD --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,6181942181876124942,2464409993571740834,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,12175579747163990673,1875623205444866390,4 --trace-process-track-uuid=3190708989122997041 (dns block)
  • www.google.com
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4298 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/com.google.Chrome.scoped_dir.fvf07H --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,16361085383702849178,3645478312965773704,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,6182504362366162928,16002067704899312520,4 --trace-process-track-uuid=3190708989122997041 (dns block)
    • Triggering command: /opt/google/chrome/chrome /usr/bin/google-chrome --headless --disable-gpu --screenshot=/tmp/arborview-visualizer.png --window-size=1400,800 --no-sandbox http://localhost:3002/ (dns block)
    • Triggering command: /proc/self/exe /proc/self/exe --type=utility --utility-sub-type=network.mojom.NetworkService --lang=en-US --service-sandbox-type=none --no-sandbox --use-angle=swiftshader-webgl --crashpad-handler-pid=4459 --enable-crash-reporter=, --noerrdialogs --user-data-dir=/tmp/com.google.Chrome.scoped_dir.h9EloD --change-stack-guard-on-fork=enable --shared-files=v8_context_snapshot_data:100 --field-trial-handle=3,i,6181942181876124942,2464409993571740834,262144 --disable-features=PaintHolding --variations-seed-version --pseudonymization-salt-handle=7,i,12175579747163990673,1875623205444866390,4 --trace-process-track-uuid=3190708989122997041 (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Comment thread public/about.md
4. **Pan and zoom** the tree canvas with your mouse — click-and-drag to pan, scroll to zoom.
5. **Read the decision path** in the "Decision path" panel on the right. It shows the sequence of split rules from the root down to the selected node, ending with the node's prediction.
6. **Review node details** in the "Node detail" panel. It shows statistics like sample count, impurity, complexity, and for classification trees, the class probability bars.
7. **Check variable importance** at the bottom of the sidebar — the chart shows which predictors contributed most to splits in the tree, normalised so the most important variable is always the full bar width.

@zaca1902 zaca1902 May 5, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This will need to be updated/added to if we are including the relative importance for the predictors.

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good to know. For our purposes right now, we just need to know if the documentation is accurate right now; is it?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, the current information looks accurate to me!

Comment thread public/about.md
- **Impurity metric:** Mean Squared Error (MSE = deviance / n). Lower MSE = more homogeneous node.
- **Color coding:** In regression trees, node color is scaled by the predicted mean response value.

## Node Statistics Reference

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add: "Tree Statistics Reference" for the accuracy and sensitivity

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the features aren't in here yet, we shouldn't have them in the about; we can update it after the features are added. Sound good?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Excellent point! Yes, it sounds good to me to update the information following the feature additions.

Comment thread public/about.md

Predictor variable descriptions depend on the specific model and dataset loaded. Refer to the dataset documentation provided alongside each model for definitions of individual predictor names.

The **Variable importance** panel ranks predictors by their total contribution to impurity reduction across all splits in the tree. A predictor can appear as important even if it is not used at the root split — it may be used repeatedly at deeper levels.

@zaca1902 zaca1902 May 5, 2026

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Add: a description of the relative importance

Copy link
Copy Markdown
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See elsewhere

@zaca1902 zaca1902 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great overall! I just added a few comments to reflect some of the recent and/or upcoming revisions.

@jrkasprzyk

Copy link
Copy Markdown
Owner

Looks great overall! I just added a few comments to reflect some of the recent and/or upcoming revisions.

If we haven't added the features yet, we shouldn't put them in the about; we should only update that after the features have been added. Check my responses and let me know when you're OK with that, thanks!

@jrkasprzyk jrkasprzyk merged commit 9f50187 into main May 6, 2026
3 checks passed
@jrkasprzyk jrkasprzyk deleted the copilot/add-instructional-page-app branch May 6, 2026 19:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature Request: Instructional/Informational Page on the App

3 participants