Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 24 additions & 64 deletions app/globals.css
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
/* === Global Variables === */
:root {
--max-width: 1100px;
--border-radius: 12px;
Expand All @@ -6,73 +7,20 @@
'Fira Mono', 'Droid Sans Mono', 'Courier New', monospace;

--foreground-rgb: 0, 0, 0;
--background-start-rgb: 214, 219, 220;
--background-start-rgb: 255, 255, 255;
--background-end-rgb: 255, 255, 255;

--primary-glow: conic-gradient(
from 180deg at 50% 50%,
#16abff33 0deg,
#0885ff33 55deg,
#54d6ff33 120deg,
#0071ff33 160deg,
transparent 360deg
);
--secondary-glow: radial-gradient(
rgba(255, 255, 255, 1),
rgba(255, 255, 255, 0)
);

--tile-start-rgb: 239, 245, 249;
--tile-end-rgb: 228, 232, 233;
--tile-border: conic-gradient(
#00000080,
#00000040,
#00000030,
#00000020,
#00000010,
#00000010,
#00000080
);
--tile-border: #ddd;

--callout-rgb: 238, 240, 241;
--callout-border-rgb: 172, 175, 176;
--card-rgb: 180, 185, 188;
--card-border-rgb: 131, 134, 135;
}

@media (prefers-color-scheme: dark) {
:root {
--foreground-rgb: 255, 255, 255;
--background-start-rgb: 0, 0, 0;
--background-end-rgb: 0, 0, 0;

--primary-glow: radial-gradient(rgba(1, 65, 255, 0.4), rgba(1, 65, 255, 0));
--secondary-glow: linear-gradient(
to bottom right,
rgba(1, 65, 255, 0),
rgba(1, 65, 255, 0),
rgba(1, 65, 255, 0.3)
);

--tile-start-rgb: 2, 13, 46;
--tile-end-rgb: 2, 5, 19;
--tile-border: conic-gradient(
#ffffff80,
#ffffff40,
#ffffff30,
#ffffff20,
#ffffff10,
#ffffff10,
#ffffff80
);

--callout-rgb: 20, 20, 20;
--callout-border-rgb: 108, 108, 108;
--card-rgb: 100, 100, 100;
--card-border-rgb: 200, 200, 200;
}
--card-rgb: 255, 255, 255;
--card-border-rgb: 200, 200, 200;
}

/* === Global Resets === */
* {
box-sizing: border-box;
padding: 0;
Expand All @@ -85,22 +33,34 @@ body {
overflow-x: hidden;
}

/* === Global Body Styles === */
body {
font-family: var(--font-mono);
color: rgb(var(--foreground-rgb));
background: linear-gradient(
to bottom,
transparent,
rgb(var(--background-end-rgb))
)
rgb(var(--background-start-rgb));
background-color: #f9f9f9; /* soft light gray */
background-image: none; /* removes any gradient "shadow" lines */
}

/* === Link Styles === */
a {
color: inherit;
text-decoration: none;
}

/* === Optional Dark Mode (kept simple) === */
@media (prefers-color-scheme: dark) {
:root {
--foreground-rgb: 255, 255, 255;
--background-start-rgb: 18, 18, 18;
--background-end-rgb: 18, 18, 18;
--tile-border: #444;
}

body {
background-color: rgb(var(--background-start-rgb));
color: rgb(var(--foreground-rgb));
}

html {
color-scheme: dark;
}
Expand Down
22 changes: 11 additions & 11 deletions app/layout.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
import './globals.css'
import { Inter } from 'next/font/google'
'use client';

const inter = Inter({ subsets: ['latin'] })

export const metadata = {
title: 'Create Next App',
description: 'Generated by create next app',
}
import { Provider } from "react-redux";
import { store } from "../app/store";
import './globals.css';

export default function RootLayout({ children }) {
return (
<html lang="en">
<body className={inter.className}>{children}</body>
<body>
<Provider store={store}>
{children}
</Provider>
</body>
</html>
)
}
);
}
111 changes: 21 additions & 90 deletions app/page.js
Original file line number Diff line number Diff line change
@@ -1,95 +1,26 @@
import Image from 'next/image'
import styles from './page.module.css'
'use client';

export default function Home() {
return (
<main className={styles.main}>
<div className={styles.description}>
<p>
Get started by editing&nbsp;
<code className={styles.code}>app/page.js</code>
</p>
<div>
<a
href="https://vercel.com?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
target="_blank"
rel="noopener noreferrer"
>
By{' '}
<Image
src="/vercel.svg"
alt="Vercel Logo"
className={styles.vercelLogo}
width={100}
height={24}
priority
/>
</a>
</div>
</div>

<div className={styles.center}>
<Image
className={styles.logo}
src="/next.svg"
alt="Next.js Logo"
width={180}
height={37}
priority
/>
</div>
import { useEffect } from 'react';
import { useDispatch } from 'react-redux';
import SearchBar from '../src/components/SearchBar';
import WeatherList from '../src/features/weather/WeatherList';
import { fetchWeather } from '../src/features/weather/weatherSlice';

<div className={styles.grid}>
<a
href="https://nextjs.org/docs?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
className={styles.card}
target="_blank"
rel="noopener noreferrer"
>
<h2>
Docs <span>-&gt;</span>
</h2>
<p>Find in-depth information about Next.js features and API.</p>
</a>

<a
href="https://nextjs.org/learn?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
className={styles.card}
target="_blank"
rel="noopener noreferrer"
>
<h2>
Learn <span>-&gt;</span>
</h2>
<p>Learn about Next.js in an interactive course with&nbsp;quizzes!</p>
</a>
export default function Home() {
const dispatch = useDispatch();

<a
href="https://vercel.com/templates?framework=next.js&utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
className={styles.card}
target="_blank"
rel="noopener noreferrer"
>
<h2>
Templates <span>-&gt;</span>
</h2>
<p>Explore the Next.js 13 playground.</p>
</a>
useEffect(() => {
const defaultCity = localStorage.getItem('defaultCity');
if (defaultCity) {
dispatch(fetchWeather(defaultCity));
}
}, [dispatch]);

<a
href="https://vercel.com/new?utm_source=create-next-app&utm_medium=appdir-template&utm_campaign=create-next-app"
className={styles.card}
target="_blank"
rel="noopener noreferrer"
>
<h2>
Deploy <span>-&gt;</span>
</h2>
<p>
Instantly deploy your Next.js site to a shareable URL with Vercel.
</p>
</a>
</div>
return (
<main style={{ textAlign: 'center', padding: '2rem' }}>
<h1>RTK Weather Forecast</h1>
<SearchBar />
<WeatherList />
</main>
)
}
);
}
8 changes: 8 additions & 0 deletions app/store.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import { configureStore } from '@reduxjs/toolkit';
import weatherReducer from '../src/features/weather/weatherSlice';

export const store = configureStore({
reducer: {
weather: weatherReducer,
},
});
Loading