<?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: Thiago Fogaca</title>
    <description>The latest articles on DEV Community by Thiago Fogaca (@thiagofogaca).</description>
    <link>https://dev.to/thiagofogaca</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4058510%2F518403ad-c697-4168-9c2f-b66856c50a16.png</url>
      <title>DEV Community: Thiago Fogaca</title>
      <link>https://dev.to/thiagofogaca</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/thiagofogaca"/>
    <language>en</language>
    <item>
      <title>Grandma's Recipes: Building a Cozy Recipe Landing Page with React &amp; Vite</title>
      <dc:creator>Thiago Fogaca</dc:creator>
      <pubDate>Sun, 02 Aug 2026 00:37:05 +0000</pubDate>
      <link>https://dev.to/thiagofogaca/grandmas-recipes-building-a-cozy-recipe-landing-page-with-react-vite-hj5</link>
      <guid>https://dev.to/thiagofogaca/grandmas-recipes-building-a-cozy-recipe-landing-page-with-react-vite-hj5</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for &lt;a href="https://dev.to/challenges/frontend-2026-07-29"&gt;Frontend Challenge - Comfort Food Edition, Perfect Landing&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5auw2r7z1pbag25xi2fg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5auw2r7z1pbag25xi2fg.png" alt="Grandma's Recipes Site" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fynw380mw1afx6hlkj8qo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fynw380mw1afx6hlkj8qo.png" alt="Grandma's Recipes Site mobile" width="403" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For this challenge, I created &lt;strong&gt;Grandma's Recipes&lt;/strong&gt;, a responsive landing page inspired by handwritten family cookbooks and the comfort of homemade food.&lt;/p&gt;

&lt;p&gt;Rather than building a traditional restaurant website, I wanted to capture the feeling of opening a recipe notebook that's been passed down through generations. The interface uses warm colors, subtle animations, illustrated recipe cards, and a notebook-inspired aesthetic to create a cozy experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frl7q3gjvmvb8lv48y986.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Frl7q3gjvmvb8lv48y986.png" alt="Recipe Gride" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Responsive design&lt;/li&gt;
&lt;li&gt;Light/Dark mode&lt;/li&gt;
&lt;li&gt;Live recipe search&lt;/li&gt;
&lt;li&gt;Category filters&lt;/li&gt;
&lt;li&gt;"Surprise Me!" random recipe button&lt;/li&gt;
&lt;li&gt;Favorite recipes saved with Local Storage&lt;/li&gt;
&lt;li&gt;Accessible recipe modal&lt;/li&gt;
&lt;li&gt;Scroll reveal animations using the Intersection Observer API&lt;/li&gt;
&lt;li&gt;Fully responsive layout&lt;/li&gt;
&lt;li&gt;Semantic HTML and accessibility best practices&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Tech Stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;React 19&lt;/li&gt;
&lt;li&gt;Vite&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;Local Storage&lt;/li&gt;
&lt;li&gt;Intersection Observer API&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh6jjbgw5y7wrc0ejq4al.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fh6jjbgw5y7wrc0ejq4al.png" alt="Recipe Modal" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Demo&lt;/strong&gt;&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://thiagofogaca25.github.io/Grandma_Recipes-Front_End_Challenge/" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;thiagofogaca25.github.io&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;GitHub Repository&lt;/strong&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/thiagofogaca25" rel="noopener noreferrer"&gt;
        thiagofogaca25
      &lt;/a&gt; / &lt;a href="https://github.com/thiagofogaca25/Grandma_Recipes-Front_End_Challenge" rel="noopener noreferrer"&gt;
        Grandma_Recipes-Front_End_Challenge
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Este é um projeto enviado ao Frontend Challenge - Comfort Food Edition, Perfect Landing.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Grandma's Recipes&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A single-page React app for a family recipe collection — built with React 19, Vite, and plain CSS (no UI libraries).&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Run it&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install
npm run dev&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Build for production:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm run build&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Output goes to &lt;code&gt;dist/&lt;/code&gt;, ready to deploy to GitHub Pages, Vercel, or Netlify.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What's inside&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hero&lt;/strong&gt; with an illustrated, hand-pinned recipe index card as the signature visual element&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;8 full recipes&lt;/strong&gt; (ingredients + steps + a short story note each) across Breakfast, Lunch, Dinner, Dessert, Snack&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live search&lt;/strong&gt; by title and &lt;strong&gt;category filters&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Surprise Me!"&lt;/strong&gt; button that opens a random recipe from the current filter&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Favorites&lt;/strong&gt;, saved to &lt;code&gt;localStorage&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recipe detail modal&lt;/strong&gt; with full ingredients and steps, keyboard-accessible (Escape to close, focus trap on open)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Light/dark theme toggle&lt;/strong&gt;, persisted to &lt;code&gt;localStorage&lt;/code&gt; and defaulting to the system preference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scroll-reveal animations&lt;/strong&gt; via &lt;code&gt;IntersectionObserver&lt;/code&gt; — no animation library&lt;/li&gt;
&lt;li&gt;Fully responsive: 4 → 2 →…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/thiagofogaca25/Grandma_Recipes-Front_End_Challenge" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Development Journey
&lt;/h2&gt;

&lt;p&gt;My goal was to build a polished frontend experience while keeping the project lightweight and free of unnecessary dependencies.&lt;/p&gt;

&lt;p&gt;The application includes complete recipe details displayed in an accessible modal, a dark mode with persistence, recipe search, category filters, favorites, and smooth scroll animations—all implemented without additional UI or animation libraries.&lt;/p&gt;

&lt;p&gt;To speed up the creative process, I used AI as a supporting tool in a few specific areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Generating the recipe illustrations&lt;/strong&gt; used throughout the interface.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Brainstorming fictional recipes and their content.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Helping organize ideas and structure the project during development.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The implementation itself—including the React components, application logic, styling, responsive layout, accessibility, state management, and overall frontend development—was built by me.&lt;/p&gt;

&lt;p&gt;One of my goals was to spend less time creating assets and more time focusing on what this challenge evaluates most: frontend development, user experience, accessibility, and code quality. Using AI for visual assets and creative inspiration allowed me to dedicate more time to building and refining the application.&lt;/p&gt;

&lt;p&gt;I also enjoyed keeping the project dependency-light. Features like the scroll reveal animations were built with the native &lt;strong&gt;Intersection Observer API&lt;/strong&gt;, while favorites are persisted using &lt;strong&gt;Local Storage&lt;/strong&gt;, resulting in a fast and simple application.&lt;/p&gt;

&lt;p&gt;Before publishing, I completed a production build to verify everything compiled successfully and tested the interface in both light and dark themes.&lt;/p&gt;

&lt;p&gt;This challenge was a great opportunity to practice React component architecture, responsive design, accessibility, and creating a polished user experience.&lt;/p&gt;

&lt;p&gt;Thanks for reading! I'd love to hear your feedback.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>frontendchallenge</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
