chore: update footer text, enhance rate card layout, and refine styles

This commit is contained in:
Jesse Egbosionu
2025-12-12 14:35:52 +01:00
parent fa297b1ef3
commit 148dbad7e8
5 changed files with 80 additions and 80 deletions
+1 -1
View File
@@ -3,7 +3,7 @@ export default function Footer() {
<footer className="footer"> <footer className="footer">
<div className="footer-content"> <div className="footer-content">
<p> <p>
Built with <span className="heart">❤️</span> and Amara Chukwu Built with <span className="heart">❤️</span>
</p> </p>
<p className="footer-year">© {new Date().getFullYear()}</p> <p className="footer-year">© {new Date().getFullYear()}</p>
</div> </div>
+14 -17
View File
@@ -7,27 +7,24 @@ export default function RateCard({ provider, rate, href, isBest, index, formatCu
className={`rate-card ${isBest ? 'best' : ''}`} className={`rate-card ${isBest ? 'best' : ''}`}
style={{ animationDelay: `${index * 0.1}s` }} style={{ animationDelay: `${index * 0.1}s` }}
> >
{logo && ( <div className="rate-card-header">
<div className="provider-logo-background"> <div className="provider-info">
<img {logo && (
src={logo} <img
alt={`${provider} logo`} src={logo}
className="provider-logo-faded" alt={`${provider} logo`}
/> className="provider-logo"
</div> />
)} )}
<div className="rate-card-content">
<div className="rate-card-header">
<h3 className="provider-name">{provider}</h3> <h3 className="provider-name">{provider}</h3>
{isBest && <span className="best-badge">Best Rate</span>}
</div> </div>
{isBest && <span className="best-badge">Best Rate</span>}
</div>
<div className="rate-value">{formatCurrency(rate)}</div> <div className="rate-value">{formatCurrency(rate)}</div>
<div className="rate-card-footer"> <div className="rate-card-footer">
<span className="visit-link">Visit provider →</span> <span className="visit-link">Visit provider →</span>
</div>
</div> </div>
</a> </a>
); );
+7 -7
View File
@@ -13,20 +13,20 @@ export default function Home() {
<div className="hero-content"> <div className="hero-content">
<p className="hero-subtitle"> <p className="hero-subtitle">
A software engineer architecting scalable backend systems in Amsterdam A sofrware engineer building systems that scale in Amsterdam
</p> </p>
<div className="hero-description"> <div className="hero-description">
<p> <p>
I build and scale software backends with a focus on creating impact through I architect and scale backend systems that handle millions of requests.
teamwork and continuous learning. My passion lies in solving complex problems From payment processing to logistics orchestration, I turn complex
and delivering solutions that enrich people's lives. technical challenges into reliable production infrastructure.
</p> </p>
<p> <p>
Over the past 6 years, I've shipped products across <strong>finance</strong>, <strong>ecommerce</strong>, 6 years shipping products across <strong>finance</strong>, <strong>ecommerce</strong>, and <strong>logistics</strong>.
and <strong>logistics</strong>, working with technologies like Python (Django, FastAPI), I work with Python (Django, FastAPI), JavaScript (React, Node.js), PostgreSQL,
JavaScript (React, Node.js), PostgreSQL, Docker, Redis, and Kubernetes. Docker, Redis, and Kubernetes to build systems that just work.
</p> </p>
</div> </div>
+1 -1
View File
@@ -51,7 +51,7 @@ export default function Rates() {
<Layout <Layout
title="EUR to NGN Exchange Rates - Jesse Egbosionu" title="EUR to NGN Exchange Rates - Jesse Egbosionu"
description="Compare live EUR to NGN exchange rates across multiple providers." description="Compare live EUR to NGN exchange rates across multiple providers."
showNavLinks={true} showNavLinks={false}
> >
<section className="rates-section"> <section className="rates-section">
<div className="rates-header"> <div className="rates-header">
+57 -54
View File
@@ -6,16 +6,16 @@
} }
:root { :root {
--color-primary: #0a0a0a; --color-primary: #2563eb;
--color-secondary: #1a1a1a; --color-secondary: #1e40af;
--color-accent: #fef3c7; --color-accent: #dbeafe;
--color-accent-hover: #fde68a; --color-accent-hover: #bfdbfe;
--color-background: #fffef0; --color-background: #ffffff;
--color-surface: #fefce8; --color-surface: #f8fafc;
--color-border: #fde68a; --color-border: #93c5fd;
--color-text: #0a0a0a; --color-text: #1e293b;
--color-text-muted: #525252; --color-text-muted: #64748b;
--color-success: #fbbf24; --color-success: #3b82f6;
--spacing-xs: 0.5rem; --spacing-xs: 0.5rem;
--spacing-sm: 1rem; --spacing-sm: 1rem;
@@ -81,8 +81,8 @@ strong {
// HEADER // HEADER
.header { .header {
padding: var(--spacing-lg) 0; padding: var(--spacing-lg) 0;
border-bottom: 1px solid var(--color-primary); border-bottom: 1px solid var(--color-border);
background: rgba(255, 254, 240, 0.95); background: rgba(255, 255, 255, 0.95);
backdrop-filter: blur(10px); backdrop-filter: blur(10px);
position: sticky; position: sticky;
top: 0; top: 0;
@@ -509,39 +509,36 @@ strong {
} }
.rate-card { .rate-card {
position: relative;
display: flex; display: flex;
flex-direction: column; flex-direction: column;
gap: var(--spacing-md); gap: var(--spacing-md);
padding: var(--spacing-lg); padding: var(--spacing-lg);
background: var(--color-background); background: var(--color-background);
border: 1px solid var(--color-primary); border: 1px solid var(--color-border);
border-radius: var(--radius-lg); border-radius: var(--radius-lg);
transition: all 0.3s ease; transition: all 0.3s ease;
cursor: pointer; cursor: pointer;
animation: fadeInUp 0.6s ease forwards; animation: fadeInUp 0.6s ease forwards;
opacity: 0; opacity: 0;
position: relative;
overflow: hidden; overflow: hidden;
&:hover { &:hover {
background: var(--color-accent); background: var(--color-accent);
transform: translateY(-4px); transform: translateY(-4px);
box-shadow: 0 8px 16px rgba(0, 0, 0, 0.15); box-shadow: 0 8px 16px rgba(37, 99, 235, 0.15);
.visit-link { .visit-link {
color: var(--color-primary); color: var(--color-primary);
transform: translateX(4px); transform: translateX(4px);
} }
.provider-logo-faded {
opacity: 0.15;
}
} }
&.best { &.best {
border-width: 2px; border-width: 2px;
border-color: var(--color-primary);
background: var(--color-accent); background: var(--color-accent);
box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); box-shadow: 0 4px 12px rgba(37, 99, 235, 0.15);
&::before { &::before {
content: ''; content: '';
@@ -551,11 +548,10 @@ strong {
right: 0; right: 0;
height: 3px; height: 3px;
background: var(--color-primary); background: var(--color-primary);
z-index: 1;
} }
&:hover { &:hover {
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.25); box-shadow: 0 8px 24px rgba(37, 99, 235, 0.25);
} }
.provider-name { .provider-name {
@@ -568,36 +564,6 @@ strong {
} }
} }
.provider-logo-background {
position: absolute;
right: 10px;
top: 50%;
transform: translateY(-50%);
width: 120px;
height: 120px;
display: flex;
align-items: center;
justify-content: center;
pointer-events: none;
}
.provider-logo-faded {
width: 100%;
height: 100%;
object-fit: contain;
opacity: 0.12;
filter: grayscale(100%);
transition: opacity 0.3s ease;
}
.rate-card-content {
position: relative;
z-index: 1;
display: flex;
flex-direction: column;
gap: var(--spacing-md);
}
.rate-card-header { .rate-card-header {
display: flex; display: flex;
justify-content: space-between; justify-content: space-between;
@@ -605,10 +571,23 @@ strong {
gap: var(--spacing-sm); gap: var(--spacing-sm);
} }
.provider-info {
display: flex;
align-items: center;
gap: var(--spacing-sm);
}
.provider-logo {
width: 40px;
height: 40px;
object-fit: contain;
border-radius: var(--radius-sm);
}
.provider-name { .provider-name {
font-size: 1.25rem; font-size: 1.25rem;
font-weight: 700; font-weight: 700;
color: var(--color-primary); color: var(--color-text);
} }
.best-badge { .best-badge {
@@ -651,10 +630,34 @@ strong {
@keyframes starRotate { @keyframes starRotate {
0% { 0% {
transform: rotate(0deg); transform: rotate(0deg);
color: #fbbf24; // bright yellow
}
16.66% {
color: #ffffff; // white
}
33.33% {
transform: rotate(60deg);
color: #ec4899; // hot pink
}
50% {
color: #f87171; // light red
}
66.66% {
transform: rotate(120deg);
color: #fb923c; // bright orange
}
83.33% {
color: #f472b6; // pink
} }
100% { 100% {
transform: rotate(360deg); transform: rotate(180deg);
color: #facc15; // yellow
} }
} }