Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
3a049f9
started creating components
mimmi-eriksson Apr 15, 2025
d1d5deb
added images and info in projects json file
mimmi-eriksson Apr 16, 2025
0ffe02d
updated file structure and components
mimmi-eriksson Apr 16, 2025
7f301ee
added intro tech and contact sections
mimmi-eriksson Apr 16, 2025
a95a79a
updated skills json file
mimmi-eriksson Apr 16, 2025
069a519
added articles and skills sections
mimmi-eriksson Apr 16, 2025
c342f63
added favicon and og tags, and added links in the contact section
mimmi-eriksson Apr 17, 2025
7a39c13
added typography components, header and footer
mimmi-eriksson Apr 17, 2025
7b09811
updated link to weather app project and changed format for icons to svg
mimmi-eriksson Apr 17, 2025
4c7b341
installing styled-components and started styling button
mimmi-eriksson Apr 23, 2025
7c20633
created global style, theme and media, and styled project card component
mimmi-eriksson Apr 23, 2025
5e52095
styled projects section
mimmi-eriksson Apr 23, 2025
4a46ba9
styled intro and tech section
mimmi-eriksson Apr 23, 2025
e4b76ea
styled skills section
mimmi-eriksson Apr 24, 2025
04983f7
started styling contact section
mimmi-eriksson Apr 24, 2025
57d30f1
changed arrow animation to position instead of margin
mimmi-eriksson Apr 24, 2025
4a48a19
finished styling contact section
mimmi-eriksson Apr 24, 2025
29ac340
styled articles section
mimmi-eriksson Apr 24, 2025
5857742
added bodytext and headings typography components
mimmi-eriksson Apr 24, 2025
a397a5d
fixing code structure
mimmi-eriksson Apr 24, 2025
216bd32
fixed responsivness on intro section
mimmi-eriksson Apr 24, 2025
7a720cc
fixed responsivness
mimmi-eriksson Apr 24, 2025
f83ea69
styling header
mimmi-eriksson Apr 24, 2025
736c5d1
improved functionality for accessibility with focus-visible for links…
mimmi-eriksson Apr 25, 2025
d75f3b2
small code fixes
mimmi-eriksson Apr 25, 2025
bbebc57
added animation to fade in sections on scroll
mimmi-eriksson Apr 25, 2025
06bcdba
added fonts in global style
mimmi-eriksson Apr 25, 2025
ff04078
added portfolio project in featured projects
mimmi-eriksson Apr 25, 2025
445aa43
updated skills and tech json files
mimmi-eriksson Apr 25, 2025
64cd1b3
added netlify link to read me
mimmi-eriksson Apr 27, 2025
6a6bbc2
updated projects and skills
mimmi-eriksson May 19, 2025
c9c1fab
added to do project
mimmi-eriksson May 26, 2025
1abe3a7
updated links for movie app
mimmi-eriksson Jun 2, 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
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
# Portfolio

Link: https://mimmi-eriksson.netlify.app/
68 changes: 57 additions & 11 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,13 +1,59 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Portfolio</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
</body>
</html>

<head>
<meta charset="UTF-8" />
<link
rel="icon"
type="image/x-icon"
href="/assets/favicon.ico"
/>
<meta
name="viewport"
content="width=device-width, initial-scale=1.0"
/>
<meta
property="og:title"
content="Mimmi Eriksson Developer Portfolio"
/>
<meta
property="og:type"
content="website"
/>
<meta
property="og:url"
content="https://mimmi-eriksson.netlify.app/"
/>
<meta
property="og:image"
content="./assets/profile-picture.jpg"
/>
<link
rel="preconnect"
href="https://fonts.googleapis.com"
>
<link
rel="preconnect"
href="https://fonts.gstatic.com"
crossorigin
>
<link
href="https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap"
rel="stylesheet"
>
<link
href="https://fonts.googleapis.com/css2?family=Urbanist:ital,wght@0,100..900;1,100..900&display=swap"
rel="stylesheet"
>
<title>Portfolio</title>
</head>

<body>
<div id="root"></div>
<script
type="module"
src="/src/main.jsx"
></script>
</body>

</html>
6 changes: 4 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,15 @@
},
"dependencies": {
"react": "^19.0.0",
"react-dom": "^19.0.0"
"react-dom": "^19.0.0",
"styled-components": "^6.1.17"
},
"devDependencies": {
"@eslint/js": "^9.21.0",
"@types/react": "^19.0.10",
"@types/react-dom": "^19.0.4",
"@vitejs/plugin-react": "^4.3.4",
"@vitejs/plugin-react": "^4.4.1",
"babel-plugin-styled-components": "^2.1.4",
"eslint": "^9.21.0",
"eslint-plugin-react-hooks": "^5.1.0",
"eslint-plugin-react-refresh": "^0.4.19",
Expand Down
Binary file added public/assets/accessibility-quiz.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions public/assets/arrow-small.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions public/assets/arrow.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions public/assets/article-icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/assets/business-site.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/assets/favicon.ico
Binary file not shown.
5 changes: 5 additions & 0 deletions public/assets/github-btn.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions public/assets/github-icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 3 additions & 0 deletions public/assets/globe-icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/assets/happy-thoughts.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 5 additions & 0 deletions public/assets/linkedin-btn.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/assets/movies.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/assets/portfolio.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/assets/profile-picture.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/assets/recipe-app.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/assets/todo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added public/assets/weather-app.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
36 changes: 33 additions & 3 deletions src/App.jsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,38 @@
export const App = () => {
import SkipLink from "./components/SkipLink"
import Header from "./sections/Header"
import IntroSection from "./sections/IntroSection"
import TechSection from "./sections/TechSection"
import ProjectsSection from "./sections/ProjectsSection"
import SkillsSection from "./sections/SkillsSection"
import ArticlesSection from "./sections/ArticlesSection"
import ContactSection from "./sections/ContactSection"

import tech from "./data/tech.json"
import projects from "./data/projects.json"
import skills from "./data/skills.json"
import articles from "./data/articles.json"

import GlobalStyle from "./styles/GlobalStyle"
import { ThemeProvider } from "styled-components"
import theme from "./styles/theme.js"

const App = () => {
return (
<>
<h1>Portfolio</h1>
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptatem, laborum! Maxime animi nostrum facilis distinctio neque labore consectetur beatae eum ipsum excepturi voluptatum, dicta repellendus incidunt fugiat, consequatur rem aperiam.</p>
<ThemeProvider theme={theme}>
<GlobalStyle />
<SkipLink />
<Header />
<IntroSection />
<TechSection tech={tech.tech} />
<ProjectsSection
projects={projects.projects}
/>
<SkillsSection skills={skills.skills} />
<ContactSection />
</ThemeProvider>
</>
)
}

export default App
42 changes: 42 additions & 0 deletions src/components/ArrowLink.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import styled from "styled-components"

const Link = styled.a`
display: block;
text-align: center;

&:focus-visible {
outline: 2px solid;
outline-offset: 5px;
border-radius: 2px;
}

&:focus-visible>img {
animation: scrollAnimation 1s ease-out infinite alternate;
}
`
const Arrow = styled.img`
filter: ${({ $mode }) => $mode === "dark" ? "brightness(0) invert(1)" : "none"};
position: relative;
top: 0;

&:hover {
animation: scrollAnimation 1s ease-out infinite alternate;
}

@keyframes scrollAnimation {
0% {top: 0;}
25% {top: 0;}
75% {top: 16px;}
100% {top: 16px;}
}
`

const ArrowLink = ({ link, mode }) => {
return (
<Link href={link}>
<Arrow $mode={mode} src="assets/arrow.svg" alt="go to next section" />
</Link>
)
}

export default ArrowLink
56 changes: 56 additions & 0 deletions src/components/ArticleCard.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import ButtonLink from "./ButtonLink"
import CardHeading from "../typhography/CardHeading.jsx"
import BodyText from "../typhography/BodyText.jsx"
import Tag from "./Tag"
import styled from "styled-components"
import media from "../styles/media.js"


const Card = styled.article`
display: flex;
flex-direction: column;
gap: ${({ theme }) => theme.spacings.medium};
align-items: flex-start;

@media ${media.tablet} {
gap: 2rem;
}
`

const ArticleImage = styled.img`
height: 200px;
width: 100%;
object-fit: cover;
box-shadow: 2px 2px 5px rgba(31, 0, 124, 0.25);

@media ${media.tablet} {
height: 340px;
}
@media ${media.desktop} {
height: 340px;
}
`
const TitleWrapper = styled.div`
display: flex;
flex-direction: column;
gap: ${({ theme }) => theme.spacings.xSmall};
align-items: flex-start;
`

const ArticleCard = ({ article }) => {
return (
<Card>
<ArticleImage src={article.image} alt={article.altText} />
<TitleWrapper>
<ul>
<Tag tag={article.date} />
</ul>
<CardHeading title={article.title} />
</TitleWrapper>
<BodyText text={article.text} />
<ButtonLink text="Read article" link={article.link} icon="../assets/article-icon.svg" />
</Card>
)
}

export default ArticleCard
48 changes: 48 additions & 0 deletions src/components/ButtonLink.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
import styled from "styled-components"
import media from "../styles/media.js"

const StyledButton = styled.a`
background-color: ${({ theme }) => theme.colors.ternary};
color: ${({ theme }) => theme.colors.neutral};
border-radius: 40px;
display: flex;
align-items: center;
gap: 7px;
padding-right: 16px;
font-size: 1em;
font-weight: 500;

&:hover {
background-color: ${({ theme }) => theme.colors.primary};
color: ${({ theme }) => theme.colors.secondary};
}

&:hover>img {
filter: invert(1);
}

&:focus-visible {
outline: 2px solid ${({ theme }) => theme.colors.primary};
outline-offset: 5px;
}

@media ${media.desktop} {
font-size: 1.125em;
}
`

const ButtonIcon = styled.img`
height: 32px;
width: 32px;
margin: 8px;
`

const ButtonLink = ({ text, link, icon }) => {
return (
<StyledButton href={link} target="_blank">
<ButtonIcon src={icon} alt="" />{text}
</StyledButton>
)
}

export default ButtonLink
37 changes: 37 additions & 0 deletions src/components/ButtonSocial.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import styled from "styled-components"

const Link = styled.a`
&:focus-visible {
outline: 2px solid;
outline-offset: 5px;
border-radius: 2px;
}
`

const ButtonIcon = styled.img`
width: 32px;
height: 32px;
filter: invert(1);

&:hover {
filter: invert(0.3)
}

&:focus-visible {
outline: 2px solid;
outline-offset: 5px;
border-radius: 2px;
}
`

const ButtonSocial = ({ link, icon, text }) => {
return (
<li>
<Link href={link} target="_blank">
<ButtonIcon src={icon} alt={text} />
</Link>
</li>
)
}

export default ButtonSocial
Loading