From dd799ace70c172fe3a679e7be017c1cf03e91775 Mon Sep 17 00:00:00 2001 From: Walter Furrer Date: Sun, 15 Sep 2024 18:40:51 -0400 Subject: [PATCH 01/13] Working on sizing, overall layout. Styling is getting there. --- .storybook/main.ts | 1 + stories/Welcome.mdx | 108 ++++++++++++++++++++++-- stories/assets/appwriteLogo.svg | 9 ++ stories/assets/blogRecorderLogo.svg | 85 +++++++++++++++++++ stories/assets/frontendMentorLogo.svg | 6 ++ stories/assets/gitkrakenLogo.svg | 4 + stories/assets/gridironSurvivorLogo.svg | 9 ++ stories/assets/pastelLogo.svg | 13 +++ stories/welcome-styles.css | 88 +++++++++++++++++++ tailwind.config.js | 2 + 10 files changed, 320 insertions(+), 5 deletions(-) create mode 100644 stories/assets/appwriteLogo.svg create mode 100644 stories/assets/blogRecorderLogo.svg create mode 100644 stories/assets/frontendMentorLogo.svg create mode 100644 stories/assets/gitkrakenLogo.svg create mode 100644 stories/assets/gridironSurvivorLogo.svg create mode 100644 stories/assets/pastelLogo.svg create mode 100644 stories/welcome-styles.css diff --git a/.storybook/main.ts b/.storybook/main.ts index 04d7722b..c9bcbc1a 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -2,6 +2,7 @@ import type { StorybookConfig } from '@storybook/nextjs'; const config: StorybookConfig = { stories: [ + '../stories/*.mdx', '../stories/**/*.mdx', '../components/**/*.stories.@(js|jsx|mjs|ts|tsx)', ], diff --git a/stories/Welcome.mdx b/stories/Welcome.mdx index 2e6f91bd..706e74a3 100644 --- a/stories/Welcome.mdx +++ b/stories/Welcome.mdx @@ -1,7 +1,105 @@ -import './styles.css'; +import './welcome-styles.css'; +import GridironLogo from './assets/gridironSurvivorLogo.svg'; +import AppwriteLogo from './assets/appwriteLogo.svg'; +import BlogRecorderLogo from './assets/blogRecorderLogo.svg'; +import frontendMentorLogo from './assets/frontendMentorLogo.svg'; +import gitkrakenLogo from './assets/gitkrakenLogo.svg'; +import pastelLogo from './assets/pastelLogo.svg'; +import Image from 'next/image'; -

Welcome

+ + +
+ Gridiron Survivor Football Logo +
+
+

What is Gridiron Survivor?

+

+ Lorem ipsum dolor sit amet consectetur, adipisicing elit. Repellat + architecto ab blanditiis numquam itaque tenetur recusandae cupiditate + accusantium molestiae autem consectetur earum excepturi labore corrupti + sit illo quis voluptatibus fuga, vitae quisquam placeat nesciunt velit. + Eius est, sequi voluptatem repellat mollitia consequuntur beatae, + voluptates aliquam nihil perspiciatis neque quas cumque. +

+
+
+

Sponsors

+
+ + + + + +
+
+

Meet the Team

+
+
+
Name
+

Title

+ GitHub + LinkedIn +
+
+
Name
+

Title

+ GitHub + LinkedIn +
+
+
Name
+

Title

+ GitHub + LinkedIn +
+
+
Name
+

Title

+ GitHub + LinkedIn +
+
+
Name
+

Title

+ GitHub + LinkedIn +
+
+
Name
+

Title

+ GitHub + LinkedIn +
+
+
Name
+

Title

+ GitHub + LinkedIn +
+
+
Walter Furrer
+

Documentation Engineer

+ GitHub + LinkedIn +
+
-
-

[Application Setup](?path=/docs/about-application-setup--docs)

-
+ + + diff --git a/stories/assets/appwriteLogo.svg b/stories/assets/appwriteLogo.svg new file mode 100644 index 00000000..6b35a520 --- /dev/null +++ b/stories/assets/appwriteLogo.svg @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/stories/assets/blogRecorderLogo.svg b/stories/assets/blogRecorderLogo.svg new file mode 100644 index 00000000..94685af2 --- /dev/null +++ b/stories/assets/blogRecorderLogo.svg @@ -0,0 +1,85 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/stories/assets/frontendMentorLogo.svg b/stories/assets/frontendMentorLogo.svg new file mode 100644 index 00000000..ad940756 --- /dev/null +++ b/stories/assets/frontendMentorLogo.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/stories/assets/gitkrakenLogo.svg b/stories/assets/gitkrakenLogo.svg new file mode 100644 index 00000000..9faca53c --- /dev/null +++ b/stories/assets/gitkrakenLogo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/stories/assets/gridironSurvivorLogo.svg b/stories/assets/gridironSurvivorLogo.svg new file mode 100644 index 00000000..bb3bda01 --- /dev/null +++ b/stories/assets/gridironSurvivorLogo.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/stories/assets/pastelLogo.svg b/stories/assets/pastelLogo.svg new file mode 100644 index 00000000..92647f4b --- /dev/null +++ b/stories/assets/pastelLogo.svg @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/stories/welcome-styles.css b/stories/welcome-styles.css new file mode 100644 index 00000000..6f8d4001 --- /dev/null +++ b/stories/welcome-styles.css @@ -0,0 +1,88 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@import url(../app/globals.css); + +h1, +h2, +h3, +h4, +h5, +h6 { + @apply text-muted-foreground; +} + +h1 { + font-size: 3rem; /* 48px */ + line-height: 1; +} + +h2 { + font-size: 2.25rem; /* 36px */ + line-height: 2.5rem; /* 40px */ +} + +h3 { + font-size: 1.875rem; /* 30px */ + line-height: 2.25rem; /* 36px */ +} + +h4 { + font-size: 1.5rem; /* 24px */ + line-height: 2rem; /* 32px */ +} + +h5 { + font-size: 1.25rem; /* 20px */ + line-height: 1.75rem; /* 28px */ +} + +h6 { + font-size: 1.125rem; /* 18px */ + line-height: 1.75rem; /* 28px */ +} + +.sponsors-container { + margin-top: 2rem; + margin-bottom: 4rem; +} + +.sponsor-cards { + max-width: 10rem; + max-height: 8rem; + display: grid; + row-gap: 1rem; + justify-content: center; + justify-items: center; + align-items: space-around; +} + +.sponsor-cards h5 { + @apply text-foreground; +} + +.sponsor-cards img { + max-height: 8rem; +} + +img { + display: block; + max-width: 100%; +} + +.team-member { + @apply outline outline-outline; + display: grid; + grid-column: repeat(1, 1fr); + grid-row: auto; + padding: 1.5rem; + aspect-ratio: 1/1; + border-radius: 1rem; + align-items: space-around; + text-wrap: pretty; + + a { + display: block; + } +} diff --git a/tailwind.config.js b/tailwind.config.js index 3d6cef2c..58a3f98f 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -3,7 +3,9 @@ module.exports = { content: [ + './app/*.{js,ts,jsx,tsx,mdx}', './app/**/*.{js,ts,jsx,tsx,mdx}', + './stories/*.{js,ts,jsx,tsx,mdx}', './stories/**/*.{js,ts,jsx,tsx,mdx}', './components/**/*.{js,ts,jsx,tsx,mdx}', ], From cf2251015d53e1025dc7b6045b216d37c940a6dd Mon Sep 17 00:00:00 2001 From: Walter Furrer Date: Mon, 16 Sep 2024 13:37:54 -0400 Subject: [PATCH 02/13] Further styling, padding, margin, re-sizing of various components. Added Team members info, but still need social media links. --- stories/Welcome.mdx | 54 +++++++++++++++++++------------------- stories/welcome-styles.css | 25 ++++++++++++------ 2 files changed, 44 insertions(+), 35 deletions(-) diff --git a/stories/Welcome.mdx b/stories/Welcome.mdx index 706e74a3..40e499a2 100644 --- a/stories/Welcome.mdx +++ b/stories/Welcome.mdx @@ -8,13 +8,13 @@ import pastelLogo from './assets/pastelLogo.svg'; import Image from 'next/image'; - -
- Gridiron Survivor Football Logo + +
+ Gridiron Survivor Football Logo

What is Gridiron Survivor?

-

+

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Repellat architecto ab blanditiis numquam itaque tenetur recusandae cupiditate accusantium molestiae autem consectetur earum excepturi labore corrupti @@ -23,9 +23,9 @@ import Image from 'next/image'; voluptates aliquam nihil perspiciatis neque quas cumque.

-
+

Sponsors

-
+

Meet the Team

-
+
-
Name
-

Title

+
Alex Appleget
+

Software Engineer

GitHub LinkedIn
-
Name
-

Title

+
Richard Choi
+

DevRel Engineer

GitHub LinkedIn
-
Name
-

Title

+
Ryan Furrer
+

UX Engineer

GitHub LinkedIn
-
Name
-

Title

- GitHub - LinkedIn +
Walter Furrer
+

Documentation Engineer

+ GitHub + LinkedIn
-
Name
-

Title

+
Corina Murg
+

Accessibility Expert

GitHub LinkedIn
-
Name
-

Title

+
Chris Nowicki
+

Software Engineer

GitHub LinkedIn
-
Name
-

Title

+
Jason Torres
+

Technical Project Manager

GitHub LinkedIn
-
Walter Furrer
-

Documentation Engineer

- GitHub - LinkedIn +
Mai Vang
+

Frontend Engineer

+ GitHub + LinkedIn
diff --git a/stories/welcome-styles.css b/stories/welcome-styles.css index 6f8d4001..8b602425 100644 --- a/stories/welcome-styles.css +++ b/stories/welcome-styles.css @@ -50,22 +50,23 @@ h6 { .sponsor-cards { max-width: 10rem; - max-height: 8rem; + height: auto; display: grid; row-gap: 1rem; justify-content: center; justify-items: center; - align-items: space-around; + align-items: space-evenly; + + img { + max-height: 7rem; + max-width: 7rem; + } } .sponsor-cards h5 { @apply text-foreground; } -.sponsor-cards img { - max-height: 8rem; -} - img { display: block; max-width: 100%; @@ -76,13 +77,21 @@ img { display: grid; grid-column: repeat(1, 1fr); grid-row: auto; + max-width: 12rem; padding: 1.5rem; aspect-ratio: 1/1; border-radius: 1rem; - align-items: space-around; - text-wrap: pretty; + align-self: space-around; a { display: block; + max-width: fit-content; + max-height: fit-content; + color: orangered; } } + +a:hover { + text-decoration: underline; + color: hsl(224.3 76.3% 48%); +} From c57cc649f07bbf6f4e8c13f7de76cbc3c6eae186 Mon Sep 17 00:00:00 2001 From: Walter Furrer Date: Mon, 16 Sep 2024 22:00:51 -0400 Subject: [PATCH 03/13] Added content for team members, continued refining styling. --- stories/Welcome.mdx | 155 +++++++++++++++++++------------------ stories/welcome-styles.css | 107 ++++++++++++------------- 2 files changed, 130 insertions(+), 132 deletions(-) diff --git a/stories/Welcome.mdx b/stories/Welcome.mdx index 40e499a2..57276a65 100644 --- a/stories/Welcome.mdx +++ b/stories/Welcome.mdx @@ -8,13 +8,13 @@ import pastelLogo from './assets/pastelLogo.svg'; import Image from 'next/image'; - -
+ +
Gridiron Survivor Football Logo -
-
-

What is Gridiron Survivor?

-

+ +

+

What is Gridiron Survivor?

+

Lorem ipsum dolor sit amet consectetur, adipisicing elit. Repellat architecto ab blanditiis numquam itaque tenetur recusandae cupiditate accusantium molestiae autem consectetur earum excepturi labore corrupti @@ -23,83 +23,90 @@ import Image from 'next/image'; voluptates aliquam nihil perspiciatis neque quas cumque.

-
+

Sponsors

-
-
+
+

Meet the Team

+
+
+

Alex Appleget

+

Software Engineer

+ GitHub + LinkedIn +
+
+

Richard Choi

+

DevRel Engineer

+ GitHub + LinkedIn +
+
+

Ryan Furrer

+

UX Engineer

+ GitHub + LinkedIn
-
-

Meet the Team

-
-
-
Alex Appleget
-

Software Engineer

- GitHub - LinkedIn -
-
-
Richard Choi
-

DevRel Engineer

- GitHub - LinkedIn -
-
-
Ryan Furrer
-

UX Engineer

- GitHub - LinkedIn -
-
-
Walter Furrer
-

Documentation Engineer

- GitHub - LinkedIn -
-
-
Corina Murg
-

Accessibility Expert

- GitHub - LinkedIn -
-
-
Chris Nowicki
-

Software Engineer

- GitHub - LinkedIn -
-
-
Jason Torres
-

Technical Project Manager

- GitHub - LinkedIn -
-
-
Mai Vang
-

Frontend Engineer

- GitHub - LinkedIn -
-
- diff --git a/stories/welcome-styles.css b/stories/welcome-styles.css index 8b602425..11b04330 100644 --- a/stories/welcome-styles.css +++ b/stories/welcome-styles.css @@ -1,97 +1,88 @@ @tailwind base; @tailwind components; @tailwind utilities; - @import url(../app/globals.css); -h1, -h2, -h3, -h4, -h5, -h6 { - @apply text-muted-foreground; -} - h1 { - font-size: 3rem; /* 48px */ - line-height: 1; + @apply text-foreground; + font-size: 3rem; + font-weight: 800; + letter-spacing: -0.025em; + line-height: 1.125em; } h2 { - font-size: 2.25rem; /* 36px */ - line-height: 2.5rem; /* 40px */ + @apply text-foreground; + font-size: 2rem; + font-weight: 700; + letter-spacing: -0.05em; + line-height: 1.125em; } h3 { - font-size: 1.875rem; /* 30px */ - line-height: 2.25rem; /* 36px */ + @apply text-foreground; + font-size: 1.25rem; + font-weight: 600; + letter-spacing: -0.05em; + line-height: 1.125em; } h4 { - font-size: 1.5rem; /* 24px */ - line-height: 2rem; /* 32px */ -} - -h5 { - font-size: 1.25rem; /* 20px */ - line-height: 1.75rem; /* 28px */ + @apply text-foreground; + font-size: 1rem; + font-weight: 600; + letter-spacing: -0.05em; + line-height: 1.125em; } -h6 { - font-size: 1.125rem; /* 18px */ - line-height: 1.75rem; /* 28px */ +img { + display: block; + max-width: 100%; } -.sponsors-container { - margin-top: 2rem; - margin-bottom: 4rem; +.sponsor-card-link-container { + display: grid; + /* flex-direction: column; */ + align-items: space-between; } .sponsor-cards { - max-width: 10rem; - height: auto; + align-items: space-evenly; display: grid; - row-gap: 1rem; + height: auto; justify-content: center; justify-items: center; - align-items: space-evenly; - - img { - max-height: 7rem; - max-width: 7rem; - } -} - -.sponsor-cards h5 { - @apply text-foreground; + max-width: 8rem; + row-gap: 1rem; + aspect-ratio: 1/1; } -img { - display: block; - max-width: 100%; +.sponsor-cards img { + max-width: 6rem; + max-height: 8rem; } .team-member { @apply outline outline-outline; - display: grid; - grid-column: repeat(1, 1fr); - grid-row: auto; - max-width: 12rem; - padding: 1.5rem; aspect-ratio: 1/1; border-radius: 1rem; - align-self: space-around; + display: flex; + flex-direction: column; + justify-content: space-evenly; + padding-inline: 1rem; + height: auto; + max-width: 11rem; + min-width: 11rem; a { + color: #dd4c3b; display: block; - max-width: fit-content; - max-height: fit-content; - color: orangered; + height: fit-content; + width: fit-content; } -} -a:hover { - text-decoration: underline; - color: hsl(224.3 76.3% 48%); + a:hover { + color: #fff; + text-decoration: underline; + } } From 8ef52497dbbc1b8e54d22869babf65b35633def6 Mon Sep 17 00:00:00 2001 From: Walter Furrer Date: Tue, 17 Sep 2024 21:24:34 -0400 Subject: [PATCH 04/13] "Final" changes before sending to Master Shashi for review. --- stories/Welcome.mdx | 184 +++++++++++++++++++++---------------- stories/welcome-styles.css | 55 ++++++----- 2 files changed, 139 insertions(+), 100 deletions(-) diff --git a/stories/Welcome.mdx b/stories/Welcome.mdx index 57276a65..fb572118 100644 --- a/stories/Welcome.mdx +++ b/stories/Welcome.mdx @@ -1,112 +1,138 @@ import './welcome-styles.css'; -import GridironLogo from './assets/gridironSurvivorLogo.svg'; -import AppwriteLogo from './assets/appwriteLogo.svg'; -import BlogRecorderLogo from './assets/blogRecorderLogo.svg'; +import gridironLogo from './assets/gridironSurvivorLogo.svg'; +import appwriteLogo from './assets/appwriteLogo.svg'; +import blogRecorderLogo from './assets/blogRecorderLogo.svg'; import frontendMentorLogo from './assets/frontendMentorLogo.svg'; import gitkrakenLogo from './assets/gitkrakenLogo.svg'; import pastelLogo from './assets/pastelLogo.svg'; import Image from 'next/image'; - +
- Gridiron Survivor Football Logo + + Gridiron Survivor Football Logo +
-

What is Gridiron Survivor?

+

What is Gridiron Survivor?

- Lorem ipsum dolor sit amet consectetur, adipisicing elit. Repellat - architecto ab blanditiis numquam itaque tenetur recusandae cupiditate - accusantium molestiae autem consectetur earum excepturi labore corrupti - sit illo quis voluptatibus fuga, vitae quisquam placeat nesciunt velit. - Eius est, sequi voluptatem repellat mollitia consequuntur beatae, - voluptates aliquam nihil perspiciatis neque quas cumque. + Gridiron Survivor is the ultimate pick'em league app. Track your picks, see how you stack up against your friends, and hope to be crowned champion! Developed by a talented team of junior developers using technologies such as Next.js, React, and Tailwind CSS, Gridiron Survivor is the perfect tool for any football fan looking to take their pick'em game to the next level. +
+ Gridiron Survivor is currently in its first Alpha for the 2024-2025 NFL Season! 1st, 2nd, and 3rd place winners of the season get spoiled with prizes from our generous sponsors.

-
-

Sponsors

-
-
-

Meet the Team

-
-
-

Alex Appleget

-

Software Engineer

- GitHub - LinkedIn -
-
-

Richard Choi

-

DevRel Engineer

- GitHub - LinkedIn +

Meet the Team

+
+
+
+

Alex Appleget

+

Software Engineer

+
+
-
-

Ryan Furrer

-

UX Engineer

- GitHub - LinkedIn +
+
+

Richard Choi

+

DevRel Engineer

+
+
-
-

Walter Furrer

-

Documentation Engineer

- GitHub - LinkedIn +
+
+

Ryan Furrer

+

UX Engineer

+
+
-
-

Shashi Lo

-

Engineering Manager

- GitHub - LinkedIn +
+
+

Walter Furrer

+

Documentation Engineer

+
+
-
-

Mai Vang

-

Frontend Engineer

- GitHub - LinkedIn +
+
+

Shashi Lo

+

Engineering Manager

+
+
-
-

Chris Nowicki

-

Software Engineer

- GitHub - LinkedIn +
+
+

Corina Murg

+

Frontend Engineer

+
+
-
-

Jason Torres

-

Technical Project Manager

- GitHub - LinkedIn +
+
+

Chris Nowicki

+

Software Engineer

+
+
-
-

Mai Vang

-

Frontend Engineer

- GitHub - LinkedIn +
+
+

Mai Vang

+

Frontend Engineer

+
+
+ diff --git a/stories/welcome-styles.css b/stories/welcome-styles.css index 11b04330..51131bd6 100644 --- a/stories/welcome-styles.css +++ b/stories/welcome-styles.css @@ -3,6 +3,10 @@ @tailwind utilities; @import url(../app/globals.css); +.debug { + outline: solid 2px red; +} + h1 { @apply text-foreground; font-size: 3rem; @@ -40,39 +44,42 @@ img { max-width: 100%; } -.sponsor-card-link-container { - display: grid; - /* flex-direction: column; */ - align-items: space-between; +.sponsor-card { + align-items: center; + align-self: center; + display: flex; + flex-direction: column; + gap: 1rem; + justify-content: space-around; + padding: 1rem 2rem; + @apply outline outline-transparent; + border-radius: 1rem; + transition-duration: 0.35s; } -.sponsor-cards { - align-items: space-evenly; - display: grid; - height: auto; - justify-content: center; - justify-items: center; - max-width: 8rem; - row-gap: 1rem; - aspect-ratio: 1/1; +.sponsor-card:hover { + @apply outline outline-outline; + border-radius: 1rem; + text-decoration: underline; + transition-duration: 0.35s; } -.sponsor-cards img { - max-width: 6rem; - max-height: 8rem; +.sponsor-card img { + height: 8rem; + width: 8rem; } .team-member { @apply outline outline-outline; - aspect-ratio: 1/1; border-radius: 1rem; display: flex; flex-direction: column; - justify-content: space-evenly; - padding-inline: 1rem; + justify-content: space-around; + padding: 1rem; height: auto; - max-width: 11rem; - min-width: 11rem; + max-width: 13rem; + min-width: 13rem; + transition-duration: 0.35s; a { color: #dd4c3b; @@ -86,3 +93,9 @@ img { text-decoration: underline; } } + +.team-member:hover { + @apply outline outline-zinc-400; + border-radius: 1rem; + transition-duration: 0.35s; +} From 0e0c11238e6c9dfa2dc30359abf03f4addc2acf1 Mon Sep 17 00:00:00 2001 From: Walter Furrer Date: Mon, 30 Sep 2024 18:44:22 -0400 Subject: [PATCH 05/13] Reduced GIS logo size, fixed indented headers to now align properly with content below them. --- stories/Welcome.mdx | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/stories/Welcome.mdx b/stories/Welcome.mdx index fb572118..507c769e 100644 --- a/stories/Welcome.mdx +++ b/stories/Welcome.mdx @@ -8,14 +8,14 @@ import pastelLogo from './assets/pastelLogo.svg'; import Image from 'next/image'; - +
- + Gridiron Survivor Football Logo
-

What is Gridiron Survivor?

+

What is Gridiron Survivor?

Gridiron Survivor is the ultimate pick'em league app. Track your picks, see how you stack up against your friends, and hope to be crowned champion! Developed by a talented team of junior developers using technologies such as Next.js, React, and Tailwind CSS, Gridiron Survivor is the perfect tool for any football fan looking to take their pick'em game to the next level.
@@ -23,8 +23,8 @@ import Image from 'next/image';

-

Sponsors

-
+ Gridiron Survivor Football Logo

What is Gridiron Survivor?

-

- Gridiron Survivor is the ultimate pick'em league app. Track your picks, see how you stack up against your friends, and hope to be crowned champion! Developed by a talented team of junior developers using technologies such as Next.js, React, and Tailwind CSS, Gridiron Survivor is the perfect tool for any football fan looking to take their pick'em game to the next level. -
- Gridiron Survivor is currently in its first Alpha for the 2024-2025 NFL Season! 1st, 2nd, and 3rd place winners of the season get spoiled with prizes from our generous sponsors. +

+ Gridiron Survivor is the ultimate survivor league app. Track your picks, see how you stack up against your competition, and hope to be crowned champion! Developed by a talented team of Junior Developers led by Senior Software Engineer Shashi Lo, Gridiron Survivor is the perfect app for any football fan looking to take their survivor league to the next level.

@@ -90,6 +92,16 @@ import Image from 'next/image'; LinkedIn
+
+
+

Danielle Lindblom

+

Frontend Engineer

+
+ +

Shashi Lo

@@ -132,6 +144,14 @@ import Image from 'next/image';
+ diff --git a/stories/welcome-styles.css b/stories/welcome-styles.css index 51131bd6..f50b8438 100644 --- a/stories/welcome-styles.css +++ b/stories/welcome-styles.css @@ -76,10 +76,10 @@ img { flex-direction: column; justify-content: space-around; padding: 1rem; - height: auto; - max-width: 13rem; - min-width: 13rem; + height: 8rem; + width: 13rem; transition-duration: 0.35s; + text-wrap: balance; a { color: #dd4c3b; From fd8f70be73f8c85ac26ec8c5b4c5e14184fa4641 Mon Sep 17 00:00:00 2001 From: Walter Furrer Date: Tue, 1 Oct 2024 22:28:51 -0400 Subject: [PATCH 09/13] Refactored to MDX, created TeamMember component and messed with styling. Addressed couple of Richard's nits/smaller comments --- stories/TeamMember.tsx | 83 ++++++++++++ stories/Welcome.mdx | 252 +++++++++++++++---------------------- stories/styles.css | 5 + stories/welcome-styles.css | 101 --------------- 4 files changed, 188 insertions(+), 253 deletions(-) create mode 100644 stories/TeamMember.tsx delete mode 100644 stories/welcome-styles.css diff --git a/stories/TeamMember.tsx b/stories/TeamMember.tsx new file mode 100644 index 00000000..7ab84c57 --- /dev/null +++ b/stories/TeamMember.tsx @@ -0,0 +1,83 @@ +import React from 'react'; + +const TeamMembers = [ + { + name: 'Ryan Furrer', + role: 'UX Engineer', + github: 'github.com', + linkedin: 'linkedin.com', + }, + { + name: 'Walter Furrer', + role: 'Documentation Engineer', + github: 'github.com', + linkedin: 'linkedin.com', + }, + { + name: 'Walter Furrer', + role: 'Documentation Engineer', + github: 'github.com', + linkedin: 'linkedin.com', + }, + { + name: 'Walter Furrer', + role: 'Documentation Engineer', + github: 'github.com', + linkedin: 'linkedin.com', + }, + { + name: 'Walter Furrer', + role: 'Documentation Engineer', + github: 'github.com', + linkedin: 'linkedin.com', + }, + { + name: 'Walter Furrer', + role: 'Documentation Engineer', + github: 'github.com', + linkedin: 'linkedin.com', + }, +]; + +interface TeamMemberProps { + github: string; + linkedin: string; + name: string; + role: string; +} + +const TeamMember: React.FC = () => { + return ( +
+ {TeamMembers.map((member) => ( +
+
+

{member.name}

+

{member.role}

+ + GitHub + + + LinkedIn + +
+
+ ))} +
+ ); +}; + +export default TeamMember; diff --git a/stories/Welcome.mdx b/stories/Welcome.mdx index f0a55b08..4de69831 100644 --- a/stories/Welcome.mdx +++ b/stories/Welcome.mdx @@ -1,158 +1,106 @@ -import './welcome-styles.css'; +import './styles.css'; +import Image from 'next/image'; import gridironLogo from './assets/gridironSurvivorLogo.svg'; import appwriteLogo from './assets/appwriteLogo.svg'; import blogRecorderLogo from './assets/blogRecorderLogo.svg'; import frontendMentorLogo from './assets/frontendMentorLogo.svg'; import gitkrakenLogo from './assets/gitkrakenLogo.svg'; import pastelLogo from './assets/pastelLogo.svg'; -import Image from 'next/image'; -import { ArrowRight } from 'lucide-react'; -import { Github } from 'lucide-react'; - -import { Button } from '../components/Button/Button.tsx'; - - - -
- - Gridiron Survivor Football Logo - -
-
-

What is Gridiron Survivor?

-

- Gridiron Survivor is the ultimate survivor league app. Track your picks, see how you stack up against your competition, and hope to be crowned champion! Developed by a talented team of Junior Developers led by Senior Software Engineer Shashi Lo, Gridiron Survivor is the perfect app for any football fan looking to take their survivor league to the next level. -

-
-
-

Sponsors

- -
-
-

Meet the Team

-
-
-
-

Alex Appleget

-

Software Engineer

-
- -
-
-
-

Richard Choi

-

DevRel Engineer

-
- -
-
-
-

Ryan Furrer

-

UX Engineer

-
- -
-
-
-

Walter Furrer

-

Documentation Engineer

-
- -
-
-
-

Danielle Lindblom

-

Frontend Engineer

-
- -
-
-
-

Shashi Lo

-

Engineering Manager

-
- -
-
-
-

Corina Murg

-

Frontend Engineer

-
- -
-
-
-

Chris Nowicki

-

Software Engineer

-
- -
-
-
-

Mai Vang

-

Frontend Engineer

-
- -
-
-
- - - - - +import TeamMember from './TeamMember'; +import { Unstyled } from '@storybook/blocks'; + + + +Gridiron Surivior Logo + +# What is Gridiron Survivor? + +Gridiron Survivor is the ultimate survivor league app. Track your picks, see how you stack up against your competition and hope to be crowned champion! Developed by a talented team of Junior Developers led by Senior Software Engineer Shashi Lo, Gridiron Survivor is the perfect app for any football fan looking to take their survivor league to the next level. + +## Sponsors + +Gridiron Surivior Logo +### Appwrite + +Blog Recorder Logo +### Blog Recorder + +Frontend Mentor Logo +### Frontend Mentor + +GitKraken Logo +### GitKraken + +Pastel Logo +### Pastel + +## Meet the Team + + + +**Alex Appleget** +Software Engineer +[GitHub]() +[LinkedIn]() + +**Richard Choi** + DevRel Engineer + [GitHub]() + [LinkedIn]() + +**Ryan Furrer** + UX Engineer + [GitHub]() + [LinkedIn]() + +**Walter Furrer** + Documentation Engineer + [GitHub]() + [LinkedIn]() + +**Danielle Lindblom** + Frontend Engineer + [GitHub]() + [LinkedIn]() + +**Shashi Lo** + Engineering Manager + [GitHub]() + [LinkedIn]() + +**Corina Murg** + Accessibility Expert + [GitHub]() + [LinkedIn]() + +**Chris Nowicki** + Software Engineer + [GitHub]() + [LinkedIn]() + +**Mai Vang** + Frontend Engineer + [GitHub]() + [LinkedIn]() + +
    +
  1. +
  2. [Application Setup ](?path=/docs/about-application-setup--docs)
  3. +
+
diff --git a/stories/styles.css b/stories/styles.css index c1aa8f90..841e4b93 100644 --- a/stories/styles.css +++ b/stories/styles.css @@ -1,3 +1,8 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; +@import url('../app/globals.css'); + .doc_nav_links { display: flex; justify-content: space-between; diff --git a/stories/welcome-styles.css b/stories/welcome-styles.css deleted file mode 100644 index f50b8438..00000000 --- a/stories/welcome-styles.css +++ /dev/null @@ -1,101 +0,0 @@ -@tailwind base; -@tailwind components; -@tailwind utilities; -@import url(../app/globals.css); - -.debug { - outline: solid 2px red; -} - -h1 { - @apply text-foreground; - font-size: 3rem; - font-weight: 800; - letter-spacing: -0.025em; - line-height: 1.125em; -} - -h2 { - @apply text-foreground; - font-size: 2rem; - font-weight: 700; - letter-spacing: -0.05em; - line-height: 1.125em; -} - -h3 { - @apply text-foreground; - font-size: 1.25rem; - font-weight: 600; - letter-spacing: -0.05em; - line-height: 1.125em; -} - -h4 { - @apply text-foreground; - font-size: 1rem; - font-weight: 600; - letter-spacing: -0.05em; - line-height: 1.125em; -} - -img { - display: block; - max-width: 100%; -} - -.sponsor-card { - align-items: center; - align-self: center; - display: flex; - flex-direction: column; - gap: 1rem; - justify-content: space-around; - padding: 1rem 2rem; - @apply outline outline-transparent; - border-radius: 1rem; - transition-duration: 0.35s; -} - -.sponsor-card:hover { - @apply outline outline-outline; - border-radius: 1rem; - text-decoration: underline; - transition-duration: 0.35s; -} - -.sponsor-card img { - height: 8rem; - width: 8rem; -} - -.team-member { - @apply outline outline-outline; - border-radius: 1rem; - display: flex; - flex-direction: column; - justify-content: space-around; - padding: 1rem; - height: 8rem; - width: 13rem; - transition-duration: 0.35s; - text-wrap: balance; - - a { - color: #dd4c3b; - display: block; - height: fit-content; - width: fit-content; - } - - a:hover { - color: #fff; - text-decoration: underline; - } -} - -.team-member:hover { - @apply outline outline-zinc-400; - border-radius: 1rem; - transition-duration: 0.35s; -} From fb867071696d0f0b1f5f4652d4e377d572b70382 Mon Sep 17 00:00:00 2001 From: Walter Furrer Date: Thu, 3 Oct 2024 23:05:50 -0400 Subject: [PATCH 10/13] Refined team-member component and props, added new team members and contact links, styled team-members section. --- package.json | 3 +- pnpm-lock.yaml | 24 +++++-- stories/TeamMember.tsx | 83 ---------------------- stories/TeamMembers.tsx | 152 ++++++++++++++++++++++++++++++++++++++++ stories/Welcome.mdx | 50 +------------ stories/styles.css | 38 ++++++++++ 6 files changed, 212 insertions(+), 138 deletions(-) delete mode 100644 stories/TeamMember.tsx create mode 100644 stories/TeamMembers.tsx diff --git a/package.json b/package.json index 65b1ab02..58baee5d 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "clsx": "^2.1.0", "geist": "^1.2.2", "immer": "^10.1.1", - "lucide-react": "^0.312.0", + "lucide-react": "^0.447.0", "next": "^14.1.1", "node-appwrite": "^13.0.0", "postcss": "8.4.29", @@ -34,6 +34,7 @@ "react-dom": "18.2.0", "react-hook-form": "^7.51.3", "react-hot-toast": "^2.4.1", + "react-icons": "^5.3.0", "tailwind-merge": "^2.2.2", "tailwindcss": "3.3.3", "tailwindcss-animate": "^1.0.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b34ba8bc..22e5ef82 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -48,8 +48,8 @@ importers: specifier: ^10.1.1 version: 10.1.1 lucide-react: - specifier: ^0.312.0 - version: 0.312.0(react@18.2.0) + specifier: ^0.447.0 + version: 0.447.0(react@18.2.0) next: specifier: ^14.1.1 version: 14.2.3(@babel/core@7.24.7)(@playwright/test@1.44.1)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) @@ -71,6 +71,9 @@ importers: react-hot-toast: specifier: ^2.4.1 version: 2.4.1(csstype@3.1.3)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react-icons: + specifier: ^5.3.0 + version: 5.3.0(react@18.2.0) tailwind-merge: specifier: ^2.2.2 version: 2.3.0 @@ -4890,10 +4893,10 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lucide-react@0.312.0: - resolution: {integrity: sha512-3UZsqyswRXjW4t+nw+InICewSimjPKHuSxiFYqTshv9xkK3tPPntXk/lvXc9pKlXIxm3v9WKyoxcrB6YHhP+dg==} + lucide-react@0.447.0: + resolution: {integrity: sha512-SZ//hQmvi+kDKrNepArVkYK7/jfeZ5uFNEnYmd45RKZcbGD78KLnrcNXmgeg6m+xNHFvTG+CblszXCy4n6DN4w==} peerDependencies: - react: ^16.5.1 || ^17.0.0 || ^18.0.0 + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc lz-string@1.5.0: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} @@ -5719,6 +5722,11 @@ packages: react: '>=16' react-dom: '>=16' + react-icons@5.3.0: + resolution: {integrity: sha512-DnUk8aFbTyQPSkCfF8dbX6kQjXA9DktMeJqfjrg6cK9vwQVMxmcA3BfP4QoiztVmEHtwlTgLFsPuH2NskKT6eg==} + peerDependencies: + react: '*' + react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} @@ -12981,7 +12989,7 @@ snapshots: dependencies: yallist: 3.1.1 - lucide-react@0.312.0(react@18.2.0): + lucide-react@0.447.0(react@18.2.0): dependencies: react: 18.2.0 @@ -13777,6 +13785,10 @@ snapshots: transitivePeerDependencies: - csstype + react-icons@5.3.0(react@18.2.0): + dependencies: + react: 18.2.0 + react-is@16.13.1: {} react-is@17.0.2: {} diff --git a/stories/TeamMember.tsx b/stories/TeamMember.tsx deleted file mode 100644 index 7ab84c57..00000000 --- a/stories/TeamMember.tsx +++ /dev/null @@ -1,83 +0,0 @@ -import React from 'react'; - -const TeamMembers = [ - { - name: 'Ryan Furrer', - role: 'UX Engineer', - github: 'github.com', - linkedin: 'linkedin.com', - }, - { - name: 'Walter Furrer', - role: 'Documentation Engineer', - github: 'github.com', - linkedin: 'linkedin.com', - }, - { - name: 'Walter Furrer', - role: 'Documentation Engineer', - github: 'github.com', - linkedin: 'linkedin.com', - }, - { - name: 'Walter Furrer', - role: 'Documentation Engineer', - github: 'github.com', - linkedin: 'linkedin.com', - }, - { - name: 'Walter Furrer', - role: 'Documentation Engineer', - github: 'github.com', - linkedin: 'linkedin.com', - }, - { - name: 'Walter Furrer', - role: 'Documentation Engineer', - github: 'github.com', - linkedin: 'linkedin.com', - }, -]; - -interface TeamMemberProps { - github: string; - linkedin: string; - name: string; - role: string; -} - -const TeamMember: React.FC = () => { - return ( -
- {TeamMembers.map((member) => ( -
-
-

{member.name}

-

{member.role}

- - GitHub - - - LinkedIn - -
-
- ))} -
- ); -}; - -export default TeamMember; diff --git a/stories/TeamMembers.tsx b/stories/TeamMembers.tsx new file mode 100644 index 00000000..5010f3d7 --- /dev/null +++ b/stories/TeamMembers.tsx @@ -0,0 +1,152 @@ +import React from 'react'; +import { + FaLinkedin, + FaXTwitter, + FaGithub, + FaLinkedinIn, +} from 'react-icons/fa6'; + +// Team Members Arrays +const TeamMembersArray = [ + { + name: 'Shashi Lo', + role: 'Engineering Manager', + github: 'https://github.com/shashilo', + linkedin: 'https://www.linkedin.com/in/shashilo/', + twitter: 'https://x.com/shashiwhocodes', + }, + { + name: 'Alex Appleget', + role: 'Software Engineer', + github: 'https://github.com/alexappleget', + linkedin: 'https://www.linkedin.com/in/alex-appleget/', + twitter: 'https://x.com/alexlikescoding', + }, + { + name: 'Richard Choi', + role: 'Developer Relations Engineer', + github: 'https://github.com/choir27', + linkedin: 'https://www.linkedin.com/in/richard-choir/', + twitter: 'https://x.com/choir241', + }, + { + name: 'Ryan Furrer', + role: 'UX Engineer', + github: 'https://github.com/ryandotfurrer', + linkedin: 'https://www.linkedin.com/in/ryanfurrer/', + twitter: 'https://x.com/ryandotfurrer', + }, + { + name: 'Walter Furrer', + role: 'Documentation Engineer', + github: 'https://github.com/FurrerW', + linkedin: 'https://www.linkedin.com/in/furrerw/', + twitter: 'https://x.com/furrerw', + }, + { + name: 'Corina Murg', + role: 'Accessibility Specialist', + github: 'https://github.com/CorinaMurg', + linkedin: 'https://www.linkedin.com/in/corinamurg/', + twitter: 'https://x.com/CorinaMurg', + }, + { + name: 'Mai Vang', + role: 'Documentation Engineer', + github: 'https://github.com/vmaineng', + linkedin: 'https://www.linkedin.com/in/mai-vang-swe/', + twitter: 'https://x.com/MaiVangSWE', + }, + { + name: 'Cody Epstein', + role: 'UX Engineer', + github: '', + linkedin: '', + twitter: 'https://www.linkedin.com/in/cody-epstein/', + }, + { + name: 'Michael Larocca', + role: 'Documentation Engineer', + github: '', + linkedin: 'https://www.linkedin.com/in/michaeljudelarocca/', + twitter: 'https://x.com/MikeJudeLarocca', + }, + { + name: 'Danielle Lindblom', + role: 'Frontend Engineer', + github: 'https://github.com/Danielle254', + linkedin: 'https://www.linkedin.com/in/danielle-lindblom/', + twitter: '', + }, +]; + +interface TeamMemberProps { + github?: string; + linkedin?: string; + name: string; + role: string; + twitter?: string; +} + +const TeamMembers: React.FC = () => { + const sortedTeamMembers = [...TeamMembersArray].sort((a, b) => { + // Put Shashi Lo first + if (a.name === 'Shashi Lo') return -1; + if (b.name === 'Shashi Lo') return 1; + + // For the rest, sort by last name + const lastNameA = a.name.split(' ').pop() || ''; + const lastNameB = b.name.split(' ').pop() || ''; + return lastNameA.localeCompare(lastNameB); + }); + + return ( +
+ {sortedTeamMembers.map((member) => ( +
+
+

{member.name}

+

{member.role}

+
+ {member.github && ( + + + + )} + {member.linkedin && ( + + + + )} + {member.twitter && ( + + + + )} +
+
+
+ ))} +
+ ); +}; + +export default TeamMembers; diff --git a/stories/Welcome.mdx b/stories/Welcome.mdx index 4de69831..03a279b3 100644 --- a/stories/Welcome.mdx +++ b/stories/Welcome.mdx @@ -6,11 +6,10 @@ import blogRecorderLogo from './assets/blogRecorderLogo.svg'; import frontendMentorLogo from './assets/frontendMentorLogo.svg'; import gitkrakenLogo from './assets/gitkrakenLogo.svg'; import pastelLogo from './assets/pastelLogo.svg'; -import TeamMember from './TeamMember'; +import TeamMembers from './TeamMembers'; import { Unstyled } from '@storybook/blocks'; - Gridiron Surivior Logo - -**Alex Appleget** -Software Engineer -[GitHub]() -[LinkedIn]() - -**Richard Choi** - DevRel Engineer - [GitHub]() - [LinkedIn]() - -**Ryan Furrer** - UX Engineer - [GitHub]() - [LinkedIn]() - -**Walter Furrer** - Documentation Engineer - [GitHub]() - [LinkedIn]() - -**Danielle Lindblom** - Frontend Engineer - [GitHub]() - [LinkedIn]() - -**Shashi Lo** - Engineering Manager - [GitHub]() - [LinkedIn]() - -**Corina Murg** - Accessibility Expert - [GitHub]() - [LinkedIn]() - -**Chris Nowicki** - Software Engineer - [GitHub]() - [LinkedIn]() - -**Mai Vang** - Frontend Engineer - [GitHub]() - [LinkedIn]() +
  1. diff --git a/stories/styles.css b/stories/styles.css index 841e4b93..304f46df 100644 --- a/stories/styles.css +++ b/stories/styles.css @@ -3,6 +3,40 @@ @tailwind utilities; @import url('../app/globals.css'); +* { + padding: 0; + margin: 0; +} + +h1 { + @apply text-5xl; +} + +h2 { + @apply text-4xl; +} + +h3 { + @apply text-3xl; +} + +h4 { + @apply text-2xl; +} + +h5 { + @apply text-xl; +} + +h6 { + @apply text-lg; +} + +p { + @apply text-base; + @apply text-muted-foreground; +} + .doc_nav_links { display: flex; justify-content: space-between; @@ -15,3 +49,7 @@ .doc_nav_links p { font-size: 2rem; } + +p { + @apply text-foreground; +} From 2341ef552f991b80094163a831354cb1a684e68f Mon Sep 17 00:00:00 2001 From: Walter Furrer Date: Fri, 4 Oct 2024 13:36:27 -0400 Subject: [PATCH 11/13] Started creating the sponsors component. Need to fix a few things to get it working correctly. Added a few divs to Welcome.mdx for styling purposes in styles.css. --- .storybook/manager.js | 1 + .storybook/preview.ts | 1 + stories/Sponsors.tsx | 69 +++++++++++++++++++++++++++++++++++++++++ stories/TeamMembers.tsx | 16 +++++----- stories/Welcome.mdx | 40 +++++------------------- stories/styles.css | 19 +++++++----- 6 files changed, 100 insertions(+), 46 deletions(-) create mode 100644 stories/Sponsors.tsx diff --git a/.storybook/manager.js b/.storybook/manager.js index e73de14d..688b9b7e 100644 --- a/.storybook/manager.js +++ b/.storybook/manager.js @@ -5,4 +5,5 @@ addons.setConfig({ showRoots: true, collapsedRoots: ['about', 'technical-planning-documents'], }, + layout: 'fullscreen', }); diff --git a/.storybook/preview.ts b/.storybook/preview.ts index 40b5e67a..cb900db3 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -16,6 +16,7 @@ const preview: Preview = { { name: 'light', value: '#fff' }, ], }, + layout: 'centered', }, }; diff --git a/stories/Sponsors.tsx b/stories/Sponsors.tsx new file mode 100644 index 00000000..fc4ea122 --- /dev/null +++ b/stories/Sponsors.tsx @@ -0,0 +1,69 @@ +import React from 'react'; +import Image from 'next/image'; + +const sponsorsArray = [ + { + name: 'Appwrite', + logo: '/stories/assets/appwriteLogo.svg', + website: '#', + }, + { + name: 'Blog Recorder', + logoPath: '/assets/blogRecorderLogo.svg', + website: '#', + }, + { + name: 'Frontend Mentor', + logoPath: './assets/frontendMentorLogo.svg', + website: '#', + }, + { + name: 'GitKraken', + logoPath: './assets/gitkrakenLogo.svg', + website: '#', + }, + { + name: 'Pastel', + logoPath: './assets/pastelLogo.svg', + website: '#', + }, +].sort((a, b) => a.name.localeCompare(b.name)); + +interface SponsorProps { + name: string; + logoPath: string; + website: string; +} + +const Sponsor = ({ name, logoPath, website }) => ( + + {`${name} +
    {name}
    +
    +); + +const Sponsors = () => ( +
    + {sponsorsArray.map((sponsor) => ( + + ))} +
    +); + +export default Sponsors; diff --git a/stories/TeamMembers.tsx b/stories/TeamMembers.tsx index 5010f3d7..b5dc4d8c 100644 --- a/stories/TeamMembers.tsx +++ b/stories/TeamMembers.tsx @@ -101,22 +101,24 @@ const TeamMembers: React.FC = () => { }); return ( -
    +
    {sortedTeamMembers.map((member) => (
    -

    {member.name}

    -

    {member.role}

    +

    + {member.name} +

    +

    {member.role}

    {member.github && ( @@ -126,7 +128,7 @@ const TeamMembers: React.FC = () => { href={member.linkedin} target="_blank" rel="noreferrer" - className="duration-300 hover:rotate-12 hover:scale-125" + className="text-muted-foreground duration-300 hover:rotate-12 hover:scale-125 hover:text-foreground hover:duration-300" > @@ -136,7 +138,7 @@ const TeamMembers: React.FC = () => { href={member.twitter} target="_blank" rel="noreferrer" - className="duration-300 hover:rotate-12 hover:scale-125" + className="text-muted-foreground duration-300 hover:rotate-12 hover:scale-125 hover:text-foreground hover:duration-300" > diff --git a/stories/Welcome.mdx b/stories/Welcome.mdx index 03a279b3..c53e1606 100644 --- a/stories/Welcome.mdx +++ b/stories/Welcome.mdx @@ -1,53 +1,28 @@ import './styles.css'; import Image from 'next/image'; import gridironLogo from './assets/gridironSurvivorLogo.svg'; -import appwriteLogo from './assets/appwriteLogo.svg'; -import blogRecorderLogo from './assets/blogRecorderLogo.svg'; -import frontendMentorLogo from './assets/frontendMentorLogo.svg'; -import gitkrakenLogo from './assets/gitkrakenLogo.svg'; -import pastelLogo from './assets/pastelLogo.svg'; import TeamMembers from './TeamMembers'; +import Sponsors from './Sponsors'; import { Unstyled } from '@storybook/blocks'; +
    Gridiron Surivior Logo +
    + # What is Gridiron Survivor? Gridiron Survivor is the ultimate survivor league app. Track your picks, see how you stack up against your competition and hope to be crowned champion! Developed by a talented team of Junior Developers led by Senior Software Engineer Shashi Lo, Gridiron Survivor is the perfect app for any football fan looking to take their survivor league to the next level. +
    ## Sponsors -Gridiron Surivior Logo -### Appwrite - -Blog Recorder Logo -### Blog Recorder - -Frontend Mentor Logo -### Frontend Mentor - -GitKraken Logo -### GitKraken - -Pastel Logo -### Pastel + ## Meet the Team @@ -57,4 +32,5 @@ Gridiron Survivor is the ultimate survivor league app. Track your picks, see how
  2. [Application Setup ](?path=/docs/about-application-setup--docs)
+
diff --git a/stories/styles.css b/stories/styles.css index 304f46df..d6786928 100644 --- a/stories/styles.css +++ b/stories/styles.css @@ -3,9 +3,14 @@ @tailwind utilities; @import url('../app/globals.css'); -* { - padding: 0; - margin: 0; +h1, +h2, +h3, +h4, +h5, +h6 { + @apply text-foreground; + @apply py-8; } h1 { @@ -37,6 +42,10 @@ p { @apply text-muted-foreground; } +.header p { + @apply text-lg; +} + .doc_nav_links { display: flex; justify-content: space-between; @@ -49,7 +58,3 @@ p { .doc_nav_links p { font-size: 2rem; } - -p { - @apply text-foreground; -} From 53a370308bb6188c2623dedb3994842a164f1e05 Mon Sep 17 00:00:00 2001 From: Walter Furrer Date: Sun, 6 Oct 2024 14:47:40 -0400 Subject: [PATCH 12/13] Addressed the rest of the comments/nits. - Finished adding new team members to the array, including social links. - Created FC for Sponsors section. Styled it. - Confirmed fonts and all sections look good on various breakpoints. - Opted to not include photos of team members for now. - Added link to our GitHub and the GIS website. - Styled similar to our website, but not dark mode. - There is some invisible padding that I cannot find out how to get rid of in Storybook. Will require more configuration. - Added some universal styling in styles.css, but most of the styling is done via Tailwind. - Moved assets from the stories folder to the public folder, as Storybook was not able to pull from the stories folder. - I tried messing with the config files to allow us to pull from the stories folder, but was unsuccessful. --- .storybook/main.ts | 6 +- .storybook/manager.js | 1 - .storybook/preview.ts | 1 + {stories => public}/assets/appwriteLogo.svg | 0 .../assets/blogRecorderLogo.svg | 0 public/assets/fonts/Geist[wght].ttf | Bin 0 -> 141824 bytes .../assets/frontendMentorLogo.svg | 0 {stories => public}/assets/gitkrakenLogo.svg | 0 {stories => public}/assets/pastelLogo.svg | 0 stories/Sponsors.tsx | 85 +++++++------- stories/TeamMembers.tsx | 104 ++++++++++-------- stories/Welcome.mdx | 15 +-- stories/assets/gridironSurvivorLogo.svg | 9 -- stories/styles.css | 16 ++- 14 files changed, 126 insertions(+), 111 deletions(-) rename {stories => public}/assets/appwriteLogo.svg (100%) rename {stories => public}/assets/blogRecorderLogo.svg (100%) create mode 100644 public/assets/fonts/Geist[wght].ttf rename {stories => public}/assets/frontendMentorLogo.svg (100%) rename {stories => public}/assets/gitkrakenLogo.svg (100%) rename {stories => public}/assets/pastelLogo.svg (100%) delete mode 100644 stories/assets/gridironSurvivorLogo.svg diff --git a/.storybook/main.ts b/.storybook/main.ts index 691fc39c..eab7bfc3 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -6,7 +6,11 @@ const config: StorybookConfig = { '../stories/**/*.mdx', '../components/**/*.stories.@(js|jsx|mjs|ts|tsx)', ], - staticDirs: ['../public'], + staticDirs: [ + '../public', + '../public/assets/*', + '../public/assets/storybook/*', + ], addons: [ '@storybook/addon-onboarding', '@storybook/addon-links', diff --git a/.storybook/manager.js b/.storybook/manager.js index 688b9b7e..e73de14d 100644 --- a/.storybook/manager.js +++ b/.storybook/manager.js @@ -5,5 +5,4 @@ addons.setConfig({ showRoots: true, collapsedRoots: ['about', 'technical-planning-documents'], }, - layout: 'fullscreen', }); diff --git a/.storybook/preview.ts b/.storybook/preview.ts index cb900db3..964bceee 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -1,5 +1,6 @@ import type { Preview } from '@storybook/react'; import '../app/globals.css'; +import '../stories/styles.css'; const preview: Preview = { parameters: { diff --git a/stories/assets/appwriteLogo.svg b/public/assets/appwriteLogo.svg similarity index 100% rename from stories/assets/appwriteLogo.svg rename to public/assets/appwriteLogo.svg diff --git a/stories/assets/blogRecorderLogo.svg b/public/assets/blogRecorderLogo.svg similarity index 100% rename from stories/assets/blogRecorderLogo.svg rename to public/assets/blogRecorderLogo.svg diff --git a/public/assets/fonts/Geist[wght].ttf b/public/assets/fonts/Geist[wght].ttf new file mode 100644 index 0000000000000000000000000000000000000000..e95c2195cdc766dfe96f0af9137f7f28a33fca7a GIT binary patch literal 141824 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 F{{epTBe?(o literal 0 HcmV?d00001 diff --git a/stories/assets/frontendMentorLogo.svg b/public/assets/frontendMentorLogo.svg similarity index 100% rename from stories/assets/frontendMentorLogo.svg rename to public/assets/frontendMentorLogo.svg diff --git a/stories/assets/gitkrakenLogo.svg b/public/assets/gitkrakenLogo.svg similarity index 100% rename from stories/assets/gitkrakenLogo.svg rename to public/assets/gitkrakenLogo.svg diff --git a/stories/assets/pastelLogo.svg b/public/assets/pastelLogo.svg similarity index 100% rename from stories/assets/pastelLogo.svg rename to public/assets/pastelLogo.svg diff --git a/stories/Sponsors.tsx b/stories/Sponsors.tsx index fc4ea122..8af00fd6 100644 --- a/stories/Sponsors.tsx +++ b/stories/Sponsors.tsx @@ -1,69 +1,66 @@ import React from 'react'; import Image from 'next/image'; -const sponsorsArray = [ +const SponsorsArray = [ { name: 'Appwrite', - logo: '/stories/assets/appwriteLogo.svg', - website: '#', + logo: '/assets/appwriteLogo.svg', + website: 'https://appwrite.io/', }, { name: 'Blog Recorder', - logoPath: '/assets/blogRecorderLogo.svg', - website: '#', + logo: '/assets/blogRecorderLogo.svg', + website: 'https://blogrecorder.com/', }, { name: 'Frontend Mentor', - logoPath: './assets/frontendMentorLogo.svg', - website: '#', + logo: '/assets/frontendMentorLogo.svg', + website: 'https://www.frontendmentor.io/', }, { name: 'GitKraken', - logoPath: './assets/gitkrakenLogo.svg', - website: '#', + logo: '/assets/gitkrakenLogo.svg', + website: 'https://www.gitkraken.com/', }, { name: 'Pastel', - logoPath: './assets/pastelLogo.svg', - website: '#', + logo: '/assets/pastelLogo.svg', + website: 'https://usepastel.com/', }, -].sort((a, b) => a.name.localeCompare(b.name)); +]; interface SponsorProps { name: string; - logoPath: string; + logo: string; website: string; } -const Sponsor = ({ name, logoPath, website }) => ( - - {`${name} -
{name}
-
-); +export default function Sponsors() { + const sortedSponsorsArray = [...SponsorsArray].sort((a, b) => + a.name.localeCompare(b.name), + ); -const Sponsors = () => ( -
- {sponsorsArray.map((sponsor) => ( - - ))} -
-); - -export default Sponsors; + return ( +
+

Sponsors

+
+ {sortedSponsorsArray.map((sponsor) => ( + + ))} +
+
+ ); +} diff --git a/stories/TeamMembers.tsx b/stories/TeamMembers.tsx index b5dc4d8c..088ec05c 100644 --- a/stories/TeamMembers.tsx +++ b/stories/TeamMembers.tsx @@ -60,14 +60,14 @@ const TeamMembersArray = [ { name: 'Cody Epstein', role: 'UX Engineer', - github: '', - linkedin: '', - twitter: 'https://www.linkedin.com/in/cody-epstein/', + github: 'https://github.com/kepsteen/', + linkedin: 'https://www.linkedin.com/in/cody-epstein/', + twitter: '', }, { name: 'Michael Larocca', role: 'Documentation Engineer', - github: '', + github: 'https://github.com/MichaelLarocca', linkedin: 'https://www.linkedin.com/in/michaeljudelarocca/', twitter: 'https://x.com/MikeJudeLarocca', }, @@ -78,6 +78,13 @@ const TeamMembersArray = [ linkedin: 'https://www.linkedin.com/in/danielle-lindblom/', twitter: '', }, + { + name: 'Dominick Monaco', + role: 'Frontend Engineer', + github: 'https://github.com/HoldUpFjord', + linkedin: 'https://www.linkedin.com/in/dominick-j-monaco/', + twitter: 'https://x.com/DominickJMonaco', + }, ]; interface TeamMemberProps { @@ -101,52 +108,53 @@ const TeamMembers: React.FC = () => { }); return ( -
- {sortedTeamMembers.map((member) => ( -
-
-

- {member.name} -

-

{member.role}

-
- {member.github && ( - - - - )} - {member.linkedin && ( - - - - )} - {member.twitter && ( - - - - )} +
+

Meet the Team

+
+ {sortedTeamMembers.map((member) => ( +
+
+
{member.name}
+

{member.role}

+
+ {member.github && ( + + + + )} + {member.linkedin && ( + + + + )} + {member.twitter && ( + + + + )} +
-
- ))} + ))} +
); }; diff --git a/stories/Welcome.mdx b/stories/Welcome.mdx index c53e1606..8a8fc9bd 100644 --- a/stories/Welcome.mdx +++ b/stories/Welcome.mdx @@ -1,36 +1,37 @@ import './styles.css'; import Image from 'next/image'; -import gridironLogo from './assets/gridironSurvivorLogo.svg'; +import gridironLogo from '../public/assets/logo-colored-outline.svg'; import TeamMembers from './TeamMembers'; import Sponsors from './Sponsors'; import { Unstyled } from '@storybook/blocks'; -
+
Gridiron Surivior Logo -
+
# What is Gridiron Survivor? Gridiron Survivor is the ultimate survivor league app. Track your picks, see how you stack up against your competition and hope to be crowned champion! Developed by a talented team of Junior Developers led by Senior Software Engineer Shashi Lo, Gridiron Survivor is the perfect app for any football fan looking to take their survivor league to the next level. +
    +
  1. [View our GitHub](https://github.com/LetsGetTechnical/gridiron-survivor)
  2. +
  3. [Check out Gridiron Survivor](https://www.gridironsurvivor.com)
  4. +
-## Sponsors -## Meet the Team -
  1. -
  2. [Application Setup ](?path=/docs/about-application-setup--docs)
  3. +
  4. [Application Setup](?path=/docs/about-application-setup--docs)
diff --git a/stories/assets/gridironSurvivorLogo.svg b/stories/assets/gridironSurvivorLogo.svg deleted file mode 100644 index bb3bda01..00000000 --- a/stories/assets/gridironSurvivorLogo.svg +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/stories/styles.css b/stories/styles.css index d6786928..5d902f32 100644 --- a/stories/styles.css +++ b/stories/styles.css @@ -3,6 +3,10 @@ @tailwind utilities; @import url('../app/globals.css'); +* { + font-family: Geist Sans; +} + h1, h2, h3, @@ -10,7 +14,9 @@ h4, h5, h6 { @apply text-foreground; - @apply py-8; + @apply font-bold; + @apply tracking-tight; + text-wrap: balance; } h1 { @@ -39,11 +45,19 @@ h6 { p { @apply text-base; + @apply tracking-normal; @apply text-muted-foreground; + text-wrap: balance; +} + +.header h1 { + @apply pt-24; + @apply pb-8; } .header p { @apply text-lg; + @apply pb-8; } .doc_nav_links { From 4ccd028d4fa9b23e1928e6feb6a35f8a4703c3b7 Mon Sep 17 00:00:00 2001 From: Walter Furrer Date: Wed, 9 Oct 2024 22:03:49 -0400 Subject: [PATCH 13/13] Added names for all divs, removed sort functionaly from arrays, broke the TeamMember component into two componments, removed unnecessary comments, added/configured eslint, added jsdocs comments, fixed non-incremental tags, correct alt spelling for GIS Logo on Welcome.mdx, fixed the storybook/static files directory issues. --- .env.example | 4 - .storybook/main.ts | 6 +- .storybook/preview.ts | 7 - stories/Sponsors.tsx | 62 ++++---- stories/TeamMemberInfo.tsx | 65 ++++++++ ...{TeamMembers.tsx => TeamMemberSection.tsx} | 141 +++++++----------- stories/Welcome.mdx | 10 +- stories/styles.css | 4 +- 8 files changed, 159 insertions(+), 140 deletions(-) delete mode 100644 .env.example create mode 100644 stories/TeamMemberInfo.tsx rename stories/{TeamMembers.tsx => TeamMemberSection.tsx} (54%) diff --git a/.env.example b/.env.example deleted file mode 100644 index 27599447..00000000 --- a/.env.example +++ /dev/null @@ -1,4 +0,0 @@ -NEXT_PUBLIC_APPWRITE_API_URL= -NEXT_PUBLIC_APPWRITE_PROJECT_ID= -NEXT_PUBLIC_APPWRITE_DATABASE_ID= -APPWRITE_API_KEY= \ No newline at end of file diff --git a/.storybook/main.ts b/.storybook/main.ts index eab7bfc3..691fc39c 100644 --- a/.storybook/main.ts +++ b/.storybook/main.ts @@ -6,11 +6,7 @@ const config: StorybookConfig = { '../stories/**/*.mdx', '../components/**/*.stories.@(js|jsx|mjs|ts|tsx)', ], - staticDirs: [ - '../public', - '../public/assets/*', - '../public/assets/storybook/*', - ], + staticDirs: ['../public'], addons: [ '@storybook/addon-onboarding', '@storybook/addon-links', diff --git a/.storybook/preview.ts b/.storybook/preview.ts index 964bceee..9de16511 100644 --- a/.storybook/preview.ts +++ b/.storybook/preview.ts @@ -10,13 +10,6 @@ const preview: Preview = { date: /Date$/i, }, }, - backgrounds: { - default: 'dark', - values: [ - { name: 'dark', value: '#09090B' }, - { name: 'light', value: '#fff' }, - ], - }, layout: 'centered', }, }; diff --git a/stories/Sponsors.tsx b/stories/Sponsors.tsx index 8af00fd6..7872ff22 100644 --- a/stories/Sponsors.tsx +++ b/stories/Sponsors.tsx @@ -1,66 +1,74 @@ +// Copyright (c) Gridiron Survivor. +// Licensed under the MIT License. + import React from 'react'; import Image from 'next/image'; -const SponsorsArray = [ +type Sponsor = { + name: string; + logoPath: string; + website: string; +}; + +const SponsorsArray: Sponsor[] = [ { name: 'Appwrite', - logo: '/assets/appwriteLogo.svg', + logoPath: '/assets/appwriteLogo.svg', website: 'https://appwrite.io/', }, { name: 'Blog Recorder', - logo: '/assets/blogRecorderLogo.svg', + logoPath: '/assets/blogRecorderLogo.svg', website: 'https://blogrecorder.com/', }, { name: 'Frontend Mentor', - logo: '/assets/frontendMentorLogo.svg', + logoPath: '/assets/frontendMentorLogo.svg', website: 'https://www.frontendmentor.io/', }, { name: 'GitKraken', - logo: '/assets/gitkrakenLogo.svg', + logoPath: '/assets/gitkrakenLogo.svg', website: 'https://www.gitkraken.com/', }, { name: 'Pastel', - logo: '/assets/pastelLogo.svg', + logoPath: '/assets/pastelLogo.svg', website: 'https://usepastel.com/', }, ]; -interface SponsorProps { - name: string; - logo: string; - website: string; -} - -export default function Sponsors() { - const sortedSponsorsArray = [...SponsorsArray].sort((a, b) => - a.name.localeCompare(b.name), - ); - +/** + * Creates the Sponsors section of the Storybook Welcome page. + * @returns the Sponsors section + */ +const Sponsors = (): React.ReactElement => { return ( -
+

Sponsors

-
); -} +}; + +export default Sponsors; diff --git a/stories/TeamMemberInfo.tsx b/stories/TeamMemberInfo.tsx new file mode 100644 index 00000000..9b22c65b --- /dev/null +++ b/stories/TeamMemberInfo.tsx @@ -0,0 +1,65 @@ +// Copyright (c) Gridiron Survivor. +// Licensed under the MIT License. + +import React from 'react'; +import { FaLinkedin, FaXTwitter, FaGithub } from 'react-icons/fa6'; +import { TeamMember } from './TeamMemberSection'; + +/** + * Renders social media links for a team member. + * @param {TeamMember} props - The properties of a team member. + * @param [props.github] - The GitHub profile URL of the team member. + * @param [props.linkedin] - The LinkedIn profile URL of the team member. + * @param [props.twitter] - The Twitter profile URL of the team member. + * @returns {React.ReactElement} A React element containing social media links. + */ +const TeamMemberInfo = ({ + name, + role, + github, + linkedin, + twitter, +}: TeamMember): React.ReactElement => { + return ( + <> +
+

{name}

+

{role}

+
+
+ {github && ( + + + + )} + {linkedin && ( + + + + )} + {twitter && ( + + + + )} +
+ + ); +}; + +export default TeamMemberInfo; diff --git a/stories/TeamMembers.tsx b/stories/TeamMemberSection.tsx similarity index 54% rename from stories/TeamMembers.tsx rename to stories/TeamMemberSection.tsx index 088ec05c..551e6044 100644 --- a/stories/TeamMembers.tsx +++ b/stories/TeamMemberSection.tsx @@ -1,13 +1,18 @@ +// Copyright (c) Gridiron Survivor. +// Licensed under the MIT License. + import React from 'react'; -import { - FaLinkedin, - FaXTwitter, - FaGithub, - FaLinkedinIn, -} from 'react-icons/fa6'; +import TeamMemberInfo from './TeamMemberInfo'; + +export type TeamMember = { + name: string; + role: string; + github?: string; + linkedin?: string; + twitter?: string; +}; -// Team Members Arrays -const TeamMembersArray = [ +export const TeamMembersArray: TeamMember[] = [ { name: 'Shashi Lo', role: 'Engineering Manager', @@ -29,6 +34,13 @@ const TeamMembersArray = [ linkedin: 'https://www.linkedin.com/in/richard-choir/', twitter: 'https://x.com/choir241', }, + { + name: 'Cody Epstein', + role: 'UX Engineer', + github: 'https://github.com/kepsteen/', + linkedin: 'https://www.linkedin.com/in/cody-epstein/', + twitter: '', + }, { name: 'Ryan Furrer', role: 'UX Engineer', @@ -43,27 +55,6 @@ const TeamMembersArray = [ linkedin: 'https://www.linkedin.com/in/furrerw/', twitter: 'https://x.com/furrerw', }, - { - name: 'Corina Murg', - role: 'Accessibility Specialist', - github: 'https://github.com/CorinaMurg', - linkedin: 'https://www.linkedin.com/in/corinamurg/', - twitter: 'https://x.com/CorinaMurg', - }, - { - name: 'Mai Vang', - role: 'Documentation Engineer', - github: 'https://github.com/vmaineng', - linkedin: 'https://www.linkedin.com/in/mai-vang-swe/', - twitter: 'https://x.com/MaiVangSWE', - }, - { - name: 'Cody Epstein', - role: 'UX Engineer', - github: 'https://github.com/kepsteen/', - linkedin: 'https://www.linkedin.com/in/cody-epstein/', - twitter: '', - }, { name: 'Michael Larocca', role: 'Documentation Engineer', @@ -85,78 +76,48 @@ const TeamMembersArray = [ linkedin: 'https://www.linkedin.com/in/dominick-j-monaco/', twitter: 'https://x.com/DominickJMonaco', }, + { + name: 'Corina Murg', + role: 'Accessibility Specialist', + github: 'https://github.com/CorinaMurg', + linkedin: 'https://www.linkedin.com/in/corinamurg/', + twitter: 'https://x.com/CorinaMurg', + }, + { + name: 'Mai Vang', + role: 'Documentation Engineer', + github: 'https://github.com/vmaineng', + linkedin: 'https://www.linkedin.com/in/mai-vang-swe/', + twitter: 'https://x.com/MaiVangSWE', + }, ]; -interface TeamMemberProps { - github?: string; - linkedin?: string; - name: string; - role: string; - twitter?: string; -} - -const TeamMembers: React.FC = () => { - const sortedTeamMembers = [...TeamMembersArray].sort((a, b) => { - // Put Shashi Lo first - if (a.name === 'Shashi Lo') return -1; - if (b.name === 'Shashi Lo') return 1; - - // For the rest, sort by last name - const lastNameA = a.name.split(' ').pop() || ''; - const lastNameB = b.name.split(' ').pop() || ''; - return lastNameA.localeCompare(lastNameB); - }); - +/** + * Creates the Team Member section of the Storybook Welcome Page + * @returns the Team Member section + */ +const TeamMemberSection = (): React.ReactElement => { return ( -
+

Meet the Team

- {sortedTeamMembers.map((member) => ( + {TeamMembersArray.map((member) => (
-
-
{member.name}
-

{member.role}

-
- {member.github && ( - - - - )} - {member.linkedin && ( - - - - )} - {member.twitter && ( - - - - )} -
-
+
))}
-
+
); }; -export default TeamMembers; +export default TeamMemberSection; diff --git a/stories/Welcome.mdx b/stories/Welcome.mdx index 8a8fc9bd..6cd34cb8 100644 --- a/stories/Welcome.mdx +++ b/stories/Welcome.mdx @@ -1,7 +1,7 @@ import './styles.css'; import Image from 'next/image'; import gridironLogo from '../public/assets/logo-colored-outline.svg'; -import TeamMembers from './TeamMembers'; +import TeamMemberSection from './TeamMemberSection'; import Sponsors from './Sponsors'; import { Unstyled } from '@storybook/blocks'; @@ -9,11 +9,11 @@ import { Unstyled } from '@storybook/blocks';
Gridiron Surivior Logo -
+
# What is Gridiron Survivor? @@ -23,11 +23,11 @@ Gridiron Survivor is the ultimate survivor league app. Track your picks, see how
  • [View our GitHub](https://github.com/LetsGetTechnical/gridiron-survivor)
  • [Check out Gridiron Survivor](https://www.gridironsurvivor.com)
  • -
    + - +
    1. diff --git a/stories/styles.css b/stories/styles.css index 5d902f32..8bc8ce8a 100644 --- a/stories/styles.css +++ b/stories/styles.css @@ -50,12 +50,12 @@ p { text-wrap: balance; } -.header h1 { +header h1 { @apply pt-24; @apply pb-8; } -.header p { +header p { @apply text-lg; @apply pb-8; }