<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ri ki</title>
    <description>The latest articles on DEV Community by ri ki (@ri_ki_251ca3db361b527f552).</description>
    <link>https://dev.to/ri_ki_251ca3db361b527f552</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3254628%2F01910ab6-3abe-4011-b19d-64c403214989.png</url>
      <title>DEV Community: ri ki</title>
      <link>https://dev.to/ri_ki_251ca3db361b527f552</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ri_ki_251ca3db361b527f552"/>
    <language>en</language>
    <item>
      <title>Umemura Farm Website – Devlog #41: LP is completed!</title>
      <dc:creator>ri ki</dc:creator>
      <pubDate>Thu, 24 Jul 2025 00:31:53 +0000</pubDate>
      <link>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-41-lp-is-completed-g97</link>
      <guid>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-41-lp-is-completed-g97</guid>
      <description>&lt;p&gt;&lt;strong&gt;Project Launch: Umemura Farm - Award-Winning Asparagus Direct Sales &amp;amp; Farmstay Experience LP&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What is this LP about?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I just completed a comprehensive landing page for Umemura Farm, a family-run asparagus farm in Saga, Japan. This project showcases a unique dual value proposition: premium asparagus direct sales (sweet enough to eat raw, gold award winner from vegetable sommelier competitions) and exclusive farmstay experiences (limited to one group per day).&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Target Audience:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Health-conscious consumers seeking premium vegetables&lt;/li&gt;
&lt;li&gt;Families interested in authentic farm-to-table experiences
&lt;/li&gt;
&lt;li&gt;Travelers looking for genuine Japanese countryside stays&lt;/li&gt;
&lt;li&gt;Gift buyers seeking unique, high-quality Japanese produce&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Background &amp;amp; Challenges:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Saga Prefecture is Japan's 2nd largest asparagus producer but lacks recognition&lt;/li&gt;
&lt;li&gt;Limited direct-from-farm sales despite superior quality to market products&lt;/li&gt;
&lt;li&gt;Need to compete against established Hokkaido asparagus reputation&lt;/li&gt;
&lt;li&gt;Complex seasonal variations (spring/summer/autumn harvests) requiring different marketing approaches&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Tech Stack:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js - SEO optimization and dynamic seasonal content management&lt;/li&gt;
&lt;li&gt;Tailwind CSS - Mobile-first responsive design with consistent styling&lt;/li&gt;
&lt;li&gt;next-intl - Seamless Japanese/English localization&lt;/li&gt;
&lt;li&gt;Seasonal Logic System - Month-based automatic content switching&lt;/li&gt;
&lt;li&gt;WebP Optimization - Fast mobile loading for Japanese users&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Features&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Psychology-Based 10-Stage AIDCA Framework&lt;br&gt;
Following Attention → Interest → Desire → Conviction → Action methodology:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Impact Hero Section - "Eat it raw and be amazed! Sweeter than fruit asparagus"&lt;/li&gt;
&lt;li&gt;Urgency Section - Seasonal limited campaigns with bonus quantities&lt;/li&gt;
&lt;li&gt;Problem Identification - "Think thick asparagus only comes from Hokkaido?"&lt;/li&gt;
&lt;li&gt;Solution Presentation - Direct-from-farm freshness and quality advantages&lt;/li&gt;
&lt;li&gt;Value Proof - Gold awards, 4.8★ customer ratings, social proof&lt;/li&gt;
&lt;li&gt;Emotional Value - Producer couple's success story from abandoned farmland&lt;/li&gt;
&lt;li&gt;Risk Reduction - Quality guarantees, support systems, storage instructions&lt;/li&gt;
&lt;li&gt;Price Justification - Spring water cultivation, craftsmanship, express shipping value&lt;/li&gt;
&lt;li&gt;Action Induction - Multi-EC integration, LINE ordering options&lt;/li&gt;
&lt;li&gt;Final Push - Limited bonuses, stock warnings for decision acceleration&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Seasonal Adaptation System&lt;br&gt;
Dynamic content switching based on harvest periods:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Seasonal content logic example
const getSeasonalContent = (currentMonth) =&amp;gt; {
  if (currentMonth &amp;gt;= 3 &amp;amp;&amp;amp; currentMonth &amp;lt;= 5) {
    return {
      period: "Spring Shoots",
      description: "Sweetest &amp;amp; richest flavor, premium L-size",
      campaign: "Spring-limited tenderness experience"
    }
  } else if (currentMonth &amp;gt;= 6 &amp;amp;&amp;amp; currentMonth &amp;lt;= 8) {
    return {
      period: "Summer Shoots", 
      description: "Refreshing sweet, early summer L-size",
      campaign: "100g bonus campaign active"
    }
  }
  // Fall shoots &amp;amp; winter pre-order conditions
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key Differentiators&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Raw Edible Appeal: Specific sugar content (8.5+ Brix) data&lt;/li&gt;
&lt;li&gt;Freshness Management: Harvest→immediate refrigeration→express shipping process&lt;/li&gt;
&lt;li&gt;Variety Expertise: Greenhouse-grown "Welcome" variety technical advantages
&lt;/li&gt;
&lt;li&gt;Regional Uniqueness: Imari Hachimandake spring water cultivation environment&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Design Philosophy&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Color System: Asparagus green (#2a9d8f) for CTAs, alternating white/pale yellow backgrounds&lt;/li&gt;
&lt;li&gt;Typography: "Shippori Mincho" serif font for authentic Japanese feel&lt;/li&gt;
&lt;li&gt;Watercolor Aesthetics: Soft, natural palette reflecting organic farming approach&lt;/li&gt;
&lt;li&gt;Privacy-First: Watercolor speech bubbles for testimonials without revealing personal information&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Challenges&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Complex Seasonal Product Marketing
Challenge: Asparagus has distinct characteristics across spring/summer/autumn harvests, difficult for general consumers to understand.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Solution: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visual seasonal timeline with taste profiles and availability&lt;/li&gt;
&lt;li&gt;Month-based automatic content switching system&lt;/li&gt;
&lt;li&gt;LINE notification system for harvest timing alerts&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Competing Against Hokkaido Brand Dominance
Challenge: Overcoming "Asparagus = Hokkaido" consumer perception.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Solution:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Concrete comparison data (shipping costs, delivery time, freshness)&lt;/li&gt;
&lt;li&gt;Authority positioning with "Saga Prefecture: 2nd largest producer nationally"&lt;/li&gt;
&lt;li&gt;Direct-from-farm benefits emphasizing eliminated middleman margins&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Balancing Emotional vs. Logical Value
Challenge: Quality data alone insufficient for differentiation; emotion alone insufficient for trust.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Solution:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Producer story (abandoned farmland success) for emotional appeal&lt;/li&gt;
&lt;li&gt;Gold awards, sugar content data, storage instructions for logical confidence&lt;/li&gt;
&lt;li&gt;Customer testimonials for experience-based social proof&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Multi-EC Integration Purchase Flow
Challenge: Managing Rakuten, Tabechoku, Pocket Marche, BASE, LINE ordering distinctions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Solution:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;User-type-specific channel recommendations&lt;/li&gt;
&lt;li&gt;"Online difficulty → LINE cash-on-delivery" accommodation&lt;/li&gt;
&lt;li&gt;3-step purchase flow for cognitive load reduction&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Behavioral Economics &amp;amp; Psychology Implementation&lt;/p&gt;

&lt;p&gt;Scarcity Principle&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Until end of June," "Limited stock remaining," "Harvest quantity limited"&lt;/li&gt;
&lt;li&gt;Natural scarcity value through seasonal limitations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Social Proof&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Vegetable Sommelier Gold Award, JA Excellence Award authority&lt;/li&gt;
&lt;li&gt;4.8★ customer ratings with authentic reviews&lt;/li&gt;
&lt;li&gt;"Sweeter than Hokkaido" comparative testimonials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Loss Aversion&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Don't buy now, you'll lose out," "Risk of missing peak season"&lt;/li&gt;
&lt;li&gt;Limited-time bonus campaign exclusivity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cognitive Load Reduction&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;3-step purchase process simplification&lt;/li&gt;
&lt;li&gt;FAQ condensed to 5 essential items&lt;/li&gt;
&lt;li&gt;Progressive information disclosure avoiding overwhelm&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Localization (i18n)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;next-intl Implementation Strategy&lt;br&gt;
Cultural Adaptation beyond simple translation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Japanese Version: Detailed seasonal information, producer story emphasis, privacy considerations&lt;/li&gt;
&lt;li&gt;English Version: "Sweet enough to eat raw" surprise experience focus, gift market appeal&lt;/li&gt;
&lt;li&gt;SEO Optimization: Language-specific keyword targeting and meta optimization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Translation Management&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Seasonal content automatic multilingual switching&lt;/li&gt;
&lt;li&gt;Consistent agricultural terminology across languages&lt;/li&gt;
&lt;li&gt;Cultural sensitivity in privacy handling and quality standards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Market Segmentation&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Primary: Japanese domestic customers familiar with farm reputation&lt;/li&gt;
&lt;li&gt;Growing: International tourists seeking authentic farm experiences&lt;/li&gt;
&lt;li&gt;Gift Market: Overseas customers sending premium Japanese produce&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Links&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Pages site: [&lt;a href="https://rikki3322.github.io/nouenUmemura/" rel="noopener noreferrer"&gt;https://rikki3322.github.io/nouenUmemura/&lt;/a&gt;]
&lt;/li&gt;
&lt;li&gt;EC Integrations: Rakuten, Tabechoku, Pocket Marche, BASE&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Feedback Welcome!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This project tackles the unique challenge of "Traditional Agriculture DX" - a distinctly Japanese issue of digitizing traditional farming businesses. I'd especially value your thoughts on:&lt;/p&gt;

&lt;p&gt;Technical Aspects&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Seasonal Logic Systems: How to efficiently systematize agricultural time-based variations&lt;/li&gt;
&lt;li&gt;Multi-EC Integration: Optimizing purchase flows across different platform characteristics
&lt;/li&gt;
&lt;li&gt;Mobile Optimization: UX design considerations for agricultural sector user behaviors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Marketing Strategy&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regional Branding: Strategies for elevating "Saga Asparagus" recognition against Hokkaido dominance&lt;/li&gt;
&lt;li&gt;Behavioral Economics: Overcoming psychological barriers in agricultural product purchasing&lt;/li&gt;
&lt;li&gt;Competitive Differentiation: Communicating advantages against established regional brands&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cultural &amp;amp; Social Impact  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Direct-from-Farm Promotion: Articulating consumer benefits of eliminating middleman distribution&lt;/li&gt;
&lt;li&gt;Food Education Value: Designing experiences around "raw eating surprise" &lt;/li&gt;
&lt;li&gt;Sustainability: Contributing to small-scale farm business stability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Looking for insights from anyone working in Agriculture×Tech, regional revitalization, or food culture projects. Share your experiences with seasonal products, cultural marketing, or rural business digitization!&lt;/p&gt;




&lt;h1&gt;
  
  
  nextjs, #tailwindcss, #agriculture, #behavioraleconomics, #seasonalcommerce, #japan, #i18n, #mobilefirst, #farmtech
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>Umemura Farm Website – Devlog #40: Fixing i18n Text Styling Issues and Final Touches on My Project</title>
      <dc:creator>ri ki</dc:creator>
      <pubDate>Fri, 18 Jul 2025 23:15:29 +0000</pubDate>
      <link>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-40-fixing-i18n-text-styling-issues-and-final-touches-on-my-project-5b95</link>
      <guid>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-40-fixing-i18n-text-styling-issues-and-final-touches-on-my-project-5b95</guid>
      <description>&lt;p&gt;&lt;strong&gt;Today's Work: Fixing i18n Text Styling with Dynamic Emphasis&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When implementing i18n support, I encountered an issue where parts of the text wrapped in &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; tags for color emphasis did not render correctly. Instead, the raw HTML code appeared on the page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Problem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For example, the JSON data looked like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "text": "10月以降のお申し込みは",
  "emphasis": "翌年発送",
  "textAfter": "のご予約となります。"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But the emphasized part wrapped in &lt;span&gt; tags was not interpreted as HTML and showed literally.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;The Solution&lt;br&gt;
By using the translation hook's raw output combined with conditional rendering, I updated the component as follows:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{t.raw('section5.items').map(
  (
    item: string | { text: string; emphasis: string; textAfter?: string },
    i: number
  ) =&amp;gt; (
    &amp;lt;li key={i}&amp;gt;
      {typeof item === 'string' ? (
        item
      ) : (
        &amp;lt;&amp;gt;
          {item.text}
          &amp;lt;span className="text-red-500"&amp;gt;{item.emphasis}&amp;lt;/span&amp;gt;
          {item.textAfter ?? null}
        &amp;lt;/&amp;gt;
      )}
    &amp;lt;/li&amp;gt;
  )
)}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This way, the emphasis part is properly wrapped in a &lt;span&gt; with the desired styling, and the text renders correctly.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Other Work&lt;br&gt;
Made small refinements to some English expressions throughout the site for better clarity and naturalness.&lt;/p&gt;

&lt;p&gt;No major code or design changes were needed—mostly iterative polishing.&lt;/p&gt;

&lt;p&gt;Wrapping Up&lt;br&gt;
With this fix and minor touch-ups complete, I consider the main development phase of this project finished. This blog series will conclude here.&lt;/p&gt;

&lt;p&gt;Thank you for following along with my journey on this project!&lt;/p&gt;




&lt;p&gt;tags: nextjs, i18n, react, localization, frontend, portfolio&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Umemura Farm Website – Devlog #39: Button Design Fixes and Overcoming Next.js Type Issues on Netlify Deployment</title>
      <dc:creator>ri ki</dc:creator>
      <pubDate>Fri, 18 Jul 2025 02:12:57 +0000</pubDate>
      <link>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-39-button-design-fixes-and-overcoming-nextjs-type-issues-on-2o1o</link>
      <guid>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-39-button-design-fixes-and-overcoming-nextjs-type-issues-on-2o1o</guid>
      <description>&lt;p&gt;&lt;strong&gt;Today's Work: Button Styling and Netlify Deployment Troubleshooting&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Button Design Fix&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fixed the button size by setting &lt;code&gt;width: 56px&lt;/code&gt; and &lt;code&gt;height: 204px&lt;/code&gt; directly in the &lt;code&gt;className&lt;/code&gt; styles for consistent appearance.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Netlify Deployment Challenges with Next.js Types&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I encountered common type-related build errors during deployment related to Next.js’s official &lt;code&gt;LayoutProps&lt;/code&gt; type.&lt;/p&gt;

&lt;p&gt;Key Issues:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The definition of &lt;code&gt;LayoutProps&lt;/code&gt; has likely changed in the latest Next.js 15.x series.&lt;/li&gt;
&lt;li&gt;Specifically, the &lt;code&gt;params&lt;/code&gt; property may sometimes be passed as a Promise (i.e., asynchronous), while normally it is expected to be a simple object like &lt;code&gt;{ locale: string }&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Workarounds Tried:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build without specifying a return type for the layout component (removing &lt;code&gt;Promise&amp;lt;ReactElement&amp;gt;&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;{ locale: string }&lt;/code&gt; type directly for &lt;code&gt;params&lt;/code&gt;. If build errors persist, suspect Next.js type definition changes.&lt;/li&gt;
&lt;li&gt;If the latest Next.js requires asynchronous &lt;code&gt;params&lt;/code&gt;, adjust the typing accordingly or fallback to &lt;code&gt;any&lt;/code&gt; to bypass type errors temporarily.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Deployment Result and 404 Error&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deployment succeeded but the page returned a 404 error.&lt;/li&gt;
&lt;li&gt;Removing the i18n config from &lt;code&gt;next.config.js&lt;/code&gt; resolved the 404 issue:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Removed this block
i18n: {
  locales: ['ja', 'en'],
  defaultLocale: 'ja',
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;tags: nextjs, netlify, typescript, i18n, frontend, portfolio&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Umemura Farm Website – Devlog #38: Implementing Full i18n Support and Tackling Netlify Deploy Errors</title>
      <dc:creator>ri ki</dc:creator>
      <pubDate>Thu, 17 Jul 2025 03:34:46 +0000</pubDate>
      <link>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-38-implementing-full-i18n-support-and-tackling-netlify-deploy-errors-148l</link>
      <guid>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-38-implementing-full-i18n-support-and-tackling-netlify-deploy-errors-148l</guid>
      <description>&lt;p&gt;&lt;strong&gt;Today's Work: i18n Support Across All Pages and Netlify Deployment Troubleshooting&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today, I completed the internationalization (i18n) support for all pages, including creating the necessary translation files (e.g., &lt;code&gt;ja.json&lt;/code&gt; and &lt;code&gt;en.json&lt;/code&gt;).&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Netlify Deployment Error and Diagnosis&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While attempting to deploy the project to Netlify, I encountered a build error caused by a type mismatch in the file &lt;code&gt;src/app/[locale]/layout.tsx&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Error Details:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;params&lt;/code&gt; property was expected to be a &lt;code&gt;Promise&amp;lt;any&amp;gt;&lt;/code&gt;, but a &lt;code&gt;Record&amp;lt;string, string&amp;gt;&lt;/code&gt; was provided.&lt;/li&gt;
&lt;li&gt;This caused the Next.js build to fail, stopping the deployment process.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Despite this issue being unresolved, progress is ongoing.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tomorrow's Plan&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Continue debugging and fixing the Netlify deployment error.&lt;/li&gt;
&lt;li&gt;Adjust the design of buttons that display vertically in Japanese (vertical text), and rotate English buttons 90 degrees clockwise for a better UX.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;This project is progressing steadily, with multilingual support shaping up well, and deployment hurdles actively being addressed.&lt;/p&gt;




&lt;p&gt;tags: nextjs, i18n, netlify, typescript, frontend, portfolio&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Umemura Farm Website – Devlog #37: Continuing i18n Integration and Visual Improvements with blurDataURL</title>
      <dc:creator>ri ki</dc:creator>
      <pubDate>Wed, 16 Jul 2025 02:16:38 +0000</pubDate>
      <link>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-37-continuing-i18n-integration-and-visual-improvements-with-86d</link>
      <guid>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-37-continuing-i18n-integration-and-visual-improvements-with-86d</guid>
      <description>&lt;p&gt;&lt;strong&gt;Today's Work: Continuing i18n Support and Visual Enhancements&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today, I continued working on the internationalization (i18n) implementation started yesterday.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Using blurDataURL for Image Optimization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I integrated &lt;code&gt;blurDataURL&lt;/code&gt; to improve image loading UX by showing a low-resolution placeholder while the main image loads. This helps create a smoother visual experience.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Visual Consistency and Responsive Design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Alongside i18n, I focused on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unifying the appearance across sections to ensure a cohesive design
&lt;/li&gt;
&lt;li&gt;Improving the responsive layout for better usability on various devices&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Next Steps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tomorrow, I plan to continue these improvements, progressing further with i18n support and refining the design consistency and responsiveness.&lt;/p&gt;

&lt;p&gt;The project is moving steadily forward!&lt;/p&gt;




&lt;p&gt;tags: nextjs, i18n, blurDataURL, responsive-design, portfolio&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Umemura Farm Website – Devlog #36: Adding English Support and Starting i18n Integration</title>
      <dc:creator>ri ki</dc:creator>
      <pubDate>Tue, 15 Jul 2025 04:57:58 +0000</pubDate>
      <link>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-36-adding-english-support-and-starting-i18n-integration-4gi3</link>
      <guid>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-36-adding-english-support-and-starting-i18n-integration-4gi3</guid>
      <description>&lt;p&gt;&lt;strong&gt;Today's Work: Beginning Internationalization (i18n)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today, I began the process of making the site multilingual by adding support for an English version of the website.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;i18n Setup and Progress&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To enable internationalization, I started with the basics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Created translation files:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;ja.json&lt;/code&gt; for Japanese
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;en.json&lt;/code&gt; for English&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Implemented language-switching logic using &lt;code&gt;next-intl&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Added a JP / EN language toggle to the navigation bar.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;At this point, I’ve completed translation for three sections of the website. I’ll continue updating the remaining sections step by step.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Debugging Monthly Text Logic&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There is a debug page used to test whether month-based seasonal content displays correctly. Now that multilingual support is involved, I need to think about how to handle this logic in both languages.&lt;/p&gt;




&lt;p&gt;For now, I’m choosing to prioritize simpler sections first, and will come back to the more complex parts after completing the basics.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Next Steps&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Continue translating additional sections
&lt;/li&gt;
&lt;li&gt;Plan how to handle debug logic with i18n
&lt;/li&gt;
&lt;li&gt;Start reviewing seasonal and conditional text rendering in both languages
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The foundation is set, and I'm excited to bring full multilingual support to the site!&lt;/p&gt;




&lt;p&gt;tags: nextjs, i18n, multilingual, portfolio, react&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Umemura Farm Website – Devlog #35: Deploying to Netlify and Performance Improvements with Video Compression</title>
      <dc:creator>ri ki</dc:creator>
      <pubDate>Mon, 14 Jul 2025 02:14:39 +0000</pubDate>
      <link>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-35-deploying-to-netlify-and-performance-improvements-with-video-1ma4</link>
      <guid>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-35-deploying-to-netlify-and-performance-improvements-with-video-1ma4</guid>
      <description>&lt;p&gt;&lt;strong&gt;Today’s Work: Deploying to Netlify and Performance Optimization&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today, I deployed my project to Netlify and tested the performance in the production environment.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Performance Bottleneck: Hero Video Loading Time&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I noticed the initial page load was slow, mainly due to the hero video size. To address this, I used FFmpeg to compress the video, reducing its size from 5.58MB to 3.4MB, a significant improvement.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Image Optimization on Farm Stay Page&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the farm-stay page, I optimized the hero image by specifying explicit width and height instead of using the &lt;code&gt;full&lt;/code&gt; size. Here is the updated &lt;code&gt;&amp;lt;Image&amp;gt;&lt;/code&gt; component:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
&amp;lt;Image
  src="/assets/images/stay/hero2.webp"
  alt="Hero background"
  width={800}
  height={600}
  className="object-cover w-full h-full"
  priority
/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This change helped with layout stability and loading speed.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Lighthouse Scores&lt;/strong&gt;&lt;br&gt;
After these optimizations, my Lighthouse scores were:&lt;/p&gt;

&lt;p&gt;Performance: 85&lt;/p&gt;

&lt;p&gt;Accessibility: 89&lt;/p&gt;

&lt;p&gt;Best Practices: 82&lt;/p&gt;

&lt;p&gt;SEO: 91&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Project Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With these final improvements, I consider this project complete.&lt;/p&gt;

&lt;p&gt;It was a great learning experience focusing on deployment and real-world performance tuning.&lt;br&gt;
I’m excited to apply these skills in future projects!&lt;/p&gt;




&lt;p&gt;tags: nextjs, netlify, performance, video-compression, portfolio&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Umemura Farm Website – Devlog #34: Fixing Scroll Animation and Hydration Mismatch in Next.js</title>
      <dc:creator>ri ki</dc:creator>
      <pubDate>Sun, 13 Jul 2025 01:00:22 +0000</pubDate>
      <link>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-34-fixing-scroll-animation-and-hydration-mismatch-in-nextjs-mla</link>
      <guid>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-34-fixing-scroll-animation-and-hydration-mismatch-in-nextjs-mla</guid>
      <description>&lt;p&gt;&lt;strong&gt;Today’s Work: Fixing Scroll Animation Hover and Hydration Mismatch Error&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I spent today fixing the scroll animation so that it properly pauses on hover. During this process, I encountered a common Next.js issue called the "hydration mismatch" error.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Causes Hydration Mismatch?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This error happens when the HTML rendered on the server does not match what React renders on the client during hydration. In my case, the root cause was:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Embedding dynamic values like &lt;code&gt;imageWidth&lt;/code&gt; and &lt;code&gt;images.length&lt;/code&gt; (which can differ between server and client) directly into CSS styles.&lt;/li&gt;
&lt;li&gt;Using &lt;code&gt;&amp;lt;style jsx global&amp;gt;&lt;/code&gt; with calculated pixel values in &lt;code&gt;@keyframes&lt;/code&gt; animations.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Key Points and Solutions&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Use percentage values (%) instead of dynamic pixel (&lt;code&gt;px&lt;/code&gt;) values inside &lt;code&gt;@keyframes&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
For example, instead of &lt;code&gt;translateX(-${imageWidth * images.length}px)&lt;/code&gt;, use &lt;code&gt;translateX(-100%)&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Control animation duration and other dynamic properties via inline styles rather than global CSS to avoid discrepancies between server and client.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code&gt;transform: translateX(-50%)&lt;/code&gt; means the images scroll by half their total width because the images are duplicated to create an infinite scrolling effect.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Pause on hover by toggling a CSS class that changes &lt;code&gt;animation-play-state&lt;/code&gt;. However, if the hover state differs between server and client renders, it will cause hydration issues.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Since I wasn’t using &lt;code&gt;useState&lt;/code&gt; or &lt;code&gt;useEffect&lt;/code&gt;, some client-side value changes weren’t syncing properly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;Proposed Approach&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Keep the dynamic parts of the animation in inline styles that run only on the client.&lt;/li&gt;
&lt;li&gt;Use fixed CSS animations with percentages in global styles.&lt;/li&gt;
&lt;li&gt;Set the container widths dynamically to match the parent element.&lt;/li&gt;
&lt;li&gt;Avoid embedding dynamic pixel values inside &lt;code&gt;@keyframes&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;&lt;strong&gt;Deployment Challenges&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After applying these fixes, I deployed the site to Netlify to verify behavior in production. However, the root folder was still set to an old LP project I had worked on before, so Netlify wasn’t serving this project correctly.&lt;/p&gt;

&lt;p&gt;To fix this, I deleted the old project folder locally and removed the repository on GitHub to reset it properly.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Next Steps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tomorrow, I plan to redeploy to Netlify with the correct folder and check the page speed and animation behavior in the live environment.&lt;/p&gt;




&lt;p&gt;Fixing hydration mismatches in Next.js animations is tricky, but taking care to separate dynamic client-only values from static CSS is the key to a smooth user experience.&lt;/p&gt;




&lt;p&gt;tags: nextjs, react, animation, performance, hydration, portfolio&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Umemura Farm Website – Devlog #33: Performance vs. Perception: Rethinking Lighthouse Scores</title>
      <dc:creator>ri ki</dc:creator>
      <pubDate>Sat, 12 Jul 2025 08:41:47 +0000</pubDate>
      <link>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-33-performance-vs-perception-rethinking-lighthouse-scores-3m02</link>
      <guid>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-33-performance-vs-perception-rethinking-lighthouse-scores-3m02</guid>
      <description>&lt;p&gt;&lt;strong&gt;Today’s Work: Performance Cleanup and Scroll Animation Refactor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today was one of those days where development leads to more reflection than resolution.&lt;br&gt;&lt;br&gt;
I began with the goal of optimizing my portfolio site for performance, particularly focusing on Lighthouse scores. But what I discovered shifted my perspective.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Attempted JS Cleanup (With Minimal Gain)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I reviewed the codebase for any unused JavaScript that could be removed to lighten the page.&lt;br&gt;&lt;br&gt;
To my surprise, there weren’t any significant candidates. &lt;br&gt;
I then tried to address Lighthouse suggestions one by one. Ironically, the more optimizations I applied, the heavier the page became, and the Lighthouse score barely changed.&lt;/p&gt;

&lt;p&gt;Out of curiosity, I ran Lighthouse on one of the reference sites I’ve been using for inspiration, their score was only around 60.&lt;/p&gt;

&lt;p&gt;This got me thinking, 'How much should I take it seriously?'&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Shifting Focus: From Scores to Experience&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From today forward, I’ve decided not to chase perfection in Lighthouse.&lt;br&gt;&lt;br&gt;
Instead, I’ll focus on actual user experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fast initial loading
&lt;/li&gt;
&lt;li&gt;Smooth page transitions
&lt;/li&gt;
&lt;li&gt;Intuitive interactions
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After all, a site that feels fast is better than one that only scores fast.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Refactoring Scroll Animation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I refactored the scroll-triggered animation logic into its own reusable file so that it can be imported across multiple components.&lt;br&gt;&lt;br&gt;
The goal was cleaner code and easier maintenance.&lt;/p&gt;




&lt;p&gt;tags: nextjs, performance, frontend, javascript, portfolio&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Umemura Farm Website – Devlog #32: Enhancing UX and Storytelling in My Farm Stay Project</title>
      <dc:creator>ri ki</dc:creator>
      <pubDate>Fri, 11 Jul 2025 02:56:00 +0000</pubDate>
      <link>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-32-enhancing-ux-and-storytelling-in-my-farm-stay-project-1cb</link>
      <guid>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-32-enhancing-ux-and-storytelling-in-my-farm-stay-project-1cb</guid>
      <description>&lt;p&gt;&lt;strong&gt;Today's Progress: Designing with Story and Sensory Experience&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In today’s development session, I focused on enhancing both visual storytelling and user experience in the Farm Stay section of my LP project. The goal was to make the website not just functional, but emotionally resonant.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Hero Section Redesigned with a Personal Touch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The previous hero image for the Farm Stay section featured a generic asparagus photo from Unsplash. However, I recently discovered on the farmer's social media that they had purchased a vintage car. Inspired by this, I replaced the hero image with a scene of the car driving through a rural landscape, a more personal and evocative visual.&lt;/p&gt;

&lt;p&gt;New Catchphrase:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Take a peaceful break at our countryside farm stay.&lt;br&gt;&lt;br&gt;
Experience the luxury of time spent with nature.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This message is designed to evoke warmth, nostalgia, and serenity, all core to the rural experience.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Scroll to Top via Logo Tap&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For better usability, I implemented a feature where tapping the logo scrolls the page to the top. This is especially helpful on mobile where navigation can feel more limited.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Room Description Rewrite&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I updated the room descriptions in the Farm Stay section to enhance sensory storytelling especially around scent and atmosphere.&lt;br&gt;&lt;br&gt;
For example, phrases like &lt;em&gt;“the gentle aroma of tatami”&lt;/em&gt; help visitors imagine the stay more vividly.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Mobile-Only Button Fix&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I noticed a button for mobile-only was not yet included in the centralized &lt;code&gt;button.ts&lt;/code&gt; file.&lt;br&gt;&lt;br&gt;
I added it and refactored the code wherever this button was used to maintain consistency and future maintainability.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What’s Next&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Tomorrow, I’ll run another Lighthouse to evaluate the latest performance state.&lt;br&gt;&lt;br&gt;
Based on the results, I’ll create a roadmap to gradually increase the score and optimize both speed and accessibility.&lt;/p&gt;




&lt;p&gt;Creating a meaningful and performant experience requires more than just code. It’s about crafting a story, connecting with real-world details, and caring about how people feel when they interact with your product.&lt;/p&gt;




&lt;p&gt;tags: nextjs, webdev, design, portfolio, lighthouse&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Umemura Farm Website – Devlog #31: Performance Optimization and Code Refinement in My Next.js Project</title>
      <dc:creator>ri ki</dc:creator>
      <pubDate>Thu, 10 Jul 2025 03:17:31 +0000</pubDate>
      <link>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-31-performance-optimization-and-code-refinement-in-my-nextjs-561g</link>
      <guid>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-31-performance-optimization-and-code-refinement-in-my-nextjs-561g</guid>
      <description>&lt;p&gt;&lt;strong&gt;Today's Work: Performance Improvements and Code Cleanup&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Today I focused on several performance-related tasks as well as refining code structure to enhance user experience and maintainability.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Page Lazy Loading Experiment and Results&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I experimented with lazy-loading to improve initial load performance.&lt;br&gt;&lt;br&gt;
The goal was to prioritize rendering of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Header
&lt;/li&gt;
&lt;li&gt;Footer
&lt;/li&gt;
&lt;li&gt;CTA buttons
&lt;/li&gt;
&lt;li&gt;Hero section
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;while deferring the rest of the page.&lt;/p&gt;

&lt;p&gt;Outcome: Unfortunately, this approach caused the footer to load first on page open, which felt counterintuitive and reduced perceived performance.&lt;br&gt;&lt;br&gt;
After evaluation, I decided to reject this strategy for now.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Optimizing Icon Imports&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Previously, I imported &lt;code&gt;lucid-icon&lt;/code&gt; components separately in each component file.&lt;br&gt;&lt;br&gt;
To improve bundle size and code clarity, I consolidated all imports into a single &lt;code&gt;lucid-icon.ts&lt;/code&gt; module.&lt;/p&gt;

&lt;p&gt;However, I mistakenly used dynamic imports for this module, which caused extremely slow page transitions.&lt;br&gt;&lt;br&gt;
I reverted to a simple static import/export approach, restoring smooth navigation.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Improving EC Site Recommendation Logic&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On the EC site recommendation page, I found that one of the purchase options was missing from the candidate list.&lt;br&gt;&lt;br&gt;
I added the missing option and refined the user questionnaire logic to ensure fair and clear recommendations without bias.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Setting Lighthouse Performance Goals&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I set specific Lighthouse score targets to define clear performance goals for this project.&lt;br&gt;&lt;br&gt;
The benchmark is to outperform the client’s current LP, which helps me prioritize improvements effectively.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tomorrow’s Focus: Unused JavaScript and Font Issues&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identify and handle unused JavaScript to further reduce bundle size and improve load times
&lt;/li&gt;
&lt;li&gt;Continue investigating the font loading issue, which still prevents my specified fonts from rendering correctly&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Performance optimization is an iterative process. Every improvement counts toward a faster, more enjoyable user experience.&lt;/p&gt;




&lt;p&gt;tags: nextjs, performance, frontend, lighthouse, portfolio&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Umemura Farm Website – Devlog #30: Fixing Link Errors, Button Unification, and More UI Enhancements in Next.js</title>
      <dc:creator>ri ki</dc:creator>
      <pubDate>Wed, 09 Jul 2025 02:17:25 +0000</pubDate>
      <link>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-30-fixing-link-errors-button-unification-and-more-ui-54gp</link>
      <guid>https://dev.to/ri_ki_251ca3db361b527f552/umemura-farm-website-devlog-30-fixing-link-errors-button-unification-and-more-ui-54gp</guid>
      <description>&lt;p&gt;&lt;strong&gt;What I Worked On Today&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s a quick rundown of the improvements and bug fixes I tackled today in my Next.js project:&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Link Nesting Error Fix&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I fixed a common Next.js error caused by wrapping an &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; tag inside a &lt;code&gt;&amp;lt;Link&amp;gt;&lt;/code&gt; component.&lt;br&gt;&lt;br&gt;
This triggers a nesting warning like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Warning: &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; cannot appear as a descendant of &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt;..."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Solution: Removed the inner &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; and applied styling/behavior directly on the &lt;code&gt;&amp;lt;Link&amp;gt;&lt;/code&gt; component.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;Button Variant Unification with &lt;code&gt;shadcn/ui&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To make button styling consistent and easier to maintain, I centralized button variants:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
variants: {
  variant: {
    default: 'bg-primary text-primary-foreground hover:bg-primary/90',
    outline: 'border border-input hover:bg-accent hover:text-accent-foreground rounded-md',
    line: 'text-gray-600 hover:text-green-600 transition-colors',
    cta: 'bg-green-600 text-white hover:bg-green-700 shadow-lg hover:shadow-xl',
    ghost: 'bg-transparent hover:bg-gray-100 text-gray-700',
    faqToggle: 'w-full px-6 py-4 text-left flex justify-between items-center hover:bg-gray-50 transition-colors shadow-none hover:shadow-none rounded-md',
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now buttons across the site are easier to update and visually consistent.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Applied Scroll-Based Animations&lt;/strong&gt;&lt;br&gt;
I added a previously built FadeInOnScroll animation component to enhance image interactivity and user experience. Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;FadeInOnScroll&amp;gt;
  &amp;lt;div className="h-48 overflow-hidden bg-gray-100 flex items-center justify-center rounded-lg"&amp;gt;
    &amp;lt;RandomDishImage className="w-full h-full object-cover" /&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/FadeInOnScroll&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes image sections feel more dynamic and engaging.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Added a Favicon (SVG)&lt;/strong&gt;&lt;br&gt;
I finally added a favicon to the site by updating the metadata in the layout:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export const metadata = {
  title: 'うめむら農園｜採れたて新鮮なアスパラを直送',
  description: '新鮮なアスパラガスを農家から直送',
  icons: {
    icon: '/favicon.svg',
  },
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It’s a small touch, but it improves brand recognition and tab visibility.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Up Next: Font Rendering Issue&lt;/strong&gt;&lt;br&gt;
One lingering issue is that custom fonts are not rendering correctly despite being defined in tailwind.config.js and loaded via layout.&lt;br&gt;
Tomorrow, I’ll dig deeper into debugging font fallback and variable font behavior.&lt;/p&gt;




&lt;p&gt;tags: nextjs, shadcn-ui, javascript, frontend, performance&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
