installed new deps and created Experience card

This commit is contained in:
quentin 2025-08-19 14:37:17 +02:00
parent 0a04a9586d
commit 18fab018b1
24 changed files with 82 additions and 4763 deletions

3
app/.gitignore vendored
View File

@ -4,3 +4,6 @@
# React Router # React Router
/.react-router/ /.react-router/
/build/ /build/
.idea/
../.idea
package-lock.json

View File

@ -7,14 +7,14 @@
} }
@font-face { @font-face {
font-family: "handotrial"; font-family: "sora";
src: url("./assets/fonts/hando-trial.ttf"); src: url("./assets/fonts/Sora-SemiBold.ttf");
} }
:root { :root {
font-family: handotrial, system-ui, Avenir, Helvetica, Arial, sans-serif; font-family: sora, system-ui, Avenir, Helvetica, Arial, sans-serif;
line-height: 1.5; line-height: 1.5;
font-weight: 400; font-weight: 600;
font-synthesis: none; font-synthesis: none;
text-rendering: optimizeLegibility; text-rendering: optimizeLegibility;

Binary file not shown.

View File

Before

Width:  |  Height:  |  Size: 4.0 KiB

After

Width:  |  Height:  |  Size: 4.0 KiB

View File

@ -0,0 +1,17 @@
export default class Experience {
name: string;
longName?: string;
from: string;
to?: string;
description: string;
location: string;
constructor(name: string, from: string, description: string, location: string, to?: string, longName?: string) {
this.name = name;
this.from = from;
this.to = to;
this.description = description;
this.location = location;
this.longName = longName;
}
}

View File

@ -0,0 +1,25 @@
import "./experience-card.css"
import Experience from "./Experience";
export default function ExperienceCard({props}: {props: Experience}) {
//TODO onClick animate
//TODO CSS
//TODO after animation display details
return (
<div className="experience-card">
<div className="experience-title">
<h2>{props.name}</h2>
<div className={"experience-date"}>
<h3>{props.from}</h3>
{props.to && <h3>{props.to}</h3>}
</div>
</div>
<div className="experience-info">
{props.longName && <div className={"experience-logname"}>{props.longName}</div>}
<div className={"experience-location"}>{props.location}</div>
</div>
<div className={"experience-description"}>{props.description}</div>
</div>
)
}

View File

@ -7,10 +7,10 @@ import {
ScrollRestoration, ScrollRestoration,
} from "react-router"; } from "react-router";
import type { Route } from "./+types/root";
import "./app.css"; import "./app.css";
import Navbar from "~/navbar/Navbar"; import Navbar from "./navbar/Navbar";
import Warncard from "~/warn-card/Warncard"; import Warncard from "./warn-card/Warncard";
import type { Route } from "../app/+types/root";
export const links: Route.LinksFunction = () => [ export const links: Route.LinksFunction = () => [
{ rel: "preconnect", href: "https://fonts.googleapis.com" }, { rel: "preconnect", href: "https://fonts.googleapis.com" },

View File

@ -1,6 +1,6 @@
import type { Route } from "./+types/home"; import type { Route } from ".react-router/types/app/+types/root";
import { Link} from "react-router"; import {Link} from "react-router";
import { Welcome } from "~/welcome/welcome"; import { Welcome } from "../welcome/welcome";
export function meta({}: Route.MetaArgs) { export function meta({}: Route.MetaArgs) {
return [ return [

View File

@ -0,0 +1,22 @@
import type {Route} from "../../.react-router/types/app/routes/+types/home";
import Experience from "../experience-card/Experience";
import ExperienceCard from "../experience-card/experience-card";
export function meta({}: Route.MetaArgs) {
return [
{ title: "Projects" },
{ name: "description", content: "Quentin Leblanc's projects" },
];
}
export default function Project() {
const projects = [
new Experience("Mastermind React", "2025", "Simple mastermind game realized with React framework.", "Geneva"),
];
return (
projects.map((project, id) =>
<li key={id}><ExperienceCard props={project}/></li>
)
);
}

View File

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

View File

Before

Width:  |  Height:  |  Size: 6.0 KiB

After

Width:  |  Height:  |  Size: 6.0 KiB

4737
app/package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
{ {
"name": "app", "name": "QL-resume",
"private": true, "private": true,
"type": "module", "type": "module",
"scripts": { "scripts": {
@ -14,7 +14,8 @@
"isbot": "^5.1.27", "isbot": "^5.1.27",
"react": "^19.1.0", "react": "^19.1.0",
"react-dom": "^19.1.0", "react-dom": "^19.1.0",
"react-router": "^7.5.3" "react-router": "^7.5.3",
"react-router-dom": "^7.8.1"
}, },
"devDependencies": { "devDependencies": {
"@react-router/dev": "^7.5.3", "@react-router/dev": "^7.5.3",

Binary file not shown.

View File

@ -1,12 +0,0 @@
import type {Route} from "../../.react-router/types/app/routes/+types/home";
export function meta({}: Route.MetaArgs) {
return [
{ title: "Projects" },
{ name: "description", content: "Quentin Leblanc's projects" },
];
}
export default function Project() {
return <p>Projects page</p>;
}

View File

@ -15,7 +15,7 @@
"rootDirs": [".", "./.react-router/types"], "rootDirs": [".", "./.react-router/types"],
"baseUrl": ".", "baseUrl": ".",
"paths": { "paths": {
"~/*": ["./app/*"] "~/*": ["./src/*"]
}, },
"esModuleInterop": true, "esModuleInterop": true,
"verbatimModuleSyntax": true, "verbatimModuleSyntax": true,