Skip to content

Add landing page, SECURITY.md, and NichevLabs branding#10

Merged
johnnichev merged 1 commit intomainfrom
feat/landing-page-and-branding
Mar 21, 2026
Merged

Add landing page, SECURITY.md, and NichevLabs branding#10
johnnichev merged 1 commit intomainfrom
feat/landing-page-and-branding

Conversation

@johnnichev
Copy link
Copy Markdown
Owner

Summary

  • Landing page — standalone HTML at site root with Tailwind CSS dark theme, hero, code showcase, LangChain comparison table, feature grid, persona cards, and getting started section
  • SECURITY.md — root-level vulnerability disclosure policy (triggers GitHub's Security Policy badge)
  • NichevLabs branding — "open source from NichevLabs" across README, docs, pyproject.toml, and landing page
  • Docs workflow — updated to copy landing page as site/index.html after MkDocs build
  • .private/ gitignored for local-only assets (social preview, growth plan, comparison drafts)

Test plan

  • Verify MkDocs build still passes (mkdocs build)
  • Verify landing page renders correctly at site root
  • Verify docs pages still accessible at existing paths (e.g., /QUICKSTART/, /modules/AGENT/)
  • Verify "Docs" links on landing page point to correct MkDocs pages
  • Verify GitHub shows Security Policy badge from root SECURITY.md

🤖 Generated with Claude Code

- Add standalone landing page (landing/index.html) with Tailwind CSS
  dark theme, hero section, feature grid, LangChain comparison table,
  code showcase, and NichevLabs branding
- Update docs workflow to serve landing page as site root
- Add root SECURITY.md with vulnerability disclosure policy
- Brand selectools as "open source from NichevLabs" across README,
  docs/index.md, and pyproject.toml
- Add .private/ to .gitignore for local-only assets
@johnnichev johnnichev force-pushed the feat/landing-page-and-branding branch from 20efca6 to 39e0f94 Compare March 21, 2026 21:24
@johnnichev johnnichev merged commit 7f70adf into main Mar 21, 2026
1 check passed
@johnnichev johnnichev deleted the feat/landing-page-and-branding branch March 21, 2026 21:25
johnnichev added a commit that referenced this pull request Mar 24, 2026
Security:
- Path traversal in JsonFileSessionStore — validate session_id (#9)
- Unicode homoglyph bypass in injection screening — NFKD + zero-width
  strip + homoglyph map (#13)

Data integrity:
- FileKnowledgeStore._save_all() atomic write via tmp + os.replace (#10)
- JsonFileSessionStore.save() atomic write (#31)

Agent core:
- astream() uses self._effective_model (was self.config.model) (#1)
- Sync _check_policy rejects async confirm_action with clear error (#2)
- Sync _streaming_call isinstance(chunk, str) guard (#18)

Providers:
- FallbackProvider stream()/astream() record success after consumption,
  not before — circuit breaker now works for streaming (#3)
- Gemini response.text ValueError catch for tool-call-only responses (#4)

Tools:
- aexecute() uses run_in_executor(None) shared executor (#5)
- execute() awaits coroutines from async tools via asyncio.run (#6)

RAG:
- Hybrid search O(n²) → O(1) via text_to_key dict lookup (#7)
- SQLiteVectorStore thread safety + WAL mode (#8)

Evals:
- OutputEvaluator catches re.error on invalid regex (#11)
- JsonValidityEvaluator respects expect_json=False (#12)

16 new regression tests. Full suite: 2000 passed.
johnnichev added a commit that referenced this pull request Mar 24, 2026
- Bug #2: async confirm_action guard in sync _check_policy (was overwritten by Batch 2)
- Bug #8: SQLiteVectorStore WAL mode + threading.Lock (was overwritten by Batch 3)
- Bug #10: FileKnowledgeStore atomic write via tmp + os.replace (was overwritten by Batch 3)
- Fix SQLite test cleanup for WAL mode extra files
johnnichev added a commit that referenced this pull request Apr 6, 2026
Addresses the 10 issues from Galaxy S23 testing after PR #41.

Critical: header still showed full nav on mobile because Chrome's "Desktop
Site" mode reports a viewport of ~1280px (not ~980px as initially assumed),
which exceeded the 1024px breakpoint added in PR #41. The fix is to detect
touch input via `@media (pointer: coarse)`, which the Desktop Site toggle
cannot override. This is the only reliable signal for "this is a touch
device, no matter what the viewport pretends to be."

Issues fixed:

1. **Header nav still showing on mobile** — Added @media (pointer: coarse)
   block that forces hamburger + drawer regardless of reported viewport.
   Also removes nav-hide-on-scroll on touch (issue #10): the auto-hide
   stays as a desktop progressive enhancement only.

2. **Hero pill grid felt templated** — Replaced 8 generic pills with a
   cleaner "Works with · OpenAI Anthropic Gemini Ollama" provider strip.
   Each provider gets a small cyan dot prefix. Removed the redundant
   feature pills (Multi-Agent Graphs, 50 Evaluators, etc.) since they
   already appear in the dedicated features section below.

3. **Supervisor agent chips broke into 3+1 layout** — Switched .sim-agents
   to a 2-column CSS grid with `:last-child:nth-child(odd)` selector that
   spans the orphaned last item across both columns. Handles 2/3/4 agent
   counts gracefully.

4. **"What is Selectools?" copy too dense** — Restructured into 3 short
   paragraphs with a visually distinct middle line listing capabilities
   separated by middle-dots. Removed the redundant "Unlike LangChain..."
   framing (the comparison tables already make this case). Closing
   paragraph keeps the brand voice.

5. **Code block scroll indicator** — Added a right-edge gradient mask to
   .code-body matching the comparison table pattern. Signals "more content
   this way" for horizontally-scrollable code. Mask drops on hover/focus
   so users see the full content when engaging. Also reduced code font
   slightly on mobile (12px → 11.5px) for better fit.

6. **Feature cards too tall on mobile** — Compact card layout under
   @media (max-width: 768px), (pointer: coarse): 28px → 20px padding,
   40 → 32px icon, 32 → 14px grid gap. Cards now feel like a tight
   group instead of 1/3-screen blocks with awkward gaps.

7. **"Live · no server required" chip orphaned** — Moved inline with the
   "Visual Agent Builder" section label so it reads as a header annotation
   rather than a floating chip between the description and the card.

8. **Comparison table cells wrapping to 3 lines** — Bumped .cmp-table
   min-width from 640px to 800px so each column has ~115px (enough for
   "macOS desktop app" and "No (desktop only)" to fit on 1-2 lines).
   Added `white-space: nowrap` to .yes/.no/.mid verdict cells so 2-3 char
   answers never wrap awkwardly.

9. **No gap before first builder card in "Three paths"** — Added explicit
   margin-bottom: 64px on the section description and padding-top: 8px
   on the cards container.

10. **Header should always be visible** — Removed the hide-on-scroll-down
    behavior on touch devices (kept on desktop where it's a thoughtful
    progressive enhancement). On mobile the nav now stays fixed at the
    top throughout scrolling, which doubles as a wayfinding aid.

Approach informed by /adapt and /clarify skill guidelines. The
@media (pointer: coarse) pattern is the key insight from /adapt:
viewport-based responsive design is fundamentally fragile because users
can override it (Desktop Site mode, Reader Mode, browser zoom). Touch
input is a hardware property that cannot be spoofed.
johnnichev added a commit that referenced this pull request Apr 6, 2026
#42)

Addresses the 10 issues from Galaxy S23 testing after PR #41.

Critical: header still showed full nav on mobile because Chrome's "Desktop
Site" mode reports a viewport of ~1280px (not ~980px as initially assumed),
which exceeded the 1024px breakpoint added in PR #41. The fix is to detect
touch input via `@media (pointer: coarse)`, which the Desktop Site toggle
cannot override. This is the only reliable signal for "this is a touch
device, no matter what the viewport pretends to be."

Issues fixed:

1. **Header nav still showing on mobile** — Added @media (pointer: coarse)
   block that forces hamburger + drawer regardless of reported viewport.
   Also removes nav-hide-on-scroll on touch (issue #10): the auto-hide
   stays as a desktop progressive enhancement only.

2. **Hero pill grid felt templated** — Replaced 8 generic pills with a
   cleaner "Works with · OpenAI Anthropic Gemini Ollama" provider strip.
   Each provider gets a small cyan dot prefix. Removed the redundant
   feature pills (Multi-Agent Graphs, 50 Evaluators, etc.) since they
   already appear in the dedicated features section below.

3. **Supervisor agent chips broke into 3+1 layout** — Switched .sim-agents
   to a 2-column CSS grid with `:last-child:nth-child(odd)` selector that
   spans the orphaned last item across both columns. Handles 2/3/4 agent
   counts gracefully.

4. **"What is Selectools?" copy too dense** — Restructured into 3 short
   paragraphs with a visually distinct middle line listing capabilities
   separated by middle-dots. Removed the redundant "Unlike LangChain..."
   framing (the comparison tables already make this case). Closing
   paragraph keeps the brand voice.

5. **Code block scroll indicator** — Added a right-edge gradient mask to
   .code-body matching the comparison table pattern. Signals "more content
   this way" for horizontally-scrollable code. Mask drops on hover/focus
   so users see the full content when engaging. Also reduced code font
   slightly on mobile (12px → 11.5px) for better fit.

6. **Feature cards too tall on mobile** — Compact card layout under
   @media (max-width: 768px), (pointer: coarse): 28px → 20px padding,
   40 → 32px icon, 32 → 14px grid gap. Cards now feel like a tight
   group instead of 1/3-screen blocks with awkward gaps.

7. **"Live · no server required" chip orphaned** — Moved inline with the
   "Visual Agent Builder" section label so it reads as a header annotation
   rather than a floating chip between the description and the card.

8. **Comparison table cells wrapping to 3 lines** — Bumped .cmp-table
   min-width from 640px to 800px so each column has ~115px (enough for
   "macOS desktop app" and "No (desktop only)" to fit on 1-2 lines).
   Added `white-space: nowrap` to .yes/.no/.mid verdict cells so 2-3 char
   answers never wrap awkwardly.

9. **No gap before first builder card in "Three paths"** — Added explicit
   margin-bottom: 64px on the section description and padding-top: 8px
   on the cards container.

10. **Header should always be visible** — Removed the hide-on-scroll-down
    behavior on touch devices (kept on desktop where it's a thoughtful
    progressive enhancement). On mobile the nav now stays fixed at the
    top throughout scrolling, which doubles as a wayfinding aid.

Approach informed by /adapt and /clarify skill guidelines. The
@media (pointer: coarse) pattern is the key insight from /adapt:
viewport-based responsive design is fundamentally fragile because users
can override it (Desktop Site mode, Reader Mode, browser zoom). Touch
input is a hardware property that cannot be spoofed.
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.

1 participant