diff --git a/fullstackforge/cv.txt b/fullstackforge/cv.txt
new file mode 100644
index 0000000..f1b26fb
--- /dev/null
+++ b/fullstackforge/cv.txt
@@ -0,0 +1,19 @@
+Jan Michael Sibug
+Full Stack Web Developer
+
+Email: hello@fullstackforge.dev
+Phone: +1 (234) 567-890
+
+Summary:
+Full stack engineer focused on building scalable, accessible, and high-impact web products.
+
+Core Skills:
+HTML, CSS, JavaScript, TypeScript, React, Node.js, Express, PostgreSQL, MongoDB
+
+Experience:
+Senior Full Stack Developer — ForgeLabs (2022 - Present)
+Full Stack Developer — BrightWorks Studio (2019 - 2022)
+Frontend Engineer — Launchpad Digital (2017 - 2019)
+
+Education:
+B.S. in Computer Science — University of Technology (2017)
diff --git a/fullstackforge/fullstackforge.png b/fullstackforge/fullstackforge.png
new file mode 100644
index 0000000..3b2daf4
Binary files /dev/null and b/fullstackforge/fullstackforge.png differ
diff --git a/fullstackforge/index.html b/fullstackforge/index.html
new file mode 100644
index 0000000..ad1945a
--- /dev/null
+++ b/fullstackforge/index.html
@@ -0,0 +1,268 @@
+
+
+
+
+
+ FullStackForge | Full Stack Web Developer
+
+
+
+
+
+
+
+
+
+
FullStackForge · End-to-end product delivery
+
Shipping reliable web platforms with speed, polish, and calm.
+
+ I combine product sense with engineering rigor—crafting resilient back ends, responsive UIs, and
+ clear collaboration for teams that need to move fast.
+
+
+
+ Full Stack Web Developer
+ Remote · Onsite
+ Available now
+
+
+
+
+
+
+
+
+
+
6+ Years
+
25+ Projects
+
10+ Stacks
+
+
Open to opportunities
+
+
+
+
+
+
+
+
Tooling I use to deliver fast and safely
+
+
React
+
Node.js
+
TypeScript
+
PostgreSQL
+
MongoDB
+
Docker
+
Figma
+
+
+
+
+
+
+
About
+
Clarity-first engineering for modern teams
+
+
+
+ I build products from concept to launch—balancing thoughtful UX, scalable architecture, and
+ maintainable code. My approach is collaborative, outcome-driven, and focused on sustainable
+ velocity.
+
+
+
What drives my work
+
+ Reliable delivery, documented decisions, and clean handoffs
+ Design systems that stay consistent across squads
+ APIs that are predictable, secure, and easy to extend
+
+
+
+
How I partner
+
+ Translate requirements into clear technical plans
+ Ship iteratively with instrumentation and monitoring
+ Coach teams on front-end patterns and API contracts
+
+
+
+
+
+
+
+
+
Skills
+
Stack and capabilities
+
+
+
HTML5
+
CSS3
+
JavaScript
+
TypeScript
+
React
+
Node.js
+
Express
+
PostgreSQL
+
MongoDB
+
🔗 REST APIs
+
⚙️ CI/CD
+
☁️ Cloud Deployments
+
+
+
+
+
+
+
Experience
+
Delivery you can measure
+
+
+
+
+
Senior Full Stack Developer — ForgeLabs
+
2022 - Present
+
+ Rebuilt a multi-tenant SaaS with microservices; improved load times by 38% and CI/CD reliability.
+
+
+
+
Full Stack Developer — BrightWorks Studio
+
2019 - 2022
+
+ Delivered 12+ client platforms, crafted UI libraries, and integrated analytics and billing services.
+
+
+
+
Frontend Engineer — Launchpad Digital
+
2017 - 2019
+
+ Shipped responsive experiences for B2B SaaS clients in close partnership with design teams.
+
+
+
+
+
+
+
+
Education
+
Education & credentials
+
+
+
+ B.S. in Computer Science
+ University of Technology — 2017
+ Grounded in software engineering, data structures, and human-computer interaction.
+
+
+ Professional Certifications
+ 2020 - 2024
+ AWS Cloud Practitioner, Google UX Design, and Advanced JavaScript.
+
+
+
+
+
+
+
+
Portfolio
+
Selected work
+
+
+
+
+
PulseTrack Analytics
+ Analytics
+
+ Real-time marketing insights dashboard with RBAC, alerts, and usage metering.
+
+
+
+
+
Onward HR Portal
+ Operations
+
+ Employee onboarding suite with secure messaging, documents, and workflows.
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/fullstackforge/profile.svg b/fullstackforge/profile.svg
new file mode 100644
index 0000000..e614697
--- /dev/null
+++ b/fullstackforge/profile.svg
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Dummy Profile
+
+
diff --git a/fullstackforge/script.js b/fullstackforge/script.js
new file mode 100644
index 0000000..1c19d7c
--- /dev/null
+++ b/fullstackforge/script.js
@@ -0,0 +1,33 @@
+const navToggle = document.querySelector('.nav-toggle');
+const navLinks = document.querySelector('.nav-links');
+const navItems = document.querySelectorAll('.nav-links a');
+
+if (navToggle && navLinks) {
+ navToggle.addEventListener('click', () => {
+ const isOpen = navLinks.classList.toggle('open');
+ navToggle.setAttribute('aria-expanded', String(isOpen));
+ });
+}
+
+const sections = document.querySelectorAll('section[id]');
+const setActiveLink = () => {
+ let current = '';
+ sections.forEach((section) => {
+ const sectionTop = section.offsetTop - 120;
+ if (window.scrollY >= sectionTop) {
+ current = section.getAttribute('id');
+ }
+ });
+
+ navItems.forEach((link) => {
+ link.classList.toggle('active', link.getAttribute('href') === `#${current}`);
+ });
+};
+
+window.addEventListener('scroll', setActiveLink);
+setActiveLink();
+
+const year = document.getElementById('year');
+if (year) {
+ year.textContent = new Date().getFullYear();
+}
diff --git a/fullstackforge/style.css b/fullstackforge/style.css
new file mode 100644
index 0000000..fded6f5
--- /dev/null
+++ b/fullstackforge/style.css
@@ -0,0 +1,846 @@
+@import url("https://fonts.googleapis.com/css2?family=Playfair+Display:wght@500;600;700&family=Manrope:wght@300;400;500;600;700&display=swap");
+
+:root {
+ --accent: #01b953;
+ --accent-dark: #059f4a;
+ --dark: #0b0f0e;
+ --muted: #5f6a65;
+ --light: #f6fbf8;
+ --card: #ffffff;
+ --border: rgba(1, 185, 83, 0.16);
+ --shadow: 0 24px 60px rgba(10, 40, 24, 0.12);
+ --shadow-soft: 0 18px 40px rgba(0, 0, 0, 0.05);
+ --font-display: "Playfair Display", serif;
+ --font-body: "Manrope", sans-serif;
+}
+
+* {
+ box-sizing: border-box;
+ margin: 0;
+ padding: 0;
+}
+
+html {
+ scroll-behavior: smooth;
+ font-size: 16px;
+}
+
+body {
+ font-family: var(--font-body);
+ color: var(--dark);
+ background: linear-gradient(140deg, #f4fff8, #eef6f1 60%, #ffffff);
+ line-height: 1.75;
+ letter-spacing: 0.12px;
+ overflow-x: hidden;
+}
+
+img {
+ max-width: 100%;
+ display: block;
+}
+
+a {
+ text-decoration: none;
+ color: inherit;
+ transition: color 0.2s ease, opacity 0.2s ease;
+}
+
+.container {
+ max-width: 1180px;
+ margin: 0 auto;
+ padding: 0 1.5rem;
+}
+
+.site-header {
+ position: sticky;
+ top: 0;
+ z-index: 10;
+ backdrop-filter: blur(16px);
+ background: rgba(246, 251, 248, 0.95);
+ border-bottom: 1px solid var(--border);
+ box-shadow: 0 12px 30px rgba(1, 185, 83, 0.08);
+}
+
+.nav {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 1rem;
+ padding: 1.2rem 0;
+}
+
+.brand {
+ display: flex;
+ align-items: center;
+ gap: 0.65rem;
+ font-weight: 700;
+}
+
+.brand-mark {
+ width: 44px;
+ height: 44px;
+ border-radius: 14px;
+ background: rgba(1, 185, 83, 0.12);
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ color: var(--accent);
+ font-size: 1.25rem;
+ box-shadow: inset 0 0 0 2px rgba(1, 185, 83, 0.35);
+}
+
+.brand-text {
+ font-family: var(--font-display);
+ font-size: 1.15rem;
+ letter-spacing: 0.3px;
+}
+
+.nav-links {
+ display: flex;
+ gap: 1rem;
+ font-weight: 600;
+ color: #1c2a25;
+}
+
+.nav-links a {
+ position: relative;
+ padding-bottom: 0.2rem;
+}
+
+.nav-links a::after {
+ content: "";
+ position: absolute;
+ left: 0;
+ bottom: 0;
+ width: 0;
+ height: 2px;
+ background: var(--accent);
+ transition: width 0.3s ease;
+}
+
+.nav-links a:hover::after,
+.nav-links a.active::after {
+ width: 100%;
+}
+
+.nav-toggle {
+ display: none;
+ background: none;
+ border: 1px solid var(--border);
+ border-radius: 999px;
+ padding: 0.45rem 1rem;
+ font-weight: 600;
+ cursor: pointer;
+}
+
+.btn {
+ display: inline-flex;
+ align-items: center;
+ justify-content: center;
+ gap: 0.5rem;
+ border-radius: 999px;
+ padding: 0.72rem 1.55rem;
+ font-weight: 600;
+ border: 1px solid transparent;
+ transition: transform 0.3s ease, box-shadow 0.3s ease, background 0.3s ease;
+}
+
+.btn-primary {
+ background: linear-gradient(135deg, var(--accent), var(--accent-dark));
+ color: #fff;
+ box-shadow: var(--shadow);
+}
+
+.btn-primary:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 30px 70px rgba(1, 185, 83, 0.28);
+}
+
+.btn-ghost {
+ border-color: rgba(1, 185, 83, 0.5);
+ color: var(--accent);
+}
+
+.btn-ghost:hover {
+ background: rgba(1, 185, 83, 0.1);
+}
+
+main {
+ padding: 0 0 4rem;
+}
+
+.hero {
+ padding: 0 0 3.2rem;
+ position: relative;
+ overflow: hidden;
+ background: #e6faed;
+}
+
+.hero::before {
+ content: "";
+ position: absolute;
+ inset: 0;
+ background: radial-gradient(circle at 20% 20%, rgba(1, 185, 83, 0.12), transparent 30%),
+ radial-gradient(circle at 80% 10%, rgba(1, 185, 83, 0.12), transparent 30%),
+ radial-gradient(circle at 50% 60%, rgba(1, 185, 83, 0.12), transparent 32%);
+ z-index: 0;
+}
+
+.hero-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
+ gap: 2.8rem;
+ align-items: center;
+ position: relative;
+ z-index: 1;
+}
+
+.hero-copy h1 {
+ font-family: var(--font-display);
+ font-size: clamp(2.9rem, 4.8vw, 4.2rem);
+ line-height: 1.05;
+ margin: 0.6rem 0 1.1rem;
+ letter-spacing: 0.3px;
+}
+
+.lead {
+ font-size: clamp(1.08rem, 1.2vw, 1.26rem);
+ line-height: 1.7;
+ color: #1e2d27;
+ max-width: 600px;
+}
+
+.pill {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.4rem;
+ padding: 0.45rem 0.9rem;
+ border-radius: 999px;
+ background: rgba(1, 185, 83, 0.12);
+ color: var(--accent);
+ font-weight: 700;
+ letter-spacing: 0.4px;
+ font-size: 0.9rem;
+ border: 1px solid rgba(1, 185, 83, 0.18);
+ box-shadow: 0 12px 30px rgba(1, 185, 83, 0.12);
+}
+
+.hero-actions {
+ display: flex;
+ gap: 1rem;
+ flex-wrap: wrap;
+ margin: 1.6rem 0;
+}
+
+.hero-badges {
+ display: flex;
+ gap: 0.6rem;
+ flex-wrap: wrap;
+}
+
+.hero-badges span {
+ padding: 0.35rem 0.85rem;
+ border-radius: 12px;
+ background: rgba(1, 185, 83, 0.08);
+ color: #1c2a25;
+ font-weight: 700;
+ font-size: 0.9rem;
+ border: 1px solid rgba(1, 185, 83, 0.12);
+}
+
+.social {
+ display: flex;
+ gap: 0.8rem;
+ flex-wrap: wrap;
+ margin-top: 1rem;
+}
+
+.social a {
+ padding: 0.35rem 0.85rem;
+ border-radius: 999px;
+ background: rgba(1, 185, 83, 0.08);
+ color: var(--accent);
+ font-weight: 600;
+ display: inline-flex;
+ align-items: center;
+ gap: 0.45rem;
+}
+
+.icon-img {
+ width: 18px;
+ height: 18px;
+ display: inline-block;
+}
+
+.icon-emoji {
+ font-size: 1rem;
+ line-height: 1;
+}
+
+.hero-panel {
+ display: grid;
+ justify-items: center;
+ align-items: center;
+}
+
+.profile-card {
+ background: rgba(255, 255, 255, 0.95);
+ border-radius: 28px;
+ padding: 1.4rem;
+ box-shadow: var(--shadow);
+ display: grid;
+ gap: 0.9rem;
+ justify-items: center;
+ border: 1px solid rgba(1, 185, 83, 0.1);
+ width: 280px;
+ max-width: 100%;
+}
+
+.profile-card img {
+ border-radius: 22px;
+ background: #f2fbf6;
+ width: 210px;
+ height: 210px;
+ object-fit: cover;
+ box-shadow: 0 18px 40px rgba(1, 185, 83, 0.12);
+}
+
+.profile-meta h3 {
+ font-size: 1.35rem;
+ letter-spacing: 0.2px;
+ text-align: center;
+}
+
+.profile-meta p {
+ color: var(--muted);
+ text-align: center;
+}
+
+.profile-stats {
+ display: grid;
+ grid-template-columns: repeat(3, 1fr);
+ gap: 0.6rem;
+ width: 100%;
+}
+
+.profile-stats div {
+ background: rgba(1, 185, 83, 0.06);
+ border-radius: 14px;
+ padding: 0.6rem 0.4rem;
+ text-align: center;
+ border: 1px solid rgba(1, 185, 83, 0.12);
+}
+
+.profile-stats strong {
+ display: block;
+ font-size: 1.1rem;
+ color: var(--accent);
+}
+
+.profile-stats span {
+ color: var(--muted);
+ font-weight: 600;
+ font-size: 0.85rem;
+}
+
+.status {
+ padding: 0.4rem 0.9rem;
+ border-radius: 999px;
+ background: linear-gradient(135deg, rgba(1, 185, 83, 0.16), rgba(1, 185, 83, 0.24));
+ color: var(--accent);
+ font-weight: 700;
+ font-size: 0.9rem;
+}
+
+.trust {
+ padding: 0 0 2.5rem;
+}
+
+.trust-grid {
+ display: grid;
+ gap: 1rem;
+ align-items: center;
+ background: var(--card);
+ border-radius: 22px;
+ padding: 1.6rem 2rem;
+ box-shadow: var(--shadow-soft);
+ border: 1px solid rgba(1, 185, 83, 0.08);
+}
+
+.trust-grid p {
+ font-weight: 700;
+ color: #1c2a25;
+ letter-spacing: 0.1px;
+}
+
+.trust-logos {
+ display: flex;
+ gap: 0.7rem;
+ flex-wrap: wrap;
+ color: var(--muted);
+ font-weight: 600;
+}
+
+.trust-logos span {
+ padding: 0.45rem 0.9rem;
+ background: rgba(1, 185, 83, 0.08);
+ border-radius: 999px;
+ border: 1px solid rgba(1, 185, 83, 0.12);
+ display: inline-flex;
+ align-items: center;
+ gap: 0.4rem;
+}
+
+.contact-line {
+ display: inline-flex;
+ align-items: center;
+ gap: 0.45rem;
+ margin-bottom: 0.35rem;
+}
+
+.inline-icon {
+ width: 18px;
+ height: 18px;
+ display: inline-block;
+ background-size: contain;
+ background-repeat: no-repeat;
+}
+
+.phone-icon {
+ background-image: url('data:image/svg+xml;utf8, ');
+}
+
+.mail-icon {
+ background-image: url('data:image/svg+xml;utf8, ');
+}
+
+.section {
+ margin-top: 4.5rem;
+ scroll-margin-top: 100px;
+}
+
+
+.section.alt {
+ background: rgba(1, 185, 83, 0.06);
+ padding: 3rem 0;
+}
+
+.section-heading {
+ display: flex;
+ flex-direction: column;
+ gap: 0.45rem;
+ margin-bottom: 2rem;
+ position: relative;
+}
+
+.section-heading h2 {
+ font-family: var(--font-display);
+ font-size: clamp(2.5rem, 3.4vw, 3.2rem);
+ line-height: 1.15;
+ letter-spacing: 0.4px;
+}
+
+.section-heading::after {
+ content: "";
+ width: 52px;
+ height: 3px;
+ background: var(--accent);
+ border-radius: 999px;
+ margin-top: 0.6rem;
+}
+
+.kicker {
+ text-transform: uppercase;
+ letter-spacing: 3px;
+ font-weight: 600;
+ color: var(--accent);
+ font-size: 0.85rem;
+ line-height: 1.2;
+}
+
+.feature-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
+ gap: 1.5rem;
+}
+
+.feature-card {
+ background: var(--card);
+ border-radius: 20px;
+ padding: 1.4rem 1.5rem;
+ box-shadow: var(--shadow-soft);
+ border: 1px solid rgba(1, 185, 83, 0.08);
+}
+
+.feature-card h3 {
+ margin-bottom: 0.8rem;
+}
+
+.feature-card ul {
+ list-style: none;
+ display: grid;
+ gap: 0.5rem;
+}
+
+.feature-card li::before {
+ content: "•";
+ color: var(--accent);
+ margin-right: 0.6rem;
+}
+
+.chip-grid {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 0.8rem;
+}
+
+.chip-grid span {
+ padding: 0.55rem 1.1rem;
+ border-radius: 999px;
+ background: #fff;
+ box-shadow: 0 12px 25px rgba(1, 185, 83, 0.08);
+ font-weight: 600;
+ color: #1a2a22;
+ border: 1px solid rgba(1, 185, 83, 0.08);
+ display: inline-flex;
+ align-items: center;
+ gap: 0.4rem;
+}
+
+.timeline,
+.cards,
+.portfolio-grid {
+ display: grid;
+ gap: 1.7rem;
+}
+
+.timeline {
+ position: relative;
+ padding-left: 1rem;
+}
+
+.timeline::before {
+ content: "";
+ position: absolute;
+ left: 12px;
+ top: 0;
+ bottom: 0;
+ width: 2px;
+ background: linear-gradient(var(--accent), rgba(1, 185, 83, 0.2));
+ opacity: 0.7;
+}
+
+.timeline article,
+.cards article,
+.portfolio-grid article,
+.contact-card {
+ background: var(--card);
+ border-radius: 22px;
+ padding: 1.7rem;
+ box-shadow: var(--shadow-soft);
+ border: 1px solid rgba(1, 185, 83, 0.08);
+ transition: transform 0.3s ease, box-shadow 0.3s ease;
+ position: relative;
+}
+
+.timeline article {
+ padding-left: 1.6rem;
+}
+
+.timeline article::before {
+ content: "";
+ position: absolute;
+ left: -2px;
+ top: 1.6rem;
+ width: 12px;
+ height: 12px;
+ border-radius: 50%;
+ background: var(--accent);
+ box-shadow: 0 0 0 6px rgba(1, 185, 83, 0.12);
+}
+
+.timeline article:hover,
+.cards article:hover,
+.portfolio-grid article:hover {
+ transform: translateY(-4px);
+ box-shadow: 0 30px 60px rgba(10, 40, 24, 0.12);
+}
+
+.meta {
+ color: var(--muted);
+ font-weight: 600;
+ margin: 0.35rem 0 0.9rem;
+ font-size: 0.95rem;
+}
+
+.portfolio-grid {
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
+}
+
+.card-top {
+ display: flex;
+ align-items: center;
+ justify-content: space-between;
+ gap: 0.8rem;
+ flex-wrap: nowrap;
+ margin-bottom: 0.6rem;
+}
+
+.tag {
+ display: inline-flex;
+ align-items: center;
+ padding: 0.35rem 0.8rem;
+ border-radius: 12px;
+ background: rgba(1, 185, 83, 0.12);
+ color: var(--accent);
+ font-weight: 700;
+ font-size: 0.85rem;
+}
+
+.tags {
+ display: flex;
+ gap: 0.6rem;
+ flex-wrap: wrap;
+ margin-top: 1rem;
+}
+
+.tags span {
+ padding: 0.35rem 0.8rem;
+ border-radius: 999px;
+ font-size: 0.85rem;
+ background: rgba(1, 185, 83, 0.15);
+ color: var(--accent);
+ font-weight: 600;
+}
+
+.contact-grid {
+ display: grid;
+ gap: 2rem;
+ grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
+ align-items: start;
+}
+
+.contact-form {
+ display: grid;
+ gap: 1rem;
+}
+
+.contact-form input,
+.contact-form textarea {
+ width: 100%;
+ padding: 0.9rem 1rem;
+ border-radius: 14px;
+ border: 1px solid rgba(0, 0, 0, 0.1);
+ font-family: inherit;
+ background: #fff;
+ transition: border 0.2s ease, box-shadow 0.2s ease;
+ font-size: 1rem;
+}
+
+.contact-form input:focus,
+.contact-form textarea:focus {
+ outline: none;
+ border-color: rgba(1, 185, 83, 0.5);
+ box-shadow: 0 0 0 3px rgba(1, 185, 83, 0.15);
+}
+
+.footer {
+ text-align: center;
+ padding: 2.5rem 1.5rem 3rem;
+ color: var(--muted);
+ font-size: 0.95rem;
+}
+
+.footer .heart {
+ color: var(--accent);
+ font-size: 1.1rem;
+ margin: 0 0.2rem;
+}
+
+:focus-visible {
+ outline: 3px solid rgba(1, 185, 83, 0.4);
+ outline-offset: 2px;
+ border-radius: 6px;
+}
+
+@media (prefers-reduced-motion: no-preference) {
+ .hero-copy,
+ .hero-panel,
+ .trust-grid,
+ .section {
+ animation: fadeUp 0.8s ease both;
+ }
+
+ .hero-panel {
+ animation-delay: 0.1s;
+ }
+
+ .trust-grid {
+ animation-delay: 0.2s;
+ }
+
+ .section {
+ animation-delay: 0.3s;
+ }
+}
+
+@keyframes fadeUp {
+ from {
+ opacity: 0;
+ transform: translateY(16px);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0);
+ }
+}
+
+@media (max-width: 900px) {
+ .nav-links {
+ display: none;
+ position: absolute;
+ top: 72px;
+ right: 1.5rem;
+ background: #fff;
+ border-radius: 18px;
+ padding: 1rem;
+ flex-direction: column;
+ box-shadow: 0 20px 40px rgba(0, 0, 0, 0.1);
+ }
+
+ .nav-links.open {
+ display: flex;
+ }
+
+ .nav-toggle {
+ display: inline-flex;
+ }
+
+ .nav {
+ position: relative;
+ }
+}
+
+@media (max-width: 600px) {
+ .section.alt {
+ padding: 2.4rem 0;
+ }
+}
+
+@media (max-width: 1024px) {
+ .container {
+ padding: 0 1.1rem;
+ }
+
+ .hero-grid {
+ gap: 2rem;
+ }
+
+ .profile-card {
+ width: 260px;
+ }
+
+ .profile-card img {
+ width: 190px;
+ height: 190px;
+ }
+}
+
+@media (max-width: 768px) {
+ .nav {
+ align-items: center;
+ }
+
+ .nav-links {
+ width: 100%;
+ left: 0;
+ right: 0;
+ top: 72px;
+ }
+
+ .hero {
+ padding-top: 2rem;
+ }
+
+ .hero-grid {
+ grid-template-columns: 1fr;
+ text-align: center;
+ }
+
+ .hero-actions,
+ .hero-badges,
+ .social {
+ justify-content: center;
+ }
+
+ .hero-panel {
+ order: -1;
+ }
+
+ .profile-card {
+ width: 240px;
+ }
+
+ .profile-card img {
+ width: 180px;
+ height: 180px;
+ }
+
+ .feature-grid {
+ grid-template-columns: 1fr;
+ }
+
+ .timeline {
+ padding-left: 0;
+ }
+
+ .timeline::before,
+ .timeline article::before {
+ display: none;
+ }
+
+ .portfolio-grid {
+ grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
+ }
+}
+
+@media (max-width: 520px) {
+ .hero-copy h1 {
+ font-size: clamp(2.4rem, 8vw, 3rem);
+ }
+
+ .lead {
+ font-size: 1rem;
+ }
+
+ .pill {
+ width: 100%;
+ justify-content: center;
+ }
+
+ .nav {
+ flex-wrap: wrap;
+ gap: 0.6rem;
+ }
+
+ .btn {
+ width: 100%;
+ justify-content: center;
+ }
+
+ .hero-badges span,
+ .social a {
+ width: 100%;
+ text-align: center;
+ }
+
+ .profile-card {
+ width: 100%;
+ max-width: 260px;
+ }
+
+ .profile-card img {
+ width: 170px;
+ height: 170px;
+ }
+}
diff --git a/images/fullstackforge.png b/images/fullstackforge.png
new file mode 100644
index 0000000..3b2daf4
Binary files /dev/null and b/images/fullstackforge.png differ
diff --git a/index.html b/index.html
index ccc78a4..869d061 100644
--- a/index.html
+++ b/index.html
@@ -615,6 +615,33 @@ Aurora
+
+
+