From 9f7967bfc3fe0593631619b75f40d39c1441b0ed Mon Sep 17 00:00:00 2001 From: Himanshu Jha <157563599+himanshujha05@users.noreply.github.com> Date: Thu, 22 Jan 2026 11:38:26 -0700 Subject: [PATCH 1/3] Implement contributor data fetching and display Added contributor data fetching and dynamic rendering of contributor names with links. --- pages/aboutus/index.js | 50 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 45 insertions(+), 5 deletions(-) diff --git a/pages/aboutus/index.js b/pages/aboutus/index.js index b146c72..418e1a3 100644 --- a/pages/aboutus/index.js +++ b/pages/aboutus/index.js @@ -1,9 +1,11 @@ import ResponsiveAppBar from "../../components/widgets/ResponsiveAppBar"; -import { createTheme, ThemeProvider, Container, Box } from "@mui/material"; -import "bootstrap/dist/css/bootstrap.min.css"; +import { createTheme, ThemeProvider, Container, Box, Button, Collapse } from "@mui/material"; +import 'bootstrap/dist/css/bootstrap.min.css'; import { Card } from "react-bootstrap"; import isulogo from "../../components/images/ISULogo.png"; import Image from "next/image"; +import { useState, useEffect } from "react"; +import Link from "next/link"; export default function AboutUsPage() { const theme = createTheme({ @@ -15,6 +17,31 @@ export default function AboutUsPage() { }); const cardBodyStyle = { padding: "20px" }; + const [contributorData, setContributorData] = useState({}); + + // Fetch contributor metadata from backend + useEffect(() => { + const fetchAllContributorData = async () => { + const dataMap = {}; + + for (const name of contributors) { + try { + const encodedName = encodeURIComponent(name); + const response = await fetch(`https://api.redux.portneuf.cose.isu.edu/Navigation/ContributorProfile/${encodedName}`); + if (response.ok) { + const data = await response.json(); + dataMap[name] = data; + } + } catch (error) { + console.warn(`Failed to fetch data for ${name}:`, error); + } + } + + setContributorData(dataMap); + }; + + fetchAllContributorData(); + }, []); const contributors = [ "Kaden Marchetti", @@ -159,9 +186,22 @@ export default function AboutUsPage() { lineHeight: "1.6", }} > - {contributors.map((name, index) => ( -
• {name}
- ))} + {contributors.map((name, index) => { + const data = contributorData[name]; + const nameSlug = name.replace(/\s+/g, '-').toLowerCase(); + + return ( +
+ • + + {name} + + +
+ ); + })} From c2614da12655660e90cf25806e1e6be8738b00a2 Mon Sep 17 00:00:00 2001 From: Himanshu Jha <157563599+himanshujha05@users.noreply.github.com> Date: Thu, 22 Jan 2026 12:21:35 -0700 Subject: [PATCH 2/3] Refactor contributor data handling and UI updates Refactor contributor data fetching and modal handling. Update publication titles for clarity and add Dialog component for contributor profiles. --- pages/aboutus/index.js | 230 +++++++++++++++++++++++++++++------------ 1 file changed, 163 insertions(+), 67 deletions(-) diff --git a/pages/aboutus/index.js b/pages/aboutus/index.js index 418e1a3..1347625 100644 --- a/pages/aboutus/index.js +++ b/pages/aboutus/index.js @@ -1,11 +1,11 @@ import ResponsiveAppBar from "../../components/widgets/ResponsiveAppBar"; -import { createTheme, ThemeProvider, Container, Box, Button, Collapse } from "@mui/material"; +import { createTheme, ThemeProvider, Container, Box, Button, Dialog, DialogTitle, DialogContent, DialogActions, IconButton } from "@mui/material"; +import CloseIcon from "@mui/icons-material/Close"; import 'bootstrap/dist/css/bootstrap.min.css'; import { Card } from "react-bootstrap"; import isulogo from "../../components/images/ISULogo.png"; import Image from "next/image"; import { useState, useEffect } from "react"; -import Link from "next/link"; export default function AboutUsPage() { const theme = createTheme({ @@ -17,32 +17,14 @@ export default function AboutUsPage() { }); const cardBodyStyle = { padding: "20px" }; + + // State management const [contributorData, setContributorData] = useState({}); + const [selectedContributor, setSelectedContributor] = useState(null); + const [modalOpen, setModalOpen] = useState(false); + const [loading, setLoading] = useState(false); - // Fetch contributor metadata from backend - useEffect(() => { - const fetchAllContributorData = async () => { - const dataMap = {}; - - for (const name of contributors) { - try { - const encodedName = encodeURIComponent(name); - const response = await fetch(`https://api.redux.portneuf.cose.isu.edu/Navigation/ContributorProfile/${encodedName}`); - if (response.ok) { - const data = await response.json(); - dataMap[name] = data; - } - } catch (error) { - console.warn(`Failed to fetch data for ${name}:`, error); - } - } - - setContributorData(dataMap); - }; - - fetchAllContributorData(); - }, []); - + // Contributors array defined FIRST const contributors = [ "Kaden Marchetti", "Caleb Eardley", @@ -63,39 +45,77 @@ export default function AboutUsPage() { "George Lake", "Grant Gardner", "Jason Wright", - "Alex Svancara", - "Eric Hill", - "Max Grünwoldt", + "Alex Svancara", + "Eric Hill", + "Max Grünwoldt", "Paul Gilbreath", "Andreas Kramer", "Courtney Bodily", "Rakesh Itani" ]; + // Fetch all contributor data on mount + useEffect(() => { + const fetchAllContributorData = async () => { + const dataMap = {}; + + for (const name of contributors) { + try { + const encodedName = encodeURIComponent(name); + const response = await fetch(`http://localhost:27000/Navigation/ContributorProfile/${encodedName}`); + if (response.ok) { + const data = await response.json(); + dataMap[name] = data; + } + } catch (error) { + console.warn(`Failed to fetch data for ${name}:`, error); + } + } + + setContributorData(dataMap); + }; + + fetchAllContributorData(); + }, []); + + // Handle contributor click - open modal + const handleContributorClick = (name) => { + setLoading(true); + setSelectedContributor(name); + + // Simulate loading if data already cached + setTimeout(() => { + setLoading(false); + setModalOpen(true); + }, 300); + }; + + // Close modal + const handleCloseModal = () => { + setModalOpen(false); + setSelectedContributor(null); + setLoading(false); + }; + const publications = [ { - title: - "R. Phillips and P. M. Bodily, “Spade: A library for programmatic parsing and verification of discrete data structures,” in 2025 Intermountain Engineering, Technology and Computing (IETC), pp. 1–5, IEEE, 2025.", + title: "R. Phillips and P. M. Bodily, Spade: A library for programmatic parsing and verification of discrete data structures, in 2025 Intermountain Engineering, Technology and Computing (IETC), pp. 1–5, IEEE, 2025.", link: "https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=11039449", }, { - title: - "K. Marchetti, A. Sevaljevic, A. Diviney, R. Phillips, C. Eardley, R. Khadka, D. Igbokwe, and P. M. Bodily, “Redux: An interactive, dynamic knowledge base for teaching NP-completeness,” in Proceedings of the 29th annual ACM conference on Innovation and Technology in Computer Science Education (ITiCSE), 2024.", + title: "K. Marchetti, A. Sevaljevic, A. Diviney, R. Phillips, C. Eardley, R. Khadka, D. Igbokwe, and P. M. Bodily, Redux: An interactive, dynamic knowledge base for teaching NP-completeness, in Proceedings of the 29th annual ACM conference on Innovation and Technology in Computer Science Education (ITiCSE), 2024.", link: "https://etd.iri.isu.edu/ViewSpecimen.aspx?ID=2206", }, { - title: - "A. Sevaljevic and P. M. Bodily, “Comparative empirical analysis of dancing links implementations to solve the exact cover problem,” in Proceedings of the 4th Intermountain Engineering, Technology, and Computing Conference (i-ETC), pp. 255–258, IEEE, 2024.", + title: "A. Sevaljevic and P. M. Bodily, Comparative empirical analysis of dancing links implementations to solve the exact cover problem, in Proceedings of the 4th Intermountain Engineering, Technology, and Computing Conference (i-ETC), pp. 255–258, IEEE, 2024.", link: "https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=10564396", }, { - title: - 'K. Marchetti and P. Bodily, "Visualizing the 3SAT to CLIQUE Reduction Process," 2022 Intermountain Engineering, Technology and Computing (IETC), Orem, UT, USA, 2022, pp. 1-5, doi: 10.1109/IETC54973.2022.9796851.', + title: "K. Marchetti and P. Bodily, Visualizing the 3SAT to CLIQUE Reduction Process, 2022 Intermountain Engineering, Technology and Computing (IETC), Orem, UT, USA, 2022, pp. 1-5, doi: 10.1109/IETC54973.2022.9796851.", link: "https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9796851", }, { - title: - 'K. Marchetti and P. Bodily, "KAMI: Leveraging the power of crowd-sourcing to solve complex, real-world problems," 2022 Intermountain Engineering, Technology and Computing (IETC), Orem, UT, USA, 2022, pp. 1-4, doi: 10.1109/IETC54973.2022.9796945.', + title: "K. Marchetti and P. Bodily, KAMI: Leveraging the power of crowd-sourcing to solve complex, real-world problems, 2022 Intermountain Engineering, Technology and Computing (IETC), Orem, UT, USA, 2022, pp. 1-4, doi: 10.1109/IETC54973.2022.9796945.", link: "https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9796945", }, ]; @@ -118,7 +138,7 @@ export default function AboutUsPage() { target="_blank" rel="noopener noreferrer" > - "Reducibility Among Combinatorial Problems" + {"Reducibility Among Combinatorial Problems"} {" "} {"(Karp, 1972)."} @@ -187,18 +207,19 @@ export default function AboutUsPage() { }} > {contributors.map((name, index) => { - const data = contributorData[name]; - const nameSlug = name.replace(/\s+/g, '-').toLowerCase(); - return (
- • - - {name} - - + • handleContributorClick(name)} + style={{ + color: "#f47920", + textDecoration: "underline", + cursor: "pointer", + fontWeight: "500" + }} + > + {name} +
); })} @@ -206,23 +227,23 @@ export default function AboutUsPage() { - {/* LEARN MORE Card */} - - Learn More - - {`Additional documentation can be found at the following links:`} - - - - + {/* LEARN MORE Card */} + + Learn More + + {`Additional documentation can be found at the following links:`} + + + + + {/* ISU Logo */} + + {/* Contributor Profile Modal */} + + + {selectedContributor && `${selectedContributor}'s Profile`} + theme.palette.grey[500], + }} + > + + + + + {loading ? ( +

Loading...

+ ) : selectedContributor && contributorData[selectedContributor] ? ( +
+
Personal Information
+

Email: {contributorData[selectedContributor].email || "Not specified"}

+

Education: {contributorData[selectedContributor].education || "Not specified"}

+

Major: {contributorData[selectedContributor].major || "Not specified"}

+

Bio: {contributorData[selectedContributor].bio || "Not specified"}

+ +
Contributions
+

Total Contributions: {contributorData[selectedContributor].totalContributions || 0}

+ + {contributorData[selectedContributor].problemsContributed && contributorData[selectedContributor].problemsContributed.length > 0 && ( +
+ Problems: {contributorData[selectedContributor].problemsContributed.length} +
    + {contributorData[selectedContributor].problemsContributed.map((problem, idx) => ( +
  • {problem}
  • + ))} +
+
+ )} + + {contributorData[selectedContributor].solversCreated && contributorData[selectedContributor].solversCreated.length > 0 && ( +
+ Solvers: {contributorData[selectedContributor].solversCreated.length} +
    + {contributorData[selectedContributor].solversCreated.map((solver, idx) => ( +
  • {solver}
  • + ))} +
+
+ )} + + {contributorData[selectedContributor].reductionsCreated && contributorData[selectedContributor].reductionsCreated.length > 0 && ( +
+ Reductions: {contributorData[selectedContributor].reductionsCreated.length} +
    + {contributorData[selectedContributor].reductionsCreated.map((reduction, idx) => ( +
  • {reduction}
  • + ))} +
+
+ )} +
+ ) : ( +

No data found

+ )} +
+ + + +
); } From 99586c9087e3905daa7b40f8301782f84a6474a6 Mon Sep 17 00:00:00 2001 From: himanshujha05 <157563599+himanshujha05@users.noreply.github.com> Date: Fri, 24 Apr 2026 03:59:12 -0600 Subject: [PATCH 3/3] updated About Us page --- pages/aboutus/index.js | 307 +++++++++++++++++------------------------ 1 file changed, 129 insertions(+), 178 deletions(-) diff --git a/pages/aboutus/index.js b/pages/aboutus/index.js index 1347625..6bf48b1 100644 --- a/pages/aboutus/index.js +++ b/pages/aboutus/index.js @@ -1,12 +1,25 @@ import ResponsiveAppBar from "../../components/widgets/ResponsiveAppBar"; -import { createTheme, ThemeProvider, Container, Box, Button, Dialog, DialogTitle, DialogContent, DialogActions, IconButton } from "@mui/material"; +import { + createTheme, + ThemeProvider, + Container, + Box, + Button, + Dialog, + DialogTitle, + DialogContent, + DialogActions, + IconButton, +} from "@mui/material"; import CloseIcon from "@mui/icons-material/Close"; -import 'bootstrap/dist/css/bootstrap.min.css'; +import "bootstrap/dist/css/bootstrap.min.css"; import { Card } from "react-bootstrap"; import isulogo from "../../components/images/ISULogo.png"; import Image from "next/image"; import { useState, useEffect } from "react"; +const reduxBaseUrl = process.env.NEXT_PUBLIC_REDUX_BASE_URL; + export default function AboutUsPage() { const theme = createTheme({ palette: { @@ -17,105 +30,74 @@ export default function AboutUsPage() { }); const cardBodyStyle = { padding: "20px" }; - - // State management - const [contributorData, setContributorData] = useState({}); + + const [contributors, setContributors] = useState([]); + const [githubMap, setGithubMap] = useState({}); const [selectedContributor, setSelectedContributor] = useState(null); + const [profileData, setProfileData] = useState(null); const [modalOpen, setModalOpen] = useState(false); const [loading, setLoading] = useState(false); - // Contributors array defined FIRST - const contributors = [ - "Kaden Marchetti", - "Caleb Eardley", - "Daniel Igbokwe", - "Alex Diviney", - "Janita Aamir", - "Andrija Sevaljevic", - "Garret Stouffer", - "Porter Glines", - "Show Pratoomratana", - "Russell Phillips", - "Michael Crapse", - "Ian Gonzalez", - "Sabal Subedi", - "Himanshu Jha", - "Sansar Kharal", - "Pratham Khanal", - "George Lake", - "Grant Gardner", - "Jason Wright", - "Alex Svancara", - "Eric Hill", - "Max Grünwoldt", - "Paul Gilbreath", - "Andreas Kramer", - "Courtney Bodily", - "Rakesh Itani" - ]; - - // Fetch all contributor data on mount useEffect(() => { - const fetchAllContributorData = async () => { - const dataMap = {}; - - for (const name of contributors) { - try { - const encodedName = encodeURIComponent(name); - const response = await fetch(`http://localhost:27000/Navigation/ContributorProfile/${encodedName}`); - if (response.ok) { - const data = await response.json(); - dataMap[name] = data; - } - } catch (error) { - console.warn(`Failed to fetch data for ${name}:`, error); + fetch(`${reduxBaseUrl}Navigation/ContributorProfile/directory`) + .then((r) => r.json()) + .then((entries) => { + setContributors(entries.map((e) => e.name)); + const map = {}; + for (const entry of entries) { + if (entry.githubUsername) map[entry.name] = entry.githubUsername; } - } - - setContributorData(dataMap); - }; - - fetchAllContributorData(); + setGithubMap(map); + }) + .catch(() => {}); }, []); - // Handle contributor click - open modal const handleContributorClick = (name) => { setLoading(true); setSelectedContributor(name); - - // Simulate loading if data already cached - setTimeout(() => { - setLoading(false); - setModalOpen(true); - }, 300); + setProfileData(null); + setModalOpen(true); + + fetch(`${reduxBaseUrl}Navigation/ContributorProfile/${encodeURIComponent(name)}`) + .then((r) => (r.ok ? r.json() : null)) + .then((data) => { + setProfileData(data); + setLoading(false); + }) + .catch(() => setLoading(false)); }; - // Close modal const handleCloseModal = () => { setModalOpen(false); setSelectedContributor(null); + setProfileData(null); setLoading(false); }; const publications = [ { - title: "R. Phillips and P. M. Bodily, Spade: A library for programmatic parsing and verification of discrete data structures, in 2025 Intermountain Engineering, Technology and Computing (IETC), pp. 1–5, IEEE, 2025.", + title: + "R. Phillips and P. M. Bodily, Spade: A library for programmatic parsing and verification of discrete data structures, in 2025 Intermountain Engineering, Technology and Computing (IETC), pp. 1–5, IEEE, 2025.", link: "https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=11039449", }, { - title: "K. Marchetti, A. Sevaljevic, A. Diviney, R. Phillips, C. Eardley, R. Khadka, D. Igbokwe, and P. M. Bodily, Redux: An interactive, dynamic knowledge base for teaching NP-completeness, in Proceedings of the 29th annual ACM conference on Innovation and Technology in Computer Science Education (ITiCSE), 2024.", + title: + "K. Marchetti, A. Sevaljevic, A. Diviney, R. Phillips, C. Eardley, R. Khadka, D. Igbokwe, and P. M. Bodily, Redux: An interactive, dynamic knowledge base for teaching NP-completeness, in Proceedings of the 29th annual ACM conference on Innovation and Technology in Computer Science Education (ITiCSE), 2024.", link: "https://etd.iri.isu.edu/ViewSpecimen.aspx?ID=2206", }, { - title: "A. Sevaljevic and P. M. Bodily, Comparative empirical analysis of dancing links implementations to solve the exact cover problem, in Proceedings of the 4th Intermountain Engineering, Technology, and Computing Conference (i-ETC), pp. 255–258, IEEE, 2024.", + title: + "A. Sevaljevic and P. M. Bodily, Comparative empirical analysis of dancing links implementations to solve the exact cover problem, in Proceedings of the 4th Intermountain Engineering, Technology, and Computing Conference (i-ETC), pp. 255–258, IEEE, 2024.", link: "https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=10564396", }, { - title: "K. Marchetti and P. Bodily, Visualizing the 3SAT to CLIQUE Reduction Process, 2022 Intermountain Engineering, Technology and Computing (IETC), Orem, UT, USA, 2022, pp. 1-5, doi: 10.1109/IETC54973.2022.9796851.", + title: + "K. Marchetti and P. Bodily, Visualizing the 3SAT to CLIQUE Reduction Process, 2022 Intermountain Engineering, Technology and Computing (IETC), Orem, UT, USA, 2022, pp. 1-5, doi: 10.1109/IETC54973.2022.9796851.", link: "https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=9796851", }, { - title: "K. Marchetti and P. Bodily, KAMI: Leveraging the power of crowd-sourcing to solve complex, real-world problems, 2022 Intermountain Engineering, Technology and Computing (IETC), Orem, UT, USA, 2022, pp. 1-4, doi: 10.1109/IETC54973.2022.9796945.", + title: + "K. Marchetti and P. Bodily, KAMI: Leveraging the power of crowd-sourcing to solve complex, real-world problems, 2022 Intermountain Engineering, Technology and Computing (IETC), Orem, UT, USA, 2022, pp. 1-4, doi: 10.1109/IETC54973.2022.9796945.", link: "https://ieeexplore.ieee.org/stamp/stamp.jsp?arnumber=9796945", }, ]; @@ -126,47 +108,30 @@ export default function AboutUsPage() {
- {/* ABOUT US Card */} + {/* ABOUT US */} - - About Us - + About Us {"Welcome to Redux, a platform for NP-Complete problems. Input your challenges and gain access to reductions, solutions, verifiers, and visualizations. Join our community of problem solvers and unravel computational complexities using the application's library. The project was greatly inspired by Richard Karp's paper "} - - {"Reducibility Among Combinatorial Problems"} + + Reducibility Among Combinatorial Problems {" "} - {"(Karp, 1972)."} + (Karp, 1972).
- {/* PUBLICATIONS Card */} + {/* PUBLICATIONS */} - - Publications - + Publications -

- Below are research publications associated with the Redux project - and its contributors: -

+

Below are research publications associated with the Redux project and its contributors:

@@ -175,70 +140,51 @@ export default function AboutUsPage() {
- {/* CONTRIBUTORS Card */} + {/* CONTRIBUTORS */} - - Contributors - + Contributors

This project was started by Dr.{" "} - + Paul Bodily , who is also the ISU Faculty Sponsor of the project.

-

- The students who contributed to the creation of the application - are: -

+

The students who contributed to the creation of the application are:

- {/* Column-ordered 3-column layout */} -
- {contributors.map((name, index) => { - return ( -
- • handleContributorClick(name)} - style={{ - color: "#f47920", - textDecoration: "underline", - cursor: "pointer", - fontWeight: "500" - }} - > - {name} - -
- ); - })} +
+ {contributors.map((name, index) => ( +
+ •{" "} + handleContributorClick(name)} + onMouseEnter={(e) => (e.target.style.color = "#ff9a40")} + onMouseLeave={(e) => (e.target.style.color = "#f47920")} + style={{ color: "#f47920", textDecoration: "underline", cursor: "pointer", fontWeight: "500" }} + > + {name} + +
+ ))}
- {/* LEARN MORE Card */} +
+ + {/* LEARN MORE */} Learn More - {`Additional documentation can be found at the following links:`} + Additional documentation can be found at the following links: @@ -246,75 +192,81 @@ export default function AboutUsPage() { {/* ISU Logo */} - + ISU Logo {/* Contributor Profile Modal */} - + + {githubMap[selectedContributor] && ( + {selectedContributor} + )} {selectedContributor && `${selectedContributor}'s Profile`} theme.palette.grey[500], - }} + sx={{ position: "absolute", right: 8, top: 8, color: (t) => t.palette.grey[500] }} > + {loading ? (

Loading...

- ) : selectedContributor && contributorData[selectedContributor] ? ( + ) : profileData ? (
-
Personal Information
-

Email: {contributorData[selectedContributor].email || "Not specified"}

-

Education: {contributorData[selectedContributor].education || "Not specified"}

-

Major: {contributorData[selectedContributor].major || "Not specified"}

-

Bio: {contributorData[selectedContributor].bio || "Not specified"}

- -
Contributions
-

Total Contributions: {contributorData[selectedContributor].totalContributions || 0}

- - {contributorData[selectedContributor].problemsContributed && contributorData[selectedContributor].problemsContributed.length > 0 && ( +
Personal Information
+

Email: {profileData.email || "Not specified"}

+

Education: {profileData.education || "Not specified"}

+

Major: {profileData.major || "Not specified"}

+

Bio: {profileData.bio || "Not specified"}

+ + {githubMap[selectedContributor] && ( +

+ GitHub: + + {`github.com/${githubMap[selectedContributor]}`} + +

+ )} + +
Contributions
+

Total Contributions: {profileData.totalContributions || 0}

+ + {profileData.problemsContributed?.length > 0 && (
- Problems: {contributorData[selectedContributor].problemsContributed.length} + Problems: {profileData.problemsContributed.length}
    - {contributorData[selectedContributor].problemsContributed.map((problem, idx) => ( -
  • {problem}
  • - ))} + {profileData.problemsContributed.map((p, i) =>
  • {p}
  • )}
)} - - {contributorData[selectedContributor].solversCreated && contributorData[selectedContributor].solversCreated.length > 0 && ( + + {profileData.solversCreated?.length > 0 && (
- Solvers: {contributorData[selectedContributor].solversCreated.length} + Solvers: {profileData.solversCreated.length}
    - {contributorData[selectedContributor].solversCreated.map((solver, idx) => ( -
  • {solver}
  • - ))} + {profileData.solversCreated.map((s, i) =>
  • {s}
  • )}
)} - - {contributorData[selectedContributor].reductionsCreated && contributorData[selectedContributor].reductionsCreated.length > 0 && ( + + {profileData.reductionsCreated?.length > 0 && (
- Reductions: {contributorData[selectedContributor].reductionsCreated.length} + Reductions: {profileData.reductionsCreated.length}
    - {contributorData[selectedContributor].reductionsCreated.map((reduction, idx) => ( -
  • {reduction}
  • - ))} + {profileData.reductionsCreated.map((r, i) =>
  • {r}
  • )}
)} @@ -323,10 +275,9 @@ export default function AboutUsPage() {

No data found

)} + - +