Overview
The Footer component renders a minimalist copyright notice that dynamically displays the current year. It’s absolutely positioned at the bottom of the page.
Props Interface
This component has no props - it’s completely self-contained.
Features
Dynamic Year
The footer automatically displays the current year:
const today = new Date ();
const year = today . getFullYear ();
Absolute Positioning
The footer is positioned at the bottom left of its parent container:
< div className = "absolute bottom-0 left-0 w-full" >
{ /* Footer content */ }
</ div >
Usage Example
From page.tsx:393:
import Footer from '@/components/Footer' ;
function ContactPage () {
const [ mobile , setMobile ] = useState ( false );
return (
< div className = "relative bg-dark-green min-h-screen" >
< div className = "flex flex-col items-center" >
{ /* Page content */ }
</ div >
{ /* Footer only renders on desktop */ }
{ ! mobile && < Footer /> }
</ div >
);
}
The footer only renders on desktop screens. On mobile devices (isMobile === true), the copyright is rendered inline within the contact section instead.
Component Structure
Full Component
Rendering Logic in Page
import React from 'react' ;
const Footer : React . FC = () => {
const today = new Date ();
const year = today . getFullYear ();
return (
< div className = "absolute bottom-0 left-0 w-full" >
< div className = "flex flex-row justify-center items-center w-full gap-6 h-20 sm:h-24 px-4 sm:px-8" id = "footer" >
< div className = "flex items-center text-center p-4 bg-dark-green rounded-md" >
< h1 className = "font-bitter-italic text-offwhite text-b2xl sm:text-b3xs lg:text-b2xs xl:text-bxs 2xl:text-bsm" >
© Sunflower Capital { year }
</ h1 >
</ div >
</ div >
</ div >
);
};
export default Footer ;
Styling Details
Container :
Position: absolute bottom-0 left-0
Width: Full width (w-full)
Height: h-20 on mobile, sm:h-24 on small screens+
Inner Wrapper :
Display: flex flex-row
Alignment: justify-center items-center
Padding: px-4 sm:px-8
Gap: gap-6
Background Box :
Background: bg-dark-green
Border radius: rounded-md
Padding: p-4
Display: flex items-center text-center
This creates a pill-shaped container for the copyright text. Font :
Family: font-bitter-italic
Color: text-offwhite
Responsive Sizes :
Base: text-b2xl (very small)
sm: text-b3xs
lg: text-b2xs
xl: text-bxs
2xl: text-bsm
Responsive Behavior
Height Scaling :
h-20 /* 80px on mobile */
sm: h-24 /* 96px on small screens and up */
Horizontal Padding :
px-4 /* 16px on mobile */
sm: px-8 /* 32px on small screens and up */
Text Size (progressive enhancement):
text-b2xl /* Mobile: smallest */
sm: text-b3xs /* Small screens */
lg: text-b2xs /* Large screens */
xl: text-bxs /* Extra large */
2xl: text-bsm /* 2X large: largest */
Desktop vs Mobile Rendering
Desktop Location : Absolutely positioned at bottomComponent : <Footer /> componentContainer : Separate div with dark green badgeVisibility : Always visible when scrolled to bottom
Mobile Location : Inline within contact sectionComponent : Inline <h1> tagStyling : Same font and color, no badgeText : Identical copyright message
The footer appears on the contact page, which has:
Background image: bg-[url('/images/footer-bg.svg')]
Dark green background: bg-dark-green
LinkedIn link
Newsletter subscription link
Copyright footer (this component)
From page.tsx:334-394:
< div id = "footer" className = "relative bg-dark-green bg-[url('/images/footer-bg.svg')] min-h-screen" >
< div className = "flex flex-col items-center w-[85%] min-h-screen gap-32" >
< div className = "w-[85%] flex flex-col pt-36" >
< div className = "flex flex-col gap-6 md:gap-12" >
< h1 className = "font-arya text-offwhite text-tmd md:text-txl" > Contact </ h1 >
{ /* LinkedIn */ }
< a href = "https://www.linkedin.com/company/sunflowercapital/" >
< div className = "flex flex-row gap-3 md:gap-6" >
< Image src = "/images/linkedin.svg" alt = "LinkedIn" />
< span > Sunflower Capital </ span >
</ div >
</ a >
{ /* Newsletter */ }
< a href = "https://sunflowercapital.substack.com/" >
< div className = "flex flex-row gap-3 md:gap-6" >
< Image src = "/images/email.svg" alt = "Newsletter" />
< span > Subscribe to our newsletter </ span >
</ div >
</ a >
{ /* Mobile copyright */ }
{ mobile && < h1 className = "font-bitter-italic text-offwhite" > © Sunflower Capital { year } </ h1 > }
</ div >
</ div >
</ div >
{ /* Desktop footer component */ }
{ ! mobile && < Footer /> }
</ div >
Visual Hierarchy
Z-Index Layers :
Background image (footer-bg.svg)
Page content (LinkedIn, newsletter links)
Footer component (absolute positioned, appears on top)
Spacing :
Footer sits at bottom with absolute bottom-0
Page content has pt-36 (top padding)
Gap between elements: gap-32
Color Palette
/* Footer badge */
bg-dark-green /* Background of pill badge */
text-offwhite /* Copyright text color */
/* Page context */
bg-dark-green /* Page background */
The footer badge uses the same dark green as the page background but stands out due to the pill shape and centered positioning.
Source Reference
Component : src/components/Footer.tsx (21 lines)
Key Features :
Dynamic year from Date() object
Absolute positioning at bottom
Responsive text sizing
Desktop-only rendering (mobile uses inline version)
Minimalist design with dark green badge