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

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
# Portfolio

Netlify-link:

Figma-link: https://www.figma.com/design/jOlPicmO7AGtZLrZOpgZ44/Portfolio?node-id=1791-1877&t=CGhZrNLZ8wEjnYxZ-0
48 changes: 37 additions & 11 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,13 +1,39 @@
<!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>
<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&family=Urbanist:ital,wght@0,100..900;1,100..900&display=swap"
rel="stylesheet"
>
<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>
7 changes: 5 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,23 @@
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"dev": "vite --host",
"build": "vite build",
"lint": "eslint .",
"preview": "vite preview"
},
"dependencies": {
"react": "^19.0.0",
"react-dom": "^19.0.0"
"react-dom": "^19.0.0",
"styled-components": "^6.1.19",
"swiper": "^12.0.3"
},
"devDependencies": {
"@eslint/js": "^9.21.0",
"@types/react": "^19.0.10",
"@types/react-dom": "^19.0.4",
"@vitejs/plugin-react": "^4.3.4",
"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/images/cake.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/images/cupcakes.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/images/discoball.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/images/gold.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/images/profilepicture.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/images/quiz.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/images/recipelibrary.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/images/tailtales.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/images/weatherapp.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
29 changes: 26 additions & 3 deletions src/App.jsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,31 @@
import { GlobalStyle } from "./components/Styling/GlobalStyle"
import { Header } from "./components/1.Header"
import { Skills } from "./components/2.Skills"
import { Project } from "./components/3.Projects"
import { Tech } from "./components/4.Tech"
import { Articles } from "./components/5.Articles"
import { Contact } from "./components/6.Contact"



export 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>

<GlobalStyle />

<Header />

<Skills />

<Project />

<Tech />

<Articles />

<Contact />

</>
)
}
}
43 changes: 43 additions & 0 deletions src/components/1.Header.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import styled from "styled-components"
import { Icons } from "./Reusables/icons"
import { H1, H3, P } from "./Styling/Typography"

export const Header = () => {
return (
<HeaderSection>
<TextSection>
<H3>I am Julia Lindstrand</H3>
<H1>Junior Frontend Developer</H1>
<P>I am a developer with a passion for everything technology. For my whole life technology played a big part and I've always found much joy in learning about everything tech. What I bring to a new team is the same relentless curiosity that helped me debug code late into the night for school-projects, the discipline to learn independently, and the proven ability to thrive under pressure. I’m eager to apply these strengths to build robust, user‑focused products at  my next job.</P>
<Icons /></TextSection>
<Picture src="/images/profilepicture.png" alt="Picture of Julia" />
</HeaderSection>
)
}


// Styling
const HeaderSection = styled.div`
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
flex-wrap: wrap;

@media(max-width: 1440px) {
flex-direction: column;
align-items: center;
}`

const TextSection = styled.div`
display: flex;
flex-direction: column;
margin: 128px 128px 0 128px;
max-width: 580px;
`

const Picture = styled.img`
width: 526px;
height: auto;
object-fit: contain;
`
59 changes: 59 additions & 0 deletions src/components/2.Skills.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import skills from "../data/skills.json"
import styled from "styled-components"
import { H2, H4, P, UL } from "./Styling/Typography"
import {
theme
} from "./Styling/Theme"

export const Skills = () => {
return (
<SkillSection>
<H2>Skills</H2>
<SkillSectionSkills className="skills">
{skills.skills.map((skill) => (
<SkillColumn $color={theme.color}>
<ol className="skill"
key={skill.name}>
<H4>
{skill.group}</H4> <br></br>
{skill.items.map(skilling => <UL key={skilling}>{skilling}</UL>)}
</ol></SkillColumn>))}
</SkillSectionSkills>
</SkillSection>
)
}

// Styling
const SkillSection = styled.div`
text-align: center;
margin-top: 80px;
`

const SkillSectionSkills = styled.div`
display: flex;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
gap: 24px;
margin-top: 15px;

@media(max-width: 1440px) {
flex-direction: column;
align-items: center;
}`

const SkillColumn = styled.div`
text-align: center;
width: 180px;
padding-right: 30px;
&:not(:last-child) {
border-right: 2px solid ${(props) => props.$color};
}

@media (max-width: 1440px) {
&:not(:last-child) {
border-right: none;
border-bottom: 2px solid ${(props) => props.$color};
padding-bottom: 20px;
margin-bottom: 20px;
}}`
42 changes: 42 additions & 0 deletions src/components/3.Projects.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import projectsData from "../data/projects.json"
import { ProjectCard } from "./Reusables/card"
import styled from "styled-components"
import { H2 } from "./Styling/Typography"
import { Carousel } from "./Styling/Carousel"

export const Project = () => {
return (
<ProjectSection>
<H2>Featured Projects</H2>
<Carousel
data={projectsData.projects}
renderItem={(project) => (
<ProjectCard
key={project.name}
image={project.image}
name={project.name}
description={project.description}
netlify={project.netlify}
github={project.github}
/>
)}
/>
</ProjectSection>
)
}


// Styling
const ProjectSection = styled.div`
margin-top: 80px;
`

const Projects = styled.div`
display: flex;
flex-direction: row;
justify-content: center;
align-items: flex-start;
padding: 0px;
gap: 64px;
width: 1440px;
height: 625px;`
26 changes: 26 additions & 0 deletions src/components/4.Tech.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import styled from "styled-components"
import { H2, H3 } from "./Styling/Typography"


export const Tech = () => {
return (
<TechSection>
<H2>Tech</H2>
<TechContainer>
<H3>HTML, CSS, Flexbox, JavaScript, ES6, JSX, React, React Hooks, Node.js, Mongo DB, Web Accessibility, APIs, Mob-programming, Pair-programming, GitHub</H3>
</TechContainer>
</TechSection>
)
}


// Styling
const TechSection = styled.div`
margin-top: 120px;
`

const TechContainer = styled.div`
justify-self: center;
text-align: center;
max-width: 782px;
`
40 changes: 40 additions & 0 deletions src/components/5.Articles.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import articlesData from "../data/articles.json"
import { ArticleCard } from "./Reusables/card"
import styled from "styled-components"
import { H2 } from "./Styling/Typography"
import { Carousel } from "./Styling/Carousel"

export const Articles = () => {
return (
<ArticlesSection>
<H2>My Journey</H2>
<Carousel
data={articlesData.articles}
renderItem={(article) => (
<ArticleCard
key={article.title}
image={article.image}
title={article.title}
description={article.description}
/>
)}
/>
</ArticlesSection>
)
}


// Styling
const ArticlesSection = styled.div`
margin-top: 100px;
`

const ArticlesContainer = styled.div`
display: flex;
flex-direction: row;
justify-content: center;
align-items: flex - start;
padding: 0px;
gap: 64px;
width: 1440px;
height: 625px;`
36 changes: 36 additions & 0 deletions src/components/6.Contact.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { Icons } from "./Reusables/icons"
import styled from "styled-components"
import { H2, H3 } from "./Styling/Typography"

export const Contact = () => {
return (
<ContactSection>
<Picture src="/images/profilepicture.png" alt="Picture of Julia" />
<ContactInfo>
<H2>Let's talk</H2>
<H3>Julia Lindstrand</H3>
<H3>+46 (0) 768 28 97 94</H3>
<H3>julia.lindstrand@pm.me</H3>
<Icons /></ContactInfo>
</ContactSection>
)
}

// Styling
const ContactSection = styled.div`
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;

@media (max-width: 667px) {
flex-direction: column;
}
`
const Picture = styled.img`
width: 476px;
`
const ContactInfo = styled.div`
display: flex;
flex-direction: column;
`
Loading