Compare commits
No commits in common. "62b221918f760d8ea4e14dd179c63911ade26835" and "70854a680907178ccafad7fc70509ab2addaf0bf" have entirely different histories.
62b221918f
...
70854a6809
4 changed files with 2 additions and 114 deletions
|
|
@ -1,44 +0,0 @@
|
||||||
import { newLine } from ".";
|
|
||||||
|
|
||||||
const icon = `
|
|
||||||
▲
|
|
||||||
*◼︎◼︎◼︎,
|
|
||||||
,◼︎◼︎◼︎◼︎◼︎◼︎◼︎*
|
|
||||||
,◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎,
|
|
||||||
.◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎*
|
|
||||||
*◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎*
|
|
||||||
*◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎
|
|
||||||
,◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎,◼︎,◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎,
|
|
||||||
,◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎, ..◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎*
|
|
||||||
,◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎.. .◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎*
|
|
||||||
/◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎. *◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎
|
|
||||||
,.◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎, .◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎,
|
|
||||||
.◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎.. .◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎.
|
|
||||||
◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎/ /◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎.
|
|
||||||
◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎. *◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎.
|
|
||||||
.◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎. .◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎,.
|
|
||||||
,◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎, .◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎,
|
|
||||||
◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◤◥◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎/ /◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎.
|
|
||||||
..◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎. ,◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎.. ,◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎.
|
|
||||||
..◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎* .◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎, .◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎.
|
|
||||||
.◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎, ◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎. ,.◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎,
|
|
||||||
.◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎ *◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎.. *◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎.
|
|
||||||
..◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎, ,◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎, .◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎◼︎.
|
|
||||||
`;
|
|
||||||
|
|
||||||
interface FerorIconProps {
|
|
||||||
width: number;
|
|
||||||
}
|
|
||||||
|
|
||||||
const FerorIcon = ({ width }: FerorIconProps) => {
|
|
||||||
const iconLines = icon.split("\n").filter((line) => line.trim() !== "");
|
|
||||||
const iconWidth = iconLines[0]!.length;
|
|
||||||
|
|
||||||
// On va ajouter des espaces pour centrer l'icône
|
|
||||||
const numberOfSpaces = Math.floor((width - iconWidth) / 2);
|
|
||||||
const spaces = " ".repeat(numberOfSpaces);
|
|
||||||
|
|
||||||
return iconLines.map((line) => `${spaces}${line}`).join(newLine);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default FerorIcon;
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
import { link } from "ansi-escapes";
|
|
||||||
import { newLine } from "..";
|
import { newLine } from "..";
|
||||||
import ScrollComponent from "../ScrollComponent";
|
import ScrollComponent from "../ScrollComponent";
|
||||||
import FerorIcon from "../FerorIcon";
|
|
||||||
|
|
||||||
interface AboutProps {
|
interface AboutProps {
|
||||||
width: number;
|
width: number;
|
||||||
|
|
@ -47,14 +45,7 @@ const About = ({ width, height, scrollPosition }: AboutProps) => {
|
||||||
` - ...${newLine}` +
|
` - ...${newLine}` +
|
||||||
` ${newLine}` +
|
` ${newLine}` +
|
||||||
` I am also very passionate about open-source and self-hosting.${newLine}` +
|
` I am also very passionate about open-source and self-hosting.${newLine}` +
|
||||||
` This portfolio is hosted on my own hardware, and I'm very proud of that.${newLine}` +
|
` This portfolio is hosted on my own hardware, and I'm very proud of that.${newLine}`;
|
||||||
` If you want to see how it works, you can check out the source code on my ${link(
|
|
||||||
"Forgejo",
|
|
||||||
"https://forge.feror.fr/feror/Portfolio"
|
|
||||||
)}.${newLine}` +
|
|
||||||
`${newLine}` +
|
|
||||||
`${FerorIcon({ width })}` +
|
|
||||||
`${newLine}`;
|
|
||||||
|
|
||||||
return ScrollComponent({
|
return ScrollComponent({
|
||||||
width,
|
width,
|
||||||
|
|
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
import { link } from "ansi-escapes";
|
|
||||||
import { newLine } from "..";
|
|
||||||
|
|
||||||
interface ProjectProps {
|
|
||||||
title: string;
|
|
||||||
description: string;
|
|
||||||
technologies: string[];
|
|
||||||
learnMoreLink: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
const Project = ({ title, description, technologies, learnMoreLink }: ProjectProps) => {
|
|
||||||
return (
|
|
||||||
` ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓${newLine}` +
|
|
||||||
` ┃ \x1b[33m${title.padEnd(80 - 4)}\x1b[0m ┃${newLine}` +
|
|
||||||
` ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫${newLine}` +
|
|
||||||
description
|
|
||||||
.split(newLine)
|
|
||||||
.map((line) => ` ┃ ${line.padEnd(80 - 4)} ┃${newLine}`)
|
|
||||||
.join("") +
|
|
||||||
` ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫${newLine}` +
|
|
||||||
` ┃ Technologies: \x1b[34m${technologies.join(", ").padEnd(80 - 18)}\x1b[0m ┃${newLine}` +
|
|
||||||
` ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫${newLine}` +
|
|
||||||
` ┃${link(
|
|
||||||
" \x1b[32mLearn more\x1b[0m ",
|
|
||||||
learnMoreLink
|
|
||||||
)}┃${newLine}` +
|
|
||||||
` ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛${newLine}`
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
export default Project;
|
|
||||||
|
|
||||||
export type { ProjectProps };
|
|
||||||
|
|
@ -1,8 +1,3 @@
|
||||||
import { newLine } from "..";
|
|
||||||
import ScrollComponent from "../ScrollComponent";
|
|
||||||
import type { ProjectProps } from "./Project";
|
|
||||||
import Project from "./Project";
|
|
||||||
|
|
||||||
interface ProjectsProps {
|
interface ProjectsProps {
|
||||||
width: number;
|
width: number;
|
||||||
height: number;
|
height: number;
|
||||||
|
|
@ -10,27 +5,6 @@ interface ProjectsProps {
|
||||||
}
|
}
|
||||||
|
|
||||||
const Projects = ({ width, height, scrollPosition }: ProjectsProps) => {
|
const Projects = ({ width, height, scrollPosition }: ProjectsProps) => {
|
||||||
const projects: ProjectProps[] = [
|
return `Projects ${scrollPosition}`;
|
||||||
{
|
|
||||||
title: "Algoforge",
|
|
||||||
description:
|
|
||||||
`A platform for creating and sharing graphical algorithms.${newLine}` +
|
|
||||||
`It was made for the algorithm course at IUT de Bayonne et du Pays Basque.${newLine}` +
|
|
||||||
`It is made entirely in Vanilla JS. No Framework used.${newLine}` +
|
|
||||||
`This app thrives for simplicity, efficiency and performance. ${newLine}` +
|
|
||||||
`${newLine}` +
|
|
||||||
`Built with love over the course of 3 years,${newLine}` +
|
|
||||||
`Algoforge was originally meant to replace an aging software.${newLine}` +
|
|
||||||
`It is now used by students and teachers alike.${newLine}`,
|
|
||||||
technologies: ["js", "Bun", "Docker"],
|
|
||||||
learnMoreLink: "https://github.com/Bing-Chill-inc/Algoforge-main",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
return ScrollComponent({
|
|
||||||
width,
|
|
||||||
height,
|
|
||||||
scrollPosition,
|
|
||||||
text: projects.map((project) => Project(project)).join(newLine),
|
|
||||||
});
|
|
||||||
};
|
};
|
||||||
export default Projects;
|
export default Projects;
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue