Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
9cacfcb
initial sections and component files
Bianka2112 Apr 16, 2025
2d9bddc
added projects.json info and .map fx
Bianka2112 Apr 16, 2025
3bc67e7
added linkButton component
Bianka2112 Apr 16, 2025
b2c29f6
skills section, json and mount added
Bianka2112 Apr 16, 2025
6689bf7
figma link in readme
Bianka2112 Apr 16, 2025
17a8f3b
added projects bio and separate tags
Bianka2112 Apr 17, 2025
286a0bf
fixed unique key console error for .map
Bianka2112 Apr 17, 2025
a50fcfd
template social icons added
Bianka2112 Apr 17, 2025
da83e08
added styled-components and update vite.config.js
Bianka2112 Apr 17, 2025
6ce0efd
primary button styled comp, fixed linkbutton fx
Bianka2112 Apr 17, 2025
02d8f4e
export named individual social icons
Bianka2112 Apr 17, 2025
956d96c
created iconslist comp, render icons into buttons
Bianka2112 Apr 17, 2025
0573541
add rel to links for security
Bianka2112 Apr 17, 2025
5b6db78
now.. add rel to links for security
Bianka2112 Apr 17, 2025
bec6134
add styles files and started some styled-comp, inserted hero images
Bianka2112 Apr 26, 2025
8295ee0
added Poppins font
Bianka2112 Apr 26, 2025
33e3d40
updates hero images
Bianka2112 Apr 26, 2025
cda5163
update skills section styling
Bianka2112 Apr 27, 2025
e6fbcf7
format footer styling
Bianka2112 Apr 27, 2025
fafb948
tweak footer
Bianka2112 Apr 27, 2025
1c929e6
style social icons, footer, skills. mobile first
Bianka2112 Apr 27, 2025
c83c206
fix social icons, footer styling
Bianka2112 Apr 27, 2025
7dd0278
added media queries
Bianka2112 Apr 27, 2025
de8a976
font fix media query
Bianka2112 Apr 27, 2025
0de4f31
header font fix
Bianka2112 Apr 27, 2025
434c68d
update card comp for custom title
Bianka2112 Apr 27, 2025
31643bd
font, media, tech sec
Bianka2112 Apr 27, 2025
f49bfad
header font, media q
Bianka2112 Apr 27, 2025
06a18ba
skills sec font
Bianka2112 Apr 27, 2025
322a64a
skills med q, tag border style
Bianka2112 Apr 28, 2025
051091f
hero imgs media q, finally fix mobile
Bianka2112 Apr 28, 2025
05d7154
hero fade
Bianka2112 Apr 28, 2025
f519f1e
update tech tags in feat proj section
Bianka2112 Apr 28, 2025
8a05d6d
mobile hero image fix
Bianka2112 Apr 29, 2025
f158354
FP section spacing, media q
Bianka2112 Apr 29, 2025
1be76a0
project cards spacing
Bianka2112 Apr 29, 2025
cd78253
renamed styledtags, media q
Bianka2112 Apr 29, 2025
cf3bfa4
format FP section, added image placeholder
Bianka2112 Apr 29, 2025
6093707
formatting image-text proj cards
Bianka2112 Apr 29, 2025
3822996
spacing fixes
Bianka2112 May 1, 2025
a698bdf
more fixing media q
Bianka2112 May 1, 2025
d70e090
padding tech sec for tablet
Bianka2112 May 1, 2025
f64c756
media q for skills sec tablet
Bianka2112 May 1, 2025
b638ec0
media q for skills, responsive like butter
Bianka2112 May 1, 2025
401f427
updated FP image path
Bianka2112 May 1, 2025
4a93230
fixed hero animation
Bianka2112 May 2, 2025
4aea605
fix proj image paths
Bianka2112 May 2, 2025
1822e2a
skills left align desktop, semantic cleanup
Bianka2112 May 10, 2025
ddcea0e
header, footer desktop padding
Bianka2112 May 10, 2025
1869a16
header cleanup: font, spacing
Bianka2112 May 10, 2025
29b89cf
styledtags margin
Bianka2112 May 10, 2025
67edd86
meta description
Bianka2112 May 10, 2025
ca008f1
alt for social icons
Bianka2112 May 10, 2025
c25d48b
update webicon url to new site
Bianka2112 Jun 5, 2025
f775b1a
code cleanup, fix nested a tags, update heart animation, add aria-lab…
Bianka2112 Jun 5, 2025
5d3f20f
update favicon image, index code cleanup, add meta
Bianka2112 Jun 7, 2025
0b2f67c
update a11y, adjust focus outline
Bianka2112 Jun 7, 2025
6d5f8df
multi src favicon for browser support
Bianka2112 Jun 8, 2025
c69d5bb
add reflections section, color adjust footer
Bianka2112 Jun 8, 2025
21dccd5
fix styling, spacing of reflections sec, adjust icons in buttons
Bianka2112 Jun 8, 2025
01f3bad
fix image sizing
Bianka2112 Jun 8, 2025
daeb3d5
media q for socialicons
Bianka2112 Jun 8, 2025
e7bea1a
add contact links and updated socials
Bianka2112 Jun 8, 2025
c8bea45
socials hover effect
Bianka2112 Jun 8, 2025
3bd5922
adjust article role for lighthouse
Bianka2112 Jun 8, 2025
25062a5
lazy loading on images
Bianka2112 Jun 8, 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
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1 +1,5 @@
# Portfolio

Deployed Site:

Figma link: https://www.figma.com/design/hFjGb9pVuXS6SbxUAGdCkL/--Bianka---Figma-designs-for-students--Copy-?node-id=3084-966&p=f&t=rOSwChuyln6MbyrC-0
43 changes: 40 additions & 3 deletions index.html
Original file line number Diff line number Diff line change
@@ -1,11 +1,48 @@
<!doctype html>
<!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>
<meta
name="description"
content="Web developer portfolio showcasing tech stack, projects and contact info"
/>
<meta name="author" content="Bianka Romero" />
<meta
name="keywords"
content="web developer, portfolio, frontend, React, JavaScript, Bianka Romero"
/>

<meta
property="og:title"
content="Bianka Romero | Web Developer Portfolio"
/>
<meta
property="og:description"
content="Creative web developer portfolio showcasing modern projects and skills."
/>
<meta property="og:image" content="/images/preview.dev.site.png" />
<meta property="og:url" content="https://biankaromero.netlify.app" />
<meta property="og:type" content="website" />

<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,400;0,500;0,700;0,800;1,400;1,500;1,700;1,800&display=swap"
rel="stylesheet"
/>

<link
rel="icon"
type="image/svg+xml"
href="/images/only.logo.onWhite.svg"
/>
<link rel="icon" type="image/png" href="/images/logoTransparent.png" />
<link rel="apple-touch-icon" href="/images/logoBlack.png" />

<title>Dev Portfolio - BLR</title>
</head>

<body>
<div id="root"></div>
<script type="module" src="/src/main.jsx"></script>
Expand Down
7 changes: 5 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,16 @@
},
"dependencies": {
"react": "^19.0.0",
"react-dom": "^19.0.0"
"react-dom": "^19.0.0",
"react-icons": "^5.5.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.0",
"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/a11y-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/images/abstract-unsplash.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/images/articlesPlaceholder-unsplash.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/images/logoBlack.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/logoTransparent.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions public/images/only.logo.onWhite.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/images/preview.dev.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/images/recipe-library-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/images/stockholm-buzz-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/images/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.
1 change: 0 additions & 1 deletion public/vite.svg

This file was deleted.

33 changes: 28 additions & 5 deletions src/App.jsx
Original file line number Diff line number Diff line change
@@ -1,8 +1,31 @@
export const App = () => {
import projects from "./data/projects.json"
import skills from "./data/skills.json"
import articles from "./data/articles.json"
import FeaturedProjects from "./sections/FeaturedProjects"
import Footer from "./sections/Footer"
import Header from "./sections/Header"
import Skills from "./sections/Skills"
import Tech from "./sections/Tech"
import Reflections from "./sections/Reflections"
import { GlobalStyle } from "./styles/GlobalStyle"
import { ThemeProvider } from "styled-components"
import { theme } from "./styles/theme"

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 />
<Header />
<Tech />
<FeaturedProjects
projects={projects.projects} />
<Skills
skills={skills.skills}/>
<Reflections
articles={articles.articles}/>
<Footer />
</ThemeProvider>
)
}

export default App
Binary file added src/assets/BiankaRomero.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 src/assets/camera-BG.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 src/assets/laptop-BG.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
50 changes: 50 additions & 0 deletions src/components/Card.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
import styled from "styled-components"
import { media } from "../styles/media"

const Tag = styled.li`
display: block;

@media ${media.desktop} {
align-self: left;
}
`
const TagsContainer = styled.ul`

`
const CardTitle = styled.h2`
padding-top: 16px;
`
const CardText = styled.p`
font-size: 16px;
padding-top: 16px;

@media ${media.desktop} {
font-size: 18px;
}
`

const Card = ({ title, text, tags, TitleComponent = CardTitle }) => {
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I really like how you combine the title/​body/​tags logic into one reusable component here in Card.jsx. It’s very DRY. 👍

const cardContent = (
<>
{tags && (
<TagsContainer>
{tags.map((tag, index) => (
<Tag key={index}>{tag}</Tag>
))}
</TagsContainer>
)}
{text && (
<CardText>{text}</CardText>
)}
</>
)

return (
<article>
<TitleComponent>{title}</TitleComponent>
{cardContent}
</article>
)
}

export default Card
70 changes: 70 additions & 0 deletions src/components/Contact.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
import styled from "styled-components"
import { media } from "../styles/media"
import { IoCallOutline, IoChatbubbleEllipsesOutline, IoMailOutline } from "react-icons/io5";

const ContactContainer = styled.div`
display: block;
padding: 64px 0;

@media ${media.tablet} {
font-size: 24px;
}

@media ${media.desktop} {
font-size: 30px;
}

a {
color: inherit;
display: block;
margin-top: 8px;
}
`

const ContactItem = styled.a`
display: flex;
align-items: center;
gap: 16px;
cursor: pointer;
transition: color 0.2s ease;

&:hover {
transform: scale(1.1);
color: #0077ff;
}

svg {
flex-shrink: 0;
font-size: 1em;
vertical-align: middle;
}
`

const ContactName = styled.h3`
margin-bottom: 12px;
`

const Contact = ({ name, phone, email }) => {
// Clean phone number for tel and sms links (remove spaces, parentheses, dashes)
const cleanPhone = phone.replace(/[^+\d]/g, "");

return (
<ContactContainer>
<ContactName>{name}</ContactName>

<ContactItem href={`tel:${cleanPhone}`} aria-label={`Call ${phone}`}>
<IoCallOutline /> {phone}
</ContactItem>

<ContactItem href={`sms:${cleanPhone}`} aria-label={`Send SMS to ${phone}`}>
<IoChatbubbleEllipsesOutline /> Send SMS
</ContactItem>

<ContactItem href={`mailto:${email}`} aria-label={`Send email to ${email}`}>
<IoMailOutline /> {email}
</ContactItem>
</ContactContainer>
)
}

export default Contact
90 changes: 90 additions & 0 deletions src/components/HeroImages.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import laptopBG from "../assets/laptop-BG.jpg"
import cameraBG from "../assets/camera-BG.jpg"
import BiankaRomero from "../assets/BiankaRomero.jpg"
import styled, { keyframes } from "styled-components"


const HeroContainer = styled.div`
max-width: 100vw;
width: 100%;
height: auto;
display: flex;
justify-content: center;
padding: 16px;
margin: 0 auto;

`
const HeroImg = styled.img`
width: 30%;
height: auto;
max-width: 100%;
object-fit: cover;
border-radius: 12px;
box-shadow: 0 4px 8px rgba(0,0,0,0.2);
`

const fadeUpCenter = keyframes`
from {
opacity: 0;
transform: translateY(40px);
}
to {
opacity: 1;
transform: translateY(0);
}
`


const slideInLeft = keyframes`
from {
opacity: 0;
transform: rotate(-4.7deg) translateX(-100px);
}
to {
opacity: 1;
transform: rotate(-4.7deg) translateX(50px);
}
`

const slideInRight = keyframes`
from {
opacity: 0;
transform: rotate(4.7deg) translateX(100px);
}
to {
opacity: 1;
transform: rotate(4.7deg) translateX(-50px);
}
`


const LeftHeroImg = styled(HeroImg)`
animation: ${slideInLeft} 1s ease forwards;
z-index: -1;
`

const CenterHeroImg = styled(HeroImg)`
animation: ${fadeUpCenter} 1s ease forwards;
z-index: 0;

&:hover {
transform: scale(1.05);
}
`

const RightHeroImg = styled(HeroImg)`
animation: ${slideInRight} 1s ease forwards;
z-index: -1;
`

const HeroImages = () => {
return (
<HeroContainer>
<LeftHeroImg src={laptopBG} alt="Laptop background" />
<CenterHeroImg src={BiankaRomero} alt="Bianka Romero" />
<RightHeroImg src={cameraBG} alt="Camera background" />
</HeroContainer>
)
}

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

const LinkButtonStyle = styled.a`
font-size: 18px;
border-radius: 12px;
border: 2px solid black;
background: #000;
color: white;
display: flex;
width: 100%;
max-width: 303px;
height: 48px;
padding: 0px 16px;
align-items: center;
gap: 16px;
flex-shrink: 0;
transition: transform 0.3s ease-in-out;

&:hover {
transform: scale(1.1);
}
`

const IconStyle = styled.span`
display: flex;
align-items: center;
justify-content: center;
height: 100%;
line-height: 0;
font-size: 32px;
`

const LinkButton = ({ link, linkUse, IconComponent, ...props }) => {
return (
<LinkButtonStyle
href={link}
target="_blank"
rel="noopener noreferrer"
{...props}>

{IconComponent && (
<IconStyle aria-hidden="true">
<IconComponent />
</IconStyle>
)}
{linkUse}
</LinkButtonStyle>
)
}

export default LinkButton
Loading