From 207782921cb4ab9c8fd5713b82a6e2bf72eed705 Mon Sep 17 00:00:00 2001 From: micraj Date: Tue, 8 Jul 2025 14:54:54 +0100 Subject: [PATCH 01/11] Initial frontend design --- frontend/src/routes/+page.svelte | 194 +++++++++++++++++++++++++++++-- 1 file changed, 187 insertions(+), 7 deletions(-) diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte index 58dc6ff..d896656 100644 --- a/frontend/src/routes/+page.svelte +++ b/frontend/src/routes/+page.svelte @@ -1,10 +1,190 @@ - -

My Editor

- +
+ + + + +
+
+

Hi! I’m Michal,
welcome to
my blog

+
+ +
+
+ Macropad +
+

Macropad

+

08/07/2025

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

+
+
+ +
+ Self-hosted website +
+

Self-hosted website

+

08/07/2025

+

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

+
+
+
+ +
+

About Me

+

This is a short bio about Michal. You can customize this section however you like.

+
+
+
+ + From 9b4b9fb81a43b9ebc80612a6fca1d669cb588e84 Mon Sep 17 00:00:00 2001 From: micraj Date: Thu, 10 Jul 2025 23:19:06 +0100 Subject: [PATCH 02/11] Working resize for welcome and projects --- frontend/src/app.html | 5 + frontend/src/lib/components/SideBar.svelte | 133 +++++++++ frontend/src/routes/+page.svelte | 320 +++++++++++++++------ 3 files changed, 370 insertions(+), 88 deletions(-) create mode 100644 frontend/src/lib/components/SideBar.svelte diff --git a/frontend/src/app.html b/frontend/src/app.html index 77a5ff5..128e3c4 100644 --- a/frontend/src/app.html +++ b/frontend/src/app.html @@ -4,6 +4,11 @@ + + %sveltekit.head% diff --git a/frontend/src/lib/components/SideBar.svelte b/frontend/src/lib/components/SideBar.svelte new file mode 100644 index 0000000..93f76bb --- /dev/null +++ b/frontend/src/lib/components/SideBar.svelte @@ -0,0 +1,133 @@ + + + + + diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte index d896656..4381dcc 100644 --- a/frontend/src/routes/+page.svelte +++ b/frontend/src/routes/+page.svelte @@ -1,69 +1,133 @@
- - +
-

Hi! I’m Michal,
welcome to
my blog

+

Hi! I'm Michal,
Welcome to
my blog

-
- Macropad -
-

Macropad

-

08/07/2025

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

-
+ - -
- Self-hosted website -
-

Self-hosted website

-

08/07/2025

-

Lorem ipsum dolor sit amet, consectetur adipiscing elit.

-
+
+ {#each blogs as blog} +
+ {blog.title} +
+

{blog.title}

+

{blog.date}

+

{blog.excerpt}

+
+
+ {/each}
@@ -83,19 +147,6 @@ font-family: 'Segoe UI', sans-serif; } - .sidebar { - width: 150px; - background-color: #f1f9c6; - border-right: 2px solid #d3e4a3; - padding: 20px 10px; - position: sticky; - top: 0; - height: 100vh; - display: flex; - flex-direction: column; - justify-content: space-between; - } - .content { flex: 1; overflow-y: scroll; @@ -104,47 +155,125 @@ } section { - min-height: 100vh; + min-height: 90vh; + height: auto; padding: 40px; - background-color: #f1f9c6; scroll-snap-align: start; + /* scroll-padding-top: 60px; */ } - /* Sidebar */ - ul { - list-style: none; - padding: 0; - line-height: 2.5; + /* Welcome Section */ + #welcome { + display: flex; + justify-content: center; /* Center horizontally */ + align-items: center; /* Center vertically */ + text-align: left; + min-height: 95vh; /* already present */ + padding: 40px; } - li a { - text-decoration: none; - color: #222; - font-weight: 500; + #welcome h1 { + font-size: clamp(3.2rem, 8vw, 5.5em); + color: #1c5253; + line-height: 1.5; + font-family: 'Space Grotesk', sans-serif; + margin: 0; + padding-bottom: 100px; } - li a:hover { - color: #006699; + #projects { + padding: 0 10px; /* horizontal padding instead of fixed width */ + display: flex; + flex-direction: column; + gap: 20px; + position: relative; + max-width: 1200px; /* optional max width */ + margin: 0 auto; /* center it */ } - .social-icons img { - width: 24px; - margin: 10px 0; - cursor: pointer; + /* Sticky header */ + .sticky-header { + position: sticky; + top: 0; + background-color: #f3ffc6; + z-index: 10; + display: flex; + flex-direction: column; + padding-left: 40px; /* match the #projects padding */ + padding-right: 40px; } - /* Welcome Section */ - #welcome h1 { - font-size: 2.5rem; + #projects h2 { + background-color: #f3ffc6; + padding-left: 0; + padding-right: 0; + margin: 20px 0 0 0; + z-index: 11; color: #214c4e; - line-height: 1.5; + font-size: 2rem; } - /* Projects Section */ - #projects { + .projects-line { + width: calc(100% -2px); + height: 4px; + background-color: #1c5253; + margin: 0; + margin-top: 8px; + position: sticky; + top: 44px; /* height of the h2 + some space */ + z-index: 10; + } + /* 3-column grid */ + .blog-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); + gap: 24px; + padding: 20px 40px 100px; /* top 20, left/right 40 (match section) */ + } + + .blog-card { + background: white; + border: 2px solid #1c5253; + border-radius: 10px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1); + overflow: hidden; + transition: + transform 0.2s ease, + box-shadow 0.2s ease; display: flex; flex-direction: column; - gap: 20px; + } + + .blog-card:hover { + transform: translateY(-4px); + box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15); + } + + .blog-card img { + width: 100%; + height: 180px; + object-fit: cover; + } + + .blog-card .content { + padding: 20px; + } + + .blog-card h3 { + margin: 0 0 8px; + color: #333; + font-size: 1.3rem; + } + + .blog-card .date { + color: #888; + font-size: 0.9rem; + margin-bottom: 12px; + } + + .blog-card .excerpt { + color: #555; + font-size: 1rem; } .project-card { @@ -155,6 +284,7 @@ box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.1); align-items: center; gap: 20px; + height: 40vh; } .red { @@ -165,6 +295,11 @@ background-color: #dd5edb; } + #projects h2 { + color: #214c4e; + font-size: 2rem; + margin-bottom: 20px; + } .project-card img { width: 100px; border-radius: 5px; @@ -177,6 +312,9 @@ } /* About Section */ + #about { + padding-top: 0px; + } #about h2 { color: #214c4e; font-size: 2rem; @@ -187,4 +325,10 @@ font-size: 1.1rem; max-width: 600px; } + + :global(body) { + background-color: #f3ffc6; + margin: 0; + font-family: 'Space Grotesk', sans-serif; + } From f856d68f5bf361d968093ad5848e4422d26a98c9 Mon Sep 17 00:00:00 2001 From: micraj Date: Wed, 6 Aug 2025 20:35:53 +0100 Subject: [PATCH 03/11] Initial snap scrolling implementation --- frontend/src/lib/components/SideBar.svelte | 5 +- frontend/src/routes/+page.svelte | 129 ++++++++++++++------- 2 files changed, 88 insertions(+), 46 deletions(-) diff --git a/frontend/src/lib/components/SideBar.svelte b/frontend/src/lib/components/SideBar.svelte index 93f76bb..167d52f 100644 --- a/frontend/src/lib/components/SideBar.svelte +++ b/frontend/src/lib/components/SideBar.svelte @@ -79,8 +79,8 @@ .sidebar { width: 175px; height: 100vh; - position: relative; /* Needed for ::before positioning */ - /* Remove the full-height border */ + position: relative; + user-select: none; } .sidebar nav { padding: 5px; @@ -113,6 +113,7 @@ font-family: 'Space Grotesk', sans-serif; font-size: 1.5rem; font-weight: 700; + cursor: pointer; } li a:hover { diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte index 4381dcc..a650f81 100644 --- a/frontend/src/routes/+page.svelte +++ b/frontend/src/routes/+page.svelte @@ -4,6 +4,20 @@ const sections = ['welcome', 'projects', 'about']; const blogs = [ + { + title: 'Macropad', + date: '08/07/2025', + excerpt: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', + image: 'https://via.placeholder.com/100x80?text=Macro' + }, + { + title: 'Self-hosted website', + date: '08/07/2025', + excerpt: 'Learn how I hosted my personal website using open-source tools.', + image: 'https://via.placeholder.com/100x80?text=Cloud' + } + ]; + const blogs1 = [ { title: 'Macropad', date: '08/07/2025', @@ -101,6 +115,25 @@ image: 'https://via.placeholder.com/100x80?text=Cloud' } ]; + + let stopped = false; + + onMount(() => { + const aboutExitAnchor = document.querySelector('.about-exit-anchor'); + const contentScroll = document.querySelector('.content'); + + const observer = new IntersectionObserver( + ([entry]) => { + stopped = entry.isIntersecting; // true when about exit anchor is visible, else false + }, + { + root: contentScroll, + threshold: 0 + } + ); + + if (aboutExitAnchor) observer.observe(aboutExitAnchor); + });
@@ -113,7 +146,7 @@
- {/each}
+
-

About Me

-

This is a short bio about Michal. You can customize this section however you like.

+ +
+

This is a short bio about Michal. You can customize this section however you like.

+
+
@@ -152,13 +192,26 @@ overflow-y: scroll; scroll-snap-type: y mandatory; scroll-behavior: smooth; + /* Hide scrollbar */ + scrollbar-width: none; + -ms-overflow-style: none; + } + + .content::-webkit-scrollbar { + display: none; + } + .about-exit-anchor { + height: 1px; + margin-top: 300px; } section { - min-height: 90vh; + min-height: 100vh; + max-width: 1600px; height: auto; padding: 40px; scroll-snap-align: start; + margin: 0 auto; /* scroll-padding-top: 60px; */ } @@ -187,24 +240,25 @@ flex-direction: column; gap: 20px; position: relative; - max-width: 1200px; /* optional max width */ - margin: 0 auto; /* center it */ + margin: 0 auto; } /* Sticky header */ .sticky-header { + background-color: #ebebeb; position: sticky; top: 0; - background-color: #f3ffc6; z-index: 10; display: flex; flex-direction: column; padding-left: 40px; /* match the #projects padding */ padding-right: 40px; } + .stoppedSticky { + position: relative; + } #projects h2 { - background-color: #f3ffc6; padding-left: 0; padding-right: 0; margin: 20px 0 0 0; @@ -228,7 +282,7 @@ display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 24px; - padding: 20px 40px 100px; /* top 20, left/right 40 (match section) */ + padding: 20px 40px; /* top 20, left/right 40 (match section) */ } .blog-card { @@ -276,35 +330,6 @@ font-size: 1rem; } - .project-card { - display: flex; - color: white; - padding: 20px; - border-radius: 10px; - box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.1); - align-items: center; - gap: 20px; - height: 40vh; - } - - .red { - background-color: #e74c3c; - } - - .purple { - background-color: #dd5edb; - } - - #projects h2 { - color: #214c4e; - font-size: 2rem; - margin-bottom: 20px; - } - .project-card img { - width: 100px; - border-radius: 5px; - } - .date { font-size: 0.9em; opacity: 0.9; @@ -313,21 +338,37 @@ /* About Section */ #about { - padding-top: 0px; + padding: 0 10px; /* horizontal padding instead of fixed width */ + display: flex; + flex-direction: column; + gap: 20px; + position: relative; + margin: 0 auto; /* center it */ + height: 100vh; /* full height */ + } + .snap-bottom-anchor { + position: absolute; + bottom: 0; + left: 0; + right: 0; + height: 1px; /* or whatever height you want */ + scroll-snap-align: end; } #about h2 { + padding-left: 0; + padding-right: 0; + margin: 20px 0 0 0; + z-index: 11; color: #214c4e; font-size: 2rem; - margin-bottom: 10px; } - #about p { - font-size: 1.1rem; - max-width: 600px; + .about-content { + padding: 20px 40px 100px; /* top 20, left/right 40 (match section) */ } :global(body) { - background-color: #f3ffc6; + background-color: #ebebeb; margin: 0; font-family: 'Space Grotesk', sans-serif; } From 735e4384c5ba4f2fb71442b48d4780d0e6ae31da Mon Sep 17 00:00:00 2001 From: micraj Date: Thu, 7 Aug 2025 19:14:04 +0100 Subject: [PATCH 04/11] CSS cleanup --- frontend/src/routes/+page.svelte | 343 ++++++++++-------------- frontend/src/routes/old/+page.svelte | 375 +++++++++++++++++++++++++++ 2 files changed, 513 insertions(+), 205 deletions(-) create mode 100644 frontend/src/routes/old/+page.svelte diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte index a650f81..b01e01f 100644 --- a/frontend/src/routes/+page.svelte +++ b/frontend/src/routes/+page.svelte @@ -3,7 +3,8 @@ import SideBar from '$lib/components/SideBar.svelte'; const sections = ['welcome', 'projects', 'about']; - const blogs = [ + + const blogs1 = [ { title: 'Macropad', date: '08/07/2025', @@ -17,19 +18,8 @@ image: 'https://via.placeholder.com/100x80?text=Cloud' } ]; - const blogs1 = [ - { - title: 'Macropad', - date: '08/07/2025', - excerpt: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', - image: 'https://via.placeholder.com/100x80?text=Macro' - }, - { - title: 'Self-hosted website', - date: '08/07/2025', - excerpt: 'Learn how I hosted my personal website using open-source tools.', - image: 'https://via.placeholder.com/100x80?text=Cloud' - }, + + const blogs = [ { title: 'Macropad', date: '08/07/2025', @@ -59,101 +49,37 @@ date: '08/07/2025', excerpt: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', image: 'https://via.placeholder.com/100x80?text=Macro' - }, - { - title: 'Self-hosted website', - date: '08/07/2025', - excerpt: 'Learn how I hosted my personal website using open-source tools.', - image: 'https://via.placeholder.com/100x80?text=Cloud' - }, - { - title: 'Self-hosted website', - date: '08/07/2025', - excerpt: 'Learn how I hosted my personal website using open-source tools.', - image: 'https://via.placeholder.com/100x80?text=Cloud' - }, - { - title: 'Self-hosted website', - date: '08/07/2025', - excerpt: 'Learn how I hosted my personal website using open-source tools.', - image: 'https://via.placeholder.com/100x80?text=Cloud' - }, - { - title: 'Self-hosted website', - date: '08/07/2025', - excerpt: 'Learn how I hosted my personal website using open-source tools.', - image: 'https://via.placeholder.com/100x80?text=Cloud' - }, - { - title: 'Self-hosted website', - date: '08/07/2025', - excerpt: 'Learn how I hosted my personal website using open-source tools.', - image: 'https://via.placeholder.com/100x80?text=Cloud' - }, - { - title: 'Self-hosted website', - date: '08/07/2025', - excerpt: 'Learn how I hosted my personal website using open-source tools.', - image: 'https://via.placeholder.com/100x80?text=Cloud' - }, - { - title: 'Self-hosted website', - date: '08/07/2025', - excerpt: 'Learn how I hosted my personal website using open-source tools.', - image: 'https://via.placeholder.com/100x80?text=Cloud' - }, - { - title: 'Self-hosted website', - date: '08/07/2025', - excerpt: 'Learn how I hosted my personal website using open-source tools.', - image: 'https://via.placeholder.com/100x80?text=Cloud' - }, - { - title: 'Self-hosted website', - date: '08/07/2025', - excerpt: 'Learn how I hosted my personal website using open-source tools.', - image: 'https://via.placeholder.com/100x80?text=Cloud' } ]; - - let stopped = false; - - onMount(() => { - const aboutExitAnchor = document.querySelector('.about-exit-anchor'); - const contentScroll = document.querySelector('.content'); - - const observer = new IntersectionObserver( - ([entry]) => { - stopped = entry.isIntersecting; // true when about exit anchor is visible, else false - }, - { - root: contentScroll, - threshold: 0 - } - ); - - if (aboutExitAnchor) observer.observe(aboutExitAnchor); - });
-
-
-

Hi! I'm Michal,
Welcome to
my blog

+ +
+

+ Hi! I'm Michal,
Welcome to
my blogšŸ‘‹ +

-
-
diff --git a/frontend/src/routes/old/+page.svelte b/frontend/src/routes/old/+page.svelte new file mode 100644 index 0000000..a650f81 --- /dev/null +++ b/frontend/src/routes/old/+page.svelte @@ -0,0 +1,375 @@ + + +
+ + + +
+
+

Hi! I'm Michal,
Welcome to
my blog

+
+ +
+ +
+ {#each blogs as blog} +
+ {blog.title} +
+

{blog.title}

+

{blog.date}

+

{blog.excerpt}

+
+
+ {/each} +
+ +
+ +
+ +
+

This is a short bio about Michal. You can customize this section however you like.

+
+
+
+
+
+ + From dde151ce98de8e29d400b5d1d18f4602a9f8a13b Mon Sep 17 00:00:00 2001 From: micraj Date: Thu, 7 Aug 2025 19:36:48 +0100 Subject: [PATCH 05/11] handwave and fade in animations --- frontend/src/routes/+page.svelte | 77 +++++++++++++++++++++++++------- 1 file changed, 60 insertions(+), 17 deletions(-) diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte index b01e01f..5943adc 100644 --- a/frontend/src/routes/+page.svelte +++ b/frontend/src/routes/+page.svelte @@ -1,6 +1,8 @@
@@ -59,13 +99,12 @@
-

- Hi! I'm Michal,
Welcome to
my blogšŸ‘‹ -

+ {#if show} +

+ Hi! I'm Michal,
Welcome to
my blog + šŸ‘‹ +

+ {/if}
@@ -271,32 +310,36 @@ position: absolute; bottom: 0; } - .wave { + .hand { display: inline-block; - animation: wave-animation 2s infinite; transform-origin: 70% 70%; - font-size: 1em; /* Adjust as needed */ } - /* Keyframes for hand wave */ + /* Triggered only when wave class is added */ + .wave { + animation: wave-animation 1.8s ease-in-out 1; + animation-fill-mode: forwards; + animation-delay: 0.4s; + } + @keyframes wave-animation { 0% { transform: rotate(0deg); } 10% { - transform: rotate(14deg); + transform: rotate(12deg); } 20% { - transform: rotate(-8deg); + transform: rotate(-6deg); } 30% { - transform: rotate(14deg); + transform: rotate(12deg); } 40% { - transform: rotate(-4deg); + transform: rotate(-2deg); } 50% { - transform: rotate(10deg); + transform: rotate(8deg); } 60% { transform: rotate(0deg); From bf50fb900e39b50aaf65cce320f8308705f7faa9 Mon Sep 17 00:00:00 2001 From: micraj Date: Fri, 8 Aug 2025 19:07:21 +0100 Subject: [PATCH 06/11] Social Icons --- frontend/src/lib/components/SideBar.svelte | 43 ++++++++++-- frontend/src/routes/+page.svelte | 2 + frontend/static/icons/github_icon.svg | 76 ++++++++++++++++++++++ frontend/static/icons/linkedin_icon.svg | 42 ++++++++++++ 4 files changed, 156 insertions(+), 7 deletions(-) create mode 100644 frontend/static/icons/github_icon.svg create mode 100644 frontend/static/icons/linkedin_icon.svg diff --git a/frontend/src/lib/components/SideBar.svelte b/frontend/src/lib/components/SideBar.svelte index 167d52f..de6822c 100644 --- a/frontend/src/lib/components/SideBar.svelte +++ b/frontend/src/lib/components/SideBar.svelte @@ -67,6 +67,25 @@ {/each} + + diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte index 5943adc..d9e66f3 100644 --- a/frontend/src/routes/+page.svelte +++ b/frontend/src/routes/+page.svelte @@ -183,6 +183,7 @@ /* Hide scrollbar */ scrollbar-width: none; -ms-overflow-style: none; + user-select: none; } /* Hide scrollbar for WebKit browsers */ @@ -290,6 +291,7 @@ margin: 0; color: var(--color-secondary); font-size: 2rem; + padding-bottom: 10px; } .section-header hr { diff --git a/frontend/static/icons/github_icon.svg b/frontend/static/icons/github_icon.svg new file mode 100644 index 0000000..a513c2c --- /dev/null +++ b/frontend/static/icons/github_icon.svg @@ -0,0 +1,76 @@ + + + + + + + + + + github [#142] + Created with Sketch. + + + + + + + + + + diff --git a/frontend/static/icons/linkedin_icon.svg b/frontend/static/icons/linkedin_icon.svg new file mode 100644 index 0000000..740dcab --- /dev/null +++ b/frontend/static/icons/linkedin_icon.svg @@ -0,0 +1,42 @@ + + + + + + + + From 15b6c6bb54275e5438f3bbae399cfb8c47c5c915 Mon Sep 17 00:00:00 2001 From: micraj Date: Fri, 8 Aug 2025 20:52:19 +0100 Subject: [PATCH 07/11] Scroll arrow --- frontend/src/lib/components/SideBar.svelte | 9 ++-- frontend/src/routes/+page.svelte | 48 ++++++++++++++++++--- frontend/static/icons/double-arrow-down.svg | 2 + 3 files changed, 49 insertions(+), 10 deletions(-) create mode 100644 frontend/static/icons/double-arrow-down.svg diff --git a/frontend/src/lib/components/SideBar.svelte b/frontend/src/lib/components/SideBar.svelte index de6822c..017c21b 100644 --- a/frontend/src/lib/components/SideBar.svelte +++ b/frontend/src/lib/components/SideBar.svelte @@ -96,7 +96,7 @@ } } .sidebar { - width: 250px; + width: 200px; height: 100vh; position: relative; user-select: none; @@ -147,12 +147,13 @@ .social-icons { position: relative; - top: clamp(100px, 15vh, 400px); /* distance from bottom */ - left: 20px; /* distance from left */ + top: clamp(100px, 20vh, 400px); display: flex; flex-direction: row; gap: 24px; - z-index: 1000; /* stay on top */ + z-index: 1000; + width: 100%; + justify-content: center; } .social-icons a img { diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte index d9e66f3..e4e8ce0 100644 --- a/frontend/src/routes/+page.svelte +++ b/frontend/src/routes/+page.svelte @@ -102,8 +102,15 @@ {#if show}

Hi! I'm Michal,
Welcome to
my blog - šŸ‘‹ + + šŸ‘‹ +

+ + +
+ arrow +
{/if} @@ -207,9 +214,17 @@ .welcome-section { justify-content: center; align-items: center; - text-align: left; min-height: 95vh; } + .welcome-fade-content { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + height: 100%; + text-align: center; + } .welcome-section h1 { font-size: clamp(3.2rem, 8vw, 8em); color: var(--color-primary); @@ -217,6 +232,27 @@ font-family: var(--font-heading); margin: 0; padding-bottom: 100px; + text-align: left; + } + .scroll-indicator { + top: 200px; + transform: translateX(-50%); + } + + .scroll-indicator img { + width: clamp(50px, 8vw, 100px); + height: auto; + animation: arrowUpDown 1.5s infinite; + } + + @keyframes arrowUpDown { + 0%, + 100% { + transform: translateY(0); + } + 50% { + transform: translateY(8px); + } } /* Projects */ @@ -319,14 +355,14 @@ /* Triggered only when wave class is added */ .wave { - animation: wave-animation 1.8s ease-in-out 1; + animation: wave-animation 1.8s ease-in-out 1 forwards; animation-fill-mode: forwards; animation-delay: 0.4s; } @keyframes wave-animation { 0% { - transform: rotate(0deg); + transform: rotate(1deg); } 10% { transform: rotate(12deg); @@ -344,10 +380,10 @@ transform: rotate(8deg); } 60% { - transform: rotate(0deg); + transform: rotate(1deg); } 100% { - transform: rotate(0deg); + transform: rotate(1deg); } } diff --git a/frontend/static/icons/double-arrow-down.svg b/frontend/static/icons/double-arrow-down.svg new file mode 100644 index 0000000..c170f6d --- /dev/null +++ b/frontend/static/icons/double-arrow-down.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file From a3cd5a5cabfabeffcd0434b5afa2533857b30de9 Mon Sep 17 00:00:00 2001 From: micraj Date: Sun, 31 Aug 2025 14:04:49 +0100 Subject: [PATCH 08/11] Update dependancies --- frontend/package-lock.json | 212 +++++++++++++++++++++++++++++++------ frontend/package.json | 4 +- frontend/svelte.config.js | 4 +- 3 files changed, 182 insertions(+), 38 deletions(-) diff --git a/frontend/package-lock.json b/frontend/package-lock.json index 4b26ff3..3a7c60b 100644 --- a/frontend/package-lock.json +++ b/frontend/package-lock.json @@ -8,11 +8,11 @@ "name": "frontend", "version": "0.0.1", "dependencies": { - "@sveltejs/adapter-node": "^5.2.12", "tinymce": "^7.9.1" }, "devDependencies": { - "@sveltejs/kit": "^2.16.0", + "@sveltejs/adapter-node": "^5.3.1", + "@sveltejs/kit": "^2.37.0", "@sveltejs/vite-plugin-svelte": "^5.0.0", "prettier": "^3.4.2", "prettier-plugin-svelte": "^3.3.3", @@ -26,6 +26,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, "license": "Apache-2.0", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", @@ -42,6 +43,7 @@ "cpu": [ "ppc64" ], + "dev": true, "optional": true, "os": [ "aix" @@ -57,6 +59,7 @@ "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "android" @@ -72,6 +75,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "android" @@ -87,6 +91,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "android" @@ -102,6 +107,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -117,6 +123,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -132,6 +139,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "freebsd" @@ -147,6 +155,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "freebsd" @@ -162,6 +171,7 @@ "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "linux" @@ -177,6 +187,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -192,6 +203,7 @@ "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "linux" @@ -207,6 +219,7 @@ "cpu": [ "loong64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -222,6 +235,7 @@ "cpu": [ "mips64el" ], + "dev": true, "optional": true, "os": [ "linux" @@ -237,6 +251,7 @@ "cpu": [ "ppc64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -252,6 +267,7 @@ "cpu": [ "riscv64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -267,6 +283,7 @@ "cpu": [ "s390x" ], + "dev": true, "optional": true, "os": [ "linux" @@ -282,6 +299,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -297,6 +315,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "netbsd" @@ -312,6 +331,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "netbsd" @@ -327,6 +347,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "openbsd" @@ -342,6 +363,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "openbsd" @@ -357,6 +379,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "sunos" @@ -372,6 +395,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "win32" @@ -387,6 +411,7 @@ "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "win32" @@ -402,6 +427,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "win32" @@ -414,6 +440,7 @@ "version": "0.3.8", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/set-array": "^1.2.1", @@ -428,6 +455,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -437,6 +465,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, "license": "MIT", "engines": { "node": ">=6.0.0" @@ -446,12 +475,14 @@ "version": "1.5.0", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.25", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -459,15 +490,18 @@ } }, "node_modules/@polka/url": { - "version": "1.0.0-next.28", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.28.tgz", - "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "dev": true, "license": "MIT" }, "node_modules/@rollup/plugin-commonjs": { - "version": "28.0.3", - "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.3.tgz", - "integrity": "sha512-pyltgilam1QPdn+Zd9gaCfOLcnjMEJ9gV+bTw6/r73INdvzf1ah9zLIJBm+kW7R6IUFIQ1YO+VqZtYxZNWFPEQ==", + "version": "28.0.6", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-28.0.6.tgz", + "integrity": "sha512-XSQB1K7FUU5QP+3lOQmVCE3I0FcbbNvmNT4VJSj93iUjayaARrTQeoRdiYQoftAJBLrR9t2agwAd3ekaTgHNlw==", + "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "commondir": "^1.0.1", @@ -493,6 +527,8 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "*" } @@ -501,6 +537,8 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.1.0" }, @@ -520,6 +558,8 @@ "version": "16.0.1", "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-16.0.1.tgz", "integrity": "sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==", + "dev": true, + "license": "MIT", "dependencies": { "@rollup/pluginutils": "^5.0.1", "@types/resolve": "1.20.2", @@ -540,9 +580,11 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.4", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", - "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.2.0.tgz", + "integrity": "sha512-qWJ2ZTbmumwiLFomfzTyt5Kng4hwPi9rwCYN4SHb6eaRU1KNO4ccxINHr/VhH4GgPlt1XfSTLX2LBTme8ne4Zw==", + "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -567,6 +609,7 @@ "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "android" @@ -579,6 +622,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "android" @@ -591,6 +635,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -603,6 +648,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "darwin" @@ -615,6 +661,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "freebsd" @@ -627,6 +674,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "freebsd" @@ -639,6 +687,7 @@ "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "linux" @@ -651,6 +700,7 @@ "cpu": [ "arm" ], + "dev": true, "optional": true, "os": [ "linux" @@ -663,6 +713,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -675,6 +726,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -687,6 +739,7 @@ "cpu": [ "loong64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -699,6 +752,7 @@ "cpu": [ "ppc64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -711,6 +765,7 @@ "cpu": [ "riscv64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -723,6 +778,7 @@ "cpu": [ "riscv64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -735,6 +791,7 @@ "cpu": [ "s390x" ], + "dev": true, "optional": true, "os": [ "linux" @@ -747,6 +804,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -759,6 +817,7 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "linux" @@ -771,6 +830,7 @@ "cpu": [ "arm64" ], + "dev": true, "optional": true, "os": [ "win32" @@ -783,6 +843,7 @@ "cpu": [ "ia32" ], + "dev": true, "optional": true, "os": [ "win32" @@ -795,23 +856,35 @@ "cpu": [ "x64" ], + "dev": true, "optional": true, "os": [ "win32" ] }, + "node_modules/@standard-schema/spec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.0.0.tgz", + "integrity": "sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==", + "dev": true, + "license": "MIT" + }, "node_modules/@sveltejs/acorn-typescript": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@sveltejs/acorn-typescript/-/acorn-typescript-1.0.5.tgz", "integrity": "sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==", + "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^8.9.0" } }, "node_modules/@sveltejs/adapter-node": { - "version": "5.2.12", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-5.2.12.tgz", - "integrity": "sha512-0bp4Yb3jKIEcZWVcJC/L1xXp9zzJS4hDwfb4VITAkfT4OVdkspSHsx7YhqJDbb2hgLl6R9Vs7VQR+fqIVOxPUQ==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-5.3.1.tgz", + "integrity": "sha512-PSoGfa9atkmuixe7jvuS2tsUohVZF20So87ASzfMRGTTNqEd8s48KAodlv3CzHwq9XO/BM8KsQLpqqsr/6dmuA==", + "dev": true, + "license": "MIT", "dependencies": { "@rollup/plugin-commonjs": "^28.0.1", "@rollup/plugin-json": "^6.1.0", @@ -823,15 +896,18 @@ } }, "node_modules/@sveltejs/kit": { - "version": "2.21.2", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.21.2.tgz", - "integrity": "sha512-EMYTY4+rNa7TaRZYzCqhQslEkACEZzWc363jOYuc90oJrgvlWTcgqTxcGSIJim48hPaXwYlHyatRnnMmTFf5tA==", + "version": "2.37.0", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.37.0.tgz", + "integrity": "sha512-xgKtpjQ6Ry4mdShd01ht5AODUsW7+K1iValPDq7QX8zI1hWOKREH9GjG8SRCN5tC4K7UXmMhuQam7gbLByVcnw==", + "dev": true, + "license": "MIT", "dependencies": { + "@standard-schema/spec": "^1.0.0", "@sveltejs/acorn-typescript": "^1.0.5", "@types/cookie": "^0.6.0", "acorn": "^8.14.1", "cookie": "^0.6.0", - "devalue": "^5.1.0", + "devalue": "^5.3.2", "esm-env": "^1.2.2", "kleur": "^4.1.5", "magic-string": "^0.30.5", @@ -847,15 +923,22 @@ "node": ">=18.13" }, "peerDependencies": { - "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0", + "@opentelemetry/api": "^1.0.0", + "@sveltejs/vite-plugin-svelte": "^3.0.0 || ^4.0.0-next.1 || ^5.0.0 || ^6.0.0-next.0", "svelte": "^4.0.0 || ^5.0.0-next.0", - "vite": "^5.0.3 || ^6.0.0" + "vite": "^5.0.3 || ^6.0.0 || ^7.0.0-beta.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + } } }, "node_modules/@sveltejs/vite-plugin-svelte": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-5.0.3.tgz", "integrity": "sha512-MCFS6CrQDu1yGwspm4qtli0e63vaPCehf6V7pIMP15AsWgMKrqDGCPFF/0kn4SP0ii4aySu4Pa62+fIRGFMjgw==", + "dev": true, "license": "MIT", "dependencies": { "@sveltejs/vite-plugin-svelte-inspector": "^4.0.1", @@ -877,6 +960,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-4.0.1.tgz", "integrity": "sha512-J/Nmb2Q2y7mck2hyCX4ckVHcR5tu2J+MtBEQqpDrrgELZ2uvraQcK/ioCV61AqkdXFgriksOKIceDcQmqnGhVw==", + "dev": true, "license": "MIT", "dependencies": { "debug": "^4.3.7" @@ -894,22 +978,27 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "dev": true, "license": "MIT" }, "node_modules/@types/estree": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", - "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==" + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true }, "node_modules/@types/resolve": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", - "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==" + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true, + "license": "MIT" }, "node_modules/acorn": { "version": "8.14.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -921,6 +1010,7 @@ "version": "1.4.13", "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz", "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", + "dev": true, "license": "MIT", "peerDependencies": { "acorn": ">=8.9.0" @@ -930,6 +1020,7 @@ "version": "5.3.2", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">= 0.4" @@ -939,6 +1030,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, "license": "Apache-2.0", "engines": { "node": ">= 0.4" @@ -964,6 +1056,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -972,12 +1065,15 @@ "node_modules/commondir": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true, + "license": "MIT" }, "node_modules/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.6" @@ -987,6 +1083,7 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, "license": "MIT", "dependencies": { "ms": "^2.1.3" @@ -1004,21 +1101,24 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/devalue": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.1.1.tgz", - "integrity": "sha512-maua5KUiapvEwiEAe+XnlZ3Rh0GD+qI1J/nb9vrJc3muPXvcF/8gXYTWF76+5DAqHyDUtOIImEuo0YKE9mshVw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-5.3.2.tgz", + "integrity": "sha512-UDsjUbpQn9kvm68slnrs+mfxwFkIflOhkanmyabZ8zOYk8SMEIbJ3TK+88g70hSIeytu4y18f0z/hYHMTrXIWw==", + "dev": true, "license": "MIT" }, "node_modules/esbuild": { "version": "0.25.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.5.tgz", "integrity": "sha512-P8OtKZRv/5J5hhz0cUAdu/cLuPIKXpQl1R9pZtvmHWQvrAUVd0UNIPT4IB4W3rNOqVO0rlqHmCIbSwxh/c9yUQ==", + "dev": true, "hasInstallScript": true, "bin": { "esbuild": "bin/esbuild" @@ -1058,12 +1158,14 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.2.tgz", "integrity": "sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==", + "dev": true, "license": "MIT" }, "node_modules/esrap": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.4.3.tgz", "integrity": "sha512-Xddc1RsoFJ4z9nR7W7BFaEPIp4UXoeQ0+077UdWLxbafMQFyU79sQJMk7kxNgRwQ9/aVgaKacCHC2pUACGwmYw==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -1072,12 +1174,15 @@ "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true, + "license": "MIT" }, "node_modules/fdir": { "version": "6.4.5", "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.5.tgz", "integrity": "sha512-4BG7puHpVsIYxZUbiUE3RqGloLaSSwzYie5jvasC4LWuBWzZawynvYouhjbQKw2JuIGYdm0DzIxl8iVidKlUEw==", + "dev": true, "peerDependencies": { "picomatch": "^3 || ^4" }, @@ -1091,6 +1196,7 @@ "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, "hasInstallScript": true, "license": "MIT", "optional": true, @@ -1105,6 +1211,8 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -1113,6 +1221,8 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -1124,6 +1234,8 @@ "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -1137,12 +1249,15 @@ "node_modules/is-module": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==" + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true, + "license": "MIT" }, "node_modules/is-reference": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "dev": true, "license": "MIT", "dependencies": { "@types/estree": "^1.0.6" @@ -1152,6 +1267,7 @@ "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -1161,12 +1277,14 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "dev": true, "license": "MIT" }, "node_modules/magic-string": { "version": "0.30.17", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dev": true, "license": "MIT", "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0" @@ -1176,15 +1294,17 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=10" @@ -1194,12 +1314,14 @@ "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, "license": "MIT" }, "node_modules/nanoid": { "version": "3.3.11", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, "funding": [ { "type": "github", @@ -1216,18 +1338,22 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, "license": "ISC" }, "node_modules/picomatch": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, "engines": { "node": ">=12" }, @@ -1239,6 +1365,7 @@ "version": "8.5.4", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.4.tgz", "integrity": "sha512-QSa9EBe+uwlGTFmHsPKokv3B/oEMQZxfqW0QqNCyhpa6mB1afzulwn8hihglqAb2pOw+BJgNlmXQ8la2VeHB7w==", + "dev": true, "funding": [ { "type": "opencollective", @@ -1307,6 +1434,8 @@ "version": "1.22.10", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", @@ -1326,6 +1455,7 @@ "version": "4.42.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.42.0.tgz", "integrity": "sha512-LW+Vse3BJPyGJGAJt1j8pWDKPd73QM8cRXYK1IxOBgL2AGLu7Xd2YOW0M2sLUBCkF5MshXXtMApyEAEzMVMsnw==", + "dev": true, "dependencies": { "@types/estree": "1.0.7" }, @@ -1364,6 +1494,7 @@ "version": "1.8.1", "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, "license": "MIT", "dependencies": { "mri": "^1.1.0" @@ -1376,12 +1507,14 @@ "version": "2.7.1", "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "dev": true, "license": "MIT" }, "node_modules/sirv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.0.tgz", - "integrity": "sha512-BPwJGUeDaDCHihkORDchNyyTvWFhcusy1XMmhEVTQTwGeybFbp8YEmB+njbPnth1FibULBSBVwCQni25XlCUDg==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-3.0.1.tgz", + "integrity": "sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==", + "dev": true, "license": "MIT", "dependencies": { "@polka/url": "^1.0.0-next.24", @@ -1396,6 +1529,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -1404,6 +1538,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -1415,6 +1551,7 @@ "version": "5.19.3", "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.19.3.tgz", "integrity": "sha512-rb/bkYG9jq67OCWikMvaPnfOobyGn0JizVDwHpdeBtLiNXPMcoA9GTFC3BhptP7xGNquUU8J5GiS7PlGlfDAFA==", + "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.3.0", @@ -1464,6 +1601,7 @@ "version": "0.2.14", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz", "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" @@ -1485,6 +1623,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -1508,6 +1647,7 @@ "version": "6.3.5", "resolved": "https://registry.npmjs.org/vite/-/vite-6.3.5.tgz", "integrity": "sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==", + "dev": true, "dependencies": { "esbuild": "^0.25.0", "fdir": "^6.4.4", @@ -1581,6 +1721,7 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-1.0.5.tgz", "integrity": "sha512-h4Vflt9gxODPFNGPwp4zAMZRpZR7eslzwH2c5hn5kNZ5rhnKyRJ50U+yGCdc2IRaBs8O4haIgLNGrV5CrpMsCA==", + "dev": true, "license": "MIT", "workspaces": [ "tests/deps/*", @@ -1599,6 +1740,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", + "dev": true, "license": "MIT" } } diff --git a/frontend/package.json b/frontend/package.json index 8e2c507..ac2e99f 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -14,7 +14,8 @@ "lint": "prettier --check ." }, "devDependencies": { - "@sveltejs/kit": "^2.16.0", + "@sveltejs/adapter-node": "^5.3.1", + "@sveltejs/kit": "^2.37.0", "@sveltejs/vite-plugin-svelte": "^5.0.0", "prettier": "^3.4.2", "prettier-plugin-svelte": "^3.3.3", @@ -24,7 +25,6 @@ "vite": "^6.0.0" }, "dependencies": { - "@sveltejs/adapter-node": "^5.2.12", "tinymce": "^7.9.1" } } diff --git a/frontend/svelte.config.js b/frontend/svelte.config.js index c9d7bb4..f12139d 100644 --- a/frontend/svelte.config.js +++ b/frontend/svelte.config.js @@ -1,7 +1,7 @@ import adapter from '@sveltejs/adapter-node'; import { vitePreprocess } from '@sveltejs/vite-plugin-svelte'; -export default { +const config = { preprocess: vitePreprocess(), kit: { adapter: adapter({ @@ -9,3 +9,5 @@ export default { }) } }; + +export default config; From 4108984c61113a292b83ab3ff9588677499d7a85 Mon Sep 17 00:00:00 2001 From: micraj Date: Mon, 1 Sep 2025 10:15:35 +0100 Subject: [PATCH 09/11] Added PostGrid componennt --- frontend/src/lib/components/PostGrid.svelte | 95 +++++++++++++++++++++ frontend/src/routes/+page.svelte | 14 +-- frontend/src/routes/PostEditor/+page.svelte | 5 ++ 3 files changed, 102 insertions(+), 12 deletions(-) create mode 100644 frontend/src/lib/components/PostGrid.svelte create mode 100644 frontend/src/routes/PostEditor/+page.svelte diff --git a/frontend/src/lib/components/PostGrid.svelte b/frontend/src/lib/components/PostGrid.svelte new file mode 100644 index 0000000..52a7f39 --- /dev/null +++ b/frontend/src/lib/components/PostGrid.svelte @@ -0,0 +1,95 @@ + + + +
+ {#each posts as post} +
+ {post.title} +
+

{post.title}

+

{new Date(post.timestamp).toLocaleDateString()}

+

{post.content}

+
+
+ {/each} +
+ + diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte index e4e8ce0..ead71de 100644 --- a/frontend/src/routes/+page.svelte +++ b/frontend/src/routes/+page.svelte @@ -1,6 +1,7 @@ + + From 6cd5910df0ce173440b5ef16d6c709f1859896fb Mon Sep 17 00:00:00 2001 From: micraj Date: Mon, 1 Sep 2025 19:06:56 +0100 Subject: [PATCH 10/11] Post routing --- backend/app/api/data.py | 10 +++- frontend/src/lib/components/PostEditor.svelte | 2 +- frontend/src/lib/components/PostGrid.svelte | 8 ++-- frontend/src/lib/components/PostList.svelte | 2 +- frontend/src/routes/+page.svelte | 48 ------------------- frontend/src/routes/posts/[slug]/+page.svelte | 36 ++++++++++++++ 6 files changed, 51 insertions(+), 55 deletions(-) create mode 100644 frontend/src/routes/posts/[slug]/+page.svelte diff --git a/backend/app/api/data.py b/backend/app/api/data.py index 3084e24..bfb622e 100644 --- a/backend/app/api/data.py +++ b/backend/app/api/data.py @@ -50,7 +50,7 @@ def read_posts(db: SessionDep): return db.exec(select(BlogPost)).all() -@router.get("/posts/{post_id}", response_model=BlogPost) +@router.get("/posts/id/{post_id}", response_model=BlogPost) def read_post(post_id: int, db: SessionDep): post = db.get(BlogPost, post_id) if not post: @@ -58,6 +58,14 @@ def read_post(post_id: int, db: SessionDep): return post +@router.get("/posts/{post_slug}", response_model=BlogPost) +def read_post(post_slug: str, db: SessionDep): + post = db.exec(select(BlogPost).where(BlogPost.slug == post_slug)).first() + if not post: + raise HTTPException(status_code=404, detail="Post not found") + return post + + @router.put("/posts/{post_id}", response_model=BlogPost) def update_post( post_id: int, diff --git a/frontend/src/lib/components/PostEditor.svelte b/frontend/src/lib/components/PostEditor.svelte index 3092ce6..cf32f15 100644 --- a/frontend/src/lib/components/PostEditor.svelte +++ b/frontend/src/lib/components/PostEditor.svelte @@ -11,7 +11,7 @@ console.log('Submitted Title:', title); console.log('Submitted Cover Image:', cover_image_path); console.log('Submitted Content:', content); - fetch('http://127.0.0.1:8000/posts/create_post', { + fetch('/api/posts/create_post', { method: 'POST', headers: { 'Content-type': 'application/json; charset=UTF-8' diff --git a/frontend/src/lib/components/PostGrid.svelte b/frontend/src/lib/components/PostGrid.svelte index 52a7f39..67cd498 100644 --- a/frontend/src/lib/components/PostGrid.svelte +++ b/frontend/src/lib/components/PostGrid.svelte @@ -16,7 +16,7 @@ onMount(async () => { try { - const res = await fetch('http://127.0.0.1:8000/posts/'); + const res = await fetch('/api/posts/'); if (!res.ok) throw new Error(`Failed to fetch: ${res.status}`); posts = await res.json(); } catch (e: any) { @@ -30,14 +30,14 @@
{#each posts as post} -
+ {post.title}

{post.title}

{new Date(post.timestamp).toLocaleDateString()}

-

{post.content}

+
-
+ {/each}
diff --git a/frontend/src/lib/components/PostList.svelte b/frontend/src/lib/components/PostList.svelte index f733d58..4a7bc76 100644 --- a/frontend/src/lib/components/PostList.svelte +++ b/frontend/src/lib/components/PostList.svelte @@ -16,7 +16,7 @@ onMount(async () => { try { - const res = await fetch('http://127.0.0.1:8000/posts/'); + const res = await fetch('/api/posts/'); if (!res.ok) throw new Error(`Failed to fetch: ${res.status}`); posts = await res.json(); diff --git a/frontend/src/routes/+page.svelte b/frontend/src/routes/+page.svelte index ead71de..bf1782a 100644 --- a/frontend/src/routes/+page.svelte +++ b/frontend/src/routes/+page.svelte @@ -6,54 +6,6 @@ import { cubicOut } from 'svelte/easing'; const sections = ['welcome', 'projects', 'about']; - - const blogs1 = [ - { - title: 'Macropad', - date: '08/07/2025', - excerpt: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', - image: 'https://via.placeholder.com/100x80?text=Macro' - }, - { - title: 'Self-hosted website', - date: '08/07/2025', - excerpt: 'Learn how I hosted my personal website using open-source tools.', - image: 'https://via.placeholder.com/100x80?text=Cloud' - } - ]; - - const blogs = [ - { - title: 'Macropad', - date: '08/07/2025', - excerpt: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', - image: 'https://via.placeholder.com/100x80?text=Macro' - }, - { - title: 'Self-hosted website', - date: '08/07/2025', - excerpt: 'Learn how I hosted my personal website using open-source tools.', - image: 'https://via.placeholder.com/100x80?text=Cloud' - }, - { - title: 'Macropad', - date: '08/07/2025', - excerpt: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', - image: 'https://via.placeholder.com/100x80?text=Macro' - }, - { - title: 'Self-hosted website', - date: '08/07/2025', - excerpt: 'Learn how I hosted my personal website using open-source tools.', - image: 'https://via.placeholder.com/100x80?text=Cloud' - }, - { - title: 'Macropad', - date: '08/07/2025', - excerpt: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', - image: 'https://via.placeholder.com/100x80?text=Macro' - } - ]; let show = false; onMount(() => { diff --git a/frontend/src/routes/posts/[slug]/+page.svelte b/frontend/src/routes/posts/[slug]/+page.svelte new file mode 100644 index 0000000..8b4213d --- /dev/null +++ b/frontend/src/routes/posts/[slug]/+page.svelte @@ -0,0 +1,36 @@ + + +{#if post} +

{post.title}

+ {post.title} +

{post.content}

+{:else if error} +

{error}

+{:else} +

Loading...

+{/if} From 573a7ccb860f10ce25f4988053afc693a458f098 Mon Sep 17 00:00:00 2001 From: micraj Date: Tue, 2 Sep 2025 22:19:22 +0100 Subject: [PATCH 11/11] rename post-editor site --- frontend/src/routes/{PostEditor => post-editor}/+page.svelte | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename frontend/src/routes/{PostEditor => post-editor}/+page.svelte (100%) diff --git a/frontend/src/routes/PostEditor/+page.svelte b/frontend/src/routes/post-editor/+page.svelte similarity index 100% rename from frontend/src/routes/PostEditor/+page.svelte rename to frontend/src/routes/post-editor/+page.svelte