Compare commits

...

10 Commits

Author SHA1 Message Date
f4b2c52cdc Update docker-compose.yaml 2025-02-13 22:36:51 +00:00
3ce414e4be Update docker-compose.yaml 2025-02-13 22:26:24 +00:00
fced039f76 feat: remove n7 bullshit stuff 2025-02-13 22:16:26 +00:00
11c1ca0591 feat: remove phone from public cv 2025-02-13 22:11:56 +00:00
550132e881 fix: emote travel journal 2024-12-08 23:39:56 +00:00
82dd6b4504 use youtube 2024-12-08 23:37:00 +00:00
0e05889fd0 feat: POMI 2024-12-08 23:27:32 +00:00
1a5c07bfea refactor: replace Svelte logo with a new logo image and update header link 2024-10-27 11:52:59 +01:00
ec05dd7445 feat: add international page and update card component
- Introduced a new international page with dynamic content loading.
- Updated Card component to display article date if available.
- Removed unused about and contact pages.
- Cleaned up package-lock.json by removing unnecessary dependencies.
2024-10-27 11:38:23 +01:00
97f2c1e828 Delete .gitlab-ci.yml 2024-07-06 10:27:50 +00:00
25 changed files with 19 additions and 179 deletions

View File

@@ -1,9 +0,0 @@
build:
image: docker:latest
services:
- name: docker:latest
stage: build
script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- docker build -t $CI_REGISTRY/whidix/portfolio:latest .
- docker push $CI_REGISTRY/whidix/portfolio:latest

View File

@@ -4,6 +4,8 @@ services:
build: build:
context: . context: .
dockerfile: Dockerfile dockerfile: Dockerfile
pull_policy: build
restart: always
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.http.routers.portfolio.entrypoints=web,websecure" - "traefik.http.routers.portfolio.entrypoints=web,websecure"

17
package-lock.json generated
View File

@@ -9,10 +9,8 @@
"version": "0.0.1", "version": "0.0.1",
"devDependencies": { "devDependencies": {
"@fontsource/fira-mono": "^4.5.10", "@fontsource/fira-mono": "^4.5.10",
"@neoconfetti/svelte": "^1.0.0",
"@sveltejs/adapter-auto": "^1.0.0", "@sveltejs/adapter-auto": "^1.0.0",
"@sveltejs/adapter-node": "^1.0.0", "@sveltejs/adapter-node": "^1.0.0",
"@sveltejs/adapter-static": "^1.0.0",
"@sveltejs/kit": "^1.0.0", "@sveltejs/kit": "^1.0.0",
"@types/cookie": "^0.5.1", "@types/cookie": "^0.5.1",
"@typescript-eslint/eslint-plugin": "^5.45.0", "@typescript-eslint/eslint-plugin": "^5.45.0",
@@ -481,12 +479,6 @@
"@jridgewell/sourcemap-codec": "1.4.14" "@jridgewell/sourcemap-codec": "1.4.14"
} }
}, },
"node_modules/@neoconfetti/svelte": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/@neoconfetti/svelte/-/svelte-1.0.0.tgz",
"integrity": "sha512-SmksyaJAdSlMa9cTidVSIqYo1qti+WTsviNDwgjNVm+KQ3DRP2Df9umDIzC4vCcpEYY+chQe0i2IKnLw03AT8Q==",
"dev": true
},
"node_modules/@nodelib/fs.scandir": { "node_modules/@nodelib/fs.scandir": {
"version": "2.1.5", "version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -647,15 +639,6 @@
"@sveltejs/kit": "^1.0.0" "@sveltejs/kit": "^1.0.0"
} }
}, },
"node_modules/@sveltejs/adapter-static": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/@sveltejs/adapter-static/-/adapter-static-1.0.6.tgz",
"integrity": "sha512-gTus2jW6bEQAZoT1MdmPHWZZmcb6dfLWc0r6dFHnbzSDZ68kifqQ1E+dZDOMF7aXeRV91sgnPuAn2MtpinVdlA==",
"dev": true,
"peerDependencies": {
"@sveltejs/kit": "^1.0.0"
}
},
"node_modules/@sveltejs/kit": { "node_modules/@sveltejs/kit": {
"version": "1.10.0", "version": "1.10.0",
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.10.0.tgz", "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.10.0.tgz",

View File

@@ -15,6 +15,9 @@
<img src="{article.image}" class="image" alt='' /> <img src="{article.image}" class="image" alt='' />
{/if} {/if}
<h2>{article.title}</h2> <h2>{article.title}</h2>
{#if article.date}
{new Date(article.date).toLocaleDateString("fr-FR")}
{/if}
{#if article.description} {#if article.description}
<p>{article.description}</p> <p>{article.description}</p>
{/if} {/if}

View File

@@ -1,14 +1,14 @@
<script> <script>
import { page } from '$app/stores'; import { page } from '$app/stores';
import logo from '$lib/images/svelte-logo.svg'; import logo from '$lib/images/logo.png';
import github from '$lib/images/github.svg'; import github from '$lib/images/github.svg';
</script> </script>
<header> <header>
<div class="header"> <div class="header">
<div class="corner"> <div class="corner">
<a href="https://kit.svelte.dev"> <a href="/">
<img src={logo} alt="SvelteKit" /> <img src={logo} alt="logo" />
</a> </a>
</div> </div>
@@ -17,18 +17,9 @@
<li aria-current={$page.url.pathname === '/' ? 'page' : undefined}> <li aria-current={$page.url.pathname === '/' ? 'page' : undefined}>
<a href="/">Home</a> <a href="/">Home</a>
</li> </li>
<li aria-current={$page.url.pathname === '/about' ? 'page' : undefined}>
<a href="/about">About</a>
</li>
<li aria-current={$page.url.pathname.startsWith('/projects') ? 'page' : undefined}> <li aria-current={$page.url.pathname.startsWith('/projects') ? 'page' : undefined}>
<a href="/projects">Projects</a> <a href="/projects">Projects</a>
</li> </li>
<li aria-current={$page.url.pathname.startsWith('/shs') ? 'page' : undefined}>
<a href="/shs">SHS</a>
</li>
<li aria-current={$page.url.pathname.startsWith('/contact') ? 'page' : undefined}>
<a href="/contact">Contact</a>
</li>
</ul> </ul>
</nav> </nav>

Binary file not shown.

BIN
src/lib/images/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="107" height="128" viewBox="0 0 107 128"><title>svelte-logo</title><path d="M94.1566,22.8189c-10.4-14.8851-30.94-19.2971-45.7914-9.8348L22.2825,29.6078A29.9234,29.9234,0,0,0,8.7639,49.6506a31.5136,31.5136,0,0,0,3.1076,20.2318A30.0061,30.0061,0,0,0,7.3953,81.0653a31.8886,31.8886,0,0,0,5.4473,24.1157c10.4022,14.8865,30.9423,19.2966,45.7914,9.8348L84.7167,98.3921A29.9177,29.9177,0,0,0,98.2353,78.3493,31.5263,31.5263,0,0,0,95.13,58.117a30,30,0,0,0,4.4743-11.1824,31.88,31.88,0,0,0-5.4473-24.1157" style="fill:#ff3e00"/><path d="M45.8171,106.5815A20.7182,20.7182,0,0,1,23.58,98.3389a19.1739,19.1739,0,0,1-3.2766-14.5025,18.1886,18.1886,0,0,1,.6233-2.4357l.4912-1.4978,1.3363.9815a33.6443,33.6443,0,0,0,10.203,5.0978l.9694.2941-.0893.9675a5.8474,5.8474,0,0,0,1.052,3.8781,6.2389,6.2389,0,0,0,6.6952,2.485,5.7449,5.7449,0,0,0,1.6021-.7041L69.27,76.281a5.4306,5.4306,0,0,0,2.4506-3.631,5.7948,5.7948,0,0,0-.9875-4.3712,6.2436,6.2436,0,0,0-6.6978-2.4864,5.7427,5.7427,0,0,0-1.6.7036l-9.9532,6.3449a19.0329,19.0329,0,0,1-5.2965,2.3259,20.7181,20.7181,0,0,1-22.2368-8.2427,19.1725,19.1725,0,0,1-3.2766-14.5024,17.9885,17.9885,0,0,1,8.13-12.0513L55.8833,23.7472a19.0038,19.0038,0,0,1,5.3-2.3287A20.7182,20.7182,0,0,1,83.42,29.6611a19.1739,19.1739,0,0,1,3.2766,14.5025,18.4,18.4,0,0,1-.6233,2.4357l-.4912,1.4978-1.3356-.98a33.6175,33.6175,0,0,0-10.2037-5.1l-.9694-.2942.0893-.9675a5.8588,5.8588,0,0,0-1.052-3.878,6.2389,6.2389,0,0,0-6.6952-2.485,5.7449,5.7449,0,0,0-1.6021.7041L37.73,51.719a5.4218,5.4218,0,0,0-2.4487,3.63,5.7862,5.7862,0,0,0,.9856,4.3717,6.2437,6.2437,0,0,0,6.6978,2.4864,5.7652,5.7652,0,0,0,1.602-.7041l9.9519-6.3425a18.978,18.978,0,0,1,5.2959-2.3278,20.7181,20.7181,0,0,1,22.2368,8.2427,19.1725,19.1725,0,0,1,3.2766,14.5024,17.9977,17.9977,0,0,1-8.13,12.0532L51.1167,104.2528a19.0038,19.0038,0,0,1-5.3,2.3287" style="fill:#fff"/></svg>

Before

Width:  |  Height:  |  Size: 1.8 KiB

View File

@@ -1,22 +0,0 @@
import type { create_ssr_component } from 'svelte/internal';
export type Mdsvex = {
metadata: {
title: string;
description?: string;
date?: string;
tags?: string[];
};
default: ReturnType<typeof create_ssr_component>;
};
export const shs = new Map(
Object.entries(
import.meta.glob<Mdsvex>('../routes/shs/*/*{.md,.svelte,+page.md.index.svelte}')
).map(([path, load]) => [
path
.replace(/(\+page\.md|\.svelte|\/index\.md|\/index\.svelte)$/, '')
.replace(/^\.\.\/routes/, ''),
load
])
);

View File

@@ -1,6 +1,6 @@
<script> <script>
import Header from './Header.svelte'; import Header from '$lib/components/Header.svelte';
import Footer from './Footer.svelte'; import Footer from '$lib/components/Footer.svelte';
import './styles.css'; import './styles.css';
</script> </script>

View File

@@ -1,5 +1,5 @@
<script> <script>
import Hero from './Hero.svelte'; import Hero from '$lib/components/Hero.svelte';
import cv from '$lib/files/CV_Theodor_Vallier.pdf'; import cv from '$lib/files/CV_Theodor_Vallier.pdf';
</script> </script>

View File

@@ -1,8 +0,0 @@
<svelte:head>
<title>About me</title>
<meta name="description" content="About me" />
</svelte:head>
<div class="text-column">
<h1>About me</h1>
</div>

View File

@@ -1 +0,0 @@
<h1>Work in progress</h1>

View File

@@ -4,7 +4,10 @@ date: 2022-09-08
description: A dashboard for can7 description: A dashboard for can7
tags: tags:
- web - web
- php - js
- laravel - sveltekit
image: /img/net7.png - shadcn
image: /img/can7.png
--- ---
<img src="/img/can7.png" alt="drawing" width="100%" style="border-radius: 10px">

View File

@@ -8,3 +8,5 @@ tags:
- tailwind - tailwind
image: /img/net7.png image: /img/net7.png
--- ---
<img src="/img/net7.png" alt="net7" width="100%" style="border-radius: 10px">

View File

@@ -1,12 +0,0 @@
import { shs } from '$lib/shs';
import type { PageServerLoad } from './$types';
export const load: PageServerLoad = async () => ({
data: await Promise.all(
[...shs.entries()].map(async ([path, load]) =>
load().then(({ metadata }) => ({ path, ...metadata }))
)
).then((data) =>
data.sort(({ date: a }, { date: z }) => new Date(z ?? 0).getTime() - new Date(a ?? 0).getTime())
)
});

View File

@@ -1,34 +0,0 @@
<script lang="ts">
import Card from '$lib/components/Card.svelte';
import type { PageData } from './$types';
export let data: PageData;
</script>
<svelte:head>
<title>SHS</title>
<meta name="description" content="SHS" />
</svelte:head>
<div>
<h1>SHS</h1>
<p>This is a page for SHS.</p>
<hr />
<section class="card_list">
{#each data.data as article}
<Card {article} />
{/each}
</section>
</div>
<style>
.card_list {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
gap: 1rem;
text-align: center;
}
</style>

View File

@@ -1,5 +0,0 @@
import type { PageLoad } from './$types';
export const load: PageLoad = ({ data }) => ({
...data
});

View File

@@ -1,20 +0,0 @@
---
title: 🎚️ Internship report
date: 2022-11-13
description: My internship report
tags:
- web
- svelte
---
During the year, I developed a website for a new association in Toulouse related to TISA (Toulouse, Computer Science, Security and Association). I developed this website using the Svelte framework because I was intrigued by its promise of performance and simplicity of development.
During this internship, I learned to use Svelte effectively and to set up a solid project architecture. I also had to work closely with the members of the association to understand their needs and vision for the website, in order to create a final product that met their expectations.
I started by setting up the development environment, installing all necessary tools and configuring the project. I also spent time learning the basics of Svelte and understanding how it worked. Once I had a good understanding of these concepts, I began developing the website using an iterative approach.
For each iteration, I first defined the goals and features to be implemented, and then created a detailed work plan. I then worked on implementing these features, ensuring that I followed best practices for development and quality standards. I also spent time testing the website to ensure it was functioning properly and meeting the requirements of the association.
During this internship, I learned to work independently and to make responsible decisions. I also learned to work as part of a team and to communicate effectively with the members of the association to understand their needs and vision. I also gained strong web development skills, particularly using Svelte, and was able to apply these skills to create a high-quality website for the association.
In conclusion, this internship was a very enriching experience for me, both professionally and personally. I learned new skills and was able to put my knowledge into practice on a concrete project. I also had the opportunity to work with a team and to contribute to the success of a new association.

View File

@@ -1,14 +0,0 @@
---
title: 👨‍💻 Projet Personnel Professionnel
date: 2022-12-31
description: Projet Personnel Professionnel
tags:
---
<div style="position: relative; width: 100%; height: 0; padding-top: 56.2500%;
padding-bottom: 0; box-shadow: 0 2px 8px 0 rgba(63,69,81,0.16); margin-top: 1.6em; margin-bottom: 0.9em; overflow: hidden;
border-radius: 8px; will-change: transform;">
<iframe loading="lazy" style="position: absolute; width: 100%; height: 100%; top: 0; left: 0; border: none; padding: 0;margin: 0;"
src="https:&#x2F;&#x2F;www.canva.com&#x2F;design&#x2F;DAFWbtr0nNU&#x2F;view?embed" allowfullscreen="allowfullscreen" allow="fullscreen" title="ppp">
</iframe>
</div>

View File

@@ -1,18 +0,0 @@
---
title: 🎚️ SkillMill
date: 2023-05-29
description: SKILLMILL auto-evaluation
tags:
- skills
---
<div style="display: flex; flex-direction: row; justify-content: space-between;">
<p style="font-size: 1.3em; text-align: justify; width: 50%">
The Skillmill evaluation revealed that my top sub-skill is Continuous Learning, emphasizing my strong inclination to acquire new knowledge and adapt to evolving circumstances.
<br>
Additionally, I received honorable mentions for Resource Management and Identifying Challenges. These skills were nurtured through my association with Net7, a DevOps association.
<br>
Continuous Learning allows me to stay updated with industry advancements, while Resource Management enables efficient allocation of time. Identifying Challenges equips me with the ability to proactively recognize and address obstacles. These skills acquired at Net7 have significantly contributed to my personal and professional growth.
</p>
<img src="/img/skillmill.jpg" alt="SkillMill" width="50%" style="float: right; margin: 0 0 1em 1em;">
</div>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

BIN
static/img/can7.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB