Repository: michaelnji/gemma_fx
Pull request #4: Development
Author: login: michaelnji
Created: 2025-05-16T05:15:00Z | Merged: 2025-05-16T05:17:17Z

## Summary by Sourcery

Refine global site UI elements across multiple components by updating styling, spacing, and typography for improved consistency and responsiveness.

Enhancements:
- Standardize navbar link styles with unified hover, focus, and active classes and simplify markup across desktop and mobile menus.
- Revamp Hero component with updated padding, grid layout, background colors, borders, and image sources in featured and popular sections.
- Adjust article detail page container widths and enhance main heading typography and sizing.
- Increase heading sizes in CustomHeading component to strengthen visual hierarchy.


Diff:
diff --git a/components/CustomHeading.vue b/components/CustomHeading.vue
index 1b85511..641c562 100644
--- a/components/CustomHeading.vue
+++ b/components/CustomHeading.vue
@@ -10,13 +10,13 @@ const style = computed(() => props.value.style)
 </script>
 <template>
     <div>
-        <h2 v-if="style === 'h2'" class="font-bold font-display text-3xl md:text-4xl">
+        <h2 v-if="style === 'h2'" class="font-bold font-display text-4xl md:text-5xl">
             <slot></slot>
         </h2>
-        <h3 v-if="style === 'h3'" class="font-bold font-display text-2xl md:text-3xl">
+        <h3 v-if="style === 'h3'" class="font-bold font-display text-3xl md:text-2xl">
             <slot></slot>
         </h3>
-        <h4 v-if="style === 'h4'" class=" font-bold font-display text-xl md:text-2xl">
+        <h4 v-if="style === 'h4'" class=" font-bold font-display text-2xl md:text-3xl">
             <slot></slot>
         </h4>
     </div>
diff --git a/components/Hero.vue b/components/Hero.vue
index c4bce89..b2230a6 100644
--- a/components/Hero.vue
+++ b/components/Hero.vue
@@ -5,15 +5,15 @@
     <div class="">
         <div class="   flex flex-col lg:flex-row ">
 
-            <div class="xl:pl-12 pt-12 px-3 lg:!w-4/5 w-full">
+            <div class="xl:pl-12 pt-3 px-3 md:px-6 lg:!w-4/5 w-full">
                 <h1 class="text-4xl lg:text-5xl  font-bold font-condensed  ">Featured Today</h1>
                 <div class="mt-6 grid grid-cols-1 md:grid-cols-2 xl:grid-cols-3 gap-4">
 
                     <div v-for="i, key in useRange(1, 3)" :class="{ 'md:!hidden xl:!inline': key === 0 }"
-                        class="w-full bg-base-300">
-                        <img src="https://cdn.sanity.io/images/1h1ec0mp/production/461903a5ddd82afd7385fdf8c59167e6ad259313-1400x700.png?w=1400&h=700&fm=webp"
-                            alt="" class="mb-2">
-                        <div class="p-4">
+                        class="w-full bg-base-100 ">
+                        <img src="https://cdn.sanity.io/images/1h1ec0mp/production/7ffff7d3b32c2618e1ce84651feedab71d25223e-1400x700.png?w=1400&h=700&fm=webp"
+                            alt="" class="">
+                        <div class="p-4 border-l-2 border-r-2 border-b-2 border-base-300">
                             <p class="uppercase tracking-widest mb-2">BY GEMTRADER</p>
                             <h2 class="font-black text-pretty font-display  text-2xl">Your mentors
                                 are
@@ -57,10 +57,10 @@
             </div>
             <div class="lg:w-2/5 w-full !min-h-full bg-white text-black p-3 py-12">
                 <h1 class="text-5xl font-bold font-condensed  ">Popular</h1>
-                <div class="mt-3 grid grid-cols-1 md:grid-cols-2 lg:grid-cols-1 gap-3">
-                    <div v-for="i, key in useRange(0, 4)" :key="key" class="flex bg-stone-100 p-3 gap-x-2">
+                <div class="mt-6 grid grid-cols-1  gap-3">
+                    <div v-for="i, key in useRange(0, 4)" :key="key" class="flex  bg-stone-500/5 p-4 gap-x-2">
 
-                        <div class="w-full">
+                        <div class="">
                             <NuxtTime :datetime="new Date()" year="numeric" month="long" day="numeric"
                                 class="mb-6 opacity-85 text-sm" />
                             <h2 class="text-lg/tight xl:text-xl/tight font-display opacity-90   ">How to setup
@@ -75,6 +75,8 @@
                             </p>
 
                         </div>
+                        <img src="https://cdn.sanity.io/images/1h1ec0mp/production/461903a5ddd82afd7385fdf8c59167e6ad259313-1400x700.png?w=1400&h=700&fm=webp"
+                            alt="" class=" hidden md:inline lg:hidden xl:inline w-[10rem] rounded-xl">
                     </div>
 
                 </div>
diff --git a/components/Navbar.vue b/components/Navbar.vue
index b6b2e51..559d3d2 100644
--- a/components/Navbar.vue
+++ b/components/Navbar.vue
@@ -55,33 +55,37 @@ function toggleMenu() {
             <div
                 class="navbar-center max-w-max text-base xl:text-lg font-semibold hidden lg:flex rounded-none bg-base-300 px-3 py-1">
                 <ul class="menu menu-horizontal items-center-safe px-1 gap-x-3">
-                    <li class=" rounded-none hover:bg-base-100/10  hover:text-base-content transition duration-150"
-                        :class="{ '!bg-primary  !text-primary-content': route.path === '/' }">
-                        <NuxtLink to="/">Home</NuxtLink>
+                    <li>
+                        <NuxtLink
+                            :class="{ '!bg-primary focus:!bg-primary focus:!text-primary-content active:!bg-primary active:!text-primary-content  !text-primary-content': route.path === '/' }"
+                            class=" rounded-none hover:bg-primary/10  hover:text-primary transition duration-150"
+                            to="/">Home</NuxtLink>
                     </li>
 
-                    <li class=" rounded-none hover:bg-base-100/10  hover:text-base-content transition duration-150"
-                        :class="{ '!bg-primary  !text-primary-content': route.path === '/articles' }">
-                        <NuxtLink to="/articles">Articles</NuxtLink>
+                    <li>
+                        <NuxtLink
+                            :class="{ '!bg-primary focus:!bg-primary focus:!text-primary-content active:!bg-primary active:!text-primary-content  !text-primary-content': route.path === '/articles' }"
+                            class=" rounded-none hover:bg-primary/10  hover:text-primary transition duration-150"
+                            to="/articles">Articles</NuxtLink>
                     </li>
-                    <!-- <li class=" rounded-none hover:bg-base-100/10  hover:text-base-content transition duration-150"
-                        :class="{ '!bg-primary  !text-primary-content': route.path === '/tutorials' }">
-                        <NuxtLink to="/tutorials">Tutorials
 
-                        </NuxtLink>
-                    </li> -->
-                    <li class=" rounded-none hover:bg-base-100/10  hover:text-base-content transition duration-150"
-                        :class="{ '!bg-primary  !text-primary-content': route.path === '/prop-firms' }">
-                        <NuxtLink to="/prop-firms">Prop firm reviews</NuxtLink>
+                    <li>
+                        <NuxtLink
+                            :class="{ '!bg-primary focus:!bg-primary focus:!text-primary-content active:!bg-primary active:!text-primary-content  !text-primary-content': route.path === '/prop-firms' }"
+                            class=" rounded-none hover:bg-primary/10  hover:text-primary transition duration-150"
+                            to="/prop-firms">Prop firm reviews</NuxtLink>
                     </li>
-                    <li class=" rounded-none hover:bg-base-100/10  hover:text-base-content transition duration-150"
-                        :class="{ '!bg-primary  !text-primary-content': route.path.includes('/promo') }">
-                        <NuxtLink to="/promo">Promo codes <span class="badge badge-sm badge-neutral"
+                    <li>
+                        <NuxtLink
+                            :class="{ '!bg-primary focus:!bg-primary focus:!text-primary-content active:!bg-primary active:!text-primary-content  !text-primary-content': route.path.includes('/promo') }"
+                            class=" rounded-none hover:bg-primary/10  hover:text-primary transition duration-150"
+                            to="/promo">Promo codes <span class="badge badge-sm badge-primary"
                                 :class="{ '!bg-black !text-primary !shadow-none !border-primary': route.path.includes('/promo') }">new!</span>
                         </NuxtLink>
                     </li>
                     <li>
-                        <NuxtLink to="/newsletter" class="btn btn-secondary font-sans lg:btn-sm  ">
+                        <NuxtLink class="  btn btn-secondary font-sans lg:btn-sm   transition duration-150"
+                            to="/newsletter">
                             <Icon name="ph:envelope-duotone" /> Join our newsletter
 
                         </NuxtLink>
@@ -108,39 +112,47 @@ function toggleMenu() {
                             isMenuToggled = false
                             toggleMenu()
 }" class=" rounded-none hover:bg-base-100/10  text-base hover:text-base-content transition duration-150"
-                            :class="{ '!bg-primary  !text-primary-content': route.path === '/' }">
-                            <NuxtLink to="/">Home</NuxtLink>
+                            :class="{ '!bg-primary focus:!bg-primary focus:!text-primary-content active:!bg-primary active:!text-primary-content  !text-primary-content': route.path === '/' }">
+                            <NuxtLink
+                                class=" rounded-none hover:bg-primary/10  hover:text-primary transition duration-150"
+                                to="/">Home</NuxtLink>
                         </li>
 
                         <li @click="() => {
                             isMenuToggled = false
                             toggleMenu()
-}" class=" rounded-none hover:bg-base-100/10  text-base hover:text-base-content transition duration-150"
-                            :class="{ '!bg-primary  !text-primary-content': route.path === '/articles' }">
-                            <NuxtLink to="/articles">Articles</NuxtLink>
+                        }" class=" rounded-none hover:bg-base-100/10  text-base hover:text-base-content transition duration-150"
+                            :class="{ '!bg-primary focus:!bg-primary focus:!text-primary-content active:!bg-primary active:!text-primary-content  !text-primary-content': route.path === '/articles' }">
+                            <NuxtLink
+                                class=" rounded-none hover:bg-primary/10  hover:text-primary transition duration-150"
+                                to="/articles">Articles</NuxtLink>
                         </li>
                         <!-- <li @click="() => {
                             isMenuToggled = false
                             toggleMenu()
 }" class=" rounded-none hover:bg-base-100/10  text-base hover:text-base-content transition duration-150"
-                            :class="{ '!bg-primary  !text-primary-content': route.path === '/tutorials' }">
-                            <NuxtLink to="/tutorials">Tutorials
+                            :class="{ '!bg-primary focus:!bg-primary focus:!text-primary-content active:!bg-primary active:!text-primary-content  !text-primary-content': route.path === '/tutorials' }">
+                            <NuxtLink class=" rounded-none hover:!/10bg-primary  hoveprimary-content focus:!bg-primary focus:!text-primary-content active:!bg-primary active:!text-primary-content transition duration-150" to="/tutorials">Tutorials
 
                             </NuxtLink>
                         </li> -->
                         <li @click="() => {
                             isMenuToggled = false
                             toggleMenu()
-}" class=" rounded-none hover:bg-base-100/10  text-base hover:text-base-content transition duration-150"
-                            :class="{ '!bg-primary  !text-primary-content': route.path === '/prop-firms' }">
-                            <NuxtLink to="/prop-firms">Prop firm reviews</NuxtLink>
+                        }" class=" rounded-none hover:bg-base-100/10  text-base hover:text-base-content transition duration-150"
+                            :class="{ '!bg-primary focus:!bg-primary focus:!text-primary-content active:!bg-primary active:!text-primary-content  !text-primary-content': route.path === '/prop-firms' }">
+                            <NuxtLink
+                                class=" rounded-none hover:bg-primary/10  hover:text-primary transition duration-150"
+                                to="/prop-firms">Prop firm reviews</NuxtLink>
                         </li>
                         <li @click="() => {
                             isMenuToggled = false
                             toggleMenu()
-}" class=" rounded-none hover:bg-base-100/10  text-base hover:text-base-content transition duration-150"
-                            :class="{ '!bg-primary  !text-primary-content': route.path.includes('/promo') }">
-                            <NuxtLink to="/promo">Promo codes <span class="badge badge-sm badge-accent"
+                        }" class=" rounded-none hover:bg-base-100/10  text-base hover:text-base-content transition duration-150"
+                            :class="{ '!bg-primary focus:!bg-primary focus:!text-primary-content active:!bg-primary active:!text-primary-content  !text-primary-content': route.path.includes('/promo') }">
+                            <NuxtLink
+                                class=" rounded-none hover:bg-primary/10  hover:text-primary transition duration-150"
+                                to="/promo">Promo codes <span class="badge badge-sm badge-accent"
                                     :class="{ '!bg-black !text-primary !shadow-none !border-primary': route.path.includes('/promo') }">new!</span>
                             </NuxtLink>
                         </li>
@@ -148,7 +160,8 @@ function toggleMenu() {
                             isMenuToggled = false
                             toggleMenu()
                         }" class="mt-4">
-                            <NuxtLink to="/newsletter" class="btn btn-secondary font-sans lg:btn-sm  ">
+                            <NuxtLink class=" btn btn-secondary font-sans lg:btn-sm   transition duration-150"
+                                to="/newsletter">
                                 <Icon name="ph:envelope-duotone" /> Join our newsletter
 
                             </NuxtLink>
diff --git a/pages/articles/[slug].vue b/pages/articles/[slug].vue
index d5450c8..057317c 100644
--- a/pages/articles/[slug].vue
+++ b/pages/articles/[slug].vue
@@ -38,7 +38,7 @@ onMounted(async () => {
 <template>
     <div class="min-h-screen">
         <div class="inset-0 bg-radial-pattern px-6">
-            <div class="container xl:max-w-[90rem] mx-auto pt-12 pb-6">
+            <div class="container xl:max-w-[85rem] mx-auto pt-12 pb-6">
                 <div class="skeleton mb-6 bg-base-200 w-[10rem] h-[2rem]" v-if="isLoading"></div>
                 <div v-if="!isLoading && post"
                     class="p-[1px] bg-gradient-to-tl from-primary via-secondary to-success w-max mb-3">
@@ -52,7 +52,8 @@ onMounted(async () => {
                 </div>
                 <div class="skeleton mb-3 bg-base-200 w-full h-[6rem]" v-if="isLoading"></div>
                 <div class="skeleton   w-full h-[6rem]" v-if="isLoading"></div>
-                <h1 v-if="!isLoading && post" class=" lg:text-8xl md:text-7xl  text-4xl !text-pretty  font-display">
+                <h1 v-if="!isLoading && post"
+                    class=" lg:text-9xl md:text-8xl  text-6xl !text-pretty font-bold  font-condensed">
                     {{ post?.title }}
                 </h1>
 
@@ -88,7 +89,7 @@ onMounted(async () => {
                         <div v-if="!isLoading && post && post.tags" v-for="tag, k in post?.tags">
                             <nuxt-link :to="`/articles?tag=${spacesToDashes(tag.title)}`"><span
                                     class=" badge   bg-stone-800 ">{{
-                                    spacesToDashes(tag.title) }}</span></nuxt-link>
+                                        spacesToDashes(tag.title) }}</span></nuxt-link>
                         </div>
                         <div v-for="i in useRange(0, 2)" class="skeleton   w-[4.5rem] h-[2rem]" v-if="isLoading">
                         </div>
@@ -109,7 +110,7 @@ onMounted(async () => {
 
             </div>
         </div>
-        <div class="lg:pt-12 w-full xl:max-w-[90rem] px-6  mx-auto lg:flex gap-x-12">
+        <div class="lg:pt-12 w-full xl:max-w-[85rem] px-6  mx-auto lg:flex gap-x-12">
             <div class="lg:w-3/5">
                 <div class="skeleton   w-full h-[12.5rem] md:h-[25rem]" v-if="isLoading">
                 </div>


Reviews:
user: login: sourcery-ai[bot]
body: Hey @michaelnji - I've reviewed your changes and they look great!

<details>
<summary>Here's what I looked at during the review</summary>

- 🟡 **General issues**: 4 issues found
- 🟢 **Testing**: all looks good
- 🟢 **Documentation**: all looks good
</details>

***

<details>
<summary>Sourcery is free for open source - if you like our reviews please consider sharing them ✨</summary>

- [X](https://twitter.com/intent/tweet?text=I%20just%20got%20an%20instant%20code%20review%20from%20%40SourceryAI%2C%20and%20it%20was%20brilliant%21%20It%27s%20free%20for%20open%20source%20and%20has%20a%20free%20trial%20for%20private%20code.%20Check%20it%20out%20https%3A//sourcery.ai)
- [Mastodon](https://mastodon.social/share?text=I%20just%20got%20an%20instant%20code%20review%20from%20%40SourceryAI%2C%20and%20it%20was%20brilliant%21%20It%27s%20free%20for%20open%20source%20and%20has%20a%20free%20trial%20for%20private%20code.%20Check%20it%20out%20https%3A//sourcery.ai)
- [LinkedIn](https://www.linkedin.com/sharing/share-offsite/?url=https://sourcery.ai)
- [Facebook](https://www.facebook.com/sharer/sharer.php?u=https://sourcery.ai)

</details>

<sub>
Help me be more useful! Please click 👍 or 👎 on each comment and I'll use the feedback to improve your reviews.
</sub>
state: COMMENTED
author_association: NONE
submitted_at: 2025-05-16T05:18:08Z

Review comments:
diff_hunk: @@ -108,47 +112,56 @@ function toggleMenu() {
                             isMenuToggled = false
                             toggleMenu()
 }" class=" rounded-none hover:bg-base-100/10  text-base hover:text-base-content transition duration-150"
-                            :class="{ '!bg-primary  !text-primary-content': route.path === '/' }">
-                            <NuxtLink to="/">Home</NuxtLink>
+                            :class="{ '!bg-primary focus:!bg-primary focus:!text-primary-content active:!bg-primary active:!text-primary-content  !text-primary-content': route.path === '/' }">
+                            <NuxtLink
+                                class=" rounded-none hover:bg-primary/10  hover:text-primary transition duration-150"
+                                to="/">Home</NuxtLink>
                         </li>
 
                         <li @click="() => {
                             isMenuToggled = false
                             toggleMenu()
-}" class=" rounded-none hover:bg-base-100/10  text-base hover:text-base-content transition duration-150"
-                            :class="{ '!bg-primary  !text-primary-content': route.path === '/articles' }">
-                            <NuxtLink to="/articles">Articles</NuxtLink>
+                        }" class=" rounded-none hover:bg-base-100/10  text-base hover:text-base-content transition duration-150"
+                            :class="{ '!bg-primary focus:!bg-primary focus:!text-primary-content active:!bg-primary active:!text-primary-content  !text-primary-content': route.path === '/articles' }">
+                            <NuxtLink
+                                class=" rounded-none hover:bg-primary/10  hover:text-primary transition duration-150"
+                                to="/articles">Articles</NuxtLink>
                         </li>
                         <!-- <li @click="() => {
                             isMenuToggled = false
                             toggleMenu()
 }" class=" rounded-none hover:bg-base-100/10  text-base hover:text-base-content transition duration-150"
-                            :class="{ '!bg-primary  !text-primary-content': route.path === '/tutorials' }">
-                            <NuxtLink to="/tutorials">Tutorials
+                            :class="{ '!bg-primary focus:!bg-primary focus:!text-primary-content active:!bg-primary active:!text-primary-content  !text-primary-content': route.path === '/tutorials' }">
+                            <NuxtLink class=" rounded-none hover:!/10bg-primary  hoveprimary-content focus:!bg-primary focus:!text-primary-content active:!bg-primary active:!text-primary-content transition duration-150" to="/tutorials">Tutorials
path: components/Navbar.vue
user: login: sourcery-ai[bot]
body: **issue:** Class name contains syntax errors

Replace the malformed `hover:!/10bg-primary` and `hoveprimary-content` with `hover:bg-primary/10` and `hover:text-primary`.
created_at: 2025-05-16T05:18:08Z
author_association: NONE
diff_hunk: @@ -55,33 +55,37 @@ function toggleMenu() {
             <div
                 class="navbar-center max-w-max text-base xl:text-lg font-semibold hidden lg:flex rounded-none bg-base-300 px-3 py-1">
                 <ul class="menu menu-horizontal items-center-safe px-1 gap-x-3">
-                    <li class=" rounded-none hover:bg-base-100/10  hover:text-base-content transition duration-150"
-                        :class="{ '!bg-primary  !text-primary-content': route.path === '/' }">
-                        <NuxtLink to="/">Home</NuxtLink>
+                    <li>
+                        <NuxtLink
+                            :class="{ '!bg-primary focus:!bg-primary focus:!text-primary-content active:!bg-primary active:!text-primary-content  !text-primary-content': route.path === '/' }"
+                            class=" rounded-none hover:bg-primary/10  hover:text-primary transition duration-150"
path: components/Navbar.vue
user: login: sourcery-ai[bot]
body: **suggestion:** DRY: Repeated class strings across links

Extract the common static and active classes into a computed property or helper to reduce duplication and simplify maintenance.
created_at: 2025-05-16T05:18:08Z
author_association: NONE
diff_hunk: @@ -55,33 +55,37 @@ function toggleMenu() {
             <div
                 class="navbar-center max-w-max text-base xl:text-lg font-semibold hidden lg:flex rounded-none bg-base-300 px-3 py-1">
                 <ul class="menu menu-horizontal items-center-safe px-1 gap-x-3">
-                    <li class=" rounded-none hover:bg-base-100/10  hover:text-base-content transition duration-150"
-                        :class="{ '!bg-primary  !text-primary-content': route.path === '/' }">
-                        <NuxtLink to="/">Home</NuxtLink>
+                    <li>
path: components/Navbar.vue
user: login: sourcery-ai[bot]
body: **question:** Active state styling moved off `<li>` may affect UX

Keep the active styling on the <li> to preserve the full clickable area and avoid styling inconsistencies.
created_at: 2025-05-16T05:18:08Z
author_association: NONE
diff_hunk: @@ -10,13 +10,13 @@ const style = computed(() => props.value.style)
 </script>
 <template>
     <div>
-        <h2 v-if="style === 'h2'" class="font-bold font-display text-3xl md:text-4xl">
+        <h2 v-if="style === 'h2'" class="font-bold font-display text-4xl md:text-5xl">
             <slot></slot>
         </h2>
-        <h3 v-if="style === 'h3'" class="font-bold font-display text-2xl md:text-3xl">
path: components/CustomHeading.vue
user: login: sourcery-ai[bot]
body: **issue:** Inverted mobile and desktop sizes for `h3`

Swap the classes to text-2xl md:text-3xl so the text size increases at the md breakpoint.
created_at: 2025-05-16T05:18:08Z
author_association: NONE

PR comments:
user: login: sourcery-ai[bot]
created_at: 2025-05-16T05:15:05Z
body: <!-- Generated by sourcery-ai[bot]: start review_guide -->

## Reviewer's Guide

This PR primarily updates UI styling across multiple Vue components: it consolidates and enhances NavBar link state classes, refines the Hero section layout and card designs, adjusts container sizing and typography on the article page, and recalibrates heading font scales in the CustomHeading component.

### File-Level Changes

| Change | Details | Files |
| ------ | ------- | ----- |
| Unified and enhanced navigation link styling with dynamic state classes | <ul><li>Moved styling from <li> to NuxtLink and consolidated class definitions</li><li>Replaced base hover states with hover:bg-primary/10 and added focus/active state classes</li><li>Standardized styling between desktop and mobile menus</li></ul> | `components/Navbar.vue` |
| Redesigned Hero section layout and styling | <ul><li>Adjusted paddings and grid gaps for responsive breakpoints</li><li>Updated background color classes and swapped in new image URLs</li><li>Added borders to cards and introduced conditional image visibility</li></ul> | `components/Hero.vue` |
| Refined article page container sizing and typography | <ul><li>Reduced container max-width and tweaked horizontal padding</li><li>Increased post title font size, weight, and typography classes</li><li>Adjusted tag badge rendering and spacing</li></ul> | `pages/articles/[slug].vue` |
| Adjusted heading size scale in CustomHeading component | <ul><li>Bumped up h2/h3/h4 font-size classes for better hierarchy</li><li>Realigned responsive text sizes across breakpoints</li></ul> | `components/CustomHeading.vue` |

---

<details>
<summary>Tips and commands</summary>

#### Interacting with Sourcery

- **Trigger a new review:** Comment `@sourcery-ai review` on the pull request.
- **Continue discussions:** Reply directly to Sourcery's review comments.
- **Generate a GitHub issue from a review comment:** Ask Sourcery to create an
  issue from a review comment by replying to it. You can also reply to a
  review comment with `@sourcery-ai issue` to create an issue from it.
- **Generate a pull request title:** Write `@sourcery-ai` anywhere in the pull
  request title to generate a title at any time. You can also comment
  `@sourcery-ai title` on the pull request to (re-)generate the title at any time.
- **Generate a pull request summary:** Write `@sourcery-ai summary` anywhere in
  the pull request body to generate a PR summary at any time exactly where you
  want it. You can also comment `@sourcery-ai summary` on the pull request to
  (re-)generate the summary at any time.
- **Generate reviewer's guide:** Comment `@sourcery-ai guide` on the pull
  request to (re-)generate the reviewer's guide at any time.
- **Resolve all Sourcery comments:** Comment `@sourcery-ai resolve` on the
  pull request to resolve all Sourcery comments. Useful if you've already
  addressed all the comments and don't want to see them anymore.
- **Dismiss all Sourcery reviews:** Comment `@sourcery-ai dismiss` on the pull
  request to dismiss all existing Sourcery reviews. Especially useful if you
  want to start fresh with a new review - don't forget to comment
  `@sourcery-ai review` to trigger a new review!

#### Customizing Your Experience

Access your [dashboard](https://app.sourcery.ai) to:
- Enable or disable review features such as the Sourcery-generated pull request
  summary, the reviewer's guide, and others.
- Change the review language.
- Add, remove or edit custom review instructions.
- Adjust other review settings.

#### Getting Help

- [Contact our support team](mailto:support@sourcery.ai) for questions or feedback.
- Visit our [documentation](https://docs.sourcery.ai) for detailed guides and information.
- Keep in touch with the Sourcery team by following us on [X/Twitter](https://x.com/SourceryAI), [LinkedIn](https://www.linkedin.com/company/sourcery-ai/) or [GitHub](https://github.com/sourcery-ai).

</details>

<!-- Generated by sourcery-ai[bot]: end review_guide -->
author_association: NONE
user: login: vercel[bot]
created_at: 2025-05-16T05:15:05Z
body: [vc]: #WwbZJD8ORORQNSmvwWmzUYcNnjVuoU2YaXruioa+j7I=:eyJpc01vbm9yZXBvIjp0cnVlLCJ0eXBlIjoiZ2l0aHViIiwicHJvamVjdHMiOlt7Im5hbWUiOiJnZW1tYS1meCIsImxpdmVGZWVkYmFjayI6eyJyZXNvbHZlZCI6MCwidW5yZXNvbHZlZCI6MCwidG90YWwiOjAsImxpbmsiOiJnZW1tYS1meC1naXQtZGV2ZWxvcG1lbnQtbWljaGFlbG5qaTM0Z21haWxjb21zLXByb2plY3RzLnZlcmNlbC5hcHAifSwiaW5zcGVjdG9yVXJsIjoiaHR0cHM6Ly92ZXJjZWwuY29tL21pY2hhZWxuamkzNGdtYWlsY29tcy1wcm9qZWN0cy9nZW1tYS1meC84RWdpcnRkVWZOaWRxN0pmQkt1TUhjeWpYRVB4IiwicHJldmlld1VybCI6ImdlbW1hLWZ4LWdpdC1kZXZlbG9wbWVudC1taWNoYWVsbmppMzRnbWFpbGNvbXMtcHJvamVjdHMudmVyY2VsLmFwcCIsIm5leHRDb21taXRTdGF0dXMiOiJERVBMT1lFRCJ9XX0=
**The latest updates on your projects**. Learn more about [Vercel for Git ↗︎](https://vercel.link/github-learn-more)

| Name | Status | Preview | Comments | Updated (UTC) |
| :--- | :----- | :------ | :------- | :------ |
| **gemma-fx** | ✅ Ready ([Inspect](https://vercel.com/michaelnji34gmailcoms-projects/gemma-fx/8EgirtdUfNidq7JfBKuMHcyjXEPx)) | [Visit Preview](https://gemma-fx-git-development-michaelnji34gmailcoms-projects.vercel.app) | 💬 [**Add feedback**](https://vercel.live/open-feedback/gemma-fx-git-development-michaelnji34gmailcoms-projects.vercel.app?via=pr-comment-feedback-link) | May 16, 2025 5:15am |


author_association: NONE