Small Bug Fixes

This commit is contained in:
IM23a-spirgif
2025-03-03 17:42:28 +01:00
parent b97f1c3cf6
commit e04e1fb3e3
3 changed files with 183 additions and 158 deletions
+3 -1
View File
@@ -1,4 +1,6 @@
/** @type {import('next').NextConfig} */ /** @type {import('next').NextConfig} */
const nextConfig = {}; const nextConfig = {
devIndicators: false,
};
export default nextConfig; export default nextConfig;
+29 -6
View File
@@ -6,6 +6,16 @@ body {
color: #ffffff; color: #ffffff;
margin: 0; margin: 0;
padding: 0; padding: 0;
overflow-x: hidden;
overscroll-behavior: none;
}
html {
height: 100%;
min-height: 100vh;
background: linear-gradient(135deg, #000000, #1a001a);
overflow-x: hidden;
overscroll-behavior: none; /* Prevents scrolling past the boundaries */
} }
.container { .container {
@@ -29,20 +39,31 @@ body {
.title.normal { .title.normal {
opacity: 1; opacity: 1;
} }
.title.fadeOut { .title.fadeOut {
animation: fadeOutAnimation 0.5s forwards; animation: fadeOutAnimation 0.5s forwards;
} }
.title.fadeIn { .title.fadeIn {
animation: fadeInAnimation 0.5s forwards; animation: fadeInAnimation 0.5s forwards;
} }
@keyframes fadeOutAnimation { @keyframes fadeOutAnimation {
from { opacity: 1; } from {
to { opacity: 0; } opacity: 1;
}
to {
opacity: 0;
}
} }
@keyframes fadeInAnimation { @keyframes fadeInAnimation {
from { opacity: 0; } from {
to { opacity: 1; } opacity: 0;
}
to {
opacity: 1;
}
} }
.intro { .intro {
@@ -52,7 +73,7 @@ body {
/* Default fade-in section: occupies at least one full viewport */ /* Default fade-in section: occupies at least one full viewport */
.fade-in-section { .fade-in-section {
min-height: 100vh; min-height: 90vh;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@@ -86,7 +107,9 @@ body {
/* Button container aligned to the left */ /* Button container aligned to the left */
.buttonLeft { .buttonLeft {
display: flex; display: flex;
justify-content: flex-start; justify-content: center; /* Centers the button horizontally */
align-items: center; /* Centers vertically */
width: 100%; /* Ensures it takes full width */
} }
/* Slightly smaller images */ /* Slightly smaller images */
+17 -17
View File
@@ -1,6 +1,6 @@
"use client"; "use client";
import { useState, useEffect } from "react"; import {useState, useEffect} from "react";
import Image from "next/image"; import Image from "next/image";
import Link from "next/link"; import Link from "next/link";
import FadeInSection from "./components/FadeInSection"; import FadeInSection from "./components/FadeInSection";
@@ -9,8 +9,6 @@ export default function Home() {
const [showScrollPrompt, setShowScrollPrompt] = useState(false); const [showScrollPrompt, setShowScrollPrompt] = useState(false);
const [title, setTitle] = useState("Fretux"); const [title, setTitle] = useState("Fretux");
const [phase, setPhase] = useState("normal"); const [phase, setPhase] = useState("normal");
// Title flicker effect: every 3 seconds, fade out, toggle title, then fade in.
useEffect(() => { useEffect(() => {
const interval = setInterval(() => { const interval = setInterval(() => {
setPhase("fadeOut"); setPhase("fadeOut");
@@ -24,26 +22,29 @@ export default function Home() {
}, 3000); }, 3000);
return () => clearInterval(interval); return () => clearInterval(interval);
}, []); }, []);
useEffect(() => {
// Show scroll prompt after a delay (once the title has loaded in). if (typeof window !== "undefined") {
window.scrollTo(0, 0);
}
}, []);
useEffect(() => { useEffect(() => {
const timer = setTimeout(() => { const timer = setTimeout(() => {
setShowScrollPrompt(true); setShowScrollPrompt(true);
}, 1500); // Adjust the delay as needed }, 1500);
return () => clearTimeout(timer);
}, []);
// Remove the scroll prompt permanently upon first scroll.
useEffect(() => {
const handleScroll = () => { const handleScroll = () => {
setShowScrollPrompt(false); setShowScrollPrompt(false);
clearTimeout(timer); // Ensures the timeout is cleared if the user scrolls early
window.removeEventListener("scroll", handleScroll); window.removeEventListener("scroll", handleScroll);
}; };
window.addEventListener("scroll", handleScroll); window.addEventListener("scroll", handleScroll);
return () => window.removeEventListener("scroll", handleScroll);
}, []);
return () => {
clearTimeout(timer);
window.removeEventListener("scroll", handleScroll);
};
}, []);
return ( return (
<div className="container"> <div className="container">
{showScrollPrompt && ( {showScrollPrompt && (
@@ -51,21 +52,21 @@ export default function Home() {
<p>Scroll subtly</p> <p>Scroll subtly</p>
</div> </div>
)} )}
<FadeInSection> <FadeInSection>
<header className="header"> <header className="header">
<h1 className={`title ${phase}`}>{title}</h1> <h1 className={`title ${phase}`}>{title}</h1>
<p className="intro"> <p className="intro">
Welcome to my portfolio. I’m a web developer passionate about building modern, responsive applications. Welcome to my portfolio. I’m a web developer passionate about building modern, responsive
applications.
</p> </p>
</header> </header>
</FadeInSection> </FadeInSection>
<FadeInSection> <FadeInSection>
<section className="section"> <section className="section">
<div className="textLeft"> <div className="textLeft">
<p> <p>
I specialize in creating intuitive user experiences and dynamic web solutions using Next.js, React, and modern design principles. I specialize in creating intuitive user experiences and dynamic web solutions using Next.js,
React, and modern design principles.
</p> </p>
</div> </div>
<div className="imageRight"> <div className="imageRight">
@@ -78,7 +79,6 @@ export default function Home() {
</div> </div>
</section> </section>
</FadeInSection> </FadeInSection>
<FadeInSection> <FadeInSection>
<section className="section"> <section className="section">
<div className="imageLeft"> <div className="imageLeft">