[feat] small color, content revision
This commit is contained in:
parent
fb466e1c15
commit
3d53a8f54a
11 changed files with 171 additions and 69 deletions
|
|
@ -1,9 +1,5 @@
|
||||||
"use client"
|
"use client"
|
||||||
import Sidebar from "@/components/Sidebar";
|
import Sidebar from "@/components/Sidebar";
|
||||||
export const metadata = {
|
|
||||||
title: "Create Next App",
|
|
||||||
description: "Generated by create next app",
|
|
||||||
};
|
|
||||||
|
|
||||||
export default function RootLayout({ children }) {
|
export default function RootLayout({ children }) {
|
||||||
return (
|
return (
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ import { faEnvelope } from "@fortawesome/free-solid-svg-icons";
|
||||||
|
|
||||||
const MyPage = () => {
|
const MyPage = () => {
|
||||||
const fullpageOptions = {
|
const fullpageOptions = {
|
||||||
// only define last anchor as contact
|
|
||||||
anchors: ["home", "about", "projects", "contact"],
|
anchors: ["home", "about", "projects", "contact"],
|
||||||
scrollingSpeed: 1000,
|
scrollingSpeed: 1000,
|
||||||
licenseKey: "gplv3-license",
|
licenseKey: "gplv3-license",
|
||||||
|
|
@ -33,7 +32,6 @@ const MyPage = () => {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
{/* Content with ReactFullpage for interactive behavior */}
|
|
||||||
<ReactFullpage
|
<ReactFullpage
|
||||||
render={({ state, fullpageApi }) => (
|
render={({ state, fullpageApi }) => (
|
||||||
<ReactFullpage.Wrapper>
|
<ReactFullpage.Wrapper>
|
||||||
|
|
@ -47,7 +45,7 @@ const MyPage = () => {
|
||||||
type: "spring",
|
type: "spring",
|
||||||
}}>
|
}}>
|
||||||
<div className="block md:hidden col-span-1 mx-auto my-10">
|
<div className="block md:hidden col-span-1 mx-auto my-10">
|
||||||
<div className="bg-slate-500 rounded-full h-60 w-60">
|
<div className="bg-slate-500 rounded-full h-60 w-60 grayscale hover:grayscale-0">
|
||||||
<Image
|
<Image
|
||||||
src={Me}
|
src={Me}
|
||||||
width={500}
|
width={500}
|
||||||
|
|
@ -337,7 +335,7 @@ const MyPage = () => {
|
||||||
<div className="flex justify-center items-center space-x-4">
|
<div className="flex justify-center items-center space-x-4">
|
||||||
<motion.a
|
<motion.a
|
||||||
href="mailto:Alvalen.shafel04@gmail.com?subject=Hello&body=Hello Alvalens,"
|
href="mailto:Alvalen.shafel04@gmail.com?subject=Hello&body=Hello Alvalens,"
|
||||||
className="flex justify-center items-center bg-gray-500 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300"
|
className="flex justify-center items-center bg-gray-700 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300"
|
||||||
initial={{ y: 40, opacity: 0 }}
|
initial={{ y: 40, opacity: 0 }}
|
||||||
whileInView={{ y: 0, opacity: 1 }}
|
whileInView={{ y: 0, opacity: 1 }}
|
||||||
transition={{
|
transition={{
|
||||||
|
|
@ -354,7 +352,7 @@ const MyPage = () => {
|
||||||
href="https://github.com/Alvalens"
|
href="https://github.com/Alvalens"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="flex justify-center items-center bg-gray-500 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300"
|
className="flex justify-center items-center bg-gray-700 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300"
|
||||||
initial={{ opacity: 0, y: 40 }}
|
initial={{ opacity: 0, y: 40 }}
|
||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
transition={{
|
transition={{
|
||||||
|
|
@ -370,7 +368,7 @@ const MyPage = () => {
|
||||||
href="https://www.instagram.com/alvalens_/"
|
href="https://www.instagram.com/alvalens_/"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="flex justify-center items-center bg-gray-500 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300"
|
className="flex justify-center items-center bg-gray-700 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300"
|
||||||
initial={{ opacity: 0, y: 40 }}
|
initial={{ opacity: 0, y: 40 }}
|
||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
transition={{
|
transition={{
|
||||||
|
|
@ -386,7 +384,7 @@ const MyPage = () => {
|
||||||
href="https://www.linkedin.com/in/alvalen-shafel-8a081a254/"
|
href="https://www.linkedin.com/in/alvalen-shafel-8a081a254/"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="flex justify-center items-center bg-gray-500 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300"
|
className="flex justify-center items-center bg-gray-700 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300"
|
||||||
initial={{ opacity: 0, y: 40 }}
|
initial={{ opacity: 0, y: 40 }}
|
||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
transition={{
|
transition={{
|
||||||
|
|
@ -402,7 +400,7 @@ const MyPage = () => {
|
||||||
href="https://discordapp.com/users/bloody#6118"
|
href="https://discordapp.com/users/bloody#6118"
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
className="flex justify-center items-center bg-gray-500 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300"
|
className="flex justify-center items-center bg-gray-700 w-14 h-14 rounded-full text-gray-100 hover:bg-gray-400 transition-all ease-in-out duration-300"
|
||||||
initial={{ opacity: 0, y: 40 }}
|
initial={{ opacity: 0, y: 40 }}
|
||||||
whileInView={{ opacity: 1, y: 0 }}
|
whileInView={{ opacity: 1, y: 0 }}
|
||||||
transition={{
|
transition={{
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ html {
|
||||||
body {
|
body {
|
||||||
font-family: 'Poppins', sans-serif !important;
|
font-family: 'Poppins', sans-serif !important;
|
||||||
color: black;
|
color: black;
|
||||||
background-color: #f6f6f6;
|
background-color: rgb(230, 230, 230);
|
||||||
}
|
}
|
||||||
|
|
||||||
h1, h2, h3, h4, h5, h6 {
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
|
@ -61,8 +61,19 @@ span {
|
||||||
font-family: "Jost", sans-serif;
|
font-family: "Jost", sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
.active {
|
li {
|
||||||
color: rgb(255, 235, 87);
|
@apply list-none relative;
|
||||||
|
}
|
||||||
|
li.active:after {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
bottom: -5px;
|
||||||
|
left: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 2px;
|
||||||
|
background-color: #ffffff;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
td, th {
|
td, th {
|
||||||
|
|
|
||||||
|
|
@ -4,22 +4,46 @@ import Navbar from "@/components/Navbar";
|
||||||
import { config } from "@fortawesome/fontawesome-svg-core";
|
import { config } from "@fortawesome/fontawesome-svg-core";
|
||||||
import "@fortawesome/fontawesome-svg-core/styles.css";
|
import "@fortawesome/fontawesome-svg-core/styles.css";
|
||||||
config.autoAddCss = false;
|
config.autoAddCss = false;
|
||||||
|
import Icon from "@/public/img/icon.png";
|
||||||
import "./nprogress.css";
|
import "./nprogress.css";
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: "Alvalens | Portofolio",
|
title: "Alvalens | Portofolio",
|
||||||
description: "Generated by create next app",
|
description:
|
||||||
|
"My name is Alvalens, I'm a web developer and I'm passionate about it. I'm currently studying at Universitas Negeri Malang.",
|
||||||
|
image: Icon,
|
||||||
|
author: "Alvalens",
|
||||||
|
keywords:
|
||||||
|
"alvalens, alvalen, alvalen shafel, shafel, alvalen shafelbilyunazra, alvalen shafel bilyunazra, bloodfallen, alvalen porto, porto alvalens, alvalens portofolio, web alvalen, alvalens web, alvalens website, website alvalens, alvalens web developer, web portofolio alvalens, alvalen profile, profil alvalen",
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const TopProgressBar = dynamic(() => import("@/components/TopProgressBar"), {
|
const TopProgressBar = dynamic(() => import("@/components/TopProgressBar"), {
|
||||||
ssr: false,
|
ssr: false,
|
||||||
});
|
});
|
||||||
|
|
||||||
export default function RootLayout({ children }) {
|
const Meta = () => (
|
||||||
|
<>
|
||||||
|
<meta name="description" content={metadata.description} />
|
||||||
|
<meta property="og:title" content={metadata.title} />
|
||||||
|
<meta property="og:description" content={metadata.description} />
|
||||||
|
<meta property="og:image" content={metadata.image} />
|
||||||
|
<meta property="og:type" content="website" />
|
||||||
|
<meta name="application-name" content="Alvalens | Portofolio" />
|
||||||
|
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||||
|
<meta name="author" content="Alvalens" />
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default function RootLayout({ children }) {
|
||||||
return (
|
return (
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<link rel="icon" href="/img/icon.png" sizes="any" />
|
||||||
|
<Meta />
|
||||||
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<TopProgressBar />
|
<TopProgressBar />
|
||||||
<Navbar />
|
<Navbar />
|
||||||
{children}
|
{children}
|
||||||
|
|
|
||||||
33
app/not-found.js
Normal file
33
app/not-found.js
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
"use client"
|
||||||
|
import React from "react";
|
||||||
|
import Link from "next/link";
|
||||||
|
|
||||||
|
const NotFound = () => (
|
||||||
|
<div>
|
||||||
|
<div className="relative min-h-screen w-full gap-4 p-10 flex justify-center items-center flex-col mb-10 ">
|
||||||
|
<div className="min-h-screen flex justify-center items-center">
|
||||||
|
<div className="mx-auto grid grid-cols-1 ">
|
||||||
|
<div className="flex justify-center items-center flex-col mb-5 space-y-10">
|
||||||
|
<div>
|
||||||
|
<h2 className="uppercase font-normal text-lg tracking-[8px] text-neutral-400 text-center">
|
||||||
|
Page not found
|
||||||
|
</h2>
|
||||||
|
<h1 className="text-4xl font-medium text-neutral-900 text-center">
|
||||||
|
404
|
||||||
|
</h1>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<button
|
||||||
|
onClick={() => window.history.back()}
|
||||||
|
className="text-lg text-neutral-900 hover:text-neutral-800 text-center border-2 border-gray-800 rounded-xl p-3 py-2 mt-2">
|
||||||
|
Go Back
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
);
|
||||||
|
|
||||||
|
export default NotFound;
|
||||||
|
|
@ -5,6 +5,8 @@ import jsonData from "../../../json/data.json";
|
||||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
|
||||||
import { faGithub } from "@fortawesome/free-brands-svg-icons";
|
import { faGithub } from "@fortawesome/free-brands-svg-icons";
|
||||||
import { faArrowUpRightFromSquare } from "@fortawesome/free-solid-svg-icons";
|
import { faArrowUpRightFromSquare } from "@fortawesome/free-solid-svg-icons";
|
||||||
|
import NotFound from "@/app/not-found";
|
||||||
|
import Image from "next/image";
|
||||||
|
|
||||||
function Page({ params }) {
|
function Page({ params }) {
|
||||||
const [data, setData] = useState(null);
|
const [data, setData] = useState(null);
|
||||||
|
|
@ -21,22 +23,9 @@ function Page({ params }) {
|
||||||
|
|
||||||
if (data === "404") {
|
if (data === "404") {
|
||||||
return (
|
return (
|
||||||
<div className="relative min-h-screen w-full gap-4 p-10 flex justify-center items-center flex-col mb-10 ">
|
<>
|
||||||
<div className="min-h-screen flex justify-center items-center">
|
<NotFound />
|
||||||
<div className="mx-auto grid grid-cols-1 ">
|
</>
|
||||||
<div className="flex justify-center items-center flex-col mb-5 space-y-10">
|
|
||||||
<div>
|
|
||||||
<h2 className="uppercase font-normal text-lg tracking-[8px] text-neutral-400 text-center">
|
|
||||||
Page not found
|
|
||||||
</h2>
|
|
||||||
<h1 className="text-4xl font-medium text-neutral-900 text-center">
|
|
||||||
404
|
|
||||||
</h1>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
);
|
);
|
||||||
} else if (!data) {
|
} else if (!data) {
|
||||||
// skleton loading
|
// skleton loading
|
||||||
|
|
@ -152,11 +141,13 @@ function Page({ params }) {
|
||||||
<div className="mx-auto grid grid-cols-1 p-5 md:p-20 w-full h-auto">
|
<div className="mx-auto grid grid-cols-1 p-5 md:p-20 w-full h-auto">
|
||||||
<div className="w-full h-auto aspect-video">
|
<div className="w-full h-auto aspect-video">
|
||||||
{data.images.map((image, index) => (
|
{data.images.map((image, index) => (
|
||||||
<img
|
<Image
|
||||||
key={index}
|
key={index}
|
||||||
src={image}
|
src={image}
|
||||||
alt={`Project Image ${index + 1}`}
|
alt={`Project Image ${index + 1}`}
|
||||||
className="w-full h-full mb-5"
|
className="w-full h-full mb-5"
|
||||||
|
width={1920}
|
||||||
|
height={1080}
|
||||||
/>
|
/>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -26,6 +26,20 @@ const projects = [
|
||||||
tech: "Python, Serp API, Discord.py",
|
tech: "Python, Serp API, Discord.py",
|
||||||
github: "https://github.com/Alvalens/aleph-discord-bot",
|
github: "https://github.com/Alvalens/aleph-discord-bot",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
year: "2023",
|
||||||
|
title: "LPTK CUP UM 2023",
|
||||||
|
tech: "PHP, Laravel, Bootstrap, MySQL, jQuery, DataTables",
|
||||||
|
github: "",
|
||||||
|
preview: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
year: "2023",
|
||||||
|
title: "NU INO Website",
|
||||||
|
tech: "PHP, Laravel, Livewire Bootstrap, MySQL, jQuery, DataTables",
|
||||||
|
github: "",
|
||||||
|
preview: "",
|
||||||
|
},
|
||||||
{
|
{
|
||||||
year: "2023",
|
year: "2023",
|
||||||
title: "Unmuh Jember Landing Page",
|
title: "Unmuh Jember Landing Page",
|
||||||
|
|
@ -33,12 +47,47 @@ const projects = [
|
||||||
github: "https://github.com/Alvalens/unmuh-jember-landing-page",
|
github: "https://github.com/Alvalens/unmuh-jember-landing-page",
|
||||||
preview: "https://alvalens.github.io/unmuh-jember-landing-page/",
|
preview: "https://alvalens.github.io/unmuh-jember-landing-page/",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
year: "2023",
|
||||||
|
title: "Alvalens Website",
|
||||||
|
tech: "Javascript, Next Js, TailwindCSS",
|
||||||
|
github: "",
|
||||||
|
preview: "https://alvalens.my.id",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
year: "2023",
|
||||||
|
title: "Python audio tranlator",
|
||||||
|
tech: "Python, Assembly AI",
|
||||||
|
github: "https://github.com/Alvalens/python-audio-translation",
|
||||||
|
preview: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
year: "2023",
|
||||||
|
title: "A4 Education website",
|
||||||
|
tech: "PHP, Laravel, Bootstrap, MySQL, jQuery, DataTables",
|
||||||
|
github: "https://github.com/Alvalens/A4",
|
||||||
|
preview: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
year: "2023",
|
||||||
|
title: "Cry Cast crypto forecast",
|
||||||
|
tech: "PHP, Laravel, Bootstrap, MySQL",
|
||||||
|
github: "https://github.com/Alvalens/cry-cast",
|
||||||
|
preview: "",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
year: "2023",
|
||||||
|
title: "Mini Harbor",
|
||||||
|
tech: "Python, Pygame",
|
||||||
|
github: "https://github.com/Alvalens/mini-harbor",
|
||||||
|
preview: "",
|
||||||
|
},
|
||||||
];
|
];
|
||||||
export default function Page () {
|
export default function Page () {
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<main className="overflow-hidden">
|
<main className="overflow-hidden">
|
||||||
<div className="h-screen w-screen p-10 flex justify-center items-center flex-col mb-10">
|
<div className="min-h-screen w-screen mt-10 md:mt-0 p-10 flex justify-center items-center flex-col mb-10">
|
||||||
<div className="flex justify-center items-center flex-col my-5 self-start ">
|
<div className="flex justify-center items-center flex-col my-5 self-start ">
|
||||||
<motion.div
|
<motion.div
|
||||||
className="bg-gray-700 w-28 h-1 rounded-full mb-3 self-start"
|
className="bg-gray-700 w-28 h-1 rounded-full mb-3 self-start"
|
||||||
|
|
@ -109,7 +158,7 @@ export default function Page () {
|
||||||
<td>{project.title}</td>
|
<td>{project.title}</td>
|
||||||
<td>{project.tech}</td>
|
<td>{project.tech}</td>
|
||||||
<td>
|
<td>
|
||||||
<div>
|
<div className="flex flex-row justify-center items-center">
|
||||||
{project.github && (
|
{project.github && (
|
||||||
<a
|
<a
|
||||||
href={project.github}
|
href={project.github}
|
||||||
|
|
|
||||||
|
|
@ -3,8 +3,8 @@ const Button = ({ children, variation, ...props }) => (
|
||||||
{...props}
|
{...props}
|
||||||
className={`title mr-3 rounded-2xl px-8 py-2 shadow-md transition duration-300 ease-in-out ${
|
className={`title mr-3 rounded-2xl px-8 py-2 shadow-md transition duration-300 ease-in-out ${
|
||||||
variation === "primary"
|
variation === "primary"
|
||||||
? "bg-gray-400 hover:bg-slate-500 text-gray-100 hover:text-white"
|
? "bg-gray-700 hover:bg-transparent border-transparent hover:border-gray-700 border-2 text-gray-100 hover:text-gray-700 box-border"
|
||||||
: "transparent border border-gray-400 hover:border-slate-500 text-gray-400 hover:text-gray-300"
|
: "transparent border-2 border-gray-700 text-gray-700 hover:bg-gray-700 hover:text-gray-100 box-border"
|
||||||
}`}>
|
}`}>
|
||||||
{children}
|
{children}
|
||||||
</button>
|
</button>
|
||||||
|
|
|
||||||
|
|
@ -21,10 +21,10 @@ const Sidebar = () => {
|
||||||
return "";
|
return "";
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<div className="hidden md:flex fixed z-40 bg-gray-600 h-[50vh] w-14 flex-col justify-between items-center p-4 left-0 top-1/4 rounded-e-3xl">
|
<div className="hidden md:flex fixed z-40 bg-gray-700 h-[50vh] w-14 flex-col justify-between items-center p-4 left-0 top-1/4 rounded-e-3xl">
|
||||||
<ul
|
<ul
|
||||||
id="sidebar"
|
id="sidebar"
|
||||||
className="flex flex-col justify-center items-center h-full space-y-16 text-gray-200">
|
className="flex flex-col justify-center items-center h-full space-y-16 text-gray-50">
|
||||||
<li data-menuanchor="home" className="active">
|
<li data-menuanchor="home" className="active">
|
||||||
<button onClick={() => handleMoveToSection(1)}>
|
<button onClick={() => handleMoveToSection(1)}>
|
||||||
<FontAwesomeIcon icon={faHome} className="text-xl" />
|
<FontAwesomeIcon icon={faHome} className="text-xl" />
|
||||||
|
|
|
||||||
|
|
@ -144,7 +144,7 @@
|
||||||
"I learned a lot about web developement in this project. I Also learn how to use Git and Github. This project is the reason why I started to learn web development."
|
"I learned a lot about web developement in this project. I Also learn how to use Git and Github. This project is the reason why I started to learn web development."
|
||||||
],
|
],
|
||||||
"year": "2022",
|
"year": "2022",
|
||||||
"preview": "",
|
"preview": "https://alvalens.my.id",
|
||||||
"code": "",
|
"code": "",
|
||||||
"images": [
|
"images": [
|
||||||
"/projects/porto/porto1.png",
|
"/projects/porto/porto1.png",
|
||||||
|
|
|
||||||
BIN
public/img/icon.png
Normal file
BIN
public/img/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 107 KiB |
Loading…
Add table
Add a link
Reference in a new issue