Skip to content

Redesign Homepage to Improve User Discovery and Engagement#3

Open
hetul8 wants to merge 12 commits intomainfrom
feat/homepage-redesign-8973994029323305125
Open

Redesign Homepage to Improve User Discovery and Engagement#3
hetul8 wants to merge 12 commits intomainfrom
feat/homepage-redesign-8973994029323305125

Conversation

@hetul8
Copy link
Copy Markdown
Collaborator

@hetul8 hetul8 commented Jan 27, 2026

Redesign Homepage to Improve User Discovery and Engagement

  • Revamped app/page.js to serve as a central hub with a Hero search section, Featured Tools, Stacks Preview, and Latest Posts.
  • Refactored Hero component to include a functional search bar that redirects to /tools with search queries.
  • Updated app/tools/page.js to handle searchParams for filtering on load.
  • Added FeaturedTools, StacksPreview, and LatestPosts components.
  • Verified changes with Playwright tests and visual inspection.

PR created automatically by Jules for task 8973994029323305125 started by @hetul8

google-labs-jules bot and others added 7 commits January 22, 2026 17:42
- Add JSON-LD structured data for WebSite, Organization, SoftwareApplication, CollectionPage, and BlogPosting schemas.
- Enhance metadata across all pages (title, description, OpenGraph, Twitter cards).
- Add `app/sitemap.js` to include dynamic routes for tools, stacks, and blogs.
- Create `app/tools/page.js` (Server Component) with search/filter functionality (Client Component).
- Refactor `app/tool/[slug]/page.js` and `app/stacks/[slug]/page.js` to be Server Components for better SEO, extracting interactive elements to Client Components.
- Improve `StackBuilder` UI and add metadata to `app/stacks/build/page.js`.
- Update `next.config.mjs` to allow external image domains.
- Create `app/admin/subscribers/page.js` to list newsletter subscribers.
- Implement server-side fetching using `resend.contacts.list`.
- Add simple security check via `ADMIN_SECRET` environment variable and `key` query parameter.
- Display leads in a responsive table with status and timestamps.
- Provide a fallback UI for unauthorized access or API errors.
- Create secure Admin layout and login flow (`/admin`).
- Implement CRUD operations for Tools via server actions and filesystem persistence.
- Implement CRUD operations for Blog Posts (MDX) via server actions.
- Migrate Subscriber view to the new Admin layout.
- Install `resend` and `gray-matter` dependencies.
- Refactor Tools Admin to read JSON at runtime, ensuring data freshness.
- Add `app/actions/auth.js`, `app/actions/toolActions.js`, and `app/actions/postActions.js`.
- Add `app/admin` route with protected layout and login.
- Implement server actions for CRUD operations on Tools and Blog Posts.
- Create `app/admin/subscribers` to view Resend contacts.
- Add `resend`, `gray-matter`, and `lucide-react` dependencies.
- Refactor dynamic admin pages for runtime data fetching.
- Secure routes with cookie-based authentication.
- Add `export const dynamic = 'force-dynamic'` to admin layout, login, and dashboard pages to prevent build-time failures from missing env vars/cookies.
- Implement robust error handling with `app/admin/error.js` and `app/admin/not-found.js`.
- Ensure all dependencies (`lucide-react`, `gray-matter`, `resend`) are installed.
- Refactor admin data fetching to be safe for runtime execution.
- Add `ADMIN_SETUP.md` with instructions for configuring environment variables.
- Fix static generation errors by forcing dynamic rendering for admin routes.
- Implement runtime data fetching for Tools pages to fix stale data issues (replaced static import with `fs.readFile`).
- Update `package.json` with missing dependencies (`framer-motion`, `lucide-react`, `gray-matter`, `resend`).
- Refactor images to use `next/image` for better performance and fix linting errors.
- Fix UI crashes in `CardNav` and `ToolIcon` due to missing `use client` directives and dependencies.
- Add `ADMIN_SETUP.md` documentation.
- Revamped `app/page.js` to serve as a central hub with a Hero search section, Featured Tools, Stacks Preview, and Latest Posts.
- Refactored `Hero` component to include a functional search bar that redirects to `/tools` with search queries.
- Updated `app/tools/page.js` to handle `searchParams` for filtering on load.
- Added `FeaturedTools`, `StacksPreview`, and `LatestPosts` components.

Co-authored-by: hetul8 <171814279+hetul8@users.noreply.github.com>
@google-labs-jules
Copy link
Copy Markdown

👋 Jules, reporting for duty! I'm here to lend a hand with this pull request.

When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down.

I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job!

For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with @jules. You can find this option in the Pull Request section of your global Jules UI settings. You can always switch back!

New to Jules? Learn more at jules.google/docs.


For security, I will only act on instructions from the user who triggered this task.

@vercel
Copy link
Copy Markdown

vercel bot commented Jan 27, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Review Updated (UTC)
deepcortex Ready Ready Preview, Comment Jan 27, 2026 2:30pm

Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This PR redesigns the homepage from a simple landing page into a comprehensive hub that showcases AI tools, stacks, and blog content to improve user discovery and engagement.

Changes:

  • Transformed the homepage into a multi-section layout with Hero search, Featured Tools, Stacks Preview, and Latest Posts sections
  • Enhanced the Hero component with a functional search bar and quick filter buttons
  • Updated the tools directory page to accept and handle search parameters from URL navigation

Reviewed changes

Copilot reviewed 6 out of 7 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
package-lock.json Dependency lock file updated with peer dependency marker changes, likely from npm version differences
components/StacksPreview.jsx New component displaying 3 curated stacks plus a "Build Custom Stack" CTA card in a grid layout
components/LatestPosts.jsx New component showing the 3 most recent blog posts with images and excerpts
components/Hero.jsx Refactored from static CTA to interactive search interface with quick category filters
components/FeaturedTools.jsx New component displaying up to 6 featured tools in a grid layout
app/tools/page.js Enhanced to sync search query from URL parameters via useEffect hook
app/page.js Restructured to call new components and fetch blog posts, renamed internal component to HomeContent

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +8 to +11
const featuredTools = toolsData
.filter(t => t.isFeatured)
.sort((a, b) => b.rating - a.rating)
.slice(0, 6);
Copy link

Copilot AI Jan 27, 2026

Choose a reason for hiding this comment

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

The FeaturedTools component is configured to display up to 6 featured tools (line 11), but the tools.json data currently only contains 2 tools with isFeatured: true (cursor-ai and one other). This will result in only 2 tools being displayed in what appears to be designed as a 3-column grid, which may look visually sparse. Consider either: (1) marking 4-6 more tools as featured, (2) falling back to high-rated tools when there aren't enough featured tools, or (3) adjusting the layout to accommodate fewer items. Reference: data/tools.json lines 68 and 730.

Copilot uses AI. Check for mistakes.
<input
type="text"
value={query}
onChange={(e) => setQuery(e.target.value)}
Copy link

Copilot AI Jan 27, 2026

Choose a reason for hiding this comment

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

The search input is missing a proper label for accessibility. While there is a placeholder, screen readers benefit from an explicit label. Consider adding either: (1) a visually hidden label using sr-only class, or (2) an aria-label attribute to the input element. Example: aria-label="Search for AI tools"

Suggested change
onChange={(e) => setQuery(e.target.value)}
onChange={(e) => setQuery(e.target.value)}
aria-label="Search for AI tools"

Copilot uses AI. Check for mistakes.
Comment on lines +40 to +44
<img
src={post.image}
alt={post.title}
className="w-full h-full object-cover group-hover:scale-105 transition-transform duration-500"
/>
Copy link

Copilot AI Jan 27, 2026

Choose a reason for hiding this comment

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

Missing alt attribute on the img element. The alt attribute should describe the blog post image for accessibility purposes and SEO. Consider using the post title as the alt text, similar to how it's done in app/blog/page.js line 39.

Copilot uses AI. Check for mistakes.
Comment on lines +16 to +17
const query = searchParams.get('search');
setSearchQuery(query || '');
Copy link

Copilot AI Jan 27, 2026

Choose a reason for hiding this comment

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

The useEffect hook that syncs searchQuery from URL params (lines 15-18) may cause issues because it sets searchQuery state unconditionally on every searchParams change. This could interfere with the user's typing experience if searchParams change while the user is typing in the search box. Consider adding a condition to only update if the URL search value differs from the current searchQuery state, or use a ref to track whether the change originated from user input vs URL navigation.

Suggested change
const query = searchParams.get('search');
setSearchQuery(query || '');
const query = searchParams.get('search') || '';
setSearchQuery((prev) => (prev !== query ? query : prev));

Copilot uses AI. Check for mistakes.
@@ -0,0 +1,73 @@
import Link from 'next/link';
import { Calendar, ArrowRight, BookOpen } from 'lucide-react';
Copy link

Copilot AI Jan 27, 2026

Choose a reason for hiding this comment

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

Unused import Calendar.

Suggested change
import { Calendar, ArrowRight, BookOpen } from 'lucide-react';
import { ArrowRight, BookOpen } from 'lucide-react';

Copilot uses AI. Check for mistakes.
Co-authored-by: hetul8 <171814279+hetul8@users.noreply.github.com>
- Fix footer positioning by updating app/layout.js to use flex-col and min-h-screen
- Add 'Design & Build by Fluxora Studio' to Footer.jsx
- Mark 6 tools as featured in data/tools.json to populate the Trending section
- Create 5 new MDX blog posts in content/posts/
- Remove duplicate footer from app/page.js

Co-authored-by: hetul8 <171814279+hetul8@users.noreply.github.com>
- Removed `<LightPillar>` animation from homepage to reduce distractions.
- Removed `<SmoothScrolling>` wrapper to restore native scrolling and fix footer visibility issues.
- Updated `Hero` H1 font size for better mobile responsiveness.

Co-authored-by: hetul8 <171814279+hetul8@users.noreply.github.com>
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.

2 participants