From c78de3ec2840bd3cfade681b507dd69795f729e6 Mon Sep 17 00:00:00 2001 From: Matthieu Morin Date: Fri, 5 Apr 2024 14:26:06 +0200 Subject: [PATCH 1/5] removing unused due to restructure --- src/content/dalsi-sluzby/dalsi-sluzby.json | 41 ------ src/content/depilace/depilace.json | 81 ----------- .../kosmeticke-osetreni.json | 57 -------- .../mikrodermabraze/mikrodermabraze.md | 13 -- .../permanentni-make-up.json | 81 ----------- .../pmu-linky/pmu-linky.md | 15 -- .../pmu-oboci/pmu-oboci.md | 15 -- .../permanentni-make-up/pmu-rty/pmu-rty.md | 23 --- src/content/permanentni-make-up/pmu/pmu.md | 23 --- .../components/services/3Testimonials.svelte | 0 .../components/services/ProductLayout.svelte | 12 -- .../components/services/Testimonial.svelte | 33 ----- src/routes/sluzby/[category]/+page.ts | 31 ---- .../sluzby/[category]/[service]/+page.ts | 134 ------------------ 14 files changed, 559 deletions(-) delete mode 100644 src/content/dalsi-sluzby/dalsi-sluzby.json delete mode 100644 src/content/depilace/depilace.json delete mode 100644 src/content/kosmeticke-osetreni/kosmeticke-osetreni.json delete mode 100644 src/content/kosmeticke-osetreni/mikrodermabraze/mikrodermabraze.md delete mode 100644 src/content/permanentni-make-up/permanentni-make-up.json delete mode 100644 src/content/permanentni-make-up/pmu-linky/pmu-linky.md delete mode 100644 src/content/permanentni-make-up/pmu-oboci/pmu-oboci.md delete mode 100644 src/content/permanentni-make-up/pmu-rty/pmu-rty.md delete mode 100644 src/content/permanentni-make-up/pmu/pmu.md delete mode 100644 src/lib/components/services/3Testimonials.svelte delete mode 100644 src/lib/components/services/ProductLayout.svelte delete mode 100644 src/lib/components/services/Testimonial.svelte delete mode 100644 src/routes/sluzby/[category]/+page.ts delete mode 100644 src/routes/sluzby/[category]/[service]/+page.ts diff --git a/src/content/dalsi-sluzby/dalsi-sluzby.json b/src/content/dalsi-sluzby/dalsi-sluzby.json deleted file mode 100644 index dd99b23..0000000 --- a/src/content/dalsi-sluzby/dalsi-sluzby.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "$schema": "../schema-categories.json", - "title": "DALŠÍ VELMI OBLÍBENÉ SLUŽBY", - "description": "A description of a description", - "id": "depilace", - "image": "", - "services": [ - { - "title": "Lifting řas booster (botox)", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "lifting-ras-booster", - "image": "", - "price": 500, - "duration": 60 - }, - { - "title": "Laminace obočí + výživa", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "laminace-oboci-vyziva", - "image": "", - "price": 500, - "duration": 60 - }, - { - "title": "Úprava obočí (tvar + barva)", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "uprava-oboci-tvar-barva", - "image": "", - "price": 250, - "duration": 60 - }, - { - "title": "Úprava obočí + řasy (tvar + barvení)", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "uprava-oboci-rasy-tvar-barveni", - "image": "", - "price": 300, - "duration": 60 - } - ] -} diff --git a/src/content/depilace/depilace.json b/src/content/depilace/depilace.json deleted file mode 100644 index cbb175f..0000000 --- a/src/content/depilace/depilace.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "$schema": "../schema-categories.json", - "title": "Depilace", - "description": "A description of a description", - "id": "depilace", - "image": "", - "services": [ - { - "title": "Depilace Horní ret", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "depilace-horni-ret", - "image": "", - "price": 80, - "duration": 30 - }, - { - "title": "Depilace Brada", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "depilace-brada", - "image": "", - "price": 80, - "duration": 30 - }, - { - "title": "Depilace Obočí", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "depilace-oboci", - "image": "", - "price": 150, - "duration": 30 - }, - { - "title": "Depilace Tváře", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "depilace-tvare", - "image": "", - "price": 150, - "duration": 30 - }, - { - "title": "Depilace Podpaží", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "depilace-podpazi", - "image": "", - "price": 150, - "duration": 30 - }, - { - "title": "Depilace Předloktí", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "depilace-predlokti", - "image": "", - "price": 200, - "duration": 30 - }, - { - "title": "Depilace Celé ruce", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "depilace-cele-ruce", - "image": "", - "price": 350, - "duration": 60 - }, - { - "title": "Depilace Lýtka", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "depilace-lytka", - "image": "", - "price": 350, - "duration": 60 - }, - { - "title": "Depilace Celé nohy", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "depilace-cele-nohy", - "image": "", - "price": 500, - "duration": 60 - } - ] -} diff --git a/src/content/kosmeticke-osetreni/kosmeticke-osetreni.json b/src/content/kosmeticke-osetreni/kosmeticke-osetreni.json deleted file mode 100644 index 2e6b986..0000000 --- a/src/content/kosmeticke-osetreni/kosmeticke-osetreni.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "$schema": "../schema-categories.json", - "title": "Kosmetické ošetření", - "description": "A description of a description", - "id": "depilace", - "image": "", - "services": [ - { - "title": "ZÁKLADNÍ CALM", - "description": "Diagnostika pleti, odlíčení tonizace, enzymatický peeling, kavitační peeling -ultarzvuková špachtle, séra dle typu pleti, masky (tvář,krk,dekolt), závěrečná péče (oční a denní krém)", - "id": "zakladni-calm", - "image": "", - "price": 500, - "duration": 60 - }, - { - "title": "ZÁKLADNÍ + CALM PLUS", - "description": "Diagnostika pleti, odlíčení tonizace, úprava obočí (vosk+pinzeta), barvení řas a obočí, depilace horní ret/brada, enzymatický peeling, kavitační peeling -ultarzvuková špachtle, séra dle typu pleti, masky (tvář,krk,dekolt), závěrečná péče (oční a denní krém)", - "id": "zakladni-calm-plus", - "image": "", - "price": 600, - "duration": 60 - }, - { - "title": "RELAXAČNÍ", - "description": "Diagnostika pleti, odlíčení tonizace, úprava obočí (vosk+pinzeta), barvení řas a obočí, depilace horní ret/brada, enzymatický peeling, kavitační peeling -ultarzvuková špachtle, séra, masáž relaxační (tvář,krk dekolt), masky (tvář,krk,dekolt), závěrečná péče (oční a denní krém)", - "id": "relaxacni", - "image": "", - "price": 690, - "duration": 90 - }, - { - "title": "LIFTINGOVÉ - ANTI AGE", - "description": "Diagnostika pleti, odlíčení tonizace, úprava obočí (vosk+pinzeta), barvení řas a obočí, depilace horní ret/brada, enzymatický peeling, kavitační peeling -ultarzvuková špachtle, vacupres ošetření – lifting obličeje krku a dekoltu, séra, masky (tvář,krk,dekolt), alginátová maska, závěrečná péče (oční a denní krém)", - "id": "liftingove-anti-age", - "image": "", - "price": 690, - "duration": 90 - }, - { - "title": "CLEAR + ANTI AKNÉ", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "clear-anti-akne", - "image": "", - "price": 690, - "duration": 90 - }, - { - "title": "Odlíčení + sérum + alginátová maska (PROJASNĚNÍ)", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "odliceni-serum-alginatova-maska", - "image": "", - "price": 300, - "duration": 60 - } - ] -} diff --git a/src/content/kosmeticke-osetreni/mikrodermabraze/mikrodermabraze.md b/src/content/kosmeticke-osetreni/mikrodermabraze/mikrodermabraze.md deleted file mode 100644 index 87f6f2b..0000000 --- a/src/content/kosmeticke-osetreni/mikrodermabraze/mikrodermabraze.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Mikrodermabraze -description: First post. -date: '2023-4-14' -categories: - - sveltekit - - svelte -published: true ---- - -## Popis - -Mikrodermabraze je velmi šetrnou a neinvazivní přístrojovou metodou na vyhlazení a omlazení pleti, která spolehlivě vyhlazuje a redukuje vrásky na obličeji a dekoltu. Dále umí redukovat i drobnější jizvičky a strie. Mikrodermabraze funguje na principu mechanického peelingu. Kdy pomocí speciálních krystalů a současně působení vakua dochází k postupnému odstranění odumřelých buněk a značnému zkvalitnění průchodnosti pokožky pro následnou aplikaci výživových sér. V průběhu mikrodermabraze působí navíc lymfatická drenáž, která příznivě stimuluje produkci kožního kolagenu, čistí se póry a zvyšuje se celkové prokrvení kůže. Účinky mikrodermabraze vedou postupně k novotvorbě kolagenních a elastinových vláken a tedy k žádanému vyhlazení a omlazení pokožky. Výsledky jsou viditelné již po prvním ošetření. diff --git a/src/content/permanentni-make-up/permanentni-make-up.json b/src/content/permanentni-make-up/permanentni-make-up.json deleted file mode 100644 index 2df1c8e..0000000 --- a/src/content/permanentni-make-up/permanentni-make-up.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "$schema": "../schema-categories.json", - "title": "Permanentní make-up", - "description": "A description of a description", - "id": "pmu", - "image": "https://images.unsplash.com/xyz", - "services": [ - { - "title": "Obočí Pudrové, Ombré", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "oboci", - "image": "", - "price": 3000, - "duration": 150 - }, - { - "title": "Horní linky - meziřasové přirozené", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "linky", - "image": "", - "price": 2000, - "duration": 120 - }, - { - "title": "Klasické linky - s ocáskem", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "classic-linky", - "image": "", - "price": 3000, - "duration": 150 - }, - { - "title": "Klasické linky - s ocáskem + spodní linky", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "classic-linky+spodni", - "image": "", - "price": 3500, - "duration": 150 - }, - { - "title": "Rty - kontura", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "rty", - "image": "", - "price": 2500, - "duration": 120 - }, - { - "title": "3D Rty (kontura a stínování), Full Lips (plné rty)", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "3d-rty", - "image": "", - "price": 3500, - "duration": 150 - }, - { - "title": "Aquarelle Lips (přirodní stínování, bez kontury)", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "aquarelle", - "image": "", - "price": 3000, - "duration": 120 - }, - { - "title": "První korekce po aplikaci pmu max. do 3 měsíců", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "korekce", - "image": "", - "price": 1000, - "duration": 90 - }, - { - "title": "Oprava práce obočí jiného salonu", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "oprava-oboci", - "image": "", - "price": "na domluvě", - "duration": "na domluvě" - } - ] -} diff --git a/src/content/permanentni-make-up/pmu-linky/pmu-linky.md b/src/content/permanentni-make-up/pmu-linky/pmu-linky.md deleted file mode 100644 index abc5cfd..0000000 --- a/src/content/permanentni-make-up/pmu-linky/pmu-linky.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Permanentní Make-up očních linek -description: First post. -date: '2023-4-14' -categories: - - sveltekit - - svelte -published: true ---- - -## Popis - -Všechny techniky tetování linek jsou prováděny strojkem a pigmenty na PMU. Aby bylo možné zákrok provést je potřeba nemít umělé řasy. - -Provádím v salonu meziřasové linky a klasické prodloužené linky diff --git a/src/content/permanentni-make-up/pmu-oboci/pmu-oboci.md b/src/content/permanentni-make-up/pmu-oboci/pmu-oboci.md deleted file mode 100644 index c1a1655..0000000 --- a/src/content/permanentni-make-up/pmu-oboci/pmu-oboci.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -title: Permanentní Make-up obočí -description: First post. -date: '2023-4-14' -categories: - - sveltekit - - svelte -published: true ---- - -## Popis - -Obočí je jednou z nejdůležitějších částí tváře, které určují celkový výraz obličeje. Permanentní make-up nabízí možnost přirozeného zvýraznění obočí, upravuji nedokonalosti tvaru, srovnává asymetrii růstu chloupků a jejich hustotu. Kromě odstranění nedokonalostí přináší nespočet výhod v podobě ušetření času při každodenním líčení, nikdy se vám nerozmaže jako klasický make-up a zajišťuje upravenost i během sportování. Trvanlivost permanentního make-upu je závislá na typu kůže, zvolené technice, následné péči po zákroku nebo působení vnějších vlivů jako je sluneční záření.V našem salonu provádíme techniky, které dokonale podtrhnou vaši přirozenou krásu. Patří mezi ně Magic Shading neboli stínované obočí, které po zahojení vypadá jako by bylo lehce podkreslené pudrem. - -Dále pro Vás připravuji techniky Hairstrokes a S-Mix diff --git a/src/content/permanentni-make-up/pmu-rty/pmu-rty.md b/src/content/permanentni-make-up/pmu-rty/pmu-rty.md deleted file mode 100644 index 8056d61..0000000 --- a/src/content/permanentni-make-up/pmu-rty/pmu-rty.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Permanentní Make-up rtů -description: First post. -date: '2023-4-14' -categories: - - sveltekit - - svelte -published: true ---- - -## Popis - -Tetování rtů je v posledních letech jedním z nejžádanějších způsobů zvýraznění retní červeně. Pomocí speciálních pigmentů na permanentní makeup dokáže artista srovnat asymetrie rtů, zakrýt pigmentové skvrny a opticky rty lehce zvětšit. - -Rty jsou vždy tetované strojkem. Široká škála pigmentů na PMU nabízí možnost splnit přání každé klientky. Trvanlivost permanentního make-upu rtů je 2-3 roky. Získáte tak dokonalé rty za každé situace. - -## Aquarell lips - -Jedná se o techniku stínování rtů směrem od okraje dovnitř, tudíž zde nevzniká kontura, která by ubírala na svěžesti vzhledu. Pomocí tetování je vytvořen 3D efekt. - -## Superbright lips - -Technika je jinak známá jako rtěnkový efekt. Jedná se o rovnoměrné probarvení rtů. Pigment je hustě prosycen. Technika je vhodná pro klientky, které chtějí výrazné rty. diff --git a/src/content/permanentni-make-up/pmu/pmu.md b/src/content/permanentni-make-up/pmu/pmu.md deleted file mode 100644 index 9affd2a..0000000 --- a/src/content/permanentni-make-up/pmu/pmu.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Permanentní Make-up + VIZÁŽISTIKA -description: First post. -date: '2023-4-14' -categories: - - sveltekit - - svelte -published: true ---- - -## Popis - -Permanentní make-up slouží jako náhrada dekorativní kosmetiky. Tento způsob zkrášlení ženám ulehčuje život, zkracuje čas strávený před zrcadlem a v neposlední řadě dodává sebevědomí. S upraveným obočím se cítí každá žena krásná za všech okolností. Dokáže korigovat nerovnosti obličeje, opticky omladit tvář nebo zamaskovat depigmentaci rtů. Správně provedená aplikace permanentního make-upu by neměla přinést výsledek na celý život. Omezená životnost je žádoucí zejména proto, že trendy v líčení se postupem let mění a žena by měla mít možnost svou vizáž obměnit. Jelikož je speciální barva na PMU vpravována do kůže podobně jako u tetování, nikdy se vám nestane, že by se například během sportu či koupání makeup rozmazal a stále perfektně drží. - -## Co všechno se dá permanentně nalíčit? - -Metodou permanentního make-upu si můžete nechat zvýraznit obočí, rty nebo oční linky. V našem studiu provádíme velké množství technik s použitím široké škály pigmentů, z kterých si vybere každá klientka. - -## Korekce - -Pro docílení perfektního vzhledu vašeho permanentního make-upu jsou často potřeba dvě návštěvy. V průběhu prvního sezení je do vrchní vrstvy kůže aplikován speciální pigment. Ačkoliv se jedná o velmi šetrnou a neinvazivní metodu, neeliminuje to však reakci vašeho těla v podobě lymfatického a imunitního systému, který začne pracovat a snažit se pigment z pokožky vyloučit. Odhadovaná ztráta pigmentu při tomto procesu činí zhruba 30-50%. Korekce se provádí do 6 týdnů po první aplikaci, kdy je pokožka zcela zahojená a odstín pigmentu se ustálil ve finální podobě. Během korekce se může upravit tvar, doplnit chybějící pigment nebo PMU lehce zvýraznit dle přání klientky. Ideální načasování pro druhou návštěvu je 1-2 měsíce od prvního zákroku. V případě, že klientka dorazí rok po první aplikaci, jedná se již o obnovu. Informace o cenách jednotlivých sezení naleznete v našem ceníku - -Více zde: https://studio-bona-dea.webnode.cz/permanent-make-up/ diff --git a/src/lib/components/services/3Testimonials.svelte b/src/lib/components/services/3Testimonials.svelte deleted file mode 100644 index e69de29..0000000 diff --git a/src/lib/components/services/ProductLayout.svelte b/src/lib/components/services/ProductLayout.svelte deleted file mode 100644 index 65519e4..0000000 --- a/src/lib/components/services/ProductLayout.svelte +++ /dev/null @@ -1,12 +0,0 @@ - - - -
-
- `${product.name}` -
- -
-
diff --git a/src/lib/components/services/Testimonial.svelte b/src/lib/components/services/Testimonial.svelte deleted file mode 100644 index d6ec587..0000000 --- a/src/lib/components/services/Testimonial.svelte +++ /dev/null @@ -1,33 +0,0 @@ -
-
-
-
-
- testimonial -

Edison bulb retro cloud bread echo park, helvetica stumptown taiyaki taxidermy 90's cronut +1 kinfolk. Single-origin coffee ennui shaman taiyaki vape DIY tote bag drinking vinegar cronut adaptogen squid fanny pack vaporware.

- -

HOLDEN CAULFIELD

-

Senior Product Designer

-
-
-
-
- testimonial -

Edison bulb retro cloud bread echo park, helvetica stumptown taiyaki taxidermy 90's cronut +1 kinfolk. Single-origin coffee ennui shaman taiyaki vape DIY tote bag drinking vinegar cronut adaptogen squid fanny pack vaporware.

- -

ALPER KAMU

-

UI Develeoper

-
-
-
-
- testimonial -

Edison bulb retro cloud bread echo park, helvetica stumptown taiyaki taxidermy 90's cronut +1 kinfolk. Single-origin coffee ennui shaman taiyaki vape DIY tote bag drinking vinegar cronut adaptogen squid fanny pack vaporware.

- -

HENRY LETHAM

-

CTO

-
-
-
-
-
\ No newline at end of file diff --git a/src/routes/sluzby/[category]/+page.ts b/src/routes/sluzby/[category]/+page.ts deleted file mode 100644 index 2e65dfc..0000000 --- a/src/routes/sluzby/[category]/+page.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { ExtendedCategory } from '$lib/types'; - -import { promises as fs } from 'fs'; -import path from 'path'; -import { parseMarkdown } from '$lib/markdownParser'; -import type { ExtendedCategory } from '$lib/types'; - -export async function get({ params }) { - const { category, service } = params; - - // Read the JSON file for the service - const jsonPath = path.join('src', 'content', category, service, `${service}.json`); - const jsonContent = await fs.readFile(jsonPath, 'utf-8'); - const serviceData = JSON.parse(jsonContent); - - // Read the markdown file for the service - const markdownPath = path.join('src', 'content', category, service, `${service}.md`); - const markdownContent = await fs.readFile(markdownPath, 'utf-8'); - const { frontmatter, headings } = parseMarkdown(markdownContent); - - // Combine the service data with the frontmatter and headings to create the extended service - const ExtendedCategory: ExtendedCategory = { - ...serviceData, - ...frontmatter, - headings, - }; - - return { - body: ExtendedCategory, - }; -}; diff --git a/src/routes/sluzby/[category]/[service]/+page.ts b/src/routes/sluzby/[category]/[service]/+page.ts deleted file mode 100644 index 711c940..0000000 --- a/src/routes/sluzby/[category]/[service]/+page.ts +++ /dev/null @@ -1,134 +0,0 @@ - -// import type { PageLoad } from './$types'; -// import servicesData from '$lib/services.json'; // Assuming you have a JSON file with all the data - -// export const load: PageLoad = async ({ params }) => { -// const { category, service } = params; -// const serviceItem = servicesData.find((s) => s.category === category)?.items.find((item) => item.id === service); - -// if (!serviceItem) { -// throw new Error('Service not found'); -// } - -// return { -// props: { -// openGraphData: { -// title: serviceItem.title, -// description: serviceItem.description, -// image: serviceItem.image, -// // ...other OpenGraph data... -// }, -// }, -// }; -// }; -// import { promises as fs } from 'fs'; -// import path from 'path'; -// import type { PageServerLoad } from './$types'; -// import { parseMarkdown } from '$lib/markdownParser'; // You'll need to create this -// import servicesData from '$lib/services.json'; -// import type { ExtendedServiceItem, MarkdownFrontmatter } from '$lib/types'; - -// export const load: PageServerLoad = async ({ params }) => { -// const { category, service } = params; - -// // Read the markdown file for the service with grey matter -// const markdownPath = path.join('src', 'content', 'posts', category, service, 'content.md'); -// const markdownContent = await fs.readFile(markdownPath, 'utf-8'); -// const { frontmatter } = parseMarkdown(markdownContent); - -// // Find the service item in the JSON data -// const serviceItem = servicesData.find((s) => s.category === category)?.items.find((item) => item.id === service); - -// if (!serviceItem) { -// throw new Error('Service not found'); -// } - -// // Combine the service item with the frontmatter to create the extended service item -// const extendedServiceItem: ExtendedServiceItem = { -// ...serviceItem, -// ...frontmatter, -// }; - -// return { -// props: { -// openGraphData: extendedServiceItem, -// }, -// }; -// }; - - - -import { promises as fs } from 'fs'; -import path from 'path'; -import * as conf from '$lib/config' -import { readJsonFile, parseMarkdownFile } from '$lib/utils'; -import { parseMarkdown } from '$lib/markdownParser'; -import type { ExtendedService } from '$lib/types'; - -export const load:PageLoad = async ({ params }) => { - const { category, service } = params; - - // Read the JSON file for the service - const categoryJSON = readJsonFile(`${params.category}/${params.category}.json`); - const serviceData = categoryJSON.find(service => service.id === params.service); - - if (!service) { - throw new Error(`Service not found: ${params.service}`); - } - - // Read the markdown file for the service - const markdownData = parseMarkdownFile(`${params.category}/${params.service}/${params.service}.md`); - const markdownPath = path.join('src', 'content', category, service, `${service}.md`); - const markdownContent = await fs.readFile(markdownPath, 'utf-8'); - const frontmatter = parseMarkdown(markdownContent); - // headings here instead of remark plugin custom? - // Combine the service data with the frontmatter and headings to create the extended service - const extendedService: ExtendedService = { - ...serviceData, - ...frontmatter, - - }; - - return { - props: { - extendedService, - og: { - title: extendedService.title, - type: 'article', - image: extendedService.image, - url: `https://yourwebsite.com/services/${params.category}/${params.service}`, - description: extendedService.description, - published_time: extendedService.frontmatter.date, - tags: extendedService.frontmatter.tags - }} - }; -}; - - - -export async function load({ params }) { - const category = readJsonFile(`${params.category}/pmu.json`); - const service = category.services.find(service => service.id === params.service); - - if (!service) { - throw new Error(`Service not found: ${params.service}`); - } - - const markdownData = parseMarkdownFile(`${params.category}/${params.service}/${params.service}.md`); - const post = { ...service, ...markdownData }; - - return { - props: { - post, - og: { - title: post.title, - type: 'article', - image: post.image, - url: `${conf.url}/${params.category}/${params.service}`, - description: post.description, - published_time: post.frontmatter.date, - tags: post.frontmatter.tags - } - } - }; -} From 6ac2261cf143f0cc76cd3edb77b3f9e83ac930ba Mon Sep 17 00:00:00 2001 From: Matthieu Morin Date: Fri, 5 Apr 2024 14:28:25 +0200 Subject: [PATCH 2/5] new Cloudinary image logic - schema, validation, --- package.json | 4 ++- src/content/images.json | 14 +++++++++ src/content/vakuslim/vakuslim.json | 49 ------------------------------ src/lib/utils/imageService.ts | 21 +++++++++++++ src/lib/utils/uploadImages.ts | 49 ++++++++++++++++++++++++++++++ tests/validateImages.js | 32 +++++++++++++++++++ 6 files changed, 119 insertions(+), 50 deletions(-) create mode 100644 src/content/images.json delete mode 100644 src/content/vakuslim/vakuslim.json create mode 100644 src/lib/utils/imageService.ts create mode 100644 src/lib/utils/uploadImages.ts create mode 100644 tests/validateImages.js diff --git a/package.json b/package.json index 3ebce00..0f674dd 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,9 @@ "private": true, "type": "module", "scripts": { - "validate": "node ./tests/ValidateServices.js", + "validate:images": "node ./tests/validateImages.js", + "validate:services": "node ./tests/ValidateServices.js", + "validate": "pnpm run validate:services && validate:images", "dev": "pnpm run validate && vite dev --mode development", "build": "pnpm run validate && vite build", "build-dev": "pnpm run validate && vite build --mode development", diff --git a/src/content/images.json b/src/content/images.json new file mode 100644 index 0000000..c519cf5 --- /dev/null +++ b/src/content/images.json @@ -0,0 +1,14 @@ +{ + "example_image": { + "publicId": "example_image", + "transformations": [ + { "width": 1200, "height": 627, "crop": "fill", "quality": "auto", "format": "auto" } + ] + }, + "another_image": { + "publicId": "another_image", + "transformations": [ + { "width": 800, "height": 600, "crop": "fill", "quality": "auto", "format": "auto" } + ] + } +} diff --git a/src/content/vakuslim/vakuslim.json b/src/content/vakuslim/vakuslim.json deleted file mode 100644 index 0c4d193..0000000 --- a/src/content/vakuslim/vakuslim.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "$schema": "../schema-categories.json", - "title": "Vakuslim 48 - zeštíhlující procedura", - "description": "A description of a description", - "id": "depilace", - "image": "", - "services": [ - { - "title": "Ošetření horních končetin", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "vakuslim-48-zestihlujici-procedura-horni-koncetiny", - "image": "", - "price": 600, - "duration": 120 - }, - { - "title": "1 ošetření spodní části těla (břicho, boky, dolní končetiny)", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "vakuslim-48-zestihlujici-procedura-spodni-cast-tela", - "image": "", - "price": 800, - "duration": 120 - }, - { - "title": "1 ošetření komplet horní-dolní části", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "vakuslim-48-zestihlujici-procedura-komplet-horni-dolni-cast", - "image": "", - "price": 1200, - "duration": 120 - }, - { - "title": "6 ošetření předplatné kompet", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "vakuslim-48-zestihlujici-procedura-6-o-setreni-predplatne-kompet", - "image": "", - "price": 6600, - "duration": 120 - }, - { - "title": "12 ošetření předplatné komplet", - "description": "Diagnostika pleti, odlíčení tonizace", - "id": "vakuslim-48-zestihlujici-procedura-12-o-setreni-predplatne-komplet", - "image": "", - "price": 11000, - "duration": 120 - } - ] -} diff --git a/src/lib/utils/imageService.ts b/src/lib/utils/imageService.ts new file mode 100644 index 0000000..64d8a39 --- /dev/null +++ b/src/lib/utils/imageService.ts @@ -0,0 +1,21 @@ +// imageService.ts +import cloudinary from 'cloudinary'; +import imagesData from '$content/images.json'; + +cloudinary.v2.config({ + cloud_name: import.meta.env.VITE_CLOUDINARY_CLOUD_NAME, +}); + +export const getCloudinaryImageUrl = (publicId: string, options: cloudinary.UploadApiOptions = {}) => { + const imageData = imagesData[publicId]; + if (!imageData) { + throw new Error(`Image with public ID ${publicId} not found in images.json`); + } + + const transformationOptions = { + ...options, + ...imageData.transformations, + }; + + return cloudinary.v2.url(publicId, transformationOptions); +}; diff --git a/src/lib/utils/uploadImages.ts b/src/lib/utils/uploadImages.ts new file mode 100644 index 0000000..53dd7fe --- /dev/null +++ b/src/lib/utils/uploadImages.ts @@ -0,0 +1,49 @@ +// uploadImages.ts +import fs from 'fs'; +import path from 'path'; +import cloudinary from 'cloudinary'; +import matter from 'gray-matter'; + +cloudinary.v2.config({ + cloud_name: import.meta.env.VITE_CLOUDINARY_CLOUD_NAME, + api_key: import.meta.env.VITE_CLOUDINARY_API_KEY, + api_secret: import.meta.env.VITE_CLOUDINARY_API_SECRET, +}); + +const contentDir = 'src/content'; +const imagesJsonPath = 'src/content/images.json'; + +async function uploadImages() { + const imagesData = {}; + + // Read all Markdown files in the content directory + const mdFiles = fs.readdirSync(contentDir).filter((file) => file.endsWith('.md')); + + for (const mdFile of mdFiles) { + const mdFilePath = path.join(contentDir, mdFile); + const mdContent = fs.readFileSync(mdFilePath, 'utf-8'); + const { data, content } = matter(mdContent); + + // Extract relative image paths from the Markdown content + const imagePaths = content.match(/\!\[.*?\]\((.*?)\)/g) || []; + + for (const imagePath of imagePaths) { + const relativeImagePath = imagePath.match(/\((.*?)\)/)[1]; + const imageFilePath = path.join(contentDir, relativeImagePath); + + // Upload the image to Cloudinary + const uploadResult = await cloudinary.v2.uploader.upload(imageFilePath); + + // Add the image metadata to the imagesData object + imagesData[uploadResult.public_id] = { + publicId: uploadResult.public_id, + // Add any desired transformation options here + }; + } + } + + // Write the imagesData to the images.json file + fs.writeFileSync(imagesJsonPath, JSON.stringify(imagesData, null, 2)); +} + +uploadImages(); diff --git a/tests/validateImages.js b/tests/validateImages.js new file mode 100644 index 0000000..43d699b --- /dev/null +++ b/tests/validateImages.js @@ -0,0 +1,32 @@ +import cloudinary from 'cloudinary'; +import imagesData from '$content/images.json'; +import { env } from '$env/dynamic/private'; + + +cloudinary.v2.config({ + cloud_name: env.CLOUDINARY_CLOUD_NAME, + api_key: env.CLOUDINARY_API_KEY, + api_secret: env.CLOUDINARY_API_SECRET, +}); + +async function validateImages() { + const invalidImages = []; + + for (const publicId in imagesData) { + try { + // Check if the image exists on Cloudinary + await cloudinary.v2.api.resource(publicId); + } catch (error) { + invalidImages.push(publicId); + } + } + + if (invalidImages.length > 0) { + console.error(`The following images are missing or invalid on Cloudinary: ${invalidImages.join(', ')}`); + process.exit(1); + } else { + console.log('All images are valid on Cloudinary.'); + } +} + +validateImages(); From 22e59b089f2c815cffcef6243e2e172ad2fd8c48 Mon Sep 17 00:00:00 2001 From: Matthieu Morin Date: Fri, 5 Apr 2024 14:29:56 +0200 Subject: [PATCH 3/5] CONTENT - structure, schema, config updates + file transfers --- src/content/schema-categories.json | 7 +- src/content/schema-services.json | 5 +- .../services/dalsi-sluzby/dalsi-sluzby.json | 41 ++++++++++ src/content/services/depilace/depilace.json | 81 +++++++++++++++++++ .../kosmeticke-osetreni.json | 57 +++++++++++++ .../mikrodermabraze/mikrodermabraze.md | 13 +++ .../permanentni-make-up.json | 81 +++++++++++++++++++ .../pmu-linky/pmu-linky.md | 15 ++++ .../pmu-oboci/pmu-oboci.md | 15 ++++ .../permanentni-make-up/pmu-rty/pmu-rty.md | 23 ++++++ .../services/permanentni-make-up/pmu/pmu.md | 23 ++++++ src/content/services/vakuslim/vakuslim.json | 49 +++++++++++ svelte.config.js | 1 + tsconfig.json | 14 +++- 14 files changed, 414 insertions(+), 11 deletions(-) create mode 100644 src/content/services/dalsi-sluzby/dalsi-sluzby.json create mode 100644 src/content/services/depilace/depilace.json create mode 100644 src/content/services/kosmeticke-osetreni/kosmeticke-osetreni.json create mode 100644 src/content/services/kosmeticke-osetreni/mikrodermabraze/mikrodermabraze.md create mode 100644 src/content/services/permanentni-make-up/permanentni-make-up.json create mode 100644 src/content/services/permanentni-make-up/pmu-linky/pmu-linky.md create mode 100644 src/content/services/permanentni-make-up/pmu-oboci/pmu-oboci.md create mode 100644 src/content/services/permanentni-make-up/pmu-rty/pmu-rty.md create mode 100644 src/content/services/permanentni-make-up/pmu/pmu.md create mode 100644 src/content/services/vakuslim/vakuslim.json diff --git a/src/content/schema-categories.json b/src/content/schema-categories.json index 49df091..2c4b63e 100644 --- a/src/content/schema-categories.json +++ b/src/content/schema-categories.json @@ -2,7 +2,7 @@ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Service category schema", "type": "object", - "required": ["title", "description", "id", "image", "services"], + "required": ["title", "description", "id", "services"], "additionalProperties": false, "properties": { "title": { @@ -26,8 +26,7 @@ "image": { "title": "Image", "description": "A featured image in previews and on top of page", - "type": "string", - "format": "uri" + "type": "string" }, "tags": { "title": "tags", @@ -41,7 +40,7 @@ "title": "services under the category", "type": "array", "items": { - "$ref": "./schema-services.json" + "$ref": "src/content/schema-services.json" } } } diff --git a/src/content/schema-services.json b/src/content/schema-services.json index 4d4b2d0..fba7982 100644 --- a/src/content/schema-services.json +++ b/src/content/schema-services.json @@ -2,7 +2,7 @@ "$schema": "http://json-schema.org/draft-07/schema#", "title": "Service schema", "type": "object", - "required": ["title", "description", "id", "image", "duration", "price"], + "required": ["title", "description", "id", "duration", "price"], "additionalProperties": false, "properties": { "title": { @@ -24,8 +24,7 @@ "image": { "title": "Image", "description": "A featured image in previews and on top of page", - "type": "string", - "format": "uri" + "type": "string" }, "price": { "title": "Price", diff --git a/src/content/services/dalsi-sluzby/dalsi-sluzby.json b/src/content/services/dalsi-sluzby/dalsi-sluzby.json new file mode 100644 index 0000000..db447dc --- /dev/null +++ b/src/content/services/dalsi-sluzby/dalsi-sluzby.json @@ -0,0 +1,41 @@ +{ + "$schema": "../../schema-categories.json", + "title": "DALŠÍ VELMI OBLÍBENÉ SLUŽBY", + "description": "A description of a description", + "id": "depilace", + "image": "", + "services": [ + { + "title": "Lifting řas booster (botox)", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "lifting-ras-booster", + "image": "", + "price": 500, + "duration": 60 + }, + { + "title": "Laminace obočí + výživa", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "laminace-oboci-vyziva", + "image": "", + "price": 500, + "duration": 60 + }, + { + "title": "Úprava obočí (tvar + barva)", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "uprava-oboci-tvar-barva", + "image": "", + "price": 250, + "duration": 60 + }, + { + "title": "Úprava obočí + řasy (tvar + barvení)", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "uprava-oboci-rasy-tvar-barveni", + "image": "", + "price": 300, + "duration": 60 + } + ] +} diff --git a/src/content/services/depilace/depilace.json b/src/content/services/depilace/depilace.json new file mode 100644 index 0000000..dad810d --- /dev/null +++ b/src/content/services/depilace/depilace.json @@ -0,0 +1,81 @@ +{ + "$schema": "../../schema-categories.json", + "title": "Depilace", + "description": "A description of a description", + "id": "depilace", + "image": "", + "services": [ + { + "title": "Depilace Horní ret", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "depilace-horni-ret", + "image": "", + "price": 80, + "duration": 30 + }, + { + "title": "Depilace Brada", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "depilace-brada", + "image": "", + "price": 80, + "duration": 30 + }, + { + "title": "Depilace Obočí", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "depilace-oboci", + "image": "", + "price": 150, + "duration": 30 + }, + { + "title": "Depilace Tváře", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "depilace-tvare", + "image": "", + "price": 150, + "duration": 30 + }, + { + "title": "Depilace Podpaží", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "depilace-podpazi", + "image": "", + "price": 150, + "duration": 30 + }, + { + "title": "Depilace Předloktí", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "depilace-predlokti", + "image": "", + "price": 200, + "duration": 30 + }, + { + "title": "Depilace Celé ruce", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "depilace-cele-ruce", + "image": "", + "price": 350, + "duration": 60 + }, + { + "title": "Depilace Lýtka", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "depilace-lytka", + "image": "", + "price": 350, + "duration": 60 + }, + { + "title": "Depilace Celé nohy", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "depilace-cele-nohy", + "image": "", + "price": 500, + "duration": 60 + } + ] +} diff --git a/src/content/services/kosmeticke-osetreni/kosmeticke-osetreni.json b/src/content/services/kosmeticke-osetreni/kosmeticke-osetreni.json new file mode 100644 index 0000000..f71bd4a --- /dev/null +++ b/src/content/services/kosmeticke-osetreni/kosmeticke-osetreni.json @@ -0,0 +1,57 @@ +{ + "$schema": "../../schema-categories.json", + "title": "Kosmetické ošetření", + "description": "A description of a description", + "id": "depilace", + "image": "", + "services": [ + { + "title": "ZÁKLADNÍ CALM", + "description": "Diagnostika pleti, odlíčení tonizace, enzymatický peeling, kavitační peeling -ultarzvuková špachtle, séra dle typu pleti, masky (tvář,krk,dekolt), závěrečná péče (oční a denní krém)", + "id": "zakladni-calm", + "image": "", + "price": 500, + "duration": 60 + }, + { + "title": "ZÁKLADNÍ + CALM PLUS", + "description": "Diagnostika pleti, odlíčení tonizace, úprava obočí (vosk+pinzeta), barvení řas a obočí, depilace horní ret/brada, enzymatický peeling, kavitační peeling -ultarzvuková špachtle, séra dle typu pleti, masky (tvář,krk,dekolt), závěrečná péče (oční a denní krém)", + "id": "zakladni-calm-plus", + "image": "", + "price": 600, + "duration": 60 + }, + { + "title": "RELAXAČNÍ", + "description": "Diagnostika pleti, odlíčení tonizace, úprava obočí (vosk+pinzeta), barvení řas a obočí, depilace horní ret/brada, enzymatický peeling, kavitační peeling -ultarzvuková špachtle, séra, masáž relaxační (tvář,krk dekolt), masky (tvář,krk,dekolt), závěrečná péče (oční a denní krém)", + "id": "relaxacni", + "image": "", + "price": 690, + "duration": 90 + }, + { + "title": "LIFTINGOVÉ - ANTI AGE", + "description": "Diagnostika pleti, odlíčení tonizace, úprava obočí (vosk+pinzeta), barvení řas a obočí, depilace horní ret/brada, enzymatický peeling, kavitační peeling -ultarzvuková špachtle, vacupres ošetření – lifting obličeje krku a dekoltu, séra, masky (tvář,krk,dekolt), alginátová maska, závěrečná péče (oční a denní krém)", + "id": "liftingove-anti-age", + "image": "", + "price": 690, + "duration": 90 + }, + { + "title": "CLEAR + ANTI AKNÉ", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "clear-anti-akne", + "image": "", + "price": 690, + "duration": 90 + }, + { + "title": "Odlíčení + sérum + alginátová maska (PROJASNĚNÍ)", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "odliceni-serum-alginatova-maska", + "image": "", + "price": 300, + "duration": 60 + } + ] +} diff --git a/src/content/services/kosmeticke-osetreni/mikrodermabraze/mikrodermabraze.md b/src/content/services/kosmeticke-osetreni/mikrodermabraze/mikrodermabraze.md new file mode 100644 index 0000000..87f6f2b --- /dev/null +++ b/src/content/services/kosmeticke-osetreni/mikrodermabraze/mikrodermabraze.md @@ -0,0 +1,13 @@ +--- +title: Mikrodermabraze +description: First post. +date: '2023-4-14' +categories: + - sveltekit + - svelte +published: true +--- + +## Popis + +Mikrodermabraze je velmi šetrnou a neinvazivní přístrojovou metodou na vyhlazení a omlazení pleti, která spolehlivě vyhlazuje a redukuje vrásky na obličeji a dekoltu. Dále umí redukovat i drobnější jizvičky a strie. Mikrodermabraze funguje na principu mechanického peelingu. Kdy pomocí speciálních krystalů a současně působení vakua dochází k postupnému odstranění odumřelých buněk a značnému zkvalitnění průchodnosti pokožky pro následnou aplikaci výživových sér. V průběhu mikrodermabraze působí navíc lymfatická drenáž, která příznivě stimuluje produkci kožního kolagenu, čistí se póry a zvyšuje se celkové prokrvení kůže. Účinky mikrodermabraze vedou postupně k novotvorbě kolagenních a elastinových vláken a tedy k žádanému vyhlazení a omlazení pokožky. Výsledky jsou viditelné již po prvním ošetření. diff --git a/src/content/services/permanentni-make-up/permanentni-make-up.json b/src/content/services/permanentni-make-up/permanentni-make-up.json new file mode 100644 index 0000000..61dad1e --- /dev/null +++ b/src/content/services/permanentni-make-up/permanentni-make-up.json @@ -0,0 +1,81 @@ +{ + "$schema": "../../schema-categories.json", + "title": "Permanentní make-up", + "description": "A description of a description", + "id": "pmu", + "image": "https://images.unsplash.com/xyz", + "services": [ + { + "title": "Obočí Pudrové, Ombré", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "oboci", + "image": "", + "price": 3000, + "duration": 150 + }, + { + "title": "Horní linky - meziřasové přirozené", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "linky", + "image": "", + "price": 2000, + "duration": 120 + }, + { + "title": "Klasické linky - s ocáskem", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "classic-linky", + "image": "", + "price": 3000, + "duration": 150 + }, + { + "title": "Klasické linky - s ocáskem + spodní linky", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "classic-linky+spodni", + "image": "", + "price": 3500, + "duration": 150 + }, + { + "title": "Rty - kontura", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "rty", + "image": "", + "price": 2500, + "duration": 120 + }, + { + "title": "3D Rty (kontura a stínování), Full Lips (plné rty)", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "3d-rty", + "image": "", + "price": 3500, + "duration": 150 + }, + { + "title": "Aquarelle Lips (přirodní stínování, bez kontury)", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "aquarelle", + "image": "", + "price": 3000, + "duration": 120 + }, + { + "title": "První korekce po aplikaci pmu max. do 3 měsíců", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "korekce", + "image": "", + "price": 1000, + "duration": 90 + }, + { + "title": "Oprava práce obočí jiného salonu", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "oprava-oboci", + "image": "", + "price": "na domluvě", + "duration": "na domluvě" + } + ] +} diff --git a/src/content/services/permanentni-make-up/pmu-linky/pmu-linky.md b/src/content/services/permanentni-make-up/pmu-linky/pmu-linky.md new file mode 100644 index 0000000..abc5cfd --- /dev/null +++ b/src/content/services/permanentni-make-up/pmu-linky/pmu-linky.md @@ -0,0 +1,15 @@ +--- +title: Permanentní Make-up očních linek +description: First post. +date: '2023-4-14' +categories: + - sveltekit + - svelte +published: true +--- + +## Popis + +Všechny techniky tetování linek jsou prováděny strojkem a pigmenty na PMU. Aby bylo možné zákrok provést je potřeba nemít umělé řasy. + +Provádím v salonu meziřasové linky a klasické prodloužené linky diff --git a/src/content/services/permanentni-make-up/pmu-oboci/pmu-oboci.md b/src/content/services/permanentni-make-up/pmu-oboci/pmu-oboci.md new file mode 100644 index 0000000..c1a1655 --- /dev/null +++ b/src/content/services/permanentni-make-up/pmu-oboci/pmu-oboci.md @@ -0,0 +1,15 @@ +--- +title: Permanentní Make-up obočí +description: First post. +date: '2023-4-14' +categories: + - sveltekit + - svelte +published: true +--- + +## Popis + +Obočí je jednou z nejdůležitějších částí tváře, které určují celkový výraz obličeje. Permanentní make-up nabízí možnost přirozeného zvýraznění obočí, upravuji nedokonalosti tvaru, srovnává asymetrii růstu chloupků a jejich hustotu. Kromě odstranění nedokonalostí přináší nespočet výhod v podobě ušetření času při každodenním líčení, nikdy se vám nerozmaže jako klasický make-up a zajišťuje upravenost i během sportování. Trvanlivost permanentního make-upu je závislá na typu kůže, zvolené technice, následné péči po zákroku nebo působení vnějších vlivů jako je sluneční záření.V našem salonu provádíme techniky, které dokonale podtrhnou vaši přirozenou krásu. Patří mezi ně Magic Shading neboli stínované obočí, které po zahojení vypadá jako by bylo lehce podkreslené pudrem. + +Dále pro Vás připravuji techniky Hairstrokes a S-Mix diff --git a/src/content/services/permanentni-make-up/pmu-rty/pmu-rty.md b/src/content/services/permanentni-make-up/pmu-rty/pmu-rty.md new file mode 100644 index 0000000..8056d61 --- /dev/null +++ b/src/content/services/permanentni-make-up/pmu-rty/pmu-rty.md @@ -0,0 +1,23 @@ +--- +title: Permanentní Make-up rtů +description: First post. +date: '2023-4-14' +categories: + - sveltekit + - svelte +published: true +--- + +## Popis + +Tetování rtů je v posledních letech jedním z nejžádanějších způsobů zvýraznění retní červeně. Pomocí speciálních pigmentů na permanentní makeup dokáže artista srovnat asymetrie rtů, zakrýt pigmentové skvrny a opticky rty lehce zvětšit. + +Rty jsou vždy tetované strojkem. Široká škála pigmentů na PMU nabízí možnost splnit přání každé klientky. Trvanlivost permanentního make-upu rtů je 2-3 roky. Získáte tak dokonalé rty za každé situace. + +## Aquarell lips + +Jedná se o techniku stínování rtů směrem od okraje dovnitř, tudíž zde nevzniká kontura, která by ubírala na svěžesti vzhledu. Pomocí tetování je vytvořen 3D efekt. + +## Superbright lips + +Technika je jinak známá jako rtěnkový efekt. Jedná se o rovnoměrné probarvení rtů. Pigment je hustě prosycen. Technika je vhodná pro klientky, které chtějí výrazné rty. diff --git a/src/content/services/permanentni-make-up/pmu/pmu.md b/src/content/services/permanentni-make-up/pmu/pmu.md new file mode 100644 index 0000000..9affd2a --- /dev/null +++ b/src/content/services/permanentni-make-up/pmu/pmu.md @@ -0,0 +1,23 @@ +--- +title: Permanentní Make-up + VIZÁŽISTIKA +description: First post. +date: '2023-4-14' +categories: + - sveltekit + - svelte +published: true +--- + +## Popis + +Permanentní make-up slouží jako náhrada dekorativní kosmetiky. Tento způsob zkrášlení ženám ulehčuje život, zkracuje čas strávený před zrcadlem a v neposlední řadě dodává sebevědomí. S upraveným obočím se cítí každá žena krásná za všech okolností. Dokáže korigovat nerovnosti obličeje, opticky omladit tvář nebo zamaskovat depigmentaci rtů. Správně provedená aplikace permanentního make-upu by neměla přinést výsledek na celý život. Omezená životnost je žádoucí zejména proto, že trendy v líčení se postupem let mění a žena by měla mít možnost svou vizáž obměnit. Jelikož je speciální barva na PMU vpravována do kůže podobně jako u tetování, nikdy se vám nestane, že by se například během sportu či koupání makeup rozmazal a stále perfektně drží. + +## Co všechno se dá permanentně nalíčit? + +Metodou permanentního make-upu si můžete nechat zvýraznit obočí, rty nebo oční linky. V našem studiu provádíme velké množství technik s použitím široké škály pigmentů, z kterých si vybere každá klientka. + +## Korekce + +Pro docílení perfektního vzhledu vašeho permanentního make-upu jsou často potřeba dvě návštěvy. V průběhu prvního sezení je do vrchní vrstvy kůže aplikován speciální pigment. Ačkoliv se jedná o velmi šetrnou a neinvazivní metodu, neeliminuje to však reakci vašeho těla v podobě lymfatického a imunitního systému, který začne pracovat a snažit se pigment z pokožky vyloučit. Odhadovaná ztráta pigmentu při tomto procesu činí zhruba 30-50%. Korekce se provádí do 6 týdnů po první aplikaci, kdy je pokožka zcela zahojená a odstín pigmentu se ustálil ve finální podobě. Během korekce se může upravit tvar, doplnit chybějící pigment nebo PMU lehce zvýraznit dle přání klientky. Ideální načasování pro druhou návštěvu je 1-2 měsíce od prvního zákroku. V případě, že klientka dorazí rok po první aplikaci, jedná se již o obnovu. Informace o cenách jednotlivých sezení naleznete v našem ceníku + +Více zde: https://studio-bona-dea.webnode.cz/permanent-make-up/ diff --git a/src/content/services/vakuslim/vakuslim.json b/src/content/services/vakuslim/vakuslim.json new file mode 100644 index 0000000..500fac2 --- /dev/null +++ b/src/content/services/vakuslim/vakuslim.json @@ -0,0 +1,49 @@ +{ + "$schema": "../../schema-categories.json", + "title": "Vakuslim 48 - zeštíhlující procedura", + "description": "A description of a description", + "id": "depilace", + "image": "", + "services": [ + { + "title": "Ošetření horních končetin", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "vakuslim-48-zestihlujici-procedura-horni-koncetiny", + "image": "", + "price": 600, + "duration": 120 + }, + { + "title": "1 ošetření spodní části těla (břicho, boky, dolní končetiny)", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "vakuslim-48-zestihlujici-procedura-spodni-cast-tela", + "image": "", + "price": 800, + "duration": 120 + }, + { + "title": "1 ošetření komplet horní-dolní části", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "vakuslim-48-zestihlujici-procedura-komplet-horni-dolni-cast", + "image": "", + "price": 1200, + "duration": 120 + }, + { + "title": "6 ošetření předplatné kompet", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "vakuslim-48-zestihlujici-procedura-6-o-setreni-predplatne-kompet", + "image": "", + "price": 6600, + "duration": 120 + }, + { + "title": "12 ošetření předplatné komplet", + "description": "Diagnostika pleti, odlíčení tonizace", + "id": "vakuslim-48-zestihlujici-procedura-12-o-setreni-predplatne-komplet", + "image": "", + "price": 11000, + "duration": 120 + } + ] +} diff --git a/svelte.config.js b/svelte.config.js index cbd3640..b588d9c 100644 --- a/svelte.config.js +++ b/svelte.config.js @@ -28,6 +28,7 @@ const config = { $root: './', $src: './src', $routes: './src/routes', + $content: './src/content' }, env: { publicPrefix: "PUBLIC_", diff --git a/tsconfig.json b/tsconfig.json index e669678..51cdcd5 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,12 +3,17 @@ "compilerOptions": { "allowJs": true, "checkJs": true, - "esModuleInterop": true, "forceConsistentCasingInFileNames": true, - "resolveJsonModule": true, "skipLibCheck": true, "sourceMap": true, "strict": true, + // For JSON + "esModuleInterop": true, + "resolveJsonModule": true, + // necessary https://kit.svelte.dev/docs/types#generated-types + "verbatimModuleSyntax": true, + "isolatedModules": true, + // ==== "preserveValueImports": true, // custom compiler options "noEmit": true, "target": "ES2018", @@ -26,8 +31,9 @@ "./src/**/*.ts", ".svelte-kit/ambient.d.ts", ".svelte-kit/types/**/$types.d.ts", - "./csp-directives.ts" - ], + "./csp-directives.ts", + "tests/**/*", + "src/content/**/*"], "exclude": ["node_modules/*"] // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias // From c04d27265b01a1511635d1399483f52c0de3da8e Mon Sep 17 00:00:00 2001 From: Matthieu Morin Date: Fri, 5 Apr 2024 14:32:07 +0200 Subject: [PATCH 4/5] Metadata parsing and types update --- src/lib/types/ogMetadata.d.ts | 2 +- src/lib/types/service.d.ts | 2 +- src/lib/utils/formatParse.ts | 27 --------------------------- src/lib/utils/getMetadata.ts | 21 +++++++++++++++++++++ 4 files changed, 23 insertions(+), 29 deletions(-) create mode 100644 src/lib/utils/getMetadata.ts diff --git a/src/lib/types/ogMetadata.d.ts b/src/lib/types/ogMetadata.d.ts index fdbc228..c6e810f 100644 --- a/src/lib/types/ogMetadata.d.ts +++ b/src/lib/types/ogMetadata.d.ts @@ -10,5 +10,5 @@ export interface OpenGraphMetadata { imageType: OGImageType; imageWidth: OGImageWidth; imageHeight: OGImageHeight; - url: string; + canonical: string; }; diff --git a/src/lib/types/service.d.ts b/src/lib/types/service.d.ts index bd656e2..5a3eeb3 100644 --- a/src/lib/types/service.d.ts +++ b/src/lib/types/service.d.ts @@ -2,7 +2,7 @@ import type { MarkdownMetadata } from '$lib/types/mdMetadata'; import type { OpenGraphMetadata } from '$lib/types/ogMetadata'; // Base service item type -export interface Service { +export type Service = { title: string; description: string; id: string; diff --git a/src/lib/utils/formatParse.ts b/src/lib/utils/formatParse.ts index bcb752c..cc60cdc 100644 --- a/src/lib/utils/formatParse.ts +++ b/src/lib/utils/formatParse.ts @@ -40,30 +40,3 @@ export const readJsonFile = async (filePath: string) => { const jsonData = await fs.readFileSync(path.join(process.cwd(), 'src', 'content', filePath), 'utf-8'); return JSON.parse(jsonData); } - -// ======= MARKDOWN PARSER ======== - -// https://github.com/jonschlinkert/gray-matter -import * as matter from 'gray-matter'; -// https://github.com/markedjs/marked -// import marked from 'marked'; - -export const parseMarkdownFile = async (filePath: string) => { - const markdownData = await fs.readFileSync(path.join(process.cwd(), 'src', 'content', filePath), 'utf-8'); - const { data, content } = matter(markdownData); - return { frontmatter: data, content }; -} -// export function parseMarkdown(filePath: string): { frontmatter: T; content: string } { -// const data = matter.read(filePath).data; -// return { -// frontmatter: data as T, -// }; -// } -// export function parseMarkdownFile(filePath: string) { -// const markdownData = fs.readFileSync(path.join(process.cwd(), filePath), 'utf-8'); -// const { data, content } = grayMatter(markdownData); - -// return { frontmatter: data, content }; -// } - -console.log(parseMarkdownFile('../../content/permanentni-make-up/pmu/pmu.md')) diff --git a/src/lib/utils/getMetadata.ts b/src/lib/utils/getMetadata.ts new file mode 100644 index 0000000..d8dcb9e --- /dev/null +++ b/src/lib/utils/getMetadata.ts @@ -0,0 +1,21 @@ +// ======= MARKDOWN PARSER ======== + +// https://github.com/jonschlinkert/gray-matter +import matter from 'gray-matter'; +// https://github.com/markedjs/marked;- unused +// import marked from 'marked'; +import fs from 'fs'; +import path from 'path' + +export const parseMarkdownFile = async (filePath: string) => { + const markdownData = fs.readFileSync(path.join(process.cwd(), 'src', 'content', filePath), 'utf-8'); + const { data, content } = matter(markdownData); + return { frontmatter: data, content }; +} +// export function parseMarkdown(filePath: string): { frontmatter: T; content: string } { +// const data = matter.read(filePath).data; +// return { +// frontmatter: data as T, +// }; +// } +console.log(parseMarkdownFile('../../content/permanentni-make-up/pmu/pmu.md')) From 67a2d0be1e3c8d19be54e947cf19faed1c0870fa Mon Sep 17 00:00:00 2001 From: Matthieu Morin Date: Fri, 5 Apr 2024 14:37:03 +0200 Subject: [PATCH 5/5] Services layouts update + filling empty routing pages --- .../components/services/ServiceCard.svelte | 21 +++--- .../components/services/ServicesLayout.svelte | 33 +++------ src/routes/o-mne/+page.svelte | 3 + src/routes/sluzby/+page.svelte | 72 +++---------------- src/routes/sluzby/[categoryId]/+page.svelte | 0 .../[categoryId]/[serviceId]/+page.svelte | 12 ++++ 6 files changed, 44 insertions(+), 97 deletions(-) create mode 100644 src/routes/sluzby/[categoryId]/+page.svelte create mode 100644 src/routes/sluzby/[categoryId]/[serviceId]/+page.svelte diff --git a/src/lib/components/services/ServiceCard.svelte b/src/lib/components/services/ServiceCard.svelte index a25bde3..fa2c4f6 100644 --- a/src/lib/components/services/ServiceCard.svelte +++ b/src/lib/components/services/ServiceCard.svelte @@ -3,26 +3,27 @@ import type { Service } from '$lib/types/service'; import convertMinutesToHours from '$lib/utils/minToH'; - export let item: Service['items'][number]; + export let service: Service[][number]; - +
- Post + // getImageLink maps all image links based on the services id, needs cloudinary implementation to work. +
- +
-

{item.name}

+

{service.title}

...Zjistěte více @@ -32,11 +33,11 @@