Up until Day 5, the frontend had something most side projects never reach:
a stable layout, frozen navigation, and a defined product surface.
Technically, the system was “ready”.
But functionally, it was still empty.
It had pages.
It had routes.
It had structure.
What it didn’t have yet was the most important thing any product needs:
a content model.
Day 6 was the day I stopped building screens
and started building a system that serves information.
This is where the portfolio stopped being a UI project
and started behaving like a real product.
The Real Shift: From Components to Content
Before Day 6, the mental model was:
“Which component should I build next?”
On Day 6, that changed to:
“What information does this product actually need to expose?”
That’s a huge shift.
Because now you’re not designing views —
you’re designing knowledge representation.
So the first thing I did was extract all core information into structured JSON:
- projects
- experiences
- achievements
- about
- hero
- skills
- navigation data
Not because JSON is cool.
But because:
content must be independent from presentation.
This single decision is what turns a frontend into a maintainable system.
Why JSON Is a Product Decision, Not a Technical One
Most portfolios hardcode content inside JSX.
It works.
It’s fast.
And it’s a long-term mistake.
By separating content into JSON:
- design becomes replaceable
- content becomes reusable
- pages become dumb renderers
- future CMS integration becomes trivial
From a product owner’s perspective, this is critical:
You’re saying:
“This product has data, and the UI is just one way to view it.”
That’s exactly how real systems work.
Introducing the Section Abstraction
Once content existed, a new problem appeared:
Every page started repeating the same layout patterns:
- spacing
- width constraints
- background colors
- alignment logic
This is the kind of repetition that silently kills systems.
So instead of letting it spread, I created a reusable abstraction:
Section.jsx
Not a visual component. A layout contract.
Every major part of the UI now lives inside a Section:
- consistent spacing
- predictable structure
- global control over page rhythm
This is not about DRY. This is about design coherence at scale.
import React from 'react';
function Section({ id, bg = 'white', children }) {
const bgClass = bg === 'gray' ? 'bg-gray-50' : 'bg-white';
return (
<section id={id} className={`py-16 px-6 md:px-12 lg:px-20 ${bgClass}`}>
<div className="max-w-7xl mx-auto">{children}</div>
</section>
);
}
export default Section;
SectionHeader: Designing a Visual Language
Then came SectionHeader.jsx.
This component does something subtle but powerful:
It standardises how information is introduced.
Every section now has:
- a title
- an optional subtitle
- a consistent visual marker
This creates:
- rhythm
- hierarchy
- narrative flow
Not in code — in how the user experiences information.
This is design system thinking. Even if you never call it that.
import React from 'react';
function SectionHeader({ title, subtitle }) {
return (
<div className="text-center mb-12">
<h2 className="text-3xl md:text-4xl font-extrabold text-teal-700 mb-2">{title}</h2>
{subtitle && <p className="text-gray-600 max-w-2xl mx-auto">{subtitle}</p>}
<div className="mt-3 h-1 w-16 bg-teal-500 mx-auto rounded-full"></div>
</div>
);
}
export default SectionHeader;
The Hero Section: First Real Product Moment
The Hero section was the first place where:
- content
- layout
- branding
- and narrative
all converged.
This is the most important screen in the entire product.
Not because it’s visually complex; But because it answers the user’s first question:
“Why should I care about this person?”
And this is where most portfolios fail:
They introduce the developer, instead of introducing the value.
By driving the Hero entirely from heroData:
- the copy becomes intentional
- the call-to-action becomes strategic
- the design supports the message
Not the other way around.
import React from 'react';
import { Link } from 'react-router-dom';
import Section from '../common/Section';
import '../../styles/animations.css';
import heroImagePng from '../../../public/assets/hero/hero-image.png';
import heroData from '../../data/hero';
function Hero() {
return (
<Section id="hero" bg="white">
<div className="flex flex-col md:flex-row items-center justify-between gap-10 md:gap-16">
{/* Text Section */}
<div className="flex-1 text-center md:text-left animate-fade-in">
<h1 className="text-5xl md:text-6xl font-extrabold text-gray-900 mb-4 leading-tight">
{heroData.intro.split('Sushant Gaurav').map((part, index) =>
index === 1 ? (
<span key={index} className="text-teal-600">
Sushant Gaurav
</span>
) : (
part
)
)}
</h1>
<p className="text-gray-700 text-lg md:text-xl mb-8 max-w-xl mx-auto md:mx-0 leading-relaxed">
{heroData.description}
</p>
<Link
to="/projects"
className="inline-block bg-teal-600 hover:bg-teal-700 text-white px-8 py-3 rounded-xl font-medium shadow-md hover:shadow-lg transition-all duration-300 transform hover:-translate-y-1"
>
{heroData.callToAction}
</Link>
</div>
{/* Image Section */}
<div className="flex-1 flex justify-center md:justify-end">
<img
src={heroImagePng}
alt="Illustration of Sushant Gaurav"
className="w-72 md:w-96 lg:w-[28rem] xl:w-[32rem] rounded-2xl shadow-lg animate-floating transition-transform duration-500"
/>
</div>
</div>
</Section>
);
}
export default Hero;
The Hidden Engineering Value of the Hero
From the outside, Hero looks like a UI component.
From the inside, it’s actually a system test.
It proves:
- JSON integration works
- Section abstraction holds
- layout is responsive
- animations are isolated
- routing is functional
- branding is consistent
The Hero is not a component.
It’s a product validation point.
If Hero works well, the architecture works.
Why This Day Matters More Than It Looks
Day-6 didn’t introduce new pages.
It didn’t add new routes.
It didn’t even add backend integration.
But it did something far more important:
It established:
- a content model
- a layout system
- a visual language
- and a storytelling structure
This is the day the portfolio stopped being:
a collection of screens
and became:
a content-driven product.
Content Modeling Is a Senior Skill (Disguised as Simplicity)
Most developers think seniority comes from:
- knowing more frameworks
- using more tools
- writing more complex code
In reality, seniority shows up in a much less visible place:
how you represent information.
Content modeling is not a frontend task.
It’s a system design problem.
By deciding:
- what data exists
- where it lives
- how it’s structured
- how UI consumes it
you are designing the domain of your product.
That’s exactly what backend engineers do.
That’s exactly what product architects do.
And now — you’re doing it on the frontend.
Why This Makes the Portfolio Future-Proof
This single decision unlocks an absurd amount of future flexibility.
Because now:
- switching UI frameworks is possible
- adding a CMS is trivial
- creating an admin panel is realistic
- generating static pages is easy
- internationalization is feasible
All without touching core logic.
The frontend is no longer a set of views.
It’s a rendering layer on top of structured data.
That’s the same mental model used by:
- headless CMS systems
- design systems
- real SaaS dashboards
Why Most Projects Collapse Without This Layer
Here’s the uncomfortable truth:
Most personal projects die when:
- content grows
- requirements change
- UI needs to evolve
Not because the developer is bad.
But because everything is hardcoded.
So every change becomes:
- risky
- repetitive
- painful
- error-prone
By introducing a content layer on Day-6,
you eliminated an entire category of future problems.
This is the kind of decision that:
- saves hours now
- saves weeks later
- saves rewrites in the future
And nobody sees it in the UI.
That’s the mark of real engineering.
Why This Changes How Recruiters Read Your Code
Here’s something most people don’t realize:
Recruiters don’t read your UI.
They read your structure.
And when they see:
- data separated from views
- reusable layout abstractions
- consistent content models
- dumb presentational components
they don’t think:
“Nice React.”
They think:
“This person understands systems.”
That’s a completely different signal.
It moves you from:
frontend developer
to
software engineer.
The Hero Section as a Personal Branding Engine
Let’s talk about the Hero again — but not technically.
The Hero is the only place where:
every visitor passes.
Every recruiter stops.
Every first impression is formed.
By driving it from structured content, you’ve made:
your story editable,
your positioning intentional,
your narrative strategic.
You’re no longer locked into:
“Hi, I am X and I know Y.”
You now own:
a message system.
That’s not UI.
That’s branding infrastructure.
The Hidden Pattern of Day-6
If you zoom out, Day 6 followed a very powerful pattern:
- Extract knowledge from code
- Centralise it
- Build abstractions around it
- Let UI become a pure consumer
This is the same pattern used in:
- backend microservices
- clean architecture
- domain-driven design
- enterprise systems
You just implemented it
in a personal portfolio.
Without even calling it that.
Day 6 in One Sentence
If I had to summarise Day-6:
Day 6 is when the frontend stopped being a UI layer
and became a content platform.
No new features.
No flashy animations.
No complex logic.
Just one of the most important upgrades any system can get:
a real information architecture.
And from this point onwards, every new section you build
will feel easier, cleaner, and more intentional —
because the system now knows what it is.
If you’re following along, the complete source lives here:
👉 GitHub Repository: https://github.com/imsushant12/sushantgaurav-portfolio


Top comments (0)