generated from Technigo/react-vite-boilerplate
-
Notifications
You must be signed in to change notification settings - Fork 55
ML portfolio project #49
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
Open
marinalendt-png
wants to merge
28
commits into
Technigo:main
Choose a base branch
from
marinalendt-png:main
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
28 commits
Select commit
Hold shift + click to select a range
f98b861
creating folders, files and data
marinalendt-png 3592a9c
added styling to header tech and project section. Also added global s…
marinalendt-png a73b664
Add: svg and images
marinalendt-png 2409abb
Add: styling to components cards
marinalendt-png 2ef995c
Add: projects and articles in data
marinalendt-png 6ad9855
Styled: ArticleSection
marinalendt-png a4f4afa
Styled: ContactSection
marinalendt-png 0d32c34
Styled: HeaderSection
marinalendt-png 4dc2ad7
styled: ProjectSection
marinalendt-png ca5bc0d
styled: SkillsSection
marinalendt-png 034cc8d
styled: TechSection
marinalendt-png c34a5f6
add: global styles
marinalendt-png 8d24446
remove: picture not used
marinalendt-png a00fc8f
change: max-width on body
marinalendt-png dfa9a3d
remove: pictures that isnt used and changing name of weather-app
marinalendt-png c980328
change: name of weather-app picture
marinalendt-png 736f8ff
fix: style and bugs in sections project, skills and tech
marinalendt-png 0d80c81
change: add styling to projectcard and removing some styling in proje…
marinalendt-png d3ed5ed
fix: proper CSS-value
marinalendt-png 1cc26a0
change: proper gap between grids
marinalendt-png 1ca940e
fix: gap and position in articlecard and section
marinalendt-png f1657c7
fix: small changes, clean code etc.
marinalendt-png 412e24f
add: articles
marinalendt-png d853cd2
add: og:tags and FavIcon
marinalendt-png 972d019
add: ML icon
marinalendt-png ee63ab6
fix: icon bug
marinalendt-png b6b854a
final fix: images, padding, clean code etc
marinalendt-png 662cb34
Add: Read me file
marinalendt-png File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1 +1,34 @@ | ||
| # Portfolio | ||
| https://project-portfolio-ml.netlify.app/ | ||
|
|
||
| Marina Lendt – Frontend Developer Portfolio | ||
|
|
||
| Project Overview | ||
| This is a personal portfolio website showcasing my projects, skills, and background as a frontend developer. The goal of the project is to demonstrate: | ||
|
|
||
| - Responsive, mobile-first design | ||
| - Accessible and user-friendly interfaces | ||
| - Clean, reusable React components | ||
| - Integration of images, icons, and external links | ||
|
|
||
| Features | ||
|
|
||
| # Header Section | ||
| Introduction with name, profession, and a short bio | ||
|
|
||
| # Tech Section | ||
| Showing different tech that I have learnt | ||
|
|
||
| # Projects Section | ||
| Cards displaying featured projects with live demo and GitHub links | ||
|
|
||
| # Skills Section | ||
| Showing different skills in code, toolbox, and other skills | ||
|
|
||
| # Articles Section | ||
| Article cards with image, title, date, excerpt, and link to read more | ||
|
|
||
| # Accessibility | ||
| Proper use of semantic HTML (<section>, <article>, <time>) | ||
| Focus-visible styles for keyboard navigation | ||
| Alt attributes for all images |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,13 +1,35 @@ | ||
| <!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" /> | ||
| <meta name="viewport" content="width=device-width, initial-scale=1.0" /> | ||
|
|
||
| <!-- Open Graph --> | ||
| <meta property="og:title" content="Marina Lendt - Frontend Developer"> | ||
| <meta property="og:description" content="From healthcare to frontend development - my portfolio"> | ||
| <meta property="og:image" content="https://project-portfolio-ml.netlify.app/ML-og-image.png"> | ||
| <meta property="og:url" content="https://project-portfolio-ml.netlify.app/"> | ||
| <meta property="og:type" content="website"> | ||
|
|
||
| <!-- Favicon for browser --> | ||
| <link rel="icon" href="/ML-og-image.png" type="image/png"> | ||
|
|
||
| <!-- Apple Touch Icon for iOS --> | ||
| <link rel="apple-touch-icon" sizes="180x180" href="/ML-og-image.png"> | ||
|
|
||
| <!-- Google fonts --> | ||
| <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=Dosis:[email protected]&family=Montserrat:ital,wght@0,100..900;1,100..900&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=Roboto: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> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,8 +1,29 @@ | ||
| import React from "react"; | ||
|
|
||
| import { GlobalStyles } from "./styles/GlobalStyles"; | ||
| import { HeaderSection } from "./sections/HeaderSection"; | ||
| import { TechSection } from "./sections/TechSection"; | ||
| import { ProjectsSection } from "./sections/ProjectsSection"; | ||
| import { SkillsSection } from "./sections/SkillsSection"; | ||
| import { ArticleSection } from "./sections/ArticleSection"; | ||
| import { ContactSection } from "./sections/ContactSection"; | ||
| // import { Buttons } from "./components/Buttons"; | ||
|
|
||
|
|
||
|
|
||
| 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> | ||
| <GlobalStyles /> | ||
| <HeaderSection /> | ||
| <TechSection /> | ||
| <ProjectsSection /> | ||
| <SkillsSection /> | ||
| <ArticleSection /> | ||
| <ContactSection /> | ||
| </> | ||
| ) | ||
| ); | ||
| } | ||
|
|
||
|
|
||
|
|
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,143 @@ | ||
| import React from "react"; | ||
| import styled from "styled-components"; | ||
| import IconWebSVG from "../assets/icon-web.svg"; | ||
|
|
||
| export const ArticleCard = ({ data }) => { | ||
| return ( | ||
| <CardWrapper> | ||
| <ImageBox> | ||
| <Image src={data.image} alt={data.title} /> | ||
| </ImageBox> | ||
| <TextBox> | ||
| <DateTag dateTime={data.date}>{data.date}</DateTag> | ||
| <CardTitle>{data.title}</CardTitle> | ||
| <CardText>{data.text}</CardText> | ||
| <ReadButton href={data.link} aria-label={`Read full article: ${data.title}`}> | ||
| <ButtonIcon src={IconWebSVG} alt="" /> Read article | ||
| </ReadButton> | ||
| </TextBox> | ||
| </CardWrapper> | ||
| ); | ||
| } | ||
|
|
||
| const CardWrapper = styled.article` | ||
| display: flex; | ||
| flex-direction: column; | ||
| gap: 32px; | ||
| width: 100%; | ||
| margin-top: 64px; | ||
|
|
||
| /* Tablet */ | ||
| @media (min-width: 768px) { | ||
| flex-direction: row; | ||
| align-items: flex-start; | ||
| gap: 32px; | ||
| } | ||
|
|
||
| /* Desktop */ | ||
| @media (min-width: 1024px) { | ||
| gap: 125px; | ||
| } | ||
| `; | ||
|
|
||
| const ImageBox = styled.div` | ||
| width: 327px; | ||
| height: 200px; | ||
| flex-shrink: 0; | ||
|
|
||
| /* Tablet */ | ||
| @media (min-width: 768px) { | ||
| width: 200px; | ||
| height: 338px; | ||
| flex-shrink: 0; | ||
| } | ||
|
|
||
| /* Desktop */ | ||
| @media (min-width: 1024px) { | ||
| width: 479px; | ||
| height: 311px; | ||
| } | ||
| `; | ||
|
|
||
| const Image = styled.img` | ||
| width: 100%; | ||
| height: 100%; | ||
| border-radius: 12px; | ||
| object-fit: cover; | ||
| `; | ||
|
|
||
| const TextBox = styled.div` | ||
| display: flex; | ||
| flex-direction: column; | ||
| gap: 32px; | ||
| text-align: left; | ||
| font-size: 16px; | ||
|
|
||
| /* Tablet */ | ||
| @media (min-width: 768px) { | ||
| padding-left:0; | ||
| max-width: calc(100% - 200px); | ||
| } | ||
|
|
||
| /* Desktop */ | ||
| @media (min-width: 1024px) { | ||
| max-width: calc(100% - 379px); | ||
| } | ||
| `; | ||
|
|
||
| const DateTag = styled.time` | ||
| display: flex; | ||
| align-items: center; | ||
| width: 130px; | ||
| height: 24px; | ||
| padding: 2px 6px; | ||
| background: rgba(255, 255, 255, 1); | ||
| color: rgba(0, 0, 0, 1); | ||
| border: 1px solid rgba(0, 0, 0, 1); | ||
| border-radius: 4px; | ||
| font-size: 16px; | ||
| font-weight: 500; | ||
| `; | ||
|
|
||
| const CardTitle = styled.h3` | ||
| font-size: 24px; | ||
| font-weight: 500; | ||
| color: rgba(0, 0, 0, 1); | ||
| line-height: 24px; | ||
|
|
||
| /* Desktop */ | ||
| @media (min-width: 1024px) { | ||
| font-size: 30px; | ||
| } | ||
| `; | ||
|
|
||
| const CardText = styled.p` | ||
| font-size: 16px; | ||
| color: rgba(0, 0, 0, 1); | ||
| line-height: 22px; | ||
| `; | ||
|
|
||
| const ReadButton = styled.a` | ||
| width: 271px; | ||
| height: 48px; | ||
| display: inline-flex; | ||
| text-align: center; | ||
| padding: 12px 16px; | ||
| background: rgba(0, 0, 0, 1); | ||
| color: rgba(255, 255, 255, 1) ; | ||
| border-radius: 12px; | ||
| font-weight: 500; | ||
| text-decoration: none; | ||
| cursor: pointer; | ||
|
|
||
| &:focus-visible { | ||
| outline: 3px solid #f39c12; | ||
| outline-offset: 2px; | ||
| } | ||
| `; | ||
|
|
||
| const ButtonIcon = styled.img` | ||
| width: 24px; | ||
| height: 24px; | ||
| margin-right: 8px; | ||
| `; | ||
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nice use of a rare element! I've never used
<time>before! :)