Skip to content

Update install steps - #2

Merged
abrichr merged 1 commit into
mainfrom
update-install-steps
May 10, 2023
Merged

Update install steps#2
abrichr merged 1 commit into
mainfrom
update-install-steps

Conversation

@apgorton

@apgorton apgorton commented May 8, 2023

Copy link
Copy Markdown
Collaborator

No description provided.

@netlify

netlify Bot commented May 8, 2023

Copy link
Copy Markdown

Deploy Preview for cosmic-klepon-3c693c ready!

Name Link
🔨 Latest commit b1e3b0a
🔍 Latest deploy log https://app.netlify.com/sites/cosmic-klepon-3c693c/deploys/64596e45893a2d0008c084e9
😎 Deploy Preview https://deploy-preview-2--cosmic-klepon-3c693c.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify site settings.

@apgorton
apgorton requested a review from abrichr May 8, 2023 21:51

@abrichr abrichr left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Thanks @apgorton !

Comment thread components/MastHead.js
<div className="relative flex items-center justify-center mb-2 mx-2 md-12">
<div className="grid grid-cols-1 break-words">
<h2 id="start" className="text-2xl mt-10">Getting Started</h2>
<ol className="list-decimal list-inside">

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

I'm not sure I follow... are Git and Python not required on Windows?

Here is what I see:

image

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

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

They are required but they are in the install script. Perhaps I misunderstood, I thought we were going to remove those steps from getting started after they were added to the install script.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

That is indeed the goal! I didn't realize they were included in the script.

@abrichr
abrichr merged commit fc521ca into main May 10, 2023
@abrichr
abrichr deleted the update-install-steps branch May 10, 2023 03:57
abrichr added a commit that referenced this pull request Jan 18, 2026
…I download charts

This commit addresses two critical issues with the PyPI download charts:

1. DATA VERIFICATION (Issue #1)
   - Verified all data is authentic and sourced from pypistats.org API
   - Confirmed chronological order: openadapt (2023) is earliest package
   - No mock data or hardcoded values found
   - Added DATA_VERIFICATION_REPORT.md with complete audit trail

2. COLORBLIND ACCESSIBILITY (Issue #2 - CRITICAL)
   - Implemented Tol Bright color scheme (scientifically designed for all types of colorblindness)
   - Added unique line patterns for each package (solid, dashed, dotted, dash-dot, etc.)
   - Varying line widths (2-3px) for additional visual differentiation
   - Interactive legend with click-to-toggle package visibility
   - Enhanced tooltips showing package names, counts, and totals
   - Hover highlighting: active line emphasized, others fade to 20% opacity
   - Added ACCESSIBILITY_IMPROVEMENTS.md with implementation details
   - Added COLORBLIND_TESTING_GUIDE.md for QA testing

ACCESSIBILITY FEATURES:
- Color + Pattern + Width = Triple redundancy (no reliance on color alone)
- Works for protanopia, deuteranopia, tritanopia, and achromatopsia
- Meets WCAG 2.1 Level AA standards (Use of Color 1.4.1)
- Interactive legend allows isolating specific packages
- Enhanced tooltips provide clear identification
- Hover effects make line tracing easy

TESTING INSTRUCTIONS:
- Use Chrome DevTools > Rendering > Emulate vision deficiencies
- Test all 4 colorblind modes (protanopia, deuteranopia, tritanopia, achromatopsia)
- Verify lines are distinguishable by pattern alone (without color)
- Test legend click-to-toggle functionality
- Verify hover highlighting works correctly

FILES CHANGED:
- components/PyPIDownloadChart.js: Complete accessibility overhaul
- ACCESSIBILITY_IMPROVEMENTS.md: Comprehensive documentation
- COLORBLIND_TESTING_GUIDE.md: Testing procedures for QA
- DATA_VERIFICATION_REPORT.md: Data authenticity audit

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
abrichr added a commit that referenced this pull request Jan 18, 2026
* Hide broken social feeds section

Temporarily disable SocialSection component until feeds are confirmed working.
Currently showing empty/broken feeds (Reddit, Twitter, GitHub activity).

Related: Stats showing 0s for today/week/month despite 5.4k total downloads.

* fix: Use Promise.allSettled for robust stats loading

Replaces Promise.all() with Promise.allSettled() when fetching recent
download stats, GitHub stats, and version history. This ensures that if
any one of these API calls fails, the others will still complete and
display their data correctly.

Previously, if GitHub stats or version history failed to load, the entire
Promise.all() would reject, causing recent stats (Today/This Week/This Month)
to never be set, resulting in them not being displayed at all.

With Promise.allSettled(), each promise is handled independently:
- If recent stats load successfully, they will be displayed
- If GitHub stars fail to load, they won't be shown but other stats will
- If version history fails, tooltips won't show versions but charts will

This also adds better error logging to help diagnose issues in production.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: Use Promise.allSettled in getRecentDownloadStats too

The component was fixed to use Promise.allSettled, but the underlying
getRecentDownloadStats() function still used Promise.all. This caused
stats to show 0s if ANY package fetch failed.

Now both levels use Promise.allSettled for robust error handling.

* fix: Remove non-existent PyPI packages causing API errors

Remove openadapt-tray and openadapt-telemetry from package lists as they
don't exist on PyPI yet. These were causing API 404 errors and being logged
as "package not found" in console.

Also fix packageCount calculation bug in getRecentDownloadStats - was trying
to filter by r.recent instead of r.status === 'fulfilled' && r.value?.recent.

Updated cache buster to force fresh Netlify deployment and clear any cached
API functions.

Changes:
- Comment out openadapt-tray and openadapt-telemetry in all package lists
- Fix packageCount calculation to properly check Promise.allSettled results
- Update CACHE_BUSTER to force fresh build
- Packages can be uncommented once published to PyPI

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>

* feat: Auto-discover openadapt-* packages from PyPI

Previously, package lists were hardcoded in multiple files requiring manual
updates whenever new packages were published. This change implements automatic
package discovery via PyPI's JSON API.

Changes:
- Add /api/discover-packages endpoint to check for all openadapt-* packages
- Update utils/pypistatsHistory.js to fetch packages dynamically
- Update utils/pypiStats.js to fetch packages dynamically
- Update pages/api/pypistats.js to validate against discovered packages
- Implement multi-layer caching (server + client) with 24h TTL
- Add graceful fallback to known packages if discovery fails

Benefits:
- New packages automatically appear on website when published to PyPI
- No manual code updates needed for new packages
- Maintains security by validating package name patterns
- Resilient with fallback list if PyPI is unreachable

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Refactor: Establish single source of truth for package lists

Consolidate all package list definitions to use the discover-packages API
as the single source of truth. This eliminates duplication and ensures
consistency across the codebase.

Changes:
- pages/api/discover-packages.js: Enhanced documentation marking it as
  the single source of truth for package lists
- pages/api/pypistats.js: Removed duplicate fallback list, now relies
  entirely on discover-packages API with improved error handling
- utils/pypiStats.js: Removed duplicate fallback list, uses stale cache
  as fallback if API unavailable
- utils/pypistatsHistory.js: Removed duplicate fallback list, uses stale
  cache as fallback if API unavailable
- PACKAGE_LIST_ARCHITECTURE.md: Added comprehensive documentation of the
  package list architecture and design decisions

Benefits:
- Single place to update package lists
- No more inconsistencies between files
- Better error handling with stale cache fallback
- Clear documentation of data flow

The discover-packages API now serves as the authoritative source for all
package lists, with all other code fetching from this endpoint. If the API
is unavailable, client code falls back to stale cache, and the API itself
has its own fallback list for complete PyPI failures.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: Extract package discovery logic to shared utility module

Fixes 500 errors in /api/pypistats by eliminating HTTP calls between
serverless functions, which are unreliable in edge environments.

Root Cause:
The pypistats API was attempting to call the discover-packages API via
HTTP (fetch). In serverless/edge environments (Netlify/Vercel), this
causes 500 errors because:
1. API routes can't reliably call each other via HTTP
2. The VERCEL_URL construction was error-prone in preview deployments
3. Serverless functions may not be able to make HTTP calls to themselves

Solution:
Created utils/packageDiscovery.js as a shared utility module that both
API endpoints import directly. This eliminates all HTTP calls between
serverless functions while maintaining the single source of truth
architecture.

Changes:
- utils/packageDiscovery.js: New shared module containing all package
  discovery logic, caching, and fallback handling
- pages/api/discover-packages.js: Refactored to use shared utility,
  now just provides HTTP interface to the discovery logic
- pages/api/pypistats.js: Replaced HTTP fetch to discover-packages
  with direct import of shared utility module

Benefits:
- No HTTP calls between serverless functions
- Maintains single source of truth architecture
- Better error handling and resilience
- Works reliably in all deployment environments
- Faster execution (no HTTP overhead)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* fix: Disable Netlify CDN caching for pypistats API to fix per-package stats

CRITICAL BUG FIX: The pypistats API endpoint was returning the same cached
data for all packages because Netlify's CDN caches based on URL path only,
not query parameters. This caused all packages to show openadapt's stats.

Root Cause:
- Cache-Control header with s-maxage enabled Netlify CDN caching
- Netlify CDN cache key = URL path only (/api/pypistats)
- Query params (?package=X&endpoint=Y) were NOT part of cache key
- First request cached, all subsequent requests got same response

Fix:
- Set Netlify-CDN-Cache-Control: no-store to disable CDN caching
- Keep browser caching with Cache-Control: public, max-age=3600
- Add Cache-Tag header for potential selective cache purging
- Updated CACHE_BUSTER to force fresh deployment

Testing:
External API returns different data per package:
- openadapt: {last_day: 244, last_week: 254, last_month: 575}
- openadapt-ml: {last_day: 9, last_week: 29, last_month: 130}
- openadapt-capture: {last_day: 54, last_week: 73, last_month: 88}

After fix, each package should get its own unique data.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Implement comprehensive colorblind accessibility improvements for PyPI download charts

This commit addresses two critical issues with the PyPI download charts:

1. DATA VERIFICATION (Issue #1)
   - Verified all data is authentic and sourced from pypistats.org API
   - Confirmed chronological order: openadapt (2023) is earliest package
   - No mock data or hardcoded values found
   - Added DATA_VERIFICATION_REPORT.md with complete audit trail

2. COLORBLIND ACCESSIBILITY (Issue #2 - CRITICAL)
   - Implemented Tol Bright color scheme (scientifically designed for all types of colorblindness)
   - Added unique line patterns for each package (solid, dashed, dotted, dash-dot, etc.)
   - Varying line widths (2-3px) for additional visual differentiation
   - Interactive legend with click-to-toggle package visibility
   - Enhanced tooltips showing package names, counts, and totals
   - Hover highlighting: active line emphasized, others fade to 20% opacity
   - Added ACCESSIBILITY_IMPROVEMENTS.md with implementation details
   - Added COLORBLIND_TESTING_GUIDE.md for QA testing

ACCESSIBILITY FEATURES:
- Color + Pattern + Width = Triple redundancy (no reliance on color alone)
- Works for protanopia, deuteranopia, tritanopia, and achromatopsia
- Meets WCAG 2.1 Level AA standards (Use of Color 1.4.1)
- Interactive legend allows isolating specific packages
- Enhanced tooltips provide clear identification
- Hover effects make line tracing easy

TESTING INSTRUCTIONS:
- Use Chrome DevTools > Rendering > Emulate vision deficiencies
- Test all 4 colorblind modes (protanopia, deuteranopia, tritanopia, achromatopsia)
- Verify lines are distinguishable by pattern alone (without color)
- Test legend click-to-toggle functionality
- Verify hover highlighting works correctly

FILES CHANGED:
- components/PyPIDownloadChart.js: Complete accessibility overhaul
- ACCESSIBILITY_IMPROVEMENTS.md: Comprehensive documentation
- COLORBLIND_TESTING_GUIDE.md: Testing procedures for QA
- DATA_VERIFICATION_REPORT.md: Data authenticity audit

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* Add comprehensive documentation for accessibility improvements

Added two additional reference documents:
- IMPLEMENTATION_SUMMARY.md: High-level overview and quick reference
- VISUAL_REFERENCE.md: Visual guide to package identification

These documents complement the existing:
- ACCESSIBILITY_IMPROVEMENTS.md: Technical implementation details
- COLORBLIND_TESTING_GUIDE.md: QA testing procedures
- DATA_VERIFICATION_REPORT.md: Data authenticity audit

Together, these five documents provide complete coverage of the
accessibility improvements and data verification process.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.5 <noreply@anthropic.com>
abrichr added a commit that referenced this pull request Jul 20, 2026
…234)

Overhaul the homepage for conversion and a differentiated "wow" hero,
keeping all target-state copy guards green.

Hero (ReplayHero):
- Keep the differentiated governed-replay trace; make it visually richer.
- Substrate strip (Browser/Windows/macOS/RDP/Citrix + "one loop") cycles
  each play so the SAME governed loop reads as running across every
  interface — target-state, all first-class.
- App/browser chrome, a scan-sweep on the drift beat, an amber
  drift-flash, and a spring "VERIFIED · 0 MODEL CALLS" stamp punch-in as
  the emotional peak; 0 model calls / $0.00 punchline retained.
- Paired with a REAL OpenAdapt Cloud screenshot (reuses DashboardShowcase
  footage) as shipping-product proof, in its own product chrome with an
  "Effect verified" pill and a link into the Cloud section.
- Pure DOM/CSS/SVG, theme-aware via tokens, responsive (two-up collapses
  to one column; no horizontal overflow at 375/320), reduced-motion safe.

Elevate OpenAdapt Cloud:
- New accent "Start with OpenAdapt Cloud" CTA in the hero next to the
  primary evaluation CTA.
- Move DashboardShowcase (the hosted-product teaser) to UPPER-MIDDLE,
  right after the reference-workflow sections; full Pricing stays lower.

Qualification:
- Move the "use APIs first / UI-only last mile" section from #2 to LOW,
  next to the /compare link it feeds. A brief, confident positive-fit
  line now leads in the hero.

Paper:
- Add a /paper route (placeholder linking the canonical openadapt-flow
  paper source and a defensive PDF path) and link it from the hero.

Tests: update cypress/e2e/basic.cy.js for the new hero + order; npm test
(93 honesty guards) and next build both green.


Claude-Session: https://claude.ai/code/session_01NyCHrzA1psrKMFfroYbzaM

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
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.

2 participants