Skip to content

feat: create landing page for template#19

Open
cecco25 wants to merge 6 commits intomainfrom
feat/landing-page
Open

feat: create landing page for template#19
cecco25 wants to merge 6 commits intomainfrom
feat/landing-page

Conversation

@cecco25
Copy link
Contributor

@cecco25 cecco25 commented Mar 19, 2026

This PR introduces the landing page of this project.

@gemini-code-assist
Copy link

Summary of Changes

Hello, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request significantly enhances the project's frontend by introducing a fully functional and styled landing page. It establishes a robust theming infrastructure with CSS variables for both light and dark modes, updates the default typography, and organizes new UI components within a feature-based directory structure. The changes provide a modern and responsive initial user experience for the template.

Highlights

  • Landing Page Implementation: A new landing page has been introduced, comprising a responsive navigation bar and hero sections, replacing the previous placeholder content.
  • Styling and Theming: Extensive CSS variables have been added to globals.css to support a comprehensive theming system, including light and dark modes, custom fonts, and shadow definitions. A new fadeSlideDown animation was also included.
  • Font Updates: The project's default fonts have been switched from Geist to Instrument_Sans, and the dark class is now applied to the body element by default in layout.tsx.
  • Component Structure: New components Hero and Navbar have been created within a dedicated landing feature directory, promoting a modular and feature-based architecture.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for GitHub and other Google products, sign up here.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link

@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 introduces a new landing page, including new components, styling, and layout updates. The overall structure is good, but I've identified a few issues that should be addressed. My feedback includes corrections for font configuration, a hardcoded theme setting, placeholder code cleanup, and improvements to component structure and asset optimization in line with React best practices and the repository's style guide.

Comment on lines +10 to 13
const instrumentMono = Instrument_Sans({
variable: '--font-instrument-mono',
subsets: ['latin']
});

Choose a reason for hiding this comment

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

high

It appears there's a copy-paste error here. You're using Instrument_Sans for both the sans-serif and mono fonts. This will result in incorrect font rendering for any text that should be monospaced. You should import and use a proper monospaced font for instrumentMono.

Suggested change
const instrumentMono = Instrument_Sans({
variable: '--font-instrument-mono',
subsets: ['latin']
});
const instrumentMono = Fira_Code({
variable: '--font-instrument-mono',
subsets: ['latin']
});

Comment on lines +9 to +62
function GithubIcon() {
return (
<svg
className="h-5 w-5"
aria-hidden="true"
xmlns="http://www.w3.org/2000/svg"
fill="currentColor"
viewBox="0 0 24 24"
>
<path
fillRule="evenodd"
d="M12.006 2a9.847 9.847 0 0 0-6.484 2.44 10.32 10.32 0 0 0-3.393 6.17 10.48 10.48 0 0 0 1.317 6.955 10.045 10.045 0 0 0 5.4 4.418c.504.095.683-.223.683-.494 0-.245-.01-1.052-.014-1.908-2.78.62-3.366-1.21-3.366-1.21a2.711 2.711 0 0 0-1.11-1.5c-.907-.637.07-.621.07-.621.317.044.62.163.885.346.266.183.487.426.647.71.135.253.318.476.538.655a2.079 2.079 0 0 0 2.37.196c.045-.52.27-1.006.635-1.37-2.219-.259-4.554-1.138-4.554-5.07a4.022 4.022 0 0 1 1.031-2.75 3.77 3.77 0 0 1 .096-2.713s.839-.275 2.749 1.05a9.26 9.26 0 0 1 5.004 0c1.906-1.325 2.74-1.05 2.74-1.05.37.858.406 1.828.101 2.713a4.017 4.017 0 0 1 1.029 2.75c0 3.939-2.339 4.805-4.564 5.058a2.471 2.471 0 0 1 .679 1.897c0 1.372-.012 2.477-.012 2.814 0 .272.18.592.687.492a10.05 10.05 0 0 0 5.388-4.421 10.473 10.473 0 0 0 1.313-6.948 10.32 10.32 0 0 0-3.39-6.165A9.847 9.847 0 0 0 12.007 2Z"
clipRule="evenodd"
/>
</svg>
);
}

function MenuIcon() {
return (
<svg className="h-5 w-5" fill="none" stroke="currentColor" strokeWidth={2} viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" d="M4 6h16M4 12h16M4 18h16" />
</svg>
);
}

function CloseIcon() {
return (
<svg className="h-5 w-5" fill="none" stroke="currentColor" strokeWidth={2} viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" d="M6 18L18 6M6 6l12 12" />
</svg>
);
}

function NavLogo() {
return (
<Link href="/" className="group flex items-center gap-2.5">
<div className="relative">
<div className="absolute inset-0 rounded-full bg-primary/30 opacity-0 blur-md transition-opacity duration-300 group-hover:opacity-100" />
<Image
src="/mw-logo.png"
alt="Microweb Logo"
width={36}
height={36}
priority
className="relative"
/>
</div>
<span className="bg-linear-to-r from-primary to-accent bg-clip-text text-sm font-bold tracking-widest text-transparent uppercase">
Microweb
</span>
</Link>
);
}

Choose a reason for hiding this comment

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

high

The GithubIcon, MenuIcon, CloseIcon, and NavLogo components are defined inside the Navbar component. This is a React anti-pattern that causes them to be recreated on every render of Navbar, which can lead to performance issues and unexpected behavior. These components should be defined at the top level of the module.

This also relates to the repository style guide rule 6.3 Hoist Static JSX Elements, which advises extracting static content outside of components to avoid re-creation.

References
  1. Rule 6.3 advises extracting static JSX outside components to avoid re-creation on every render. While these are component functions, the same principle applies to prevent performance issues and ensure stable component identity. (link)

return (
<html lang="en">
<body className={`${geistSans.variable} ${geistMono.variable} antialiased`}>{children}</body>
<body className={`${instrumentSans.className} ${instrumentMono.className} dark antialiased`}>

Choose a reason for hiding this comment

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

medium

The dark class is hardcoded on the <body> tag. This forces dark mode for all users and prevents the light theme styles defined in globals.css from being used. To support both light and dark themes, this should be handled dynamically, for example by using a library like next-themes.

Suggested change
<body className={`${instrumentSans.className} ${instrumentMono.className} dark antialiased`}>
<body className={`${instrumentSans.className} ${instrumentMono.className} antialiased`}>

src/app/page.tsx Outdated
Comment on lines +8 to +10
<Hero />
<Hero />
<Hero />

Choose a reason for hiding this comment

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

medium

The <Hero /> component is rendered three times in a row. This appears to be placeholder content for testing and should be removed or replaced with the actual sections of the landing page.

Suggested change
<Hero />
<Hero />
<Hero />
<Hero />

Comment on lines +18 to +22
<path
fillRule="evenodd"
d="M12.006 2a9.847 9.847 0 0 0-6.484 2.44 10.32 10.32 0 0 0-3.393 6.17 10.48 10.48 0 0 0 1.317 6.955 10.045 10.045 0 0 0 5.4 4.418c.504.095.683-.223.683-.494 0-.245-.01-1.052-.014-1.908-2.78.62-3.366-1.21-3.366-1.21a2.711 2.711 0 0 0-1.11-1.5c-.907-.637.07-.621.07-.621.317.044.62.163.885.346.266.183.487.426.647.71.135.253.318.476.538.655a2.079 2.079 0 0 0 2.37.196c.045-.52.27-1.006.635-1.37-2.219-.259-4.554-1.138-4.554-5.07a4.022 4.022 0 0 1 1.031-2.75 3.77 3.77 0 0 1 .096-2.713s.839-.275 2.749 1.05a9.26 9.26 0 0 1 5.004 0c1.906-1.325 2.74-1.05 2.74-1.05.37.858.406 1.828.101 2.713a4.017 4.017 0 0 1 1.029 2.75c0 3.939-2.339 4.805-4.564 5.058a2.471 2.471 0 0 1 .679 1.897c0 1.372-.012 2.477-.012 2.814 0 .272.18.592.687.492a10.05 10.05 0 0 0 5.388-4.421 10.473 10.473 0 0 0 1.313-6.948 10.32 10.32 0 0 0-3.39-6.165A9.847 9.847 0 0 0 12.007 2Z"
clipRule="evenodd"
/>

Choose a reason for hiding this comment

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

medium

The SVG path data for the GithubIcon has excessive precision, which unnecessarily increases the file size. This can be optimized to reduce the bundle size.

This violates rule 6.4 Optimize SVG Precision from the repository style guide.

Suggested change
<path
fillRule="evenodd"
d="M12.006 2a9.847 9.847 0 0 0-6.484 2.44 10.32 10.32 0 0 0-3.393 6.17 10.48 10.48 0 0 0 1.317 6.955 10.045 10.045 0 0 0 5.4 4.418c.504.095.683-.223.683-.494 0-.245-.01-1.052-.014-1.908-2.78.62-3.366-1.21-3.366-1.21a2.711 2.711 0 0 0-1.11-1.5c-.907-.637.07-.621.07-.621.317.044.62.163.885.346.266.183.487.426.647.71.135.253.318.476.538.655a2.079 2.079 0 0 0 2.37.196c.045-.52.27-1.006.635-1.37-2.219-.259-4.554-1.138-4.554-5.07a4.022 4.022 0 0 1 1.031-2.75 3.77 3.77 0 0 1 .096-2.713s.839-.275 2.749 1.05a9.26 9.26 0 0 1 5.004 0c1.906-1.325 2.74-1.05 2.74-1.05.37.858.406 1.828.101 2.713a4.017 4.017 0 0 1 1.029 2.75c0 3.939-2.339 4.805-4.564 5.058a2.471 2.471 0 0 1 .679 1.897c0 1.372-.012 2.477-.012 2.814 0 .272.18.592.687.492a10.05 10.05 0 0 0 5.388-4.421 10.473 10.473 0 0 0 1.313-6.948 10.32 10.32 0 0 0-3.39-6.165A9.847 9.847 0 0 0 12.007 2Z"
clipRule="evenodd"
/>
<path
fillRule="evenodd"
d="M12 2A9.8 9.8 0 0 0 2.2 10.6c0 3.4.9 6.5 2.9 8.6.5.1.7-.2.7-.5v-2c-2.8.6-3.4-1.2-3.4-1.2-.4-1-1.1-1.5-1.1-1.5.8-.6 0-.6 0-.6.9 0 1.4.9 1.4.9.8 1.4 2.1 1 2.6.8.1-.6.4-1 .6-1.4-2.2-.3-4.6-1.1-4.6-5.1 0-1.1.4-2 1-2.8-.1-.3-.5-1.3.1-2.7 0 0 .8-.3 2.7 1a9.3 9.3 0 0 1 5 0c1.9-1.3 2.7-1 2.7-1 .5 1.4.2 2.4.1 2.7.7.7 1 1.6 1 2.8 0 4-2.3 4.8-4.6 5 .4.4.7 1.1.7 2.2v3.3c0 .3.2.6.7.5A9.8 9.8 0 0 0 12 2Z"
clipRule="evenodd"
/>
References
  1. Rule 6.4 states that SVG coordinate precision should be reduced to decrease file size. The current path data uses high precision. (link)

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