feat: Add first version of website

Signed-off-by: Avior <github@avior.me>
This commit is contained in:
Florian Bouillon 2023-10-01 02:25:21 +02:00
parent ed8dcebcb7
commit fe437165a1
49 changed files with 2220 additions and 457 deletions

View File

@ -36,9 +36,9 @@ export default defineConfig({
}, },
// Customizable depending on goal // Customizable depending on goal
output: 'server', output: 'static',
adapter: node({ // adapter: node({
mode: "standalone" // mode: "standalone"
}), // }),
site: 'https://example.com', site: 'https://avior.me',
}) })

2037
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -12,7 +12,6 @@
"test": "npm run test:unit && npm run test:e2e", "test": "npm run test:unit && npm run test:e2e",
"test:unit": "vitest --coverage --run", "test:unit": "vitest --coverage --run",
"test:e2e": "playwright test", "test:e2e": "playwright test",
"install:test": "playwright install --with-deps" "install:test": "playwright install --with-deps"
}, },
"dependencies": { "dependencies": {
@ -21,14 +20,20 @@
"@dzeio/logger": "^3", "@dzeio/logger": "^3",
"@dzeio/object-util": "^1", "@dzeio/object-util": "^1",
"@dzeio/url-manager": "^1", "@dzeio/url-manager": "^1",
"@fontsource-variable/lexend": "^5.0.12",
"@tailwindcss/typography": "^0.5.10",
"astro": "^3", "astro": "^3",
"easy-sitemap": "^1.2.0",
"lucide-astro": "^0", "lucide-astro": "^0",
"simple-icons-astro": "^9.16.0",
"tailwindcss": "^3" "tailwindcss": "^3"
}, },
"devDependencies": { "devDependencies": {
"@astrojs/check": "^0.2.0",
"@playwright/test": "^1", "@playwright/test": "^1",
"@types/node": "^20", "@types/node": "^20",
"@vitest/coverage-v8": "^0", "@vitest/coverage-v8": "^0",
"typescript": "^5.2.2",
"vitest": "^0" "vitest": "^0"
} }
} }

BIN
public/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

@ -1,9 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 128 128"> <svg width="65" height="70" viewBox="0 0 65 70" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M50.4 78.5a75.1 75.1 0 0 0-28.5 6.9l24.2-65.7c.7-2 1.9-3.2 3.4-3.2h29c1.5 0 2.7 1.2 3.4 3.2l24.2 65.7s-11.6-7-28.5-7L67 45.5c-.4-1.7-1.6-2.8-2.9-2.8-1.3 0-2.5 1.1-2.9 2.7L50.4 78.5Zm-1.1 28.2Zm-4.2-20.2c-2 6.6-.6 15.8 4.2 20.2a17.5 17.5 0 0 1 .2-.7 5.5 5.5 0 0 1 5.7-4.5c2.8.1 4.3 1.5 4.7 4.7.2 1.1.2 2.3.2 3.5v.4c0 2.7.7 5.2 2.2 7.4a13 13 0 0 0 5.7 4.9v-.3l-.2-.3c-1.8-5.6-.5-9.5 4.4-12.8l1.5-1a73 73 0 0 0 3.2-2.2 16 16 0 0 0 6.8-11.4c.3-2 .1-4-.6-6l-.8.6-1.6 1a37 37 0 0 1-22.4 2.7c-5-.7-9.7-2-13.2-6.2Z" /> <path d="M28.9613 51.1857L12.9115 41.856L2.12464 66.7571L28.9613 51.1857ZM32.5348 1.02627L32.3638 1.05714L32.1924 1.02851C31.6505 0.938004 30.9869 1.11284 30.1596 1.87908L14.2633 38.6531L62.617 66.7559L34.5775 1.875C33.7529 1.09801 33.0868 0.92662 32.5348 1.02627Z" fill="#3B82F6" stroke="black" stroke-width="2"/>
<style>
path { fill: #000; }
@media (prefers-color-scheme: dark) {
path { fill: #FFF; }
}
</style>
</svg> </svg>

Before

Width:  |  Height:  |  Size: 758 B

After

Width:  |  Height:  |  Size: 418 B

7
src/assets/logo.dark.svg Normal file
View File

@ -0,0 +1,7 @@
<svg width="200" height="70" viewBox="0 0 200 70" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M32.4904 0.780243L32.3621 0.803391L32.2336 0.781929C31.5796 0.672707 30.8296 0.904251 29.9508 1.73203L13.9457 38.7576L63.1476 67.3534L34.7867 1.72897C33.9101 0.889015 33.1561 0.660065 32.4904 0.780243ZM12.7939 41.4984L1.59348 67.3543L29.4591 51.1859L12.7939 41.4984Z" fill="#3B82F6" stroke="white" stroke-width="2"/>
<path d="M58.9292 18.9165H65.5921L84.3173 63.7838L82.3644 68.0166H79.2627L58.9292 18.9165ZM82.9388 51.2736L96.954 18.9165H103.617L86.9595 57.6698H85.581L82.9388 51.2736Z" fill="white"/>
<path d="M109.705 12.3322C109.705 10.9526 110.548 9.98064 112.233 9.41627C112.692 9.29086 113.152 9.22815 113.611 9.22815C115.373 9.22815 116.56 9.91793 117.173 11.2975C117.326 11.6737 117.402 12.0186 117.402 12.3322C117.402 13.7745 116.56 14.7464 114.875 15.2481C114.415 15.3735 113.994 15.4362 113.611 15.4362C111.85 15.4362 110.624 14.7778 109.935 13.4609C109.782 13.0847 109.705 12.7084 109.705 12.3322ZM110.624 68.0166V19.1987H116.598V68.0166H110.624Z" fill="white"/>
<path d="M126.707 54.5658V32.1791C126.707 29.2319 128.316 26.3787 131.532 23.6196C135.362 20.4215 140.11 18.8224 145.777 18.8224V23.5255C140.646 23.5255 136.817 25.2813 134.289 28.7929C133.217 30.3606 132.681 31.897 132.681 33.4019V53.343C132.681 55.8513 134.136 58.2342 137.047 60.4916C139.65 62.4356 142.561 63.4075 145.777 63.4075V68.1106C138.655 68.1106 133.217 65.7591 129.465 61.056C127.627 58.7985 126.707 56.6351 126.707 54.5658ZM150.602 68.1106V63.4075C155.35 63.4075 158.95 61.6204 161.401 58.046C162.55 56.4784 163.124 54.9734 163.124 53.5311V33.4019C163.124 30.6428 161.669 28.1972 158.759 26.0652C156.384 24.372 153.666 23.5255 150.602 23.5255V18.8224C157.495 18.8224 162.779 21.1112 166.455 25.6889C168.217 27.9464 169.098 30.1098 169.098 32.1791V54.5658C169.098 57.5757 167.528 60.4603 164.388 63.2194C160.711 66.4175 156.116 68.0479 150.602 68.1106Z" fill="white"/>
<path d="M178.288 68.0166V18.8224H184.262V26.5355C185.793 23.9017 188.359 21.8324 191.958 20.3274C194.333 19.3241 196.783 18.8224 199.311 18.8224H200L198.506 23.5255C194.677 23.5255 191.231 25.4067 188.167 29.1692C185.64 32.3046 184.376 35.5967 184.376 39.0456V68.0166H178.288Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

7
src/assets/logo.svg Normal file
View File

@ -0,0 +1,7 @@
<svg width="200" height="70" viewBox="0 0 200 70" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M32.4904 0.780243L32.3621 0.803391L32.2336 0.781929C31.5796 0.672707 30.8296 0.904251 29.9508 1.73203L13.9457 38.7576L63.1476 67.3534L34.7867 1.72897C33.9101 0.889015 33.1561 0.660065 32.4904 0.780243ZM12.7939 41.4984L1.59348 67.3543L29.4591 51.1859L12.7939 41.4984Z" fill="#3B82F6" stroke="black" stroke-width="1.5"/>
<path d="M58.9292 18.9165H65.5921L84.3173 63.7838L82.3644 68.0166H79.2627L58.9292 18.9165ZM82.9388 51.2736L96.954 18.9165H103.617L86.9595 57.6698H85.581L82.9388 51.2736Z" fill="black"/>
<path d="M109.705 12.3322C109.705 10.9526 110.548 9.98064 112.233 9.41627C112.692 9.29086 113.152 9.22815 113.611 9.22815C115.373 9.22815 116.56 9.91793 117.173 11.2975C117.326 11.6737 117.402 12.0186 117.402 12.3322C117.402 13.7745 116.56 14.7464 114.875 15.2481C114.415 15.3735 113.994 15.4362 113.611 15.4362C111.85 15.4362 110.624 14.7778 109.935 13.4609C109.782 13.0847 109.705 12.7084 109.705 12.3322ZM110.624 68.0166V19.1987H116.598V68.0166H110.624Z" fill="black"/>
<path d="M126.707 54.5658V32.1791C126.707 29.2319 128.316 26.3787 131.532 23.6196C135.362 20.4215 140.11 18.8224 145.777 18.8224V23.5255C140.646 23.5255 136.817 25.2813 134.289 28.7929C133.217 30.3606 132.681 31.897 132.681 33.4019V53.343C132.681 55.8513 134.136 58.2342 137.047 60.4916C139.65 62.4356 142.561 63.4075 145.777 63.4075V68.1106C138.655 68.1106 133.217 65.7591 129.465 61.056C127.627 58.7985 126.707 56.6351 126.707 54.5658ZM150.602 68.1106V63.4075C155.35 63.4075 158.95 61.6204 161.401 58.046C162.55 56.4784 163.124 54.9734 163.124 53.5311V33.4019C163.124 30.6428 161.669 28.1972 158.759 26.0652C156.384 24.372 153.666 23.5255 150.602 23.5255V18.8224C157.495 18.8224 162.779 21.1112 166.455 25.6889C168.217 27.9464 169.098 30.1098 169.098 32.1791V54.5658C169.098 57.5757 167.528 60.4603 164.388 63.2194C160.711 66.4175 156.116 68.0479 150.602 68.1106Z" fill="black"/>
<path d="M178.288 68.0166V18.8224H184.262V26.5355C185.793 23.9017 188.359 21.8324 191.958 20.3274C194.333 19.3241 196.783 18.8224 199.311 18.8224H200L198.506 23.5255C194.677 23.5255 191.231 25.4067 188.167 29.1692C185.64 32.3046 184.376 35.5967 184.376 39.0456V68.0166H178.288Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

View File

@ -0,0 +1,41 @@
---
import { Home } from 'lucide-astro'
interface Props {
items: Array<{
text: string
href?: string
}>
}
---
<nav>
<ol vocab="https://schema.org/" typeof="BreadcrumbList">
{Astro.props.items.map((el, index) => (
<li property="itemListElement" typeof="ListItem">
{index > 0 && (
<span class="text-slate-900 dark:text-slate-100 mx-4">/</span>
)}
{el.href ? (
<a class="text-slate-900 dark:text-slate-100" href={el.href} property="item" typeof="WebPage">
<span property="name">{el.text}</span>
</a>
) : (
<span class="font-bold" property="name">{el.text}</span>
)}
<meta property="position" content={index.toString()} />
</li>
))}
</ol>
</nav>
<style>
ol {
@apply inline-flex items-center flex-wrap px-0 mb-4
}
li {
@apply inline-block px-0
}
a {
@apply font-normal
}
</style>

View File

@ -0,0 +1,27 @@
---
import { objectOmit } from '@dzeio/object-util'
interface Props extends Omit<astroHTML.JSX.ButtonHTMLAttributes, 'type'> {
type?: 'outline' | 'ghost'
}
---
<button class:list={[
"button",
Astro.props.type,
Astro.props.class ?? null, Astro.props['class:list']
]} {...objectOmit(Astro.props, 'type') as any}>
<slot />
</button>
<style>
.button {
@apply outline-none inline-flex px-4 py-2 rounded-lg bg-blue-500 hover:bg-blue-600 active:bg-blue-700 text-white font-medium transition-colors
}
.button.outline {
@apply bg-transparent border-2 text-blue-500 border-gray-200 hover:bg-gray-100 active:bg-gray-200 active:border-gray-300
}
.button.ghost {
@apply text-black bg-transparent hover:bg-gray-200 active:bg-gray-300
}
</style>

View File

@ -0,0 +1,27 @@
---
import { objectOmit } from '@dzeio/object-util'
interface Props extends Omit<astroHTML.JSX.AnchorHTMLAttributes, 'type'> {
type?: 'outline' | 'ghost'
}
---
<a class:list={[
"button",
Astro.props.type,
Astro.props.class ?? null, Astro.props['class:list']
]} {...objectOmit(Astro.props, 'type') as any}>
<slot />
</a>
<style>
.button {
@apply outline-none inline-flex px-4 py-2 rounded-lg bg-blue-500 hover:bg-blue-600 active:bg-blue-700 text-white font-medium transition-colors
}
.button.outline {
@apply bg-transparent border-2 text-blue-500 border-gray-200 hover:bg-gray-100 active:bg-gray-200 active:border-gray-300
}
.button.ghost {
@apply text-black bg-transparent hover:bg-gray-200 active:bg-gray-300
}
</style>

View File

@ -0,0 +1,25 @@
---
import { Mail, Phone } from 'lucide-astro'
import { Linkedin, Github, Twitter } from 'simple-icons-astro'
const year = new Date().getFullYear()
---
<footer class="w-full flex flex-col bg-white dark:bg-gray-900 mt-32 p-16 gap-6">
<!-- <div>
<a href="/about"></a>
</div> -->
<div class="flex flex-row w-full justify-center gap-6 text-gray-500">
<a href="https://fr.linkedin.com/in/florian-bouillon" target="_blank noreferrer nofollow"><Linkedin /></a>
<a href="tel:+33672292683"><Phone /></a>
<a href="mailto:contact@avior.me"><Mail /></a>
<a href="https://twitter.com/aviortheking"><Twitter /></a>
<a href="https://github.com/aviortheking" target="_blank noreferrer nofollow"><Github /></a>
</div>
<div>
<p class="font-light text-center">
© {year} Florian BOUILLON. Le contenu de ce site est licensié sous <a href="https://creativecommons.org/licenses/by-sa/4.0/" target="_blank" rel="noreferrer nofollow noopener">CC BY-SA 4.0</a>.
<br />
<a href="https://github.com/aviortheking/avior.me">Le code source du site est disponible ici.</a>
</p>
</div>
</footer>

View File

@ -0,0 +1,18 @@
---
import Logo from 'assets/logo.svg'
import LogoDark from 'assets/logo.dark.svg'
import { Image } from 'astro:assets'
---
<header class="bg-white/1 flex justify-center sm:justify-normal">
<a href="/">
<Image src={Logo} alt="Avior.me Logo" class="h-9 dark:hidden" />
<Image src={LogoDark} alt="Avior.me Logo" class="h-9 hidden dark:block" />
</a>
</header>
<style>
header {
@apply transition-opacity fixed w-full h-20 flex items-center border-b border-slate-900/10 backdrop-blur-md
}
</style>

5
src/content/_READMEmd Normal file
View File

@ -0,0 +1,5 @@
# Content
Contains raw content for pages.
Mostly some static pages or blog posts.

View File

@ -0,0 +1,3 @@
---
title: Spideer.fr
---

View File

@ -1,15 +1,40 @@
// 1. Import utilities from `astro:content` // 1. Import utilities from `astro:content`
// import { defineCollection, z } from 'astro:content' import { defineCollection, z } from 'astro:content'
// 2. Define your collection(s) // 2. Define your collection(s)
// const docsCollection = defineCollection({ const projectsCollection = defineCollection({
// type: 'content', type: 'content',
// schema: z.object({ schema: ({ image }) => z.object({
// title: z.string() title: z.string(),
// }) image: image().optional(),
// }) link: z.object({
href: z.string(),
rel: z.string().optional(),
text: z.string().optional()
}).optional(),
disabled: z.string().optional(),
created: z.date().optional(),
updated: z.date().optional()
})
})
const blogCollection = defineCollection({
type: 'content',
schema: z.object({
title: z.string(),
image: z.string().optional()
})
})
const clientsCollection = defineCollection({
type: 'content',
schema: z.object({
title: z.string()
})
})
// 3. Export a single `collections` object to register your collection(s) // 3. Export a single `collections` object to register your collection(s)
// This key should match your collection directory name in "src/content" // This key should match your collection directory name in "src/content"
// export const collections = { export const collections = {
// 'docs': docsCollection, projects: projectsCollection,
// }; blog: blogCollection,
clients: clientsCollection
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 910 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 782 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 133 KiB

View File

@ -0,0 +1,68 @@
---
title: "FI3D : Le Portail Ultime pour les Filaments 3D"
link:
href: https://fi3d.fr
rel: _blank
image: ./og.png
created: 2022-09-03
updated: 2023-07-02
---
![Logo de FI3D](./logo.svg)
FI3D est un agrégateur de filaments 3D en FDM (Fused Deposition Modeling) disponible sur le marché. Cette plateforme permet de découvrir une large gamme de filaments pour une imprimante 3D, que ce soit pour des projets personnels ou professionnels.
![Image d'impression 3D](./image1.jpg)
*Image 1 : Image d'impression 3D*
## Collecte de données par le biais du scrapping
FI3D utilise des techniques de scrapping pour récupérer des informations précieuses sur les filaments 3D disponibles sur différents sites web. Cela permet de comparer facilement les caractéristiques, les prix et les avis des utilisateurs, donnant ainsi un aperçu complet des options disponibles sur le marché.
![Image d'une page de produit FI3D](./details.png)
*Image 2 : Page de produit FI3D*
Que l'on soit un utilisateur expérimenté d'imprimantes 3D ou que l'on débute dans ce domaine passionnant, FI3D aide à trouver le filament parfait pour le prochain projet. Explorez une vaste sélection de filaments de haute qualité, provenant de divers fabricants, pour répondre à tous les besoins d'impression 3D.
![Image de différents types de filaments](./products.png)
*Image 3 : Différents types de filaments disponibles sur FI3D*
## Recherchez, Comparez, et Commandez
Naviguer sur FI3D est un jeu d'enfant. Utilisez la fonction de recherche pour trouver le filament qui correspond à vos critères, que ce soit le diamètre, la couleur, le matériau ou la marque. Vous pouvez également consulter les filaments fabriqués en France, si l'on préfère soutenir les produits locaux.
![Image d'un écran de recherche FI3D](./search.png)
*Image 4 : Recherche de filaments sur FI3D*
Chaque filament est présenté avec une description détaillée, des images et des avis d'utilisateurs pour aider à prendre une décision éclairée. Une fois que l'on a trouvé le filament parfait, il est facile de le commander sur le site du vendeur directement depuis FI3D.
![Image d'une page de détails de produit](./details.png)
*Image 5 : Page de détails d'un produit FI3D*
FI3D propose également des fonctionnalités pratiques telles que le thème sombre, les favoris pour garder une trace de ses produits préférés, et bien plus encore. L'objectif est de simplifier le processus de recherche et d'achat de filaments 3D pour que l'on puisse se concentrer sur ses projets d'impression.
![Image de la fonction de comparaison de filaments](./rest.png)
*Image 6 : Fonction de comparaison de filaments*
## Un Monde de Possibilités
Que l'on travaille sur des prototypes, des maquettes, des objets décoratifs ou des pièces fonctionnelles, FI3D offre un monde de possibilités. Découvrez la polyvalence de l'impression 3D en explorant les différents types de filaments disponibles, des PLA aux ABS en passant par le PETG et bien d'autres.
<!-- ![Image d'objets imprimés en 3D](lien_de_l_image_8.jpg)
*Image 7 : Objets imprimés en 3D avec différents filaments* -->
**Notez et Partagez Vos Expériences**
Il est encouragé de partager ses expériences et ses avis sur les filaments. Si l'on a utilisé un filament particulier et que l'on souhaite aider d'autres membres de la communauté FI3D, il suffit de laisser une note et un commentaire.
<!-- ![Image d'une personne écrivant une critique](lien_de_l_image_9.jpg)
*Image 8 : Utilisateur laissant une critique sur un filament* -->
**Inscrivez-vous dès aujourd'hui sur FI3D**
Pour profiter pleinement de toutes les fonctionnalités de FI3D, il est possible de s'inscrire gratuitement sur la plateforme. On pourra ainsi ajouter des filaments à sa liste de favoris, suivre les dernières tendances en matière d'impression 3D et participer à une communauté dynamique de passionnés d'impression 3D.
<!-- ![Image d'une personne s'inscrivant sur FI3D](lien_de_l_image_10.jpg)
*Image 9: Processus d'inscription sur FI3D* -->
Que l'on soit un professionnel de l'industrie, un bricoleur ou simplement curieux de découvrir le monde de l'impression 3D, FI3D est l'outil idéal pour trouver le filament qui répond à ses besoins.

View File

@ -0,0 +1,5 @@
<svg width="262" height="110" viewBox="0 0 262 110" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M63.2908 75.4985V37.0835H89.0535V44.3452H71.9524V52.3829H87.1657V59.6447H71.9524V75.4985H63.2908ZM95.1732 37.0835H103.835V75.4985H95.1732V37.0835ZM120.959 76.33C119.959 76.33 118.904 76.2564 117.794 76.1083C116.683 75.9974 115.61 75.8311 114.573 75.6094C113.537 75.3877 112.593 75.1478 111.742 74.8888C110.89 74.6302 110.224 74.3899 109.743 74.1681L111.353 67.2944C112.315 67.7011 113.537 68.1446 115.018 68.6248C116.535 69.0683 118.404 69.29 120.625 69.29C123.179 69.29 125.049 68.8098 126.233 67.8488C127.417 66.8882 128.01 65.5946 128.01 63.9685C128.01 62.9707 127.788 62.1392 127.344 61.474C126.936 60.772 126.363 60.2176 125.622 59.811C124.882 59.3675 123.994 59.0722 122.957 58.9241C121.958 58.7396 120.884 58.6469 119.737 58.6469H116.517V51.9949H120.181C120.995 51.9949 121.773 51.9213 122.513 51.7732C123.291 51.6255 123.975 51.3852 124.568 51.0526C125.16 50.6831 125.622 50.2029 125.956 49.6113C126.326 48.9833 126.511 48.2073 126.511 47.2831C126.511 46.5811 126.363 45.9713 126.067 45.4538C125.77 44.9367 125.382 44.5115 124.901 44.1789C124.456 43.8463 123.919 43.6063 123.291 43.4582C122.698 43.2736 122.087 43.1812 121.458 43.1812C119.866 43.1812 118.386 43.4214 117.016 43.9017C115.684 44.3824 114.462 44.9735 113.352 45.6755L110.409 39.6335C111.001 39.2639 111.686 38.8759 112.463 38.4694C113.278 38.0629 114.166 37.6933 115.129 37.3607C116.091 37.0281 117.109 36.7509 118.182 36.5292C119.293 36.3075 120.459 36.1966 121.68 36.1966C123.938 36.1966 125.881 36.4738 127.51 37.0281C129.176 37.5455 130.545 38.3031 131.619 39.3009C132.692 40.2617 133.488 41.4073 134.006 42.7377C134.524 44.0312 134.784 45.4538 134.784 47.0059C134.784 48.5213 134.358 49.9993 133.507 51.4406C132.655 52.845 131.508 53.9169 130.064 54.6557C132.063 55.469 133.599 56.6885 134.673 58.3143C135.783 59.9037 136.338 61.8252 136.338 64.0793C136.338 65.8532 136.042 67.498 135.45 69.0129C134.858 70.4914 133.932 71.7845 132.674 72.8932C131.415 73.965 129.805 74.8152 127.843 75.4431C125.918 76.0347 123.624 76.33 120.959 76.33ZM152.96 68.4585C153.367 68.4958 153.83 68.5326 154.348 68.5694C154.903 68.5694 155.551 68.5694 156.291 68.5694C160.622 68.5694 163.824 67.4794 165.897 65.2989C168.007 63.1188 169.062 60.1068 169.062 56.2633C169.062 52.2353 168.062 49.1864 166.063 47.1168C164.064 45.0476 160.9 44.0126 156.569 44.0126C155.976 44.0126 155.366 44.0312 154.737 44.068C154.107 44.068 153.515 44.1052 152.96 44.1789V68.4585ZM178.001 56.2633C178.001 59.5892 177.482 62.4904 176.446 64.9663C175.409 67.4426 173.929 69.4936 172.004 71.1193C170.117 72.7455 167.803 73.965 165.064 74.7779C162.325 75.5912 159.252 75.9974 155.847 75.9974C154.292 75.9974 152.478 75.9238 150.406 75.7757C148.333 75.6648 146.297 75.4063 144.298 74.9996V37.5824C146.297 37.2129 148.37 36.9727 150.517 36.8618C152.7 36.714 154.57 36.6401 156.125 36.6401C159.419 36.6401 162.399 37.0097 165.064 37.7487C167.766 38.4879 170.079 39.652 172.004 41.241C173.929 42.8301 175.409 44.8627 176.446 47.3385C177.482 49.8148 178.001 52.7896 178.001 56.2633ZM190.564 71.1193C190.564 72.7823 190.027 74.0573 188.954 74.9442C187.917 75.7943 186.733 76.2192 185.4 76.2192C184.068 76.2192 182.864 75.7943 181.791 74.9442C180.754 74.0573 180.236 72.7823 180.236 71.1193C180.236 69.4563 180.754 68.2 181.791 67.3499C182.864 66.4629 184.068 66.0195 185.4 66.0195C186.733 66.0195 187.917 66.4629 188.954 67.3499C190.027 68.2 190.564 69.4563 190.564 71.1193ZM208.781 32.4826C210.335 32.4826 211.76 32.6489 213.056 32.9815C214.351 33.2772 215.351 33.5728 216.054 33.8684L214.444 40.465C213.704 40.1324 212.889 39.8922 212.001 39.7443C211.149 39.5596 210.353 39.4672 209.613 39.4672C208.614 39.4672 207.763 39.615 207.059 39.9106C206.393 40.1694 205.856 40.5389 205.449 41.0193C205.079 41.4997 204.801 42.0725 204.616 42.7377C204.468 43.4028 204.394 44.1234 204.394 44.8995V46.3407H214.611V53.2144H204.394V75.4985H196.121V44.7886C196.121 41.0193 197.176 38.0259 199.286 35.8086C201.433 33.5913 204.598 32.4826 208.781 32.4826ZM237.146 53.6579C236.406 53.4734 235.536 53.2885 234.536 53.1036C233.537 52.8818 232.463 52.771 231.316 52.771C230.798 52.771 230.168 52.8264 229.428 52.9373C228.725 53.0113 228.188 53.1036 227.818 53.2144V75.4985H219.545V47.8929C221.026 47.3758 222.766 46.8951 224.764 46.4516C226.8 45.9713 229.058 45.731 231.538 45.731C231.982 45.731 232.519 45.7682 233.148 45.8418C233.777 45.8791 234.407 45.9527 235.036 46.0636C235.665 46.1376 236.294 46.2485 236.924 46.3962C237.553 46.507 238.09 46.6552 238.534 46.8396L237.146 53.6579Z" fill="black"/>
<path d="M46.5332 14C47.5573 14 48.4166 14.3465 49.1106 15.0394C49.8021 15.7299 50.1478 16.5864 50.1478 17.6089V75.3519C50.1478 76.3743 49.8021 77.2318 49.1106 77.9247C48.4166 78.6155 47.5573 78.9606 46.5332 78.9606H39.3036V82.5694C39.3036 83.5919 38.9565 84.4498 38.2625 85.1427C37.5708 85.833 36.7129 86.1786 35.6887 86.1786H34.8498H29.905H28.4591C27.435 86.1786 26.5759 85.833 25.8818 85.1427C25.1902 84.4498 24.8444 83.5919 24.8444 82.5694V78.9606H17.6148C16.5906 78.9606 15.7327 78.6155 15.0411 77.9247C14.347 77.2318 14 76.3743 14 75.3519V17.6089C14 16.5864 14.347 15.7299 15.0411 15.0394C15.7327 14.3465 16.5906 14 17.6148 14H46.5332Z" fill="black"/>
<path d="M246.03 95.9946H33.3752C31.4587 95.9946 29.905 94.4438 29.905 92.53V86.1786H34.8498V87.7771C34.8498 89.6861 36.397 91.2356 38.3094 91.2416L246.037 91.8744C247.174 91.8778 248.094 92.799 248.094 93.9345C248.094 95.0722 247.17 95.9946 246.03 95.9946Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 614 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 779 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 814 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 151 KiB

View File

@ -0,0 +1,47 @@
---
title: Studiomoto, Site de référencement dévénement Moto en France
disabled: Site Inactif
link:
href: https://www.studiomoto.fr
image: ./og.png
created: 2018-09-10
updated: 2021-04-29
---
# Studiomoto : L'Incontournable Référencement des Événements Moto en France
![Studiomoto](./accueil.png)
**Studiomoto** est bien plus qu'un simple site web. C'est une véritable plateforme dédiée à l'univers passionnant de la moto en France. Développé par Florian BOUILLON et méticuleusement designé par l'agence Spideer, Studiomoto se positionne en tant qu'acteur majeur dans le domaine de l'événementiel motard.
## Une Vitrine des Événements Moto
Studiomoto remplit une mission essentielle : celle de référencer et de communiquer sur les divers événements moto se déroulant à travers la France. Qu'il s'agisse de rassemblements, de salons, de compétitions ou de toute autre manifestation liée à la moto, Studiomoto est la source incontournable pour les amateurs et les passionnés de deux-roues.
![Événements Moto](./event.png)
La plateforme offre une expérience utilisateur intuitive, permettant aux utilisateurs de rechercher facilement les événements qui les intéressent. Grâce à un moteur de recherche avancé, il est possible de filtrer les événements par date, par région ou même par type, offrant ainsi une personnalisation optimale.
## Une Interface Soignée et Conviviale
L'agence Spideer a relevé le défi de créer un design à la fois moderne, esthétique et fonctionnel pour Studiomoto. Le résultat est une interface élégante qui met en valeur l'ensemble des informations essentielles tout en offrant une expérience visuelle agréable.
![Interface de Studiomoto](./regions.png)
La page d'accueil présente de manière attrayante les événements à venir, avec des images percutantes et des descriptions succinctes. Les utilisateurs peuvent ainsi avoir un aperçu rapide de ce qui les attend.
## Contribution à la Communauté Motarde
Studiomoto ne se contente pas de référencer les événements. Il offre également la possibilité aux organisateurs de publier leurs propres événements sur la plateforme. Cette fonctionnalité permet de créer une véritable communauté où chacun peut contribuer à l'enrichissement de l'agenda motard.
![Ajouter un Événement](./recherche.png)
Les organisateurs peuvent ajouter des détails complets sur leurs événements, y compris des informations sur la date, l'emplacement, les tarifs et même des liens vers leurs propres sites web ou pages de réseaux sociaux.
## Conclusion
En résumé, Studiomoto est bien plus qu'un simple site de référencement d'événements moto en France. C'est une plateforme dynamique qui rapproche la communauté motarde et met en lumière la richesse de l'univers de la moto dans l'hexagone.
Si vous êtes passionné de deux-roues, que vous soyez un motard chevronné ou un amateur curieux, Studiomoto est l'endroit où vous trouverez les informations essentielles sur les événements moto en France.
Pour ne rien manquer des prochaines manifestations motardes, rendez-vous sur [Studiomoto](https://www.studiomoto.fr) dès aujourd'hui !

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 216 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 444 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 808 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 MiB

View File

@ -0,0 +1,43 @@
---
title: "TCGdex : Explorez l'univers Pokémon JCC, une carte à la fois."
link:
href: https://tcgdex.fr
image: ./og.png
created: 2020-01-28
updated: 2023-03-21
---
![TCGdex Logo](./logo.svg)
**TCGdex**, l'API du Pokémon JCC (Jeux de Cartes à Collectionner), est une ressource inestimable pour les amateurs du célèbre jeu de cartes Pokémon. Cette API, disponible en six langues (anglais, français, espagnol, portugais, italien, allemand), est un outil open source qui offre une gamme de fonctionnalités impressionnantes aux développeurs et aux fans.
![TCGdex homepage](./homepage.png)
*Image 1 : Page d'accueil du site TCGdex.fr*
## Polyglotte et Inclusif
L'un des aspects les plus impressionnants de TCGdex est sa polyglotterie. L'API prend en charge six langues différentes, ce qui la rend accessible à une audience mondiale. Que vous soyez un développeur cherchant à intégrer TCGdex dans une application multilingue ou un joueur qui préfère consulter les données en sa langue maternelle, TCGdex vous couvre. (Anglais, Français, Espagnol, Italien, Portugais, Allemand)
## Flexibilité Technique
TCGdex offre une flexibilité technique exceptionnelle pour les développeurs. Il est accessible via trois méthodes principales :
1. **API REST** : Les développeurs peuvent interagir avec TCGdex en utilisant des requêtes HTTP standard, ce qui permet une intégration fluide dans n'importe quelle application ou site web.
2. **GraphQL** : Pour ceux qui recherchent une approche plus précise et ciblée, TCGdex propose une interface GraphQL. Cela permet aux utilisateurs de spécifier exactement les données dont ils ont besoin, réduisant ainsi la surcharge d'informations inutiles.
3. **SDKs en Javascript/Typescript & Kotlin/Java** : Pour simplifier encore l'intégration, TCGdex offre des SDKs officiels pour les langages de programmation populaires tels que Javascript/Typescript et Kotlin/Java. Ces SDKs facilitent l'accès aux données de TCGdex et simplifient le processus de développement.
## Formats d'Images Polyvalents
TCGdex ne se limite pas aux données textuelles. Pour une expérience visuelle enrichie, toutes les images de l'API sont disponibles dans plusieurs formats, notamment PNG, JPG et WebP. Que vous ayez besoin d'illustrations pour les cartes Pokémon ou d'images pour les différents éléments du jeu, TCGdex met à disposition une variété d'options pour répondre à vos besoins.
![Exemple d'image de fouinar au format PNG](./furret.png)
## Conclusion
TCGdex est bien plus qu'une simple API pour le Pokémon JCC. Avec son support multilingue, ses multiples méthodes d'accès, et ses ressources visuelles variées, c'est un outil puissant pour les développeurs et les fans de Pokémon du monde entier. Que vous souhaitiez créer une application, un site web ou simplement explorer les données du jeu, TCGdex est là pour vous.
Que vous soyez un développeur créatif ou un joueur passionné, TCGdex vous offre un accès inégalé aux informations du Pokémon JCC. Explorez ses possibilités, et embarquez pour un voyage inoubliable dans l'univers Pokémon.
*Note : Les informations et les images proviennent de TCGdex. Pour en savoir plus et commencer à utiliser cette API, rendez-vous sur [tcgdex.dev](https://tcgdex.dev).*

View File

@ -0,0 +1,20 @@
<svg width="147" height="38" viewBox="0 0 147 38" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M28.5003 36.0583C29.0366 36.0583 29.4714 36.4932 29.4714 37.0295C29.4594 37.5433 29.0293 38 28.5003 38.0006H21.3226C20.7863 38.0006 20.3515 37.5657 20.3515 37.0295C20.3755 36.4779 20.7077 36.0619 21.3226 36.0583H28.5003ZM10.5977 34.0317C11.134 34.0317 11.5688 34.4665 11.5688 35.0028C11.5583 35.5742 11.1458 35.9703 10.5977 35.9739H3.41996C2.8837 35.9739 2.44885 35.539 2.44885 35.0028C2.46078 34.4891 2.88441 34.0386 3.41996 34.0317H10.5977ZM2.65993 13.765C3.42922 13.765 4.05322 14.3889 4.05322 15.1583C4.05453 15.9665 3.42976 16.5469 2.65993 16.5516H1.39329C0.624006 16.5516 0 15.9275 0 15.1583C0.00112386 14.3651 0.675027 13.771 1.39329 13.765H2.65993ZM18.4516 0.000976562C19.0815 0.000976562 19.5916 0.510996 19.5916 1.14094C19.5731 1.80228 19.0866 2.27675 18.4516 2.2809H14.6516C14.0217 2.2809 13.5117 1.77088 13.5117 1.14094C13.5189 0.536674 14.1142 0.00490027 14.6516 0.000976562H18.4516Z" fill="#F8D46E"/>
<path d="M1.39942 8.19002C0.63012 8.19002 0.0061257 8.81406 0.0061257 9.58331C0.00163032 10.3652 0.681091 10.9609 1.39942 10.9766H9.67496C10.4442 10.9766 11.0683 11.6006 11.0683 12.3699C11.0577 13.1781 10.4448 13.7585 9.67496 13.7632H8.1549C7.38562 13.7632 6.76161 14.3872 6.76161 15.1566C6.77897 15.965 7.32497 16.5245 8.1549 16.5499H9.67484C10.4441 16.5499 11.0681 17.1739 11.0681 17.9432C11.0626 18.7252 10.5336 19.3207 9.67484 19.3366H3.67939C2.91009 19.3366 2.2861 19.9606 2.2861 20.7299C2.30343 21.5381 2.92297 22.1384 3.67939 22.1232H9.67496C10.4442 22.1232 11.0683 22.7472 11.0683 23.5166C11.0293 24.3052 10.3933 24.894 9.67496 24.9099H4.98241C4.2013 24.9099 3.53846 25.5491 3.55274 26.3302C3.56708 27.0869 4.18521 27.6966 4.94603 27.6966H17.144V8.17114L1.39942 8.19002Z" fill="#F8D46E"/>
<path d="M11.4233 17.7362C11.4233 21.4909 12.6995 24.9474 14.8412 27.6967H17.2142V8.17126L14.537 8.17951C12.5796 10.86 11.4233 14.1629 11.4233 17.7361V17.7362Z" fill="black" fill-opacity="0.1"/>
<path d="M27.5654 32.1595C35.5202 32.1595 41.9689 25.7109 41.9689 17.756C41.9689 9.8012 35.5202 3.35254 27.5654 3.35254C19.6105 3.35254 13.1619 9.8012 13.1619 17.756C13.1619 25.7109 19.6105 32.1595 27.5654 32.1595Z" fill="#F0F0F0"/>
<path d="M13.1619 17.756C13.1619 9.8012 19.6105 3.35254 27.5654 3.35254C35.5202 3.35254 41.9689 9.8012 41.9689 17.756H13.1619Z" fill="#FE4566"/>
<path d="M13.2041 16.6385C13.1758 17.0073 13.1614 17.38 13.1614 17.7561C13.1614 18.2167 13.183 18.6723 13.2253 19.1219H41.9044C41.9468 18.6723 41.9684 18.2167 41.9684 17.7561C41.9684 17.38 41.954 17.0073 41.9256 16.6385H13.2043H13.2041Z" fill="#606060"/>
<path d="M27.5655 22.5985C30.2399 22.5985 32.408 20.4305 32.408 17.756C32.408 15.0815 30.2399 12.9135 27.5655 12.9135C24.891 12.9135 22.7229 15.0815 22.7229 17.756C22.7229 20.4305 24.891 22.5985 27.5655 22.5985Z" fill="#606060"/>
<path d="M22.7227 17.756C22.7227 20.4304 24.8908 22.5985 27.5652 22.5985C29.1425 22.5985 30.5438 21.8443 31.428 20.6769C31.1809 20.7158 30.9274 20.736 30.6694 20.736C27.995 20.736 25.8269 18.5679 25.8269 15.8935C25.8269 14.7963 26.1917 13.7845 26.8067 12.9725C24.4925 13.3366 22.7227 15.3395 22.7227 17.756Z" fill="black" fill-opacity="0.1"/>
<path d="M27.5653 20.3636C29.0054 20.3636 30.1728 19.1962 30.1728 17.7561C30.1728 16.316 29.0054 15.1486 27.5653 15.1486C26.1252 15.1486 24.9578 16.316 24.9578 17.7561C24.9578 19.1962 26.1252 20.3636 27.5653 20.3636Z" fill="#F0F0F0"/>
<path d="M24.9578 17.756C24.9578 19.1961 26.1252 20.3635 27.5653 20.3635C28.4286 20.3635 29.1939 19.9439 29.6684 19.2976C29.4718 19.3451 29.2665 19.3702 29.0553 19.3702C27.6152 19.3702 26.4478 18.2027 26.4478 16.7626C26.4478 16.1859 26.635 15.6528 26.9521 15.2209C25.8079 15.4967 24.9578 16.5271 24.9578 17.756Z" fill="black" fill-opacity="0.1"/>
<path d="M13.1619 17.7561C13.1619 25.7109 19.6105 32.1595 27.5654 32.1595C30.2149 32.1595 32.6972 31.4442 34.8299 30.1961C33.8109 30.4247 32.751 30.5454 31.6629 30.5454C23.7081 30.5454 17.2594 24.0967 17.2594 16.1419C17.2594 10.8365 20.1278 6.2011 24.3983 3.70148C17.967 5.14443 13.1619 10.8889 13.1619 17.7561V17.7561Z" fill="black" fill-opacity="0.1"/>
<path d="M67.0373 27.5H63.4133V13.388H58.7573V10.364H71.6933V13.388H67.0373V27.5ZM81.139 13.148C79.747 13.148 78.683 13.668 77.947 14.708C77.211 15.748 76.843 17.172 76.843 18.98C76.843 20.804 77.179 22.22 77.851 23.228C78.539 24.22 79.635 24.716 81.139 24.716C81.827 24.716 82.523 24.636 83.227 24.476C83.931 24.316 84.691 24.092 85.507 23.804V26.852C84.755 27.156 84.011 27.38 83.275 27.524C82.539 27.668 81.715 27.74 80.803 27.74C79.027 27.74 77.571 27.38 76.435 26.66C75.299 25.924 74.459 24.9 73.915 23.588C73.371 22.26 73.099 20.716 73.099 18.956C73.099 17.228 73.411 15.7 74.035 14.372C74.659 13.044 75.563 12.004 76.747 11.252C77.947 10.5 79.411 10.124 81.139 10.124C81.987 10.124 82.835 10.236 83.683 10.46C84.547 10.668 85.371 10.956 86.155 11.324L84.979 14.276C84.339 13.972 83.691 13.708 83.035 13.484C82.395 13.26 81.763 13.148 81.139 13.148ZM95.1835 17.876H101.976V26.756C101.08 27.06 100.144 27.3 99.1675 27.476C98.1915 27.652 97.0955 27.74 95.8795 27.74C93.3195 27.74 91.3515 26.988 89.9755 25.484C88.5995 23.98 87.9115 21.788 87.9115 18.908C87.9115 17.116 88.2555 15.564 88.9435 14.252C89.6315 12.94 90.6395 11.924 91.9675 11.204C93.3115 10.484 94.9435 10.124 96.8635 10.124C97.7755 10.124 98.6715 10.22 99.5515 10.412C100.432 10.604 101.232 10.86 101.952 11.18L100.752 14.084C100.224 13.812 99.6235 13.588 98.9515 13.412C98.2795 13.236 97.5755 13.148 96.8395 13.148C95.7835 13.148 94.8635 13.388 94.0795 13.868C93.3115 14.348 92.7115 15.028 92.2795 15.908C91.8635 16.788 91.6555 17.812 91.6555 18.98C91.6555 20.1 91.8075 21.092 92.1115 21.956C92.4155 22.82 92.8955 23.5 93.5515 23.996C94.2075 24.476 95.0635 24.716 96.1195 24.716C96.6315 24.716 97.0635 24.692 97.4155 24.644C97.7675 24.596 98.1035 24.54 98.4235 24.476V20.9H95.1835V17.876ZM109.911 27.74C108.455 27.74 107.263 27.172 106.335 26.036C105.423 24.884 104.967 23.196 104.967 20.972C104.967 18.732 105.431 17.036 106.359 15.884C107.287 14.732 108.503 14.156 110.007 14.156C110.951 14.156 111.727 14.34 112.335 14.708C112.943 15.076 113.423 15.532 113.775 16.076H113.895C113.847 15.82 113.791 15.452 113.727 14.972C113.663 14.476 113.631 13.972 113.631 13.46V9.26H117.207V27.5H114.471L113.775 25.796H113.631C113.279 26.34 112.807 26.804 112.215 27.188C111.623 27.556 110.855 27.74 109.911 27.74ZM111.159 24.884C112.135 24.884 112.823 24.596 113.223 24.02C113.623 23.428 113.839 22.548 113.871 21.38V20.996C113.871 19.732 113.671 18.764 113.271 18.092C112.887 17.404 112.167 17.06 111.111 17.06C110.327 17.06 109.711 17.404 109.263 18.092C108.815 18.764 108.591 19.74 108.591 21.02C108.591 22.3 108.815 23.268 109.263 23.924C109.711 24.564 110.343 24.884 111.159 24.884ZM126.346 14.156C128.154 14.156 129.586 14.676 130.642 15.716C131.698 16.74 132.226 18.204 132.226 20.108V21.836H123.778C123.81 22.844 124.106 23.636 124.666 24.212C125.242 24.788 126.034 25.076 127.042 25.076C127.874 25.076 128.634 24.996 129.322 24.836C130.026 24.66 130.746 24.396 131.482 24.044V26.804C130.826 27.124 130.146 27.356 129.442 27.5C128.738 27.66 127.882 27.74 126.874 27.74C125.562 27.74 124.402 27.5 123.394 27.02C122.386 26.524 121.594 25.788 121.018 24.812C120.442 23.82 120.154 22.564 120.154 21.044C120.154 19.524 120.41 18.252 120.922 17.228C121.45 16.204 122.178 15.436 123.106 14.924C124.034 14.412 125.114 14.156 126.346 14.156ZM126.37 16.7C125.666 16.7 125.09 16.924 124.642 17.372C124.194 17.82 123.93 18.516 123.85 19.46H128.866C128.85 18.676 128.634 18.02 128.218 17.492C127.818 16.964 127.202 16.7 126.37 16.7ZM137.345 20.804L133.121 14.396H137.177L139.721 18.572L142.289 14.396H146.345L142.073 20.804L146.537 27.5H142.481L139.721 23.012L136.961 27.5H132.905L137.345 20.804Z" fill="url(#paint0_linear)"/>
<defs>
<linearGradient id="paint0_linear" x1="57.9688" y1="19" x2="146.969" y2="19" gradientUnits="userSpaceOnUse">
<stop stop-color="#FE4566"/>
<stop offset="1" stop-color="#F8D46E"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 7.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

47
src/layouts/Article.astro Normal file
View File

@ -0,0 +1,47 @@
---
import Layout, { type Props as BaseProps } from './Layout.astro'
import Header from 'components/global/Header.astro'
import Footer from 'components/global/Footer.astro'
import ButtonLink from 'components/global/ButtonLink.astro'
import Breadcrumb from 'components/global/Breadcrumb.astro'
export interface Props extends BaseProps {
link?: {
href: string
rel?: string
text?: string
target?: string
}
breadcrumb: Array<{
text: string
href?: string
}>
}
---
<Layout {...Astro.props}>
<div class="container">
<Breadcrumb items={Astro.props.breadcrumb} />
<article class="prose prose-img:object-contain prose-img:max-h-96 prose-img:rounded-lg prose-img:mx-auto lg:prose-lg 2xl:prose-2xl xl:prose-xl dark:prose-invert mx-auto max-w-none prose-p:text-justify">
<slot />
</article>
{Astro.props.link && (
<div class="flex justify-center mt-6">
<ButtonLink
target="_blank"
href={Astro.props.link.href}
rel={Astro.props.link.rel ?? 'nofollow noopener'}
>
{Astro.props.link.text ?? 'Visiter le site'}
</ButtonLink>
</div>
)}
{Astro.props.disabled && (
<div class="flex justify-center mt-6">
<Button>
{Astro.props.disabled}
</Button>
</div>
)}
</div>
</Layout>

View File

@ -1,11 +1,12 @@
--- ---
export interface Props {
title: string
}
import Favicon from '../components/Favicon/Favicon.astro' import Favicon from '../components/Favicon/Favicon.astro'
import IconSVG from '../assets/layouts/Base/favicon.svg' import IconSVG from '../assets/layouts/Base/favicon.svg'
import IconPNG from '../assets/layouts/Base/favicon.png' import IconPNG from '../assets/layouts/Base/favicon.png'
import '@fontsource-variable/lexend'
export interface Props {
title: string
}
const { title } = Astro.props; const { title } = Astro.props;
--- ---
@ -17,12 +18,12 @@ const { title } = Astro.props;
<meta name="description" content="Astro description"> <meta name="description" content="Astro description">
<meta name="viewport" content="width=device-width" /> <meta name="viewport" content="width=device-width" />
<!-- Analytics --> <!-- Analytics -->
<script defer data-domain="example.com" src="/js/script.js"></script> <script defer data-domain="avior.me" src="/js/script.js"></script>
<Favicon svg={IconSVG} png={IconPNG} icoPath="/favicon.ico" /> <Favicon svg={IconSVG} png={IconPNG} icoPath="/favicon.ico" />
<title>{title}</title> <title>{title}</title>
</head> </head>
<body class="bg-gray-50"> <body class="bg-blue-50 dark:bg-slate-950 text-slate-950 dark:text-blue-50">
<slot /> <slot />
</body> </body>
</html> </html>

View File

@ -1,11 +1,15 @@
--- ---
import Footer from 'components/global/Footer.astro'
import Base, { type Props as BaseProps } from './Base.astro' import Base, { type Props as BaseProps } from './Base.astro'
import Header from 'components/global/Header.astro'
export interface Props extends BaseProps {} export interface Props extends BaseProps {}
--- ---
<Base {...Astro.props}> <Base {...Astro.props}>
<main class="container"> <Header />
<div class="pt-24">
<slot /> <slot />
</main> </div>
<Footer />
</Base> </Base>

View File

@ -0,0 +1,13 @@
---
import Footer from 'components/global/Footer.astro'
import Base, { type Props as BaseProps } from './Base.astro'
import Header from 'components/global/Header.astro'
export interface Props extends BaseProps {}
---
<Base {...Astro.props}>
<Header />
<slot />
<Footer />
</Base>

View File

@ -1,13 +1,24 @@
--- ---
import Layout from '../layouts/Layout.astro' import Layout from '../layouts/Layout.astro'
import { getCollection } from 'astro:content'
import Breadcrumb from 'components/global/Breadcrumb.astro'
import { Image } from 'astro:assets'
const projects = await getCollection('projects')
--- ---
<Layout title="Welcome to Astro."> <Layout title="Avior.me - Developpement de solutions selon vos besoins">
<main> <div class="container">
<h1>Welcome to <span class="text-gradient">Astro</span></h1> <Breadcrumb items={[{ text: 'Accueil', href: '/' }, { text: 'Projets' }]} />
<p class="instructions"> <main class="grid grid-cols-3 gap-4">
To get started, open the directory <code>src/pages</code> in your project.<br /> {projects.map((it) => (
<strong>Code Challenge:</strong> Tweak the "Welcome to Astro" message above. <a href={`/projets/${it.slug}`} class="flex flex-col gap-4">
</p> {it.data.image && (
<Image src={it.data.image} alt="" />
)}
<p>{it.data.title}</p>
</a>
))}
</main> </main>
</div>
</Layout> </Layout>

View File

@ -0,0 +1,26 @@
---
import { getCollection } from 'astro:content';
import Article from 'layouts/Article.astro'
export const prerender = true
// 1. Generate a new path for every collection entry
export async function getStaticPaths() {
const blogEntries = await getCollection('projects');
return blogEntries.map(entry => ({
params: { project: entry.slug }, props: { entry },
}));
}
// 2. For your template, you can get the entry directly from the prop
const { entry } = Astro.props;
const { Content } = await entry.render();
---
<Article title={entry.data.title} link={entry.data.link} breadcrumb={[{text: 'Accueil', href: '/'}, {text: 'Projets', href: '/projets'}, {text: entry.data.title}]}>
<h1>{entry.data.title}</h1>
<p class="flex justify-end font-lights my-0">
<span>Sortie initial le {entry.data.created.toLocaleDateString('fr')}</span>
<!-- <p>Software updated: {entry.data.updated.toLocaleDateString()}</p> -->
</p>
<Content />
</Article>

View File

@ -0,0 +1,23 @@
---
import { getCollection } from 'astro:content'
import { Image } from 'astro:assets'
import Layout from 'layouts/Layout.astro'
import Breadcrumb from 'components/global/Breadcrumb.astro'
const entries = await getCollection('projects')
---
<Layout title='pouet'>
<div class="container">
<Breadcrumb items={[{ text: 'Accueil', href: '/' }, { text: 'Projets' }]} />
<main class="grid grid-cols-3 gap-4">
{entries.map((it) => (
<a href={`/projets/${it.slug}`} class="flex flex-col gap-4">
{it.data.image && (
<Image src={it.data.image} alt="" />
)}
<p>{it.data.title}</p>
</a>
))}
</main>
</div>
</Layout>

29
src/pages/sitemap.xml.ts Normal file
View File

@ -0,0 +1,29 @@
import type { APIRoute } from 'astro'
import { getCollection } from 'astro:content'
import Sitemap from 'easy-sitemap'
const projects = await getCollection('projects')
/**
* sitemap generation
*/
export const ALL: APIRoute = async () => {
const sitemap = new Sitemap('https://avior.me')
sitemap.addEntry('/', {
priority: 1
})
sitemap.addEntry('/projets/', {
priority: 0.5
})
for (const project of projects) {
sitemap.addEntry('/projets/' + project.slug, {
priority: 0.7
})
}
return new Response(sitemap.build(), {
headers: {
'Content-Type': 'application/xml'
}
})
}

View File

@ -1,9 +1,35 @@
// const defaultTheme = require('tailwindcss/defaultTheme') const defaultTheme = require('tailwindcss/defaultTheme')
/** @type {import('tailwindcss').Config} */ /** @type {import('tailwindcss').Config} */
module.exports = { module.exports = {
content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'], content: ['./src/**/*.{astro,html,js,jsx,md,mdx,svelte,ts,tsx,vue}'],
theme: { theme: {
extend: {}, container: {
} center: true,
padding: {
DEFAULT: '1rem',
sm: '2rem',
lg: '4rem',
xl: '5rem',
'2xl': '6rem',
},
// screens: {
// sm: '640px',
// md: '700px',
// lg: '1024px',
// xl: '1280px',
// '2xl': '1536px',
// }
},
fontFamily: {
fontFamily: {
sans: ["Lexend Variable", "Lexend", ...defaultTheme.fontFamily.sans],
},
},
extend: {
},
},
plugins: [
require('@tailwindcss/typography')
]
} }

View File

@ -1,4 +1,7 @@
{ {
"extends": "./node_modules/astro/tsconfigs/strictest.json", "extends": "./node_modules/astro/tsconfigs/strictest.json",
"exclude": ["cypress"] "exclude": ["cypress"],
"compilerOptions": {
"baseUrl": "src"
}
} }