Skip to content

#58 made the landing page for dora#61

Merged
Asifdotexe merged 7 commits intomainfrom
58-add-a-landing-page-for-dora
Jan 24, 2026
Merged

#58 made the landing page for dora#61
Asifdotexe merged 7 commits intomainfrom
58-add-a-landing-page-for-dora

Conversation

@Asifdotexe
Copy link
Copy Markdown
Owner

@Asifdotexe Asifdotexe commented Jan 24, 2026

Make a landing page that consolidates the ways to run the application in two ways and has screenshots and links

Summary by CodeRabbit

  • New Features
    • Launched a responsive static landing page with navigation, hero, features, how-it-works, install, and footer sections
    • Added interactive gallery with auto-rotating tabs (CLI default), CTA buttons, and external links to app, repo, and package
    • Implemented smooth in-page scrolling and copy-to-clipboard for the install command with UI feedback
  • Style
    • Introduced comprehensive responsive design, visual tokens, animations, and tab/gallery styles

✏️ Tip: You can customize this high-level summary in your review settings.

@Asifdotexe Asifdotexe self-assigned this Jan 24, 2026
@Asifdotexe Asifdotexe added the enhancement New feature or request label Jan 24, 2026
@Asifdotexe Asifdotexe linked an issue Jan 24, 2026 that may be closed by this pull request
@Asifdotexe Asifdotexe marked this pull request as ready for review January 24, 2026 03:35
@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Jan 24, 2026

Warning

Rate limit exceeded

@Asifdotexe has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 7 minutes and 26 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📝 Walkthrough

Walkthrough

Adds a new static landing site for DORA: docs/index.html (content and structure), docs/style.css (visual design, responsive rules), and docs/script.js (gallery tabs with auto-rotate, smooth scrolling, copy-to-clipboard, and scroll-triggered animations).

Changes

Cohort / File(s) Summary
Landing page assets
docs/index.html, docs/style.css, docs/script.js
New static site: index.html provides nav, hero with 3‑tab gallery (CLI default), features, how-it-works steps, install block, and footer. style.css implements design tokens, layout, responsive rules, animations, and tab/card styles. script.js adds gallery tab switching with 5s auto-rotate, manual reset, smooth in-page scrolling, copyCode() for pip copy button, and IntersectionObserver fade-ins.

Sequence Diagram(s)

(omitted)

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Poem

🐇 I hopped through pixels, stitched style and code,
Tabs that twirl while the auto-rotor glowed.
Copy the pip, watch the hero take flight,
Features and steps all snug in the light.
DORA's door opens — rabbit dance, goodnight!

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title directly describes the main change: creating a landing page for the DORA project. All three new files (HTML, CSS, JavaScript) are additions that collectively implement this landing page.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 4

🤖 Fix all issues with AI agents
In `@docs/index.html`:
- Around line 13-16: The page currently loads FontAwesome twice (the kit script
"https://kit.fontawesome.com/a076d05399.js" and the CDN CSS link href
"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css"),
which is redundant; remove the kit script tag (the <script> referencing the kit)
and keep the CDN CSS link to avoid duplicate assets and reduce load time,
ensuring any icon usage still matches the CDN version.

In `@docs/script.js`:
- Around line 2-9: The click handler attached in
document.querySelectorAll('a[href^="#"]') can call scrollIntoView on a null
target; update the handler in that anonymous function to read the href via
this.getAttribute('href'), verify it's a non-empty string, then call
document.querySelector with it and only call scrollIntoView if the resulting
element is non-null (otherwise no-op or early return); reference the anchor
click handler, this.getAttribute('href'), document.querySelector(...) and
scrollIntoView when locating where to add the null/empty checks.
- Around line 74-98: The switchGallery function uses fragile detection
(inspecting tab.onclick source) and deprecated window.event; replace the fragile
check with a data attribute check and avoid window.event by accepting an
optional event param or reading event from the caller. Specifically, update the
gallery tab elements to use data-tab attributes (e.g., data-tab="report"),
change the loop in switchGallery to add class 'active' when tab.dataset.tab ===
tabId, and change the manual-interaction guard to use a provided event argument
(e.g., function switchGallery(tabId, event)) or require callers to pass the
event so you can check event.isTrusted before calling resetAutoRotate; keep
currentTabIndex = tabs.indexOf(tabId) as-is and ensure callers (or inline
onclicks) pass the event when invoking switchGallery.

In `@docs/style.css`:
- Around line 368-382: The mobile CSS hides primary navigation without an
alternative and contains a dead selector: change the responsive rule so
`.nav-links` isn't simply `display: none` — implement an accessible mobile
toggle by adding a class or aria-hidden toggle (e.g., a `.nav-toggle` button
that controls `.nav-links` visibility via a `.open` modifier) and ensure the
media query uses that class instead of permanently hiding links; also remove or
replace the unused `.hero-image-placeholder` selector (or rename it to match the
actual hero element class used elsewhere, e.g., `.hero-image` or delete the rule
if the element doesn't exist) to eliminate dead code and restore mobile
navigation access.
🧹 Nitpick comments (4)
docs/script.js (1)

22-35: Consider fallback for clipboard API.

navigator.clipboard requires HTTPS or localhost and isn't available in all browsers. The error is caught but only logged—users get no feedback on failure.

Optional: Add user feedback on failure
     }).catch(err => {
         console.error('Failed to copy: ', err);
+        const btn = codeElement.parentElement.querySelector('.copy-btn');
+        btn.innerText = 'Failed';
+        setTimeout(() => { btn.innerText = 'Copy'; }, 2000);
     });
docs/index.html (3)

45-63: Gallery tab order mismatch with JavaScript.

HTML tab buttons are ordered: report, web, cli (with cli active), but the JS tabs array is ['cli', 'web', 'report']. While functional, this inconsistency makes maintenance harder. Align the order for clarity.

Additionally, ensure the data-tab attributes are added to tabs as suggested in the script.js review to fix the fragile tab detection.

Align tab order with JS array
             <div class="gallery-tabs">
-                <button class="gallery-tab" onclick="switchGallery('report')">HTML Report</button>
-                <button class="gallery-tab" onclick="switchGallery('web')">Web Interface</button>
-                <button class="gallery-tab active" onclick="switchGallery('cli')">CLI Tool</button>
+                <button class="gallery-tab active" data-tab="cli" onclick="switchGallery('cli')">CLI Tool</button>
+                <button class="gallery-tab" data-tab="web" onclick="switchGallery('web')">Web Interface</button>
+                <button class="gallery-tab" data-tab="report" onclick="switchGallery('report')">HTML Report</button>
             </div>

118-131: Move inline styles to the stylesheet.

Multiple inline styles here (and on line 23 for the logo image) reduce maintainability. Consider moving these to style.css.

Example CSS additions
/* In style.css */
.get-started p {
    color: rgba(255,255,255,0.9);
    margin-bottom: 2rem;
}

.get-started .btn-primary.btn-launch {
    background: white;
    color: var(--secondary-color);
}

.logo img {
    height: 50px;
}

Then update HTML:

-<p style="color: rgba(255,255,255,0.9); margin-bottom: 2rem;">
+<p>

52-62: Add alt text fallback and loading optimization for gallery images.

The gallery images could benefit from loading="lazy" for performance, and consider adding dimensions to prevent layout shift.

Suggested enhancement
             <div class="gallery-content active" id="gallery-cli">
-                <img src="assets/cli-demo.png" alt="DORA CLI Demo" class="gallery-image">
+                <img src="assets/cli-demo.png" alt="DORA CLI Demo" class="gallery-image" loading="lazy">
             </div>

             <div class="gallery-content" id="gallery-web">
-                <img src="assets/web-ui-demo.png" alt="DORA Web Interface" class="gallery-image">
+                <img src="assets/web-ui-demo.png" alt="DORA Web Interface" class="gallery-image" loading="lazy">
             </div>

             <div class="gallery-content" id="gallery-report">
-                <img src="assets/report-demo-snippet.png" alt="DORA HTML Report" class="gallery-image">
+                <img src="assets/report-demo-snippet.png" alt="DORA HTML Report" class="gallery-image" loading="lazy">
             </div>

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@docs/index.html`:
- Around line 28-30: Update all external anchor tags that use target="_blank" to
include rel="noopener noreferrer" to prevent tabnabbing; specifically modify the
<a> elements linking to "https://github.com/Asifdotexe/DORA",
"https://pypi.org/project/dora-eda/", and the other external anchors referenced
in the file so each reads e.g. <a href="... " target="_blank" rel="noopener
noreferrer">. Ensure every external link opened in a new tab gets the rel
attribute consistently.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

🤖 Fix all issues with AI agents
In `@docs/script.js`:
- Around line 2-8: The click handler on anchors uses this.getAttribute('href')
directly in document.querySelector which throws for href="#" or missing targets;
update the handler inside the document.querySelectorAll('a[href^="#"]') loop to
first read const href = this.getAttribute('href'), return early if !href || href
=== '#' (or href === '#0' if needed), and only call document.querySelector(href)
after checking it is a non-empty hash and that document.querySelector(href)
returns a truthy element; if no target is found, do nothing. Ensure the code
paths around the anchor.addEventListener callback and the scrollIntoView call
use these guards so no SyntaxError occurs.
♻️ Duplicate comments (1)
docs/index.html (1)

28-30: Add rel="noopener noreferrer" for all target="_blank" links.

Still exposes tabnabbing on external links.

🔧 Proposed fix
-                <a href="https://github.com/Asifdotexe/DORA" target="_blank"><i class="fab fa-github"></i> GitHub</a>
-                <a href="https://pypi.org/project/dora-eda/" target="_blank"><i class="fas fa-box"></i> PyPI</a>
+                <a href="https://github.com/Asifdotexe/DORA" target="_blank" rel="noopener noreferrer"><i class="fab fa-github"></i> GitHub</a>
+                <a href="https://pypi.org/project/dora-eda/" target="_blank" rel="noopener noreferrer"><i class="fas fa-box"></i> PyPI</a>

-                <a href="https://dora-eda.streamlit.app/" target="_blank" class="btn btn-primary">Launch Web App</a>
+                <a href="https://dora-eda.streamlit.app/" target="_blank" rel="noopener noreferrer" class="btn btn-primary">Launch Web App</a>

-                <a href="https://dora-eda.streamlit.app/" target="_blank" class="btn btn-primary"
+                <a href="https://dora-eda.streamlit.app/" target="_blank" rel="noopener noreferrer" class="btn btn-primary"
                     style="background: white; color: var(--secondary-color);">Launch App</a>

-                        href="https://github.com/Asifdotexe" target="_blank"
+                        href="https://github.com/Asifdotexe" target="_blank" rel="noopener noreferrer"

Also applies to: 40-40, 132-133, 146-147

@Asifdotexe Asifdotexe merged commit a360eea into main Jan 24, 2026
2 checks passed
@Asifdotexe Asifdotexe deleted the 58-add-a-landing-page-for-dora branch January 24, 2026 03:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add a landing page for DORA

1 participant