Add GitHub Pages site and logo kit under site/#134
Conversation
Logo kit: full mascot, 256/128/64/32 resized variants, apple-touch-icon (180x180), favicon.ico (16+32+48), og-image (1200x630 social card). Site: single-page GitHub Pages site with hero, stats bar, 9 feature cards, 159-platform grid, install block. Navy/teal palette matching the presentation deck. Configure GitHub Pages to serve from site/. https://claude.ai/code/session_01H5UbjsuiiGya5n1eUCxoaR
There was a problem hiding this comment.
Pull request overview
Adds a new static GitHub Pages landing site under site/ along with a logo/icon asset kit to present GNAT’s capabilities and installation options.
Changes:
- Add a single-page marketing site (
site/index.html) with hero, stats, feature cards, platform grid, and install section. - Add site styling (
site/assets/css/style.css) for nav, sections, cards, and responsive behavior. - Add logo/icon assets for various sizes plus social preview and favicon images under
site/assets/images/.
Reviewed changes
Copilot reviewed 2 out of 10 changed files in this pull request and generated 10 comments.
Show a summary per file
| File | Description |
|---|---|
| site/index.html | New one-page marketing/landing page with navigation anchors, content sections, and install commands. |
| site/assets/css/style.css | Styling for the new static site (layout, colors, components, responsive rules). |
| site/assets/images/gnat-logo-32.png | 32px logo asset for site/icon usage. |
| site/assets/images/gnat-logo-64.png | 64px logo asset used in the navbar. |
| site/assets/images/gnat-logo-128.png | 128px logo asset for general usage. |
| site/assets/images/gnat-logo-256.png | 256px logo asset for general usage. |
| site/assets/images/gnat-logo-full.png | Full mascot/hero image used in the hero section. |
| site/assets/images/apple-touch-icon.png | iOS home screen icon. |
| site/assets/images/favicon.ico | Multi-size favicon for browsers. |
| site/assets/images/og-image.png | Open Graph/social share image. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
|
|
||
| /* ── Sections ────────────────────────────────── */ | ||
| section { padding: 64px 0; } | ||
| section:nth-child(even) { background: var(--navy2); } |
There was a problem hiding this comment.
section:nth-child(even) is overriding the .hero section’s gradient background because the hero is a <section> and is an even-numbered child of <body> (after <nav>). This results in the hero background becoming var(--navy2) instead of the intended gradient; consider switching to section:nth-of-type(even) scoped to non-hero sections (e.g., body > section:not(.hero):nth-of-type(even)) or moving the .hero background rule after this selector / increasing its specificity.
| section:nth-child(even) { background: var(--navy2); } | |
| body > section:not(.hero):nth-of-type(even) { background: var(--navy2); } |
| <div>pip install gnat</div> | ||
| <div style="color: var(--muted); margin-top: 12px;"># Optional extras</div> | ||
| <div>pip install "gnat[telemetry]" # Kafka + Redis</div> | ||
| <div>pip install "gnat[rules]" # Hy rule engine</div> | ||
| <div>pip install "gnat[analysis]" # Campaign tracking</div> | ||
| <div>pip install "gnat[serve]" # Web dashboard</div> | ||
| <div>pip install "gnat[all]" # Everything</div> |
There was a problem hiding this comment.
The install commands are laid out using multiple <div>s and spacing. This is not very accessible/semantic for “code” content and makes copy/paste error-prone; consider using a single <pre><code> block (or <code> elements with white-space: pre) and CSS for any muted comment lines/alignment.
| <div>pip install gnat</div> | |
| <div style="color: var(--muted); margin-top: 12px;"># Optional extras</div> | |
| <div>pip install "gnat[telemetry]" # Kafka + Redis</div> | |
| <div>pip install "gnat[rules]" # Hy rule engine</div> | |
| <div>pip install "gnat[analysis]" # Campaign tracking</div> | |
| <div>pip install "gnat[serve]" # Web dashboard</div> | |
| <div>pip install "gnat[all]" # Everything</div> | |
| <pre><code>pip install gnat | |
| <span style="color: var(--muted);"># Optional extras</span> | |
| pip install "gnat[telemetry]" # Kafka + Redis | |
| pip install "gnat[rules]" # Hy rule engine | |
| pip install "gnat[analysis]" # Campaign tracking | |
| pip install "gnat[serve]" # Web dashboard | |
| pip install "gnat[all]" # Everything</code></pre> |
| <meta name="description" content="GNAT (GNAT's Not A TIP) — A production-ready Python library for unified cyber threat intelligence across 159 platforms with STIX 2.1 ORM, AI agents, and detection rule translation."> | ||
| <meta property="og:title" content="GNAT — Python Cyber Threat Intel Made Simple"> | ||
| <meta property="og:description" content="One library. Every platform. Total control. 159 connectors, STIX 2.1 ORM, AI agents, HuntGNAT detection rules, campaign tracking, and telemetry ingestion."> | ||
| <meta property="og:image" content="assets/images/og-image.png"> |
There was a problem hiding this comment.
The Open Graph image is set to a relative path (assets/images/og-image.png). Many social scrapers expect an absolute URL (and often og:url) and may fail to resolve relative assets, especially on GitHub Pages project sites under a subpath. Consider using an absolute og:image URL for the deployed site (and adding og:url).
| <meta property="og:image" content="assets/images/og-image.png"> | |
| <meta property="og:image" content="https://wrhalpin.github.io/gnat/assets/images/og-image.png"> | |
| <meta property="og:url" content="https://wrhalpin.github.io/gnat/"> |
| html { scroll-behavior: smooth; } | ||
|
|
||
| body { | ||
| font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; | ||
| background: var(--navy); | ||
| color: var(--offwhite); | ||
| line-height: 1.6; | ||
| } | ||
|
|
||
| a { color: var(--teal); text-decoration: none; } | ||
| a:hover { color: var(--mint); } | ||
|
|
||
| .container { max-width: 1100px; margin: 0 auto; padding: 0 24px; } | ||
|
|
||
| /* ── Nav ─────────────────────────────────────── */ | ||
| nav { | ||
| position: sticky; top: 0; z-index: 100; | ||
| background: rgba(15, 32, 68, 0.95); | ||
| backdrop-filter: blur(12px); | ||
| border-bottom: 1px solid rgba(91, 147, 217, 0.15); | ||
| padding: 12px 0; | ||
| } | ||
| nav .container { display: flex; align-items: center; justify-content: space-between; } |
There was a problem hiding this comment.
Because the nav is position: sticky, jumping to #features/#platforms/#install will likely leave the section header hidden under the nav. Consider adding scroll-padding-top on html (or scroll-margin-top on the target sections/headings) to offset anchor scrolling by the nav height.
| <p>GNAT — GNAT's Not A TIP — Version 1.5.0</p> | ||
| <p style="margin-top: 8px;"> | ||
| <a href="https://github.com/wrhalpin/gnat">GitHub</a> · | ||
| Apache License 2.0 · | ||
| Python 3.9 – 3.13 | ||
| </p> |
There was a problem hiding this comment.
Footer hardcodes Version 1.5.0, but the repository’s declared package version is 1.9.0 in pyproject.toml. To avoid stale marketing info, consider generating this from a single source of truth or updating the footer to match the current release/versioning scheme used in the repo.
| <body> | ||
|
|
||
| <!-- Nav --> | ||
| <nav> | ||
| <div class="container"> | ||
| <a href="#" class="brand"> |
There was a problem hiding this comment.
The brand link uses href="#", which changes the URL fragment and can create awkward back-button behavior. Prefer linking to the real page root (e.g., index.html or /) or to a named top anchor (e.g., href="#top" with a corresponding id).
| <body> | |
| <!-- Nav --> | |
| <nav> | |
| <div class="container"> | |
| <a href="#" class="brand"> | |
| <body id="top"> | |
| <!-- Nav --> | |
| <nav> | |
| <div class="container"> | |
| <a href="#top" class="brand"> |
| <span>VirusTotal</span><span>Mandiant</span><span>MISP</span><span>OpenCTI</span> | ||
| <span>Elastic SIEM</span><span>QRadar</span><span>Cortex XDR</span><span>SentinelOne</span> | ||
| <span>Palo Alto XSOAR</span><span>Wiz</span><span>Orca Security</span><span>Okta</span> | ||
| <span>Entra ID</span><span>CrowdStrike</span><span>Recorded Future</span><span>AlienVault OTX</span> |
There was a problem hiding this comment.
The “Supported Platforms” list includes a duplicate entry (CrowdStrike appears twice). If this section is meant to be representative, duplicates make the list look less curated and can undermine the “159 platforms” claim; consider deduplicating or intentionally labeling variants.
| <span>Entra ID</span><span>CrowdStrike</span><span>Recorded Future</span><span>AlienVault OTX</span> | |
| <span>Entra ID</span><span>Recorded Future</span><span>AlienVault OTX</span> |
| <div style="color: var(--muted); margin-top: 12px;"># Optional extras</div> | ||
| <div>pip install "gnat[telemetry]" # Kafka + Redis</div> | ||
| <div>pip install "gnat[rules]" # Hy rule engine</div> | ||
| <div>pip install "gnat[analysis]" # Campaign tracking</div> | ||
| <div>pip install "gnat[serve]" # Web dashboard</div> | ||
| <div>pip install "gnat[all]" # Everything</div> | ||
| </div> | ||
| </div> | ||
| </section> | ||
|
|
||
| <!-- Footer --> | ||
| <footer> | ||
| <div class="container"> | ||
| <p>GNAT — GNAT's Not A TIP — Version 1.5.0</p> | ||
| <p style="margin-top: 8px;"> | ||
| <a href="https://github.com/wrhalpin/gnat">GitHub</a> · |
There was a problem hiding this comment.
Inline styles are used for spacing/color in the install block and footer. Moving these into CSS classes will make the page easier to maintain and theme (and avoids mixing content with presentation).
| <img src="assets/images/gnat-logo-full.png" alt="GNAT Mascot"> | ||
| <h1>GNAT</h1> |
There was a problem hiding this comment.
gnat-logo-full.png is ~1.4MB (in-repo) but is used as a 220px hero image. This will significantly slow first paint on mobile; consider optimizing/compressing this asset and/or serving responsive sizes via srcset (and add explicit width/height to avoid layout shift).
| <span class="badge teal">159 Connectors</span> | ||
| <span class="badge green">5,100+ Tests</span> | ||
| <span class="badge teal">STIX 2.1</span> | ||
| <span class="badge amber">Python 3.9+</span> | ||
| <span class="badge teal">Apache 2.0</span> |
There was a problem hiding this comment.
This page repeatedly claims 159 connectors/platforms, but the repository metadata still describes 158 platforms (e.g., pyproject.toml project description). If the connector count changed, consider updating the other source(s) too, or derive this number from a single authoritative place to avoid inconsistencies.
Logo kit: full mascot, 256/128/64/32 resized variants, apple-touch-icon (180x180), favicon.ico (16+32+48), og-image (1200x630 social card).
Site: single-page GitHub Pages site with hero, stats bar, 9 feature cards, 159-platform grid, install block. Navy/teal palette matching the presentation deck. Configure GitHub Pages to serve from site/.
https://claude.ai/code/session_01H5UbjsuiiGya5n1eUCxoaR