Building a Yahoo-Inspired Dashboard in React with Chakra UI

Building a Yahoo-Inspired Dashboard in React with Chakra UI

Creating a dashboard similar to Yahoo's using React JS components with Chakra UI involves structuring your application into modular, reusable components while leveraging Chakra UI for styling and layout. Below, I will outline a basic structure for such a dashboard, including some key components you might want to use. I'll assume that you have a basic understanding of React and familiarity with Chakra UI.

Setting up the Environment

First, ensure you have Node.js installed. Then, create a new React project and add Chakra UI:

npx create-react-app yahoo-dashboard
cd yahoo-dashboard
npm install @chakra-ui/react @emotion/react @emotion/styled framer-motion

Directory Structure

Here’s a simple directory structure for your project:

yahoo-dashboard/
|-- public/
|-- src/
    |-- components/
        |-- Header.js
        |-- NewsFeed.js
        |-- WeatherWidget.js
        |-- Footer.js
    |-- App.js
    |-- index.js
    |-- theme.js

Theme Configuration (Optional)

You can customize the theme to match Yahoo's color scheme and styling:

// src/theme.js
import { extendTheme } from "@chakra-ui/react";

const theme = extendTheme({
  colors: {
    brand: {
      900: "#123456", // Example color
      800: "#567890", // Example color
    },
  },
});

export default theme;

App Component

In App.js, wrap your application in a ChakraProvider and use the custom theme:

// src/App.js
import React from "react";
import { ChakraProvider } from "@chakra-ui/react";
import theme from "./theme";
import Header from "./components/Header";
import NewsFeed from "./components/NewsFeed";
import WeatherWidget from "./components/WeatherWidget";
import Footer from "./components/Footer";

function App() {
  return (
    <ChakraProvider theme={theme}>
      <Header />
      <NewsFeed />
      <WeatherWidget />
      <Footer />
    </ChakraProvider>
  );
}

export default App;

Components

Each component will be designed using Chakra UI components. Here’s a brief overview of each:

Header Component

This will include the top navigation bar and any global branding.

// src/components/Header.js
import { Box, Flex, Text } from "@chakra-ui/react";

function Header() {
  return (
    <Flex bg="blue.500" color="white" p={4} justifyContent="space-between">
      <Text fontSize="lg" fontWeight="bold">Yahoo Dashboard</Text>
      <Flex>
        {/* Navigation Items */}
        <Text p={2}>Home</Text>
        <Text p={2}>News</Text>
        <Text p={2}>Weather</Text>
      </Flex>
    </Flex>
  );
}

export default Header;

NewsFeed Component

This could display a list of news articles using a simple layout.

// src/components/NewsFeed.js
import { Box, Heading, Text } from "@chakra-ui/react";

function NewsFeed() {
  return (
    <Box p={4}>
      <Heading as="h3" size="lg">Latest News</Heading>
      {/* Map through news articles here */}
      <Text mt={2}>News Article #1</Text>
    </Box>
  );
}

export default NewsFeed;

Weather Widget

This component can show the current weather status.

// src/components/WeatherWidget.js
import { Box, Text } from "@chakra-ui/react";

function WeatherWidget() {
  return (
    <Box p={4} bg="gray.300">
      <Text fontSize="sm">Weather Widget</Text>
    </Box>
  );
}

export default WeatherWidget;

Footer Component

This includes copyright information or additional links.

// src/components/Footer.js
import { Box, Text } from "@chakra-ui/react";

function Footer() {
  return (
    <Box p={4} bg="blue.500" color="white" textAlign="center">
      <Text>© 2024 Yahoo Dashboard Clone</Text>
    </Box>
  );
}

export default Footer;

Running the Project

To see your project in action, run:

npm start

This will launch the React application in your default web browser. From here, you can continue to refine and expand the components to more closely mimic the features and layout of Yahoo's dashboard. This setup provides a scalable foundation to build a more detailed and interactive dashboard.

 

Add the Navigation

Creating an effective navigation menu for the Yahoo-like dashboard using React and Chakra UI involves structuring the menu for ease of use, ensuring that it fits into the overall design and functionality of the dashboard, and potentially adding responsiveness for different device sizes. Below, I'll show how to implement a basic navigation menu in your dashboard.

Implementing Navigation Menu with Chakra UI

To create a navigation menu in your dashboard, you'll want to use a combination of Chakra UI components such as Flex, Box, and interactive elements like Link or Button. Here's a step-by-step guide on setting it up.

1. Header Component Update

Let's update the Header.js component to include navigation links that might correspond to different sections or widgets in your dashboard (e.g., Home, News, Finance, Weather). I'll add react-router-dom for handling routing. First, make sure to install it:

npm install react-router-dom

2. Setup Router in Main App Component

Before updating the Header, let's wrap the application in a router in src/index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
import App from './App';
import reportWebVitals from './reportWebVitals';

ReactDOM.render(
  <React.StrictMode>
    <BrowserRouter>
      <App />
    </BrowserRouter>
  </React.StrictMode>,
  document.getElementById('root')
);

reportWebVitals();

3. Updated Header Component

Now update the Header.js to include navigation:

// src/components/Header.js
import { Flex, Text, Link as ChakraLink } from "@chakra-ui/react";
import { Link } from "react-router-dom";

function Header() {
  return (
    <Flex bg="blue.500" color="white" p={4} justifyContent="space-between" alignItems="center">
      <Text fontSize="lg" fontWeight="bold">Yahoo Dashboard</Text>
      <Flex>
        {/* Navigation Items as Links */}
        <ChakraLink as={Link} to="/" p={2} style={{ textDecoration: 'none' }}>Home</ChakraLink>
        <ChakraLink as={Link} to="/news" p={2} style={{ textDecoration: 'none' }}>News</ChakraLink>
        <ChakraLink as={Link} to="/finance" p={2} style={{ textDecoration: 'none' }}>Finance</ChakraLink>
        <ChakraLink as={Link} to="/weather" p={2} style={{ textDecoration: 'none' }}>Weather</ChakraLink>
      </Flex>
    </Flex>
  );
}

export default Header;

4. Routing in App Component

Now, in App.js, define the routes for each navigation item:

// src/App.js
import React from "react";
import { ChakraProvider } from "@chakra-ui/react";
import { Routes, Route } from "react-router-dom";
import theme from "./theme";
import Header from "./components/Header";
import NewsFeed from "./components/NewsFeed";
import WeatherWidget from "./components/WeatherWidget";
import FinanceWidget from "./components/FinanceWidget";
import Footer from "./components/Footer";

function App() {
  return (
    <ChakraProvider theme={theme}>
      <Header />
      <Routes>
        <Route path="/" element={<NewsFeed />} />
        <Route path="/news" element={<NewsFeed />} />
        <Route path="/finance" element={<FinanceWidget />} />
        <Route path="/weather" element={<WeatherWidget />} />
      </Routes>
      <Footer />
    </ChakraProvider>
  );
}

export default App;

Final Thoughts

This setup provides a simple and effective navigation menu that integrates with a React Router for navigating different sections of the dashboard. It's straightforward, uses Chakra UI components for styling, and can be expanded with more sophisticated features like dropdowns or mega menus as needed. See the all project in GitHub:

GitHub - icpmtech/yahoo-dashboard

Back to blog
  • ChatGPT Uncovered Podcast

    ChatGPT Uncovered Podcast

    Pedro Martins

    ChatGPT Uncovered Podcast ChatGPT Uncovered Podcast Exploring the Frontiers of AI Conversational Models Episode 1: Understanding ChatGPT Published on: May 15, 2023 Your browser does not support the audio element....

    ChatGPT Uncovered Podcast

    Pedro Martins

    ChatGPT Uncovered Podcast ChatGPT Uncovered Podcast Exploring the Frontiers of AI Conversational Models Episode 1: Understanding ChatGPT Published on: May 15, 2023 Your browser does not support the audio element....

  • Power Apps In-Depth Podcast

    Power Apps In-Depth Podcast

    Pedro Martins

    Power Apps In-Depth Podcast Power Apps In-Depth Podcast Exploring the Capabilities of Microsoft Power Apps Episode 1: Introduction to Power Apps Published on: April 20, 2023 Your browser does not...

    Power Apps In-Depth Podcast

    Pedro Martins

    Power Apps In-Depth Podcast Power Apps In-Depth Podcast Exploring the Capabilities of Microsoft Power Apps Episode 1: Introduction to Power Apps Published on: April 20, 2023 Your browser does not...

  • Exploring Power Pages Podcast

    Exploring Power Pages Podcast

    Pedro Martins

    Exploring Power Pages Podcast Exploring Power Pages Podcast Delving into the World of Microsoft Power Pages Episode 1: Getting Started with Power Pages Published on: March 10, 2023 Your browser...

    Exploring Power Pages Podcast

    Pedro Martins

    Exploring Power Pages Podcast Exploring Power Pages Podcast Delving into the World of Microsoft Power Pages Episode 1: Getting Started with Power Pages Published on: March 10, 2023 Your browser...

1 of 3