You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
* Fix mobile hamburger menu on iOS Safari by using position:fixed scroll lock
* Fix mobile hamburger menu: portal overlay to body, avoid sticky container clipping
* Use partial dropdown for mobile nav instead of full-screen overlay
* Fix lint: replace setState-in-effect with useSyncExternalStore for client detection
* Fix e2e tests: update selectors from header-nav--open to mobile-nav-overlay--open
* docs: require lint/e2e checks pre-commit, differentiate code vs content paths
* Expand E2E tests from 9 to 53 with resilient selectors
Replace brittle CSS class selectors with semantic ARIA/role-based equivalents
across all four E2E test files. Add minimal ARIA hooks to components to enable
proper selectors: aria-label on mobile nav overlay, data-testid on contributor
avatars, aria-label on blog post tags, and article elements for feature cards.
* Improve E2E test resilience and correctness
- Fix false-positive blog card selector on homepage (was matching nav link)
- GitHub stats: check Stars/Forks labels in hero region instead of any link
- Feature strip: verify unique content instead of CSS class count
- Meta description: require 20+ chars instead of any non-empty string
- Mobile hamburger close-on-link: assert overlay not visible after click
- aria-expanded test: move to mobile spec where toggle is interactive
- Blog post tags: conditional check — only assert when tags div is present
- Sitemap: remove hardcoded blog slugs that break on content changes
* Fix hamburger close-on-click test to stay on current page
Clicking 'Blog' caused navigation, making the not.toBeVisible() assertion
trivially true on the destination page. Switch to clicking 'Docs'
(target=_blank) which opens a new tab but keeps the test on the current
page, so the assertion actually verifies the close handler fired.
* Fix hydration mismatch in ImageCompare component
react-compare-slider renders different inline style formats server-side
(kebab-case CSS) vs client-side (camelCase JS), causing a React hydration
mismatch. Dynamically import with ssr:false since the slider is purely
interactive with no SSR benefit.
Fixes psschwei's report on PR #6.
@@ -105,8 +105,8 @@ export default function HomePage() {
105
105
<h3className="feature-card-title">Python not Prose</h3>
106
106
<pclassName="feature-card-body">The <code>@generative</code> decorator turns typed function signatures into LLM specifications. Docstrings are prompts, type hints are schemas — no templates, no parsers.</p>
107
107
<Linkhref="https://docs.mellea.ai/concepts/generative-functions"target="_blank"className="feature-card-link">Learn more →</Link>
<pclassName="feature-card-body">Grammar-constrained generation for Ollama, vLLM, and HuggingFace. Unlike Instructor and PydanticAI, valid output is enforced at the token level — not retried into existence.</p>
118
118
<Linkhref="https://docs.mellea.ai/how-to/enforce-structured-output"target="_blank"className="feature-card-link">Learn more →</Link>
<pclassName="feature-card-body">Declare rules — tone, length, content, custom logic — and Mellea validates every output before it leaves. Automatic retries mean bad output never reaches your users.</p>
130
130
<Linkhref="https://docs.mellea.ai/concepts/requirements-system"target="_blank"className="feature-card-link">Learn more →</Link>
@@ -138,8 +138,8 @@ export default function HomePage() {
138
138
<h3className="feature-card-title">Predictable and Resilient</h3>
139
139
<pclassName="feature-card-body">Need higher confidence? Switch from single-shot to majority voting or best-of-n with one parameter. No code rewrites, no new infrastructure.</p>
140
140
<Linkhref="https://docs.mellea.ai/advanced/inference-time-scaling"target="_blank"className="feature-card-link">Learn more →</Link>
<pclassName="feature-card-body">Expose any Mellea program as an MCP tool. The calling agent gets validated output — requirements checked, retries run — not raw LLM responses.</p>
152
152
<Linkhref="https://docs.mellea.ai/integrations/mcp"target="_blank"className="feature-card-link">Learn more →</Link>
@@ -161,7 +161,7 @@ export default function HomePage() {
161
161
<h3className="feature-card-title">Safety & Guardrails</h3>
162
162
<pclassName="feature-card-body">Built-in Granite Guardian integration detects harmful outputs, hallucinations, and jailbreak attempts before they reach your users — no external service required.</p>
163
163
<Linkhref="https://docs.mellea.ai/how-to/safety-guardrails"target="_blank"className="feature-card-link">Learn more →</Link>
164
-
</div>
164
+
</article>
165
165
</div>
166
166
</div>
167
167
</section>
@@ -201,7 +201,7 @@ export default function HomePage() {
0 commit comments