Skip to content

feat(landing): publish QuantLab landing via GitHub Pages#249

Merged
Whiteks1 merged 1 commit intomainfrom
codex/landing-github-pages
Apr 2, 2026
Merged

feat(landing): publish QuantLab landing via GitHub Pages#249
Whiteks1 merged 1 commit intomainfrom
codex/landing-github-pages

Conversation

@Whiteks1
Copy link
Copy Markdown
Owner

@Whiteks1 Whiteks1 commented Apr 2, 2026

Summary

This PR:

  • adds a complete QuantLab landing page under landing/
  • adds a GitHub Pages workflow that deploys the static landing from landing/
  • documents the landing structure and the Pages deployment requirement

Why

This slice matters because:

  • the project now has a presentable public summary page that explains QuantLab clearly without depending on the desktop shell
  • the landing can be published directly from the repository with a simple Pages workflow instead of requiring a separate hosting setup

Scope

This PR does not:

  • change the desktop shell product itself
  • add a frontend framework or build step for the landing

Validation

Validated with:

  • node --check landing/app.js
  • git diff --check

Notes

  • the workflow deploys the contents of landing/ through GitHub Pages on pushes to main
  • the repository must have GitHub Pages configured to deploy from GitHub Actions
  • the landing is intentionally static and isolated so it can be moved later without affecting the desktop shell

Closes #220

Summary by Sourcery

Add a static QuantLab marketing landing page and configure it to be deployed via GitHub Pages.

New Features:

  • Introduce a standalone QuantLab landing site under the landing/ directory with Spanish marketing copy and product overview.
  • Add lightweight client-side interactivity for navigation tracking and scroll-based reveal animations on landing panels.

Enhancements:

  • Define dedicated styling for the landing page, including responsive layout, typography, and component-level visuals.
  • Document the structure, local preview approach, and deployment behavior of the landing assets.

CI:

  • Create a GitHub Pages workflow that builds and deploys the contents of landing/ to GitHub Pages on pushes to main or manual runs.

@sourcery-ai
Copy link
Copy Markdown

sourcery-ai bot commented Apr 2, 2026

Reviewer's Guide

Adds a static, single-page QuantLab marketing/landing site under landing/ and configures an accompanying GitHub Pages deployment workflow that publishes the landing contents on pushes to main, with a small JS enhancement for click tracking and scroll reveal animations plus basic docs for structure and deployment requirements.

Sequence diagram for landing page scroll reveal and click tracking

sequenceDiagram
  actor Visitor
  participant Browser
  participant LandingPage
  participant AppJS

  Visitor->>Browser: Request QuantLabLanding
  Browser->>LandingPage: Load index_html_styles_css_app_js
  LandingPage->>AppJS: Execute script app_js
  AppJS->>LandingPage: Register click listeners on site_nav_links_buttons_header_cta
  AppJS->>LandingPage: Add reveal class and observe panels_timeline_steps_principles_maturity_steps

  Visitor->>Browser: Scroll through sections
  Browser->>AppJS: IntersectionObserver callback with entries
  AppJS->>LandingPage: Add is-visible class and unobserve visible nodes

  Visitor->>LandingPage: Click navigation_or_cta_link
  LandingPage->>AppJS: Click event
  AppJS->>LandingPage: Set body.dataset.lastAction = link_href
Loading

File-Level Changes

Change Details Files
Introduce a standalone static landing page for QuantLab with Spanish marketing copy and sectioned layout.
  • Create semantic single-page HTML structure with hero, problem, surfaces, workflow, layers, principles, maturity, preview, differentiation, roadmap, and CTA sections anchored via IDs for in-page navigation.
  • Wire header navigation and CTAs to internal anchors (workflow, preview, layers, roadmap, cta) and load local styles and app.js.
  • Ensure basic SEO metadata and font loading via Google Fonts for Manrope and IBM Plex Mono.
landing/index.html
Add custom styling system and responsive layout for the landing page, including cards, grids, and animations.
  • Define CSS custom properties for theme colors, radii, content width, and shadows plus global typography and background gradients.
  • Implement layout primitives for header, hero, panels, grids, timelines, preview surfaces, and buttons including hover states and badges.
  • Add responsive breakpoints at 1180px, 900px, and 640px to collapse grids, adjust header/nav behavior, and improve mobile layout; define .reveal and .is-visible classes used for scroll-in animations.
landing/styles.css
Add minimal JavaScript for analytics-like click tracking and scroll reveal animations.
  • Track the last clicked internal navigation/button by updating document.body.dataset.lastAction on clicks of .site-nav a, .button, and .header-cta.
  • Instantiate an IntersectionObserver with threshold 0.18 that adds .is-visible to observed elements as they enter the viewport and then unobserves them.
  • Auto-attach .reveal and observer to all .panel, .timeline-step, .principle, and .maturity-step nodes to enable scroll-in animation behavior.
landing/app.js
Configure GitHub Pages CI workflow to publish the landing directory via GitHub Actions.
  • Create a GitHub Actions workflow that triggers on pushes to main affecting landing/** or the workflow file, plus manual workflow_dispatch.
  • Grant required permissions (contents read, pages write, id-token write), configure concurrency for the pages group, and use official actions to configure Pages, upload ./landing as the artifact, and deploy to GitHub Pages.
  • Expose the deployed Pages URL via the github-pages environment using the deployment step output.
.github/workflows/pages.yml
Document the landing directory structure and GitHub Pages deployment requirements.
  • Describe the contents and purpose of landing/index.html, styles.css, and app.js and how to preview the landing locally.
  • Document that pages.yml deploys landing/ contents to GitHub Pages on main changes.
  • Note the repository-level requirement to configure GitHub Pages to deploy from GitHub Actions.
landing/README.md

Assessment against linked issues

Issue Objective Addressed Explanation
#220 Add single-instance protection in the Electron desktop shell so only one main application instance runs at a time. The PR only adds a static landing page under landing/ and a GitHub Pages deployment workflow. It does not modify any Electron-related files (e.g., desktop/main.js) or implement single-instance logic for the desktop shell.
#220 Prevent spawning duplicate research_ui/server.py processes by checking for an already running local server during desktop startup. The changes are limited to static web assets (landing/index.html, styles.css, app.js), a Pages workflow, and landing documentation. There is no code touching desktop startup or any Python server process management.
#220 Improve desktop startup robustness by clearly surfacing boot/API failures in the renderer with a retry affordance, and add at least one smoke test for desktop startup assumptions (Electron + preload + research_ui) without editing Stepbit. The PR does not modify any renderer, preload, or test code under desktop/, nor does it add any startup diagnostics or retry UI. It only introduces a marketing landing page and its deployment pipeline, with no smoke tests for desktop startup behavior.

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

Copy link
Copy Markdown

@sourcery-ai sourcery-ai bot left a comment

Choose a reason for hiding this comment

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

Hey - I've found 2 issues, and left some high level feedback:

  • In landing/app.js you’re setting document.body.dataset.lastAction on link clicks but never reading it anywhere; if this isn’t used, consider removing the listener and attribute to keep the script minimal and avoid confusing future readers.
  • In your responsive CSS (e.g. the @media (max-width: 900px) block), .site-header is grouped with grid layouts and receives grid-template-columns, which has no effect on a flex container; splitting flex and grid selectors would make the layout intent clearer.
Prompt for AI Agents
Please address the comments from this code review:

## Overall Comments
- In `landing/app.js` you’re setting `document.body.dataset.lastAction` on link clicks but never reading it anywhere; if this isn’t used, consider removing the listener and attribute to keep the script minimal and avoid confusing future readers.
- In your responsive CSS (e.g. the `@media (max-width: 900px)` block), `.site-header` is grouped with grid layouts and receives `grid-template-columns`, which has no effect on a flex container; splitting flex and grid selectors would make the layout intent clearer.

## Individual Comments

### Comment 1
<location path="landing/styles.css" line_range="53" />
<code_context>
+  margin: 0 auto;
+}
+
+.site-header {
+  display: flex;
+  align-items: center;
</code_context>
<issue_to_address>
**issue:** Anchor navigation with a sticky header will likely hide section headings under the header; consider adding scroll-offset via CSS.

Since `.site-header` is `position: sticky; top: 0`, jumping to `#workflow`, `#preview`, etc. will align those sections at the very top, often hiding their headings under the header. You can avoid this by adding a scroll margin to anchor targets, for example:

```css
section[id] {
  scroll-margin-top: 80px; /* approx. header height */
}
```
</issue_to_address>

### Comment 2
<location path="landing/README.md" line_range="3" />
<code_context>
+# QuantLab Landing
+
+Landing estatica preparada para publicarse en GitHub Pages.
+
+## Estructura
</code_context>
<issue_to_address>
**issue (typo):** Consider adding the accent in "estatica" to read "estática".

Suggested implementation:

```
Landing estática preparada para publicarse en GitHub Pages.

```

```
Se puede abrir `index.html` directamente o servir la carpeta `landing/` con cualquier servidor estático.

```
</issue_to_address>

Sourcery is free for open source - if you like our reviews please consider sharing them ✨
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.

margin: 0 auto;
}

.site-header {
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

issue: Anchor navigation with a sticky header will likely hide section headings under the header; consider adding scroll-offset via CSS.

Since .site-header is position: sticky; top: 0, jumping to #workflow, #preview, etc. will align those sections at the very top, often hiding their headings under the header. You can avoid this by adding a scroll margin to anchor targets, for example:

section[id] {
  scroll-margin-top: 80px; /* approx. header height */
}

@@ -0,0 +1,21 @@
# QuantLab Landing

Landing estatica preparada para publicarse en GitHub Pages.
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

issue (typo): Consider adding the accent in "estatica" to read "estática".

Suggested implementation:

Landing estática preparada para publicarse en GitHub Pages.

Se puede abrir `index.html` directamente o servir la carpeta `landing/` con cualquier servidor estático.

@Whiteks1 Whiteks1 merged commit 2b60bf3 into main Apr 2, 2026
2 checks passed
@Whiteks1 Whiteks1 deleted the codex/landing-github-pages branch April 2, 2026 14:54
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.

hardening(desktop): make shell startup single-instance and operationally visible

1 participant