+
+
diff --git a/src/lib/images/profil.webp b/src/lib/images/profil.webp
new file mode 100644
index 0000000..bc86777
Binary files /dev/null and b/src/lib/images/profil.webp differ
diff --git a/src/lib/images/svelte-welcome.png b/src/lib/images/svelte-welcome.png
deleted file mode 100644
index fe7d2d6..0000000
Binary files a/src/lib/images/svelte-welcome.png and /dev/null differ
diff --git a/src/lib/images/svelte-welcome.webp b/src/lib/images/svelte-welcome.webp
deleted file mode 100644
index 6ec1a28..0000000
Binary files a/src/lib/images/svelte-welcome.webp and /dev/null differ
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte
index 9c7445f..70e99a0 100644
--- a/src/routes/+layout.svelte
+++ b/src/routes/+layout.svelte
@@ -1,5 +1,6 @@
@@ -10,9 +11,7 @@
-
+
diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte
index 97201ef..5a28561 100644
--- a/src/routes/+page.svelte
+++ b/src/routes/+page.svelte
@@ -1,31 +1,14 @@
Home
-
+
-
-
-
-
-
-
-
-
- to your new SvelteKit app
-
-
-
- try editing src/routes/+page.svelte
-
-
-
+
diff --git a/src/routes/+page.ts b/src/routes/+page.ts
deleted file mode 100644
index a72419a..0000000
--- a/src/routes/+page.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-// since there's no dynamic data here, we can prerender
-// it so that it gets served as a static asset in production
-export const prerender = true;
diff --git a/src/routes/Counter.svelte b/src/routes/Counter.svelte
deleted file mode 100644
index 96ef556..0000000
--- a/src/routes/Counter.svelte
+++ /dev/null
@@ -1,102 +0,0 @@
-
-
-
+ Welcome on my portfolio, I'm an engineer in computer science and I'm passionate about web
+ development.
+
+
+
+
+
+
+
+
diff --git a/src/routes/about/+page.ts b/src/routes/about/+page.ts
index e739ef4..9d8304e 100644
--- a/src/routes/about/+page.ts
+++ b/src/routes/about/+page.ts
@@ -3,7 +3,3 @@ import { dev } from '$app/environment';
// we don't need any JS on this page, though we'll load
// it in dev so that we get hot module replacement
export const csr = dev;
-
-// since there's no dynamic data here, we can prerender
-// it so that it gets served as a static asset in production
-export const prerender = true;
diff --git a/src/routes/projects/+page.svelte b/src/routes/projects/+page.svelte
new file mode 100644
index 0000000..14638cd
--- /dev/null
+++ b/src/routes/projects/+page.svelte
@@ -0,0 +1,30 @@
+
+
+
+ Projects
+
+
+
+
+
Projects
+
+
This is the page where all projects will live.
+
+
+
+
+ {#each projects as { title }}
+
+ {/each}
+
+
+
+
diff --git a/src/routes/shs/+page.ts b/src/routes/shs/+page.ts
new file mode 100644
index 0000000..231bc20
--- /dev/null
+++ b/src/routes/shs/+page.ts
@@ -0,0 +1 @@
+export const works = ['Home', 'About', 'Contact'];
diff --git a/src/routes/shs/works/internship.md b/src/routes/shs/works/internship.md
new file mode 100644
index 0000000..5e75583
--- /dev/null
+++ b/src/routes/shs/works/internship.md
@@ -0,0 +1,20 @@
+---
+title: 🎚️ Internship report
+date: 2022-11-13T21:57:10.852Z
+summary:
+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.
diff --git a/src/routes/styles.css b/src/routes/styles.css
index 1441d94..89a212c 100644
--- a/src/routes/styles.css
+++ b/src/routes/styles.css
@@ -7,8 +7,8 @@
--color-bg-0: rgb(202, 216, 228);
--color-bg-1: hsl(209, 36%, 86%);
--color-bg-2: hsl(224, 44%, 95%);
- --color-theme-1: #ff3e00;
- --color-theme-2: #4075a6;
+ --color-nav: #2f5bc2;
+ --color-bg-nav: #f7f7f7;
--color-text: rgba(0, 0, 0, 0.7);
--column-width: 42rem;
--column-margin-top: 4rem;
@@ -20,88 +20,7 @@ body {
min-height: 100vh;
margin: 0;
background-attachment: fixed;
- background-color: var(--color-bg-1);
- background-size: 100vw 100vh;
- background-image: radial-gradient(
- 50% 50% at 50% 50%,
- rgba(255, 255, 255, 0.75) 0%,
- rgba(255, 255, 255, 0) 100%
- ),
- linear-gradient(180deg, var(--color-bg-0) 0%, var(--color-bg-1) 15%, var(--color-bg-2) 50%);
}
-
-h1,
-h2,
-p {
- font-weight: 400;
-}
-
-p {
- line-height: 1.5;
-}
-
a {
- color: var(--color-theme-1);
text-decoration: none;
}
-
-a:hover {
- text-decoration: underline;
-}
-
-h1 {
- font-size: 2rem;
- text-align: center;
-}
-
-h2 {
- font-size: 1rem;
-}
-
-pre {
- font-size: 16px;
- font-family: var(--font-mono);
- background-color: rgba(255, 255, 255, 0.45);
- border-radius: 3px;
- box-shadow: 2px 2px 6px rgb(255 255 255 / 25%);
- padding: 0.5em;
- overflow-x: auto;
- color: var(--color-text);
-}
-
-.text-column {
- display: flex;
- max-width: 48rem;
- flex: 0.6;
- flex-direction: column;
- justify-content: center;
- margin: 0 auto;
-}
-
-input,
-button {
- font-size: inherit;
- font-family: inherit;
-}
-
-button:focus:not(:focus-visible) {
- outline: none;
-}
-
-@media (min-width: 720px) {
- h1 {
- font-size: 2.4rem;
- }
-}
-
-.visually-hidden {
- border: 0;
- clip: rect(0 0 0 0);
- height: auto;
- margin: 0;
- overflow: hidden;
- padding: 0;
- position: absolute;
- width: 1px;
- white-space: nowrap;
-}
diff --git a/src/routes/sverdle/+page.server.ts b/src/routes/sverdle/+page.server.ts
deleted file mode 100644
index 65c2c39..0000000
--- a/src/routes/sverdle/+page.server.ts
+++ /dev/null
@@ -1,69 +0,0 @@
-import { fail } from '@sveltejs/kit';
-import { Game } from './game';
-import type { PageServerLoad, Actions } from './$types';
-
-export const load = (({ cookies }) => {
- const game = new Game(cookies.get('sverdle'));
-
- return {
- /**
- * The player's guessed words so far
- */
- guesses: game.guesses,
-
- /**
- * An array of strings like '__x_c' corresponding to the guesses, where 'x' means
- * an exact match, and 'c' means a close match (right letter, wrong place)
- */
- answers: game.answers,
-
- /**
- * The correct answer, revealed if the game is over
- */
- answer: game.answers.length >= 6 ? game.answer : null
- };
-}) satisfies PageServerLoad;
-
-export const actions = {
- /**
- * Modify game state in reaction to a keypress. If client-side JavaScript
- * is available, this will happen in the browser instead of here
- */
- update: async ({ request, cookies }) => {
- const game = new Game(cookies.get('sverdle'));
-
- const data = await request.formData();
- const key = data.get('key');
-
- const i = game.answers.length;
-
- if (key === 'backspace') {
- game.guesses[i] = game.guesses[i].slice(0, -1);
- } else {
- game.guesses[i] += key;
- }
-
- cookies.set('sverdle', game.toString());
- },
-
- /**
- * Modify game state in reaction to a guessed word. This logic always runs on
- * the server, so that people can't cheat by peeking at the JavaScript
- */
- enter: async ({ request, cookies }) => {
- const game = new Game(cookies.get('sverdle'));
-
- const data = await request.formData();
- const guess = data.getAll('guess') as string[];
-
- if (!game.enter(guess)) {
- return fail(400, { badGuess: true });
- }
-
- cookies.set('sverdle', game.toString());
- },
-
- restart: async ({ cookies }) => {
- cookies.delete('sverdle');
- }
-} satisfies Actions;
diff --git a/src/routes/sverdle/+page.svelte b/src/routes/sverdle/+page.svelte
deleted file mode 100644
index 157d8e4..0000000
--- a/src/routes/sverdle/+page.svelte
+++ /dev/null
@@ -1,406 +0,0 @@
-
-
-
-
-
- Sverdle
-
-
-
-
Sverdle
-
-
-
-{#if won}
-
-{/if}
-
-
diff --git a/src/routes/sverdle/game.ts b/src/routes/sverdle/game.ts
deleted file mode 100644
index aad231a..0000000
--- a/src/routes/sverdle/game.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-import { words, allowed } from './words.server';
-
-export class Game {
- index: number;
- guesses: string[];
- answers: string[];
- answer: string;
-
- /**
- * Create a game object from the player's cookie, or initialise a new game
- */
- constructor(serialized: string | undefined = undefined) {
- if (serialized) {
- const [index, guesses, answers] = serialized.split('-');
-
- this.index = +index;
- this.guesses = guesses ? guesses.split(' ') : [];
- this.answers = answers ? answers.split(' ') : [];
- } else {
- this.index = Math.floor(Math.random() * words.length);
- this.guesses = ['', '', '', '', '', ''];
- this.answers = [] ;
- }
-
- this.answer = words[this.index];
- }
-
- /**
- * Update game state based on a guess of a five-letter word. Returns
- * true if the guess was valid, false otherwise
- */
- enter(letters: string[]) {
- const word = letters.join('');
- const valid = allowed.has(word);
-
- if (!valid) return false;
-
- this.guesses[this.answers.length] = word;
-
- const available = Array.from(this.answer);
- const answer = Array(5).fill('_');
-
- // first, find exact matches
- for (let i = 0; i < 5; i += 1) {
- if (letters[i] === available[i]) {
- answer[i] = 'x';
- available[i] = ' ';
- }
- }
-
- // then find close matches (this has to happen
- // in a second step, otherwise an early close
- // match can prevent a later exact match)
- for (let i = 0; i < 5; i += 1) {
- if (answer[i] === '_') {
- const index = available.indexOf(letters[i]);
- if (index !== -1) {
- answer[i] = 'c';
- available[index] = ' ';
- }
- }
- }
-
- this.answers.push(answer.join(''));
-
- return true;
- }
-
- /**
- * Serialize game state so it can be set as a cookie
- */
- toString() {
- return `${this.index}-${this.guesses.join(' ')}-${this.answers.join(' ')}`;
- }
-}
diff --git a/src/routes/sverdle/how-to-play/+page.svelte b/src/routes/sverdle/how-to-play/+page.svelte
deleted file mode 100644
index e8e2cec..0000000
--- a/src/routes/sverdle/how-to-play/+page.svelte
+++ /dev/null
@@ -1,95 +0,0 @@
-
- How to play Sverdle
-
-
-
-
-
How to play Sverdle
-
-
- Sverdle is a clone of Wordle, the
- word guessing game. To play, enter a five-letter English word. For example:
-
-
-
- r
- i
- t
- z
- y
-
-
-
- The y is in the right place. r and
- t
- are the right letters, but in the wrong place. The other letters are wrong, and can be discarded.
- Let's make another guess:
-
-
-
- p
- a
- r
- t
- y
-
-
-
This time we guessed right! You have six guesses to get the word.
-
-
- Unlike the original Wordle, Sverdle runs on the server instead of in the browser, making it
- impossible to cheat. It uses <form> and cookies to submit data, meaning you can
- even play with JavaScript disabled!
-