Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fannys Portfolio #401

Open
wants to merge 29 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
512ed61
started with project portfolio
Fannyhenriques Nov 2, 2024
e5eb611
added components and styling
Fannyhenriques Nov 4, 2024
79918ae
added tagscomponent in tags, projects and articles, and added styling
Fannyhenriques Nov 4, 2024
7396213
added props in gridsection.jsx
Fannyhenriques Nov 11, 2024
a5f0d36
fixed grid-layout for articles and projects
Fannyhenriques Nov 11, 2024
7c7d959
added styling for buttons
Fannyhenriques Nov 11, 2024
c39676a
refined styling for buttons
Fannyhenriques Nov 11, 2024
1b2c37f
updated styling for tags inside the skills and overall styling for sk…
Fannyhenriques Nov 12, 2024
84f91db
added iconbutton.jsx with styling for the buttons in the letstalk-sec…
Fannyhenriques Nov 12, 2024
32e1c0d
added styling in gallary for the images
Fannyhenriques Nov 12, 2024
c0d1f18
added links to the buttons in project and articlesections
Fannyhenriques Nov 12, 2024
8f81618
added styling for responsiveness in articles and projects and grid
Fannyhenriques Nov 12, 2024
d1349b5
fiexed responsive design for header
Fannyhenriques Nov 13, 2024
09c7c28
finnished overall responsive styling
Fannyhenriques Nov 13, 2024
9dbd833
added padding
Fannyhenriques Nov 13, 2024
ca0dda4
changed name for icon and updated pathway
Fannyhenriques Nov 13, 2024
e59afe7
testcommit to se if icon works
Fannyhenriques Nov 13, 2024
85c2848
removed icon stackoverflow because of error in netlify
Fannyhenriques Nov 13, 2024
97894c8
added icon stackoverflow again
Fannyhenriques Nov 13, 2024
163494e
added important in default styling in articles section because it is …
Fannyhenriques Nov 13, 2024
8436666
push-test for deploying to netlify again
Fannyhenriques Nov 13, 2024
10d2466
added media queries for the default styling for the netlify-site
Fannyhenriques Nov 13, 2024
59e999c
fixed indentations
Fannyhenriques Nov 13, 2024
6d16f5c
changed white and black to primary and secondary color
Fannyhenriques Nov 13, 2024
925f84a
added readme
Fannyhenriques Nov 13, 2024
2fcae15
removed the second readme that is not being used
Fannyhenriques Nov 13, 2024
ae77565
added links to buttons
Fannyhenriques Nov 13, 2024
0ab13c1
spacing
Fannyhenriques Nov 15, 2024
5763aef
added hovereffect on buttons, changed the buttoncomponent to use an a…
Fannyhenriques Jan 3, 2025
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
Prev Previous commit
added hovereffect on buttons, changed the buttoncomponent to use an a…
…nchor <a>tag, updated the parentcomponents with href, added the correct fontweight to the buttons
Fannyhenriques committed Jan 3, 2025
commit 5763aefc95eba7df6b6f17aac5cfac6dfeb28e53
3 changes: 2 additions & 1 deletion my-portfolio/src/App.css
Original file line number Diff line number Diff line change
@@ -2,9 +2,10 @@
font-family: "Poppins", sans-serif;
margin: 0 auto;

/* Colors */
/* Colors */
--primary-color: #000000;
--secondary-color: #FFFFFF;
--accent-color: #7e7070;
}

body {
Original file line number Diff line number Diff line change
@@ -9,36 +9,36 @@ import "./FeaturedArticles.css";

export const FeaturedArticles = () => {
console.log(articlesData);
return (
<Grid background="black">
<div className="articles-container">
<div className="title">
<H2> My words</H2>
</div>
<div className="article-wrapper">
return (
<Grid background="black">
<div className="articles-container">
<div className="title">
<H2> My words</H2>
</div>
<div className="article-wrapper">
{articlesData.articles.map((article) => (
<Card
key={article.name}
imageSource={images[article.image] || article.image}
cardTag={article.tags}
cardTag={article.tags}
cardTitle={article.name}
cardDescription={article.description}
sectionType="article"
// button={<Button text="Read Article" isReadArticle={true} />}
link={article.link}
/>
))}
</div>
<div className="view-more-container">
<Button
/>
))}
</div>
<div className="view-more-container">
<Button
text="Read More Articles"
isViewMore={true}
sectionType="article"
icon={iconArrowWhite}
onClick={() => window.open("https://www.linkedin.com", "_blank")}
href="https://www.linkedin.com"
target="_blank"
/>
</div>
</div>
</Grid>
);
);
};
95 changes: 49 additions & 46 deletions my-portfolio/src/components/sections/Cards/Card.jsx
Original file line number Diff line number Diff line change
@@ -7,56 +7,59 @@ import iconGithubWhite from "../../../assets/iconGithubWhite.svg";
import iconWebWhite from "../../../assets/iconWebWhite.svg";
import { Tag } from "../../ui/Tags/Tags.jsx";

export const Card = ({
imageSource,
sectionType,
cardTag,
cardTitle,
cardDescription,
export const Card = ({
imageSource,
sectionType,
cardTag,
cardTitle,
cardDescription,
netlify,
github,
link,
}) => {
return (
<article className={`${sectionType}-card`}>
<img
src={imageSource}
className={`${sectionType}-img`}
alt="portfolio-img"
/>
return (
<article className={`${sectionType}-card`}>
<img
src={imageSource}
className={`${sectionType}-img`}
alt="portfolio-img"
/>
<div className={`${sectionType}-info-box`}>
<div className="tags-container">
{Array.isArray(cardTag)
? cardTag.map((tag, index) => <Tag key={index} sectionType={sectionType} text={tag} />)
: <Tag sectionType={sectionType} text={cardTag} />}
<div className="tags-container">
{Array.isArray(cardTag)
? cardTag.map((tag, index) => <Tag key={index} sectionType={sectionType} text={tag} />)
: <Tag sectionType={sectionType} text={cardTag} />}
</div>
<H3>{cardTitle}</H3>
<div className="description-box">
<BodyText>{cardDescription}</BodyText>
<div className="button-container">
{sectionType === "project" ? (
<>
<Button text="Live Demo"
icon={iconWeb}
sectionType={sectionType}
href={netlify}
target="_blank"
/>
<Button text="View Code"
icon={iconGithubWhite}
sectionType={sectionType}
href={github}
target="_blank"
/>
</>
) : (
<Button text="Read Article"
icon={iconWebWhite}
sectionType={sectionType}
href={link}
target="_blank"
/>
)}
</div>
</div>
</div>
<H3>{cardTitle}</H3>
<div className="description-box">
<BodyText>{cardDescription}</BodyText>
<div className="button-container">
{sectionType === "project" ? (
<>
<Button text="Live Demo"
icon={iconWeb}
sectionType={sectionType}
onClick={() => window.open(netlify, "_blank")}
/>
<Button text="View Code"
icon={iconGithubWhite}
sectionType={sectionType}
onClick={() => window.open(github, "_blank")}
/>
</>
) : (
<Button text="Read Article"
icon={iconWebWhite}
sectionType={sectionType}
onClick={() => window.open(link, "_blank")}
/>
)}
</div>
</div>
</div>
</article>
);
</article>
);
};
Original file line number Diff line number Diff line change
@@ -25,17 +25,15 @@
gap: 64px;
}
}

/* breakpoint for small desktop */
@media (min-width: 769px) {
.projects-container {
grid-column: span 12;
gap: 64px;
}

.project-wrapper > .project-card:nth-child(even) {
.project-wrapper>.project-card:nth-child(even) {
flex-direction: row-reverse;
}
}
@media (min-width: 1025px) {

}
Original file line number Diff line number Diff line change
@@ -6,56 +6,57 @@ import { images } from "../../ui/Images/Images.jsx";
import { Button } from "../../ui/Buttons/Button.jsx";
import { Tag } from "../../ui/Tags/Tags.jsx";
import projectsData from "../../../data/projects.json";
import iconArrow from "../../../assets/iconArrow.svg";
import iconArrow from "../../../assets/iconArrow.svg";
import "./FeaturedProjects.css";

export const FeaturedProjects = () => {
// display every other card in reversed row on desktop
const [isDesktop, setIsDesktop] = useState(window.innerWidth >= 1024);
// display every other card in reversed row on desktop
const [isDesktop, setIsDesktop] = useState(window.innerWidth >= 1024);

useEffect(() => {
const handleResize = () => {
setIsDesktop(window.innerWidth >= 1024);
};
window.addEventListener("resize", handleResize);
return () => window.removeEventListener("resize", handleResize);
}, []);
return (
<Grid background="white">
<div className="projects-container">
<H2>Featured Projects</H2>
useEffect(() => {
const handleResize = () => {
setIsDesktop(window.innerWidth >= 1024);
};
window.addEventListener("resize", handleResize);
return () => window.removeEventListener("resize", handleResize);
}, []);

return (
<Grid background="white">
<div className="projects-container">
<H2>Featured Projects</H2>
<div className="project-wrapper">
{projectsData.projects.map((project, index) => (
<Card
key={project.name}
imageSource={images[project.image] || project.image}
cardTag={project.tags}
cardTitle={project.name}
cardDescription={project.description}
{projectsData.projects.map((project, index) => (
<Card
key={project.name}
imageSource={images[project.image] || project.image}
cardTag={project.tags}
cardTitle={project.name}
cardDescription={project.description}
sectionType="project"
netlify={project.netlify}
github={project.github}
isReversed={isDesktop && index % 2 === 1}
>
<div className="tag-container">
{project.tags.map((tag, index) => (
<Tag key={index} sectionType="project" text={tag} />
))}
</div>
</Card>
))}
</div>
<div className="view-more-container">
<Button
text="View More Projects"
isViewMore={true}
sectionType="project"
netlify={project.netlify}
github={project.github}
isReversed={isDesktop && index % 2 === 1}
>
<div className="tag-container">
{project.tags.map((tag, index) => (
<Tag key={index} sectionType="project" text={tag} />
))}
icon={iconArrow}
href="https://github.com/Fannyhenriques?tab=repositories"
target="_blank"
/>
</div>
</Card>
))}
</div>
<div className="view-more-container">
<Button
text="View More Projects"
isViewMore={true}
sectionType="project"
icon={iconArrow}
onClick={() => window.open("https://github.com/Fannyhenriques?tab=repositories", "_blank")}
/>
</div>
</div>
</Grid>
);
</div>
</Grid>
);
};
49 changes: 37 additions & 12 deletions my-portfolio/src/components/ui/Buttons/Button.css
Original file line number Diff line number Diff line change
@@ -10,18 +10,29 @@
font-size: 18px;
border-radius: 12px;
gap: 16px;
text-decoration: none;
font-weight: 500;
}

.project-button {
background-color: var(--primary-color);
color: var(--secondary-color);
}

.project-button:hover {
background-color: var(--accent-color);
}

.article-button {
background-color: var(--secondary-color);
color: var(--primary-color);
}

.article-button:hover {
background-color: var(--accent-color);
color: var(--secondary-color);
}

.project-view-more-button,
.article-view-more-button {
display: flex;
@@ -35,40 +46,54 @@
border-radius: 12px;
font-size: 18px;
margin-top: 64px;
}
text-decoration: none;
font-weight: 500;
}

.project-view-more-button {
background: var(--secondary-color);
color: var(--primary-color);
border: 2px solid #000;
}

}

.project-view-more-button:hover {
background-color: var(--accent-color);
color: var(--secondary-color);
}

.article-view-more-button {
background: var(--primary-color);
color: var(--secondary-color);
border: 2px solid #FFF;
}
}

.article-view-more-button:hover {
background-color: var(--accent-color);
}

.article-button-icon,
.project-button-icon {
.article-button-icon,
.project-button-icon {
width: 32px;
height: 32px;
}

@media (min-width: 375px) {

.project-button,
.article-button{
.article-button {
width: 303px;
}

.project-view-more-button,
.article-view-more-button{
.article-view-more-button {
width: 303px;
}
}

@media (min-width: 1024px) {
.project-view-more-button,
.article-view-more-button{
margin-top: 128px;
}

.project-view-more-button,
.article-view-more-button {
margin-top: 128px;
}
}
15 changes: 10 additions & 5 deletions my-portfolio/src/components/ui/Buttons/Button.jsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
/* eslint-disable react/prop-types */
import "./Button.css";

export const Button = ({ text, icon, onClick, sectionType = "default", isViewMore }) => {
export const Button = ({ text, icon, href, target, sectionType = "default", isViewMore }) => {
const buttonClass = isViewMore
? `${sectionType}-view-more-button`
: `${sectionType}-button`;
? `${sectionType}-view-more-button`
: `${sectionType}-button`;

return (
<button className={`button ${buttonClass}`} onClick={onClick}>
<a
className={`button ${buttonClass}`}
href={href}
target={target}
rel={target === "_blank" ? "noopener noreferrer" : undefined}
>
{icon && <img src={icon} alt="icon" className={`${sectionType}-button-icon`} />}
{text}
</button>
</a>
);
};
6 changes: 6 additions & 0 deletions package-lock.json