Skip to content

feat(ag-p05): homepage — all 5 blocks wired to live data#862

Merged
ashleyshaw merged 2 commits into
developfrom
feat/ag-p05-homepage
Jun 6, 2026
Merged

feat(ag-p05): homepage — all 5 blocks wired to live data#862
ashleyshaw merged 2 commits into
developfrom
feat/ag-p05-homepage

Conversation

@ashleyshaw
Copy link
Copy Markdown
Member

@ashleyshaw ashleyshaw commented Jun 6, 2026

General Pull Request

This repository enforces changelog, release, and label automation for all PRs and issues.
See the organisation-wide Automation & Workflows for contributor rules.

Linked issues

Closes #861

Changelog

Added

  • Rebuilt the homepage with all five blocks from the phase 05 spec.
  • Added live catalogue counts and the Wapuu assets used by the Cook+Learn cards.
  • Added an onboarding/ alias that redirects to getting-started/.

Changed

  • Replaced the placeholder homepage layout with the spec-aligned control-plane homepage.
  • Switched the homepage CTA and section layout to the live catalogue data exports.

Fixed

  • Corrected the homepage route flow so the Start here CTA resolves to a real page.
  • Fixed the hero overlay layering so the grid background stays behind the content.

Removed

  • Removed the old placeholder homepage blocks.

Risk Assessment

Risk Level: Low

Potential Impact:

This change only affects the homepage surface and a redirect alias. The risk is limited to visual regressions or broken links on the landing page.

Mitigation Steps:

  • Ran the Astro build locally after the final edit.
  • Verified the homepage HTML against the required copy and live counts.
  • Confirmed /onboarding/ redirects to /getting-started/.
  • Checked the build output for hardcoded colour violations in the new page.

How to Test

Prerequisites

  • Run the website locally with the current branch checked out.
  • Ensure the website dependencies are installed.

Test Steps

  1. Open the homepage and confirm the hero, catalogue grid, feature strip, and Cook+Learn cards render.
  2. Click Start here and confirm it redirects to getting-started/.
  3. Click Browse catalogues, each catalogue card, Learn it at your own pace, and Follow a recipe.

Expected Results

  • The homepage shows all five spec blocks in the correct order.
  • The catalogue cards show live counts, including the dynamic prompt total.
  • The Wapuu images load without broken assets.
  • The page remains responsive at mobile widths.

Edge Cases to Verify

  • Mobile stacking at ≤760px
  • Theme toggle still renders the homepage correctly
  • /onboarding/ returns a redirect rather than a 404
  • No console errors on load

Checklist (Global DoD / PR)

  • All AC met and demonstrated
  • Tests added/updated (unit/E2E as appropriate)
  • Accessibility checklist completed (where relevant):
    • Semantic HTML and heading order verified
    • Keyboard navigation and visible focus states verified
    • ARIA used only where needed
    • Contrast and non-colour cues reviewed (WCAG 2.2 AA)
  • Docs/readme/changelog updated (if user-facing)
  • Frontmatter updated where applicable (last_updated and version)
  • I have reviewed and applied the downstream override policy (or linked an approved exception)
  • Security checklist completed (where relevant):
    • Untrusted input validated and sanitised
    • Output escaped for its rendering context
    • Privileged actions enforce nonce and capability checks
    • No secrets/sensitive data introduced; OWASP risks reviewed
  • Code/design reviews approved
  • CI green; linked issues closed; release notes prepared (if shipping)
  • Risk assessment completed above
  • Testing instructions provided above

References

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 6, 2026

✅ Template check passed after update. Thanks for fixing the PR description.

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Jun 6, 2026

Review Change Stack

Warning

Review limit reached

@ashleyshaw, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 54 minutes and 23 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, 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 include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 531c226c-db38-4339-a5c8-bf1b37e37d61

📥 Commits

Reviewing files that changed from the base of the PR and between 783a4a1 and 75fd96d.

📒 Files selected for processing (1)
  • CHANGELOG.md
📝 Walkthrough

Walkthrough

Homepage index.astro undergoes a complete redesign, transitioning from a static control-plane layout to a dynamic AwesomeGithubLayout-based homepage. The page now computes live statistics and category counts, rendering all five content blocks—hero, catalogue grid, feature grid, learn/cookbook, and footer—with data-driven content. Onboarding.astro is updated to redirect users to the getting-started page.

Changes

Phase 05 Homepage Redesign & Onboarding Redirect

Layer / File(s) Summary
Data wiring foundation
website/src/pages/index.astro
Page script computes base URL from import.meta.env.BASE_URL, derives promptCount by counting items from ITEMS, and fetches category counts via getCategoryCounts() helper.
Hero section with CTAs and stats
website/src/pages/index.astro
Hero markup includes repository chip, main heading with accent span, lead text, CTA buttons using base-prefixed routes, and a stats strip displaying catalogue count, dynamic prompt count, lessons, and control planes.
Catalogue grid rendering
website/src/pages/index.astro
Catalogue section renders category cards directly from CATEGORIES array, displaying live item counts per category from categoryCounts, linking each card to ${base}c/${cat.id}/, and using Icon components for category imagery.
Feature grid section
website/src/pages/index.astro
Feature grid titled "Why a control plane" renders three feature cards with icon imagery and supporting descriptive text.
Learn and Cookbook card section
website/src/pages/index.astro
Two-card section for Learning Centre and Cookbook, each with image, alt text, description, and base-prefixed links for navigation.
Layout and responsive styling
website/src/pages/index.astro
Complete stylesheet rewrite covering hero layout, stats grid styling, catalogue card hover transitions, feature and learn/cookbook card presentation, icon and avatar rendering, and responsive mobile behaviour.
Onboarding page redirect
website/src/pages/onboarding.astro
New onboarding page that reads BASE_URL from environment and redirects requests to the getting-started page using Astro.redirect.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

Suggested labels

priority:normal, status:needs-review, area:theme, type:feature, lang:js, lang:css, meta:needs-changelog, area:assets

Suggested reviewers

  • krugazul
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly describes the main change: wiring all five homepage blocks to live data, which matches the core objective of this phase-05 implementation.
Linked Issues check ✅ Passed The PR addresses all key requirements from #861: all five blocks implemented, live data wired from catalogue.ts, category cards show live counts, stats strip configured correctly, wapuu images included, and responsive design verified.
Out of Scope Changes check ✅ Passed All changes directly support issue #861 objectives. The onboarding.astro redirect to getting-started is a minor scope addition that supports better site navigation without deviating from homepage implementation.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Description check ✅ Passed The PR description comprehensively covers all required sections with clear detail: linked issues, changelog with all categories, thorough risk assessment, comprehensive testing instructions, and complete checklist.

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

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/ag-p05-homepage

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.

@github-actions github-actions Bot added status:needs-review Awaiting code review type:feature Feature or enhancement priority:normal Default priority area:assets Assets (images, fonts, static files) type:chore Chore / small hygiene change labels Jun 6, 2026
@coderabbitai coderabbitai Bot requested a review from krugazul June 6, 2026 21:11
@github-actions github-actions Bot added the meta:needs-changelog Requires a changelog entry before merge label Jun 6, 2026
Copy link
Copy Markdown
Contributor

@gemini-code-assist gemini-code-assist Bot left a comment

Choose a reason for hiding this comment

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

Code Review

This pull request redesigns the homepage (index.astro) with a new layout, updated styling, and direct links to the Learning Centre and Cookbook. It also adds a new SVG asset (wapuu-rocket.svg) and a redirect page for onboarding (onboarding.astro). The review feedback suggests optimizing imports and data retrieval in index.astro by reusing the pre-calculated categoryCounts instead of filtering ITEMS directly, and adding -webkit- vendor prefixes to mask-image for better cross-browser compatibility.

Important

The consumer version of Gemini Code Assist on GitHub is being sunset. Starting June 18, 2026, new organization installations will be blocked, and all code review activity will officially cease on July 17, 2026.
For more details on the timeline and next steps, please review the Help Documentation.

import AwesomeGithubButton from "../components/AwesomeGithub/AwesomeGithubButton.astro";
import AwesomeGithubCard from "../components/AwesomeGithub/AwesomeGithubCard.astro";
import Icon from "../components/AwesomeGithub/Icon.astro";
import { CATEGORIES, ITEMS, getCategoryCounts } from "../lib/catalogue";
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

Since ITEMS is only used to calculate the prompt count (which can be retrieved directly from categoryCounts), removing its usage means ITEMS is no longer needed. Removing it from the import list keeps the imports clean.

import { CATEGORIES, getCategoryCounts } from "../lib/catalogue";

Comment on lines +7 to +8
const promptCount = ITEMS.filter((item) => item.cat === "prompts").length;
const categoryCounts = getCategoryCounts();
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

Instead of filtering the entire ITEMS array again to find the count of prompts, you can reuse the already computed categoryCounts object. This avoids an extra full traversal of the ITEMS array, improving performance and consistency.

const categoryCounts = getCategoryCounts();
const promptCount = categoryCounts["prompts"] || 0;

linear-gradient(90deg, var(--hair) 1px, transparent 1px);
background-size: 56px 56px;
opacity: 0.5;
mask-image: radial-gradient(ellipse 80% 60% at 50% 0%, var(--c-true-black) 0%, transparent 75%);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

medium

The mask-image property is not fully supported in all browsers (such as older versions of Safari and iOS Safari) without the -webkit- prefix. Adding -webkit-mask-image ensures cross-browser compatibility.

    -webkit-mask-image: radial-gradient(ellipse 80% 60% at 50% 0%, var(--c-true-black) 0%, transparent 75%);
    mask-image: radial-gradient(ellipse 80% 60% at 50% 0%, var(--c-true-black) 0%, transparent 75%);

@coderabbitai coderabbitai Bot added area:theme Theme & styles lang:js JavaScript/TypeScript lang:css Stylesheets (CSS/Sass/etc.) labels Jun 6, 2026
Copy link
Copy Markdown
Member Author

@ashleyshaw ashleyshaw left a comment

Choose a reason for hiding this comment

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

Codex review: no blockers.

Checks completed:

  • Homepage now matches the five-block spec and uses live catalogue data.
  • Wapuu assets are present and the new onboarding alias resolves correctly.
  • Build passes after the final overlay layering fix.

Residual risk:

  • The requested Copilot/Codex/Gemini reviewer identities cannot be assigned via GitHub here because they are not collaborators on this repository.

@github-actions github-actions Bot removed the type:chore Chore / small hygiene change label Jun 6, 2026
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

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

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 783a4a1ed6

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

</p>

<div class="hero-ctas">
<a class="btn-primary" href={`${base}onboarding/`}>
Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P2 Badge Point the primary CTA at the real destination

In this static Astro build, Astro.redirect() generates /onboarding/index.html as a meta-refresh interstitial with a 2-second delay, so the homepage’s primary “Start here” CTA now sends users to a redirect page before they reach the existing /getting-started/ content. Since the destination is unchanged and the previous CTA linked directly there, point this CTA at ${base}getting-started/ or add a real host-level redirect for /onboarding/.

Useful? React with 👍 / 👎.

Copy link
Copy Markdown
Contributor

@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.

🧹 Nitpick comments (2)
website/src/pages/index.astro (2)

6-8: ⚡ Quick win

Consider deriving promptCount from categoryCounts to avoid redundant iteration.

Both line 7 and getCategoryCounts() iterate through the entire ITEMS array. You could swap the order and derive promptCount from categoryCounts instead:

 const base = import.meta.env.BASE_URL;
-const promptCount = ITEMS.filter((item) => item.cat === "prompts").length;
 const categoryCounts = getCategoryCounts();
+const promptCount = categoryCounts["prompts"] || 0;

This keeps things DRY and performs a single pass over the items. 🎯

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@website/src/pages/index.astro` around lines 6 - 8, Compute categoryCounts
first by calling getCategoryCounts() and then derive promptCount from that
result (e.g., use categoryCounts["prompts"] or the appropriate property) instead
of filtering ITEMS again; this removes the redundant ITEMS iteration done by
promptCount and keeps a single pass through ITEMS via getCategoryCounts(), so
update the order of the calls and the promptCount assignment to reference
categoryCounts.

43-43: ⚡ Quick win

Use dynamic catalogue count for better maintainability.

The hardcoded 8 matches the current number of categories, but if CATEGORIES changes in future, this stat will drift. Consider making it dynamic:

-            <div class="n">8</div>
+            <div class="n">{CATEGORIES.length}</div>

Keeps it honest if you ever add that ninth catalogue! 📊

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@website/src/pages/index.astro` at line 43, Replace the hardcoded "8" in the
statistic element with a dynamic count derived from the CATEGORIES array: import
or reference the CATEGORIES constant used by the site and render
CATEGORIES.length inside the <div class="n"> element (or compute a derived
variable like categoryCount in the frontmatter) so the displayed catalogue count
always reflects the actual number of categories.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Nitpick comments:
In `@website/src/pages/index.astro`:
- Around line 6-8: Compute categoryCounts first by calling getCategoryCounts()
and then derive promptCount from that result (e.g., use
categoryCounts["prompts"] or the appropriate property) instead of filtering
ITEMS again; this removes the redundant ITEMS iteration done by promptCount and
keeps a single pass through ITEMS via getCategoryCounts(), so update the order
of the calls and the promptCount assignment to reference categoryCounts.
- Line 43: Replace the hardcoded "8" in the statistic element with a dynamic
count derived from the CATEGORIES array: import or reference the CATEGORIES
constant used by the site and render CATEGORIES.length inside the <div
class="n"> element (or compute a derived variable like categoryCount in the
frontmatter) so the displayed catalogue count always reflects the actual number
of categories.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 247f41b5-e3b0-4d92-a7d9-de8290025830

📥 Commits

Reviewing files that changed from the base of the PR and between 0485d9d and 783a4a1.

⛔ Files ignored due to path filters (3)
  • website/public/assets/wapuus/wapuu-astropuu.png is excluded by !**/*.png
  • website/public/assets/wapuus/wapuu-rocket.svg is excluded by !**/*.svg
  • website/public/assets/wapuus/wapuu-yoduu.png is excluded by !**/*.png
📒 Files selected for processing (2)
  • website/src/pages/index.astro
  • website/src/pages/onboarding.astro
📜 Review details
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: Testing
  • GitHub Check: check
  • GitHub Check: coderabbit-gate
🔇 Additional comments (6)
website/src/pages/onboarding.astro (1)

2-4: LGTM!

website/src/pages/index.astro (5)

15-61: LGTM!


91-135: LGTM!


180-471: LGTM!


74-86: Ensure every CATEGORIES[].id is included in the /c/[type]/ static route params
website/src/pages/c/[type]/index.astro generates pages from getAvailableResourceTypes().map(t => ({ params: { type: t.type } })), while the catalogue cards link to ${base}c/${cat.id}/ for: agents, instructions, prompts, skills, hooks, workflows, plugins, tools. This will only be safe if getAvailableResourceTypes() (via RESOURCE_TYPES) includes matching t.type values for all of those ids; otherwise some cards could link to routes that aren’t generated.


140-174: Learn/Cookbook cards: check link routes + confirm wapuu image assets 🐾

  • The referenced wapuu images are present under website/public/assets/wapuus/: wapuu-yoduu.png and wapuu-rocket.svg (so those /assets/wapuus/... URLs won’t explode).
  • The href="${base}learn/" and href="${base}cookbook/" routes depend on Astro pages existing at website/src/pages/learn/index.astro and website/src/pages/cookbook/index.astro; the earlier route check didn’t actually confirm those filenames.

@github-actions github-actions Bot added area:documentation Docs & guides lang:md Markdown content/docs labels Jun 6, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Jun 6, 2026

🔍 Reviewer Summary for PR #862

CI Status:success
Files changed: 6
Risk Distribution: 0 critical, 0 high, 2 medium, 4 low

Recommendations

  • Ready to proceed pending human review

@ashleyshaw ashleyshaw enabled auto-merge June 6, 2026 21:18
@ashleyshaw ashleyshaw merged commit 2f937e4 into develop Jun 6, 2026
24 checks passed
@ashleyshaw ashleyshaw deleted the feat/ag-p05-homepage branch June 6, 2026 21:18
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:assets Assets (images, fonts, static files) area:documentation Docs & guides area:theme Theme & styles lang:css Stylesheets (CSS/Sass/etc.) lang:js JavaScript/TypeScript lang:md Markdown content/docs meta:needs-changelog Requires a changelog entry before merge priority:normal Default priority status:needs-review Awaiting code review type:feature Feature or enhancement

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Phase 05] Homepage — all 5 blocks wired to live data

1 participant