Skip to content

feat(landing): rebuild home into an ecosystem-integrated experience#23

Merged
Gui-FernandesBR merged 4 commits into
masterfrom
feat/landing-page-ecosystem
Jul 22, 2026
Merged

feat(landing): rebuild home into an ecosystem-integrated experience#23
Gui-FernandesBR merged 4 commits into
masterfrom
feat/landing-page-ecosystem

Conversation

@Gui-FernandesBR

Copy link
Copy Markdown
Member

Summary

Rebuilds the landing page (index.html) from a single hero + three prose blocks into a full developer/researcher funnel that surfaces the whole RocketPy ecosystem — while keeping the existing dark "space" design language (glass panels, amber/teal accents, starfield, scroll-reveal). The About page is untouched.

What''s new

  • Sticky nav with text labels, a persistent Simulate CTA, a live GitHub star badge, and a mobile hamburger menu.
  • Hero keeps "The sky is not the limit!" and adds pip install rocketpy (copy button), a CTA cluster and micro social-proof.
  • Stats band — stars · forks · contributors · downloads · <1% apogee error · since 2018.
  • Quickstart — the four-class path (Environment → SolidMotor → Rocket → Flight) as syntax-highlighted, copyable code + Open in Colab.
  • Showcase — 3D trajectory, Monte Carlo dispersion, altitude/velocity, stability margin.
  • Features carousel — the 12 capability cards as an auto-scrolling horizontal marquee (pauses on hover/focus, swipeable, seamless loop).
  • Validation + used-by wall, Ecosystem cards (RocketSerializer / Infinity-API / App / Docs), R&D roadmap, Community, How to cite (copyable BibTeX), final CTA, and an expanded footer with link columns.

Technical notes

  • Build-time live stats: scripts/fetch-stats.mjs fetches GitHub (stars/forks/contributors) and PyPI (recent downloads) and injects them into dist/index.html after the build — zero client JS, static fallbacks, and continue-on-error so a flaky API can never break a deploy.
  • Monthly refresh: static.yml gains a schedule: cron "0 6 1 * *" so the site redeploys on the 1st of each month (scheduled runs always use the default branch) and the numbers stay fresh. The stats step uses the workflow''s built-in GITHUB_TOKEN.
  • New css/home.css reuses the component recipes from about.css so both pages read as one system; the new footer columns are additive (About footer unchanged). Registered in package.json build:css.
  • Accessibility: prefers-reduced-motion (freezes starfield/reveal/carousel), skip link, focus rings, and a <noscript> fallback. The carousel falls back to a static wrapping grid under reduced motion.
  • No new npm dependencies.

Verification

  • npm run build succeeds (new home.css bundled); node scripts/fetch-stats.mjs injects 7 values against dist and falls back cleanly offline.
  • Rendered and checked on desktop and narrow/mobile viewports; no horizontal page overflow (code block scrolls internally).

Follow-ups (intentionally out of scope)

  • Swap the showcase SVGs for real exported plots (drop PNG/WebP into images/showcase/).
  • Add real university logos (monochrome, in images/logos/) for teams that permit it.
  • .github/copilot-instructions.md is stale (describes the pre-refactor site) — worth updating separately.

🤖 Generated with Claude Code

Turn the single-hero landing page into a full developer/researcher funnel
that surfaces the whole RocketPy ecosystem.

Sections: sticky nav (text labels + persistent Simulate CTA + live GitHub
star badge + mobile menu); reworked hero with `pip install rocketpy`, CTA
cluster and micro social-proof; live stats band; four-class quickstart with
syntax-highlighted, copyable code and an Open-in-Colab link; output showcase;
auto-scrolling features carousel; validation + used-by wall; ecosystem cards
(RocketSerializer / Infinity-API / App / Docs); R&D roadmap; community; how
-to-cite with copyable BibTeX; final CTA; and an expanded footer with link
columns.

Live stats (GitHub stars/forks/contributors, recent PyPI downloads) are
fetched at build time by scripts/fetch-stats.mjs and injected into dist,
with static fallbacks and continue-on-error so a flaky API never breaks a
deploy. A monthly cron redeploy keeps the numbers fresh.

New css/home.css reuses the about.css component recipes so both pages read
as one system; footer columns are additive so the About footer is unchanged.
Accessibility: prefers-reduced-motion, skip link, focus rings and a noscript
fallback. No new npm dependencies.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

Rebuilds the static landing page into a more comprehensive “ecosystem-integrated” funnel while keeping the existing design language, and adds build-time injection of live GitHub/PyPI stats during CI deploys.

Changes:

  • Replaces index.html content with new sections (sticky nav, stats band, quickstart, showcase, features marquee, ecosystem, community, citation, final CTA) and an expanded landing-page footer.
  • Adds build-time stats injection (scripts/fetch-stats.mjs) and wires it into the GitHub Pages workflow, plus a monthly scheduled redeploy.
  • Introduces new landing-page styling in css/home.css, new showcase SVG assets, and updates sitemap lastmod.

Reviewed changes

Copilot reviewed 8 out of 11 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
sitemap.xml Updates lastmod timestamps for main pages.
scripts/fetch-stats.mjs New Node script to fetch GitHub/PyPI metrics and inject into dist/index.html.
package.json Adds home.css minification and a stats script entry.
index.html Major landing-page restructure, new sections, and client-side JS for nav/marquee/copy helpers.
images/showcase/stability-margin.svg Adds showcase illustration asset.
images/showcase/flight-3d.svg Adds showcase illustration asset.
images/showcase/altitude-speed.svg Adds showcase illustration asset.
css/main.css Adds accessibility utilities (sr-only, skip link, focus-visible) and reduced-motion behavior.
css/home.css New stylesheet powering landing-page sections and responsive behavior.
css/footer.css Adds expanded landing-page footer styles (additive to existing footer).
.github/workflows/static.yml Adds monthly schedule and runs stats refresh during deployment.

Comment on lines +49 to +53
- name: Refresh live stats
run: npm run stats
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
continue-on-error: true
Comment thread package.json Outdated
Comment on lines +6 to +10
"format": "prettier --write '**/*.{html,css,js}'",
"build": "npm run build:css && npm run build:html",
"build:css": "npm run minify:css:main && npm run minify:css:footer && npm run minify:css:about",
"build:css": "npm run minify:css:main && npm run minify:css:footer && npm run minify:css:about && npm run minify:css:home",
"build:html": "npm run minify:html:index && npm run minify:html:about",
"stats": "node scripts/fetch-stats.mjs",
@Gui-FernandesBR

Copy link
Copy Markdown
Member Author

@claude review

Gui-FernandesBR and others added 3 commits July 21, 2026 22:45
Ensures scripts/fetch-stats.mjs is covered by `npm run format`, keeping
the build script consistent with the rest of the repo (addresses Copilot
review feedback on PR #23).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…tall deploy

`continue-on-error` handles a failed stats fetch but not a hung one — a slow
or stalled GitHub/PyPI endpoint would keep the deploy step waiting up to the
job's default timeout. Add an 8s AbortSignal.timeout to both fetches (rejection
falls through to the existing try/catch and committed defaults) and a 3-minute
step-level timeout-minutes as a backstop.

Addresses the blocking finding from the PR #23 review.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Landing-page content and consistency fixes from review feedback:

- Hero: balance the tagline so "The sky is not the limit!" no longer
  orphans "limit!" on its own line (text-wrap: balance).
- Quickstart: clarify that SolidMotor is one of several motor variants
  (Solid/Hybrid/Liquid/Generic); keep the four-class framing.
- Stats band: replace "refreshed on every deploy" with a build-injected
  "Updated <Month Year>" label.
- Remove the fabricated "frontier of flight simulation" R&D section (and
  its now-dead CSS) - the team is not working on those items.
- Rename the web app to "Jarvis" in the ecosystem card and footer.
- State that RocketPy is the official simulator of EuRoC (2022) and
  LASC (2025), supported by the team.

About page now shares the landing's sticky header:

- Extract the site-header/nav into a shared css/nav.css loaded by both
  pages (removed the duplicate block from home.css).
- About uses the same nav (links back to landing sections), star badge,
  Simulate CTA, mobile toggle, skip link and #main target.
- fetch-stats.mjs now injects the live star count into about.html too.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Gui-FernandesBR
Gui-FernandesBR merged commit a4f09d4 into master Jul 22, 2026
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