From 3436392be9933564c902fb4c82610589d9844f32 Mon Sep 17 00:00:00 2001 From: Avior Date: Sun, 1 Oct 2023 19:54:31 +0200 Subject: [PATCH] feat: Add clients Signed-off-by: Avior --- Dockerfile.static | 2 +- package-lock.json | 6 + package.json | 1 + src/components/global/Breadcrumb.astro | 1 - .../index.md | 10 ++ .../logo.png | Bin 0 -> 16660 bytes src/content/clients/nasap3d/index.md | 12 ++ src/content/clients/nasap3d/logo.png | Bin 0 -> 7429 bytes src/content/clients/spideer.md | 3 - src/content/clients/spideer/index.md | 9 ++ src/content/clients/spideer/spideer.png | Bin 0 -> 4704 bytes src/content/config.ts | 10 +- src/content/projects/fi3d/index.md | 3 +- src/content/projects/studiomoto/index.md | 11 +- src/content/projects/studiomoto/logo.svg | 42 +++++++ src/content/projects/tcgdex/index.md | 3 +- src/layouts/Article.astro | 4 +- src/layouts/Base.astro | 22 +--- src/layouts/Head.astro | 106 ++++++++++++++++++ src/pages/index.astro | 52 +++++++-- src/pages/projets/[project].astro | 10 +- tailwind.config.cjs | 9 +- 22 files changed, 260 insertions(+), 56 deletions(-) create mode 100644 src/content/clients/agence-cote-particulier-mortagne-sur-sevre/index.md create mode 100644 src/content/clients/agence-cote-particulier-mortagne-sur-sevre/logo.png create mode 100644 src/content/clients/nasap3d/index.md create mode 100644 src/content/clients/nasap3d/logo.png delete mode 100644 src/content/clients/spideer.md create mode 100644 src/content/clients/spideer/index.md create mode 100644 src/content/clients/spideer/spideer.png create mode 100644 src/content/projects/studiomoto/logo.svg create mode 100644 src/layouts/Head.astro diff --git a/Dockerfile.static b/Dockerfile.static index c842299..6f40aee 100644 --- a/Dockerfile.static +++ b/Dockerfile.static @@ -32,7 +32,7 @@ FROM docker.io/nginx:1-alpine WORKDIR /usr/share/nginx/html # Copy the nginx config -ADD ./.docker/nginx.conf /etc/nginx/nginx.conf +ADD ./nginx.conf /etc/nginx/nginx.conf # Copy dist fro mthe build image COPY --from=BUILD_IMAGE /home/node/dist ./ diff --git a/package-lock.json b/package-lock.json index 2884c8c..28a41e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,6 +14,7 @@ "@fontsource-variable/lexend": "^5.0.12", "@tailwindcss/typography": "^0.5.10", "astro": "^3", + "astro-seo": "^0.8.0", "easy-sitemap": "^1.2.0", "lucide-astro": "^0", "simple-icons-astro": "^9.16.0", @@ -1612,6 +1613,11 @@ "sharp": "^0.32.5" } }, + "node_modules/astro-seo": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/astro-seo/-/astro-seo-0.8.0.tgz", + "integrity": "sha512-7gq6lhibCM8FuzZIJlbLLWP5EJ9KL2/4XqeFrAg9O6ZK2xMFxJ5ubKf+a0VJwwTu8W8Xr421CmpiXu6Hq7n/7Q==" + }, "node_modules/autoprefixer": { "version": "10.4.16", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz", diff --git a/package.json b/package.json index f5c3d0e..77a4c66 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,7 @@ "@fontsource-variable/lexend": "^5.0.12", "@tailwindcss/typography": "^0.5.10", "astro": "^3", + "astro-seo": "^0.8.0", "easy-sitemap": "^1.2.0", "lucide-astro": "^0", "simple-icons-astro": "^9.16.0", diff --git a/src/components/global/Breadcrumb.astro b/src/components/global/Breadcrumb.astro index c7ef631..9fbec95 100644 --- a/src/components/global/Breadcrumb.astro +++ b/src/components/global/Breadcrumb.astro @@ -1,5 +1,4 @@ --- -import { Home } from 'lucide-astro' interface Props { items: Array<{ text: string diff --git a/src/content/clients/agence-cote-particulier-mortagne-sur-sevre/index.md b/src/content/clients/agence-cote-particulier-mortagne-sur-sevre/index.md new file mode 100644 index 0000000..64cffbf --- /dev/null +++ b/src/content/clients/agence-cote-particulier-mortagne-sur-sevre/index.md @@ -0,0 +1,10 @@ +--- +title: Agence côté Particuliers de Mortagne sur Sevre +site: https://www.sevrecholetais.immo +logo: + src: ./logo.png + invert: true +--- + +- **Développement** d'un logiciel de récupération d'annonce. +- **Maintenance** et **Hébergement** du logiciel. diff --git a/src/content/clients/agence-cote-particulier-mortagne-sur-sevre/logo.png b/src/content/clients/agence-cote-particulier-mortagne-sur-sevre/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a0291b60974bff50eb11b08ea98bb87ae3db0ee3 GIT binary patch literal 16660 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 literal 0 HcmV?d00001 diff --git a/src/content/clients/nasap3d/index.md b/src/content/clients/nasap3d/index.md new file mode 100644 index 0000000..6576938 --- /dev/null +++ b/src/content/clients/nasap3d/index.md @@ -0,0 +1,12 @@ +--- +title: Nasap3D +site: https://www.nasap3d.com +logo: + src: ./logo.png + invert: true +--- + +- **Reconstruction** d'un site Wix vers un **développement** spécialisé. +- **Développement** d'une solution de paiement automatique pour les modèles 3D. +- **Maintenance** de site internet +- **Hébergement** de site internet diff --git a/src/content/clients/nasap3d/logo.png b/src/content/clients/nasap3d/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..fc6fef8cbb23d16ffde73ca4342073fd5092dfb4 GIT binary patch literal 7429 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 DQu&*w literal 0 HcmV?d00001 diff --git a/src/content/clients/spideer.md b/src/content/clients/spideer.md deleted file mode 100644 index 872dcbb..0000000 --- a/src/content/clients/spideer.md +++ /dev/null @@ -1,3 +0,0 @@ ---- -title: Spideer.fr ---- diff --git a/src/content/clients/spideer/index.md b/src/content/clients/spideer/index.md new file mode 100644 index 0000000..f3a1141 --- /dev/null +++ b/src/content/clients/spideer/index.md @@ -0,0 +1,9 @@ +--- +title: Spideer.fr +site: https://www.spideer.fr +logo: + src: ./spideer.png +--- + +- **Développement**, **maintenance** et **hébergement** de [studiomoto.fr](/projets/studiomoto) +- **Hébergement** des sites internet produits par l'Agence. diff --git a/src/content/clients/spideer/spideer.png b/src/content/clients/spideer/spideer.png new file mode 100644 index 0000000000000000000000000000000000000000..02625290116969f7117cd3444c49e6b07ace2d8e GIT binary patch literal 4704 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 literal 0 HcmV?d00001 diff --git a/src/content/config.ts b/src/content/config.ts index 90c8249..9808312 100644 --- a/src/content/config.ts +++ b/src/content/config.ts @@ -6,6 +6,7 @@ const projectsCollection = defineCollection({ type: 'content', schema: ({ image }) => z.object({ title: z.string(), + description: z.string().optional(), image: image().optional(), link: z.object({ href: z.string(), @@ -26,8 +27,13 @@ const blogCollection = defineCollection({ }) const clientsCollection = defineCollection({ type: 'content', - schema: z.object({ - title: z.string() + schema: ({ image }) => z.object({ + title: z.string(), + site: z.string(), + logo: z.object({ + src: image(), + invert: z.boolean().optional() + }).optional() }) }) diff --git a/src/content/projects/fi3d/index.md b/src/content/projects/fi3d/index.md index 67335d5..30f7eb8 100644 --- a/src/content/projects/fi3d/index.md +++ b/src/content/projects/fi3d/index.md @@ -1,5 +1,6 @@ --- -title: "FI3D : Le Portail Ultime pour les Filaments 3D" +title: "FI3D, Le Portail Ultime pour les Filaments 3D" +description: FI3D, l'agrégateur de filaments 3D en FDM. Découvrez une large gamme de filaments pour imprimantes 3D, comparez caractéristiques et prix, explorez des produits locaux, et simplifiez vos achats. link: href: https://fi3d.fr rel: _blank diff --git a/src/content/projects/studiomoto/index.md b/src/content/projects/studiomoto/index.md index 468c1d2..619324c 100644 --- a/src/content/projects/studiomoto/index.md +++ b/src/content/projects/studiomoto/index.md @@ -1,6 +1,6 @@ --- title: Studiomoto, Site de référencement d’événement Moto en France -disabled: Site Inactif +description: Découvrez Studiomoto, la plateforme dédiée à l'univers de la moto en France. Référencement complet des événements moto, design élégant par l'agence Spideer, contribution ouverte aux organisateurs. link: href: https://www.studiomoto.fr image: ./og.png @@ -8,12 +8,13 @@ created: 2018-09-10 updated: 2021-04-29 --- -# Studiomoto : L'Incontournable Référencement des Événements Moto en France - -![Studiomoto](./accueil.png) +![Logo de Studiomoto](./logo.svg) **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. +![Studiomoto](./accueil.png) +*Image 1 : Accueil de Studiomoto.fr* + ## 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. @@ -43,5 +44,3 @@ Les organisateurs peuvent ajouter des détails complets sur leurs événements, 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 ! diff --git a/src/content/projects/studiomoto/logo.svg b/src/content/projects/studiomoto/logo.svg new file mode 100644 index 0000000..04a45bb --- /dev/null +++ b/src/content/projects/studiomoto/logo.svg @@ -0,0 +1,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/content/projects/tcgdex/index.md b/src/content/projects/tcgdex/index.md index 43cb876..d43dcfd 100644 --- a/src/content/projects/tcgdex/index.md +++ b/src/content/projects/tcgdex/index.md @@ -1,5 +1,6 @@ --- -title: "TCGdex : Explorez l'univers Pokémon JCC, une carte à la fois." +title: "TCGdex, Explorez l'univers Pokémon JCC, une carte à la fois." +description: 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. Explorez ses possibilités, et embarquez pour un voyage inoubliable dans l'univers Pokémon. link: href: https://tcgdex.fr image: ./og.png diff --git a/src/layouts/Article.astro b/src/layouts/Article.astro index 4c90745..ecf7787 100644 --- a/src/layouts/Article.astro +++ b/src/layouts/Article.astro @@ -1,8 +1,7 @@ --- 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 Button from 'components/global/Button.astro' import Breadcrumb from 'components/global/Breadcrumb.astro' export interface Props extends BaseProps { @@ -12,6 +11,7 @@ export interface Props extends BaseProps { text?: string target?: string } + disabled?: string breadcrumb: Array<{ text: string href?: string diff --git a/src/layouts/Base.astro b/src/layouts/Base.astro index 86a5cd9..f621904 100644 --- a/src/layouts/Base.astro +++ b/src/layouts/Base.astro @@ -1,27 +1,13 @@ --- -import Favicon from '../components/Favicon/Favicon.astro' -import IconSVG from '../assets/layouts/Base/favicon.svg' -import IconPNG from '../assets/layouts/Base/favicon.png' -import '@fontsource-variable/lexend' +import Head, { type Props as HeadProps } from './Head.astro' -export interface Props { - title: string -} - -const { title } = Astro.props; +export interface Props extends HeadProps {} --- - + - - - - - - - - {title} + diff --git a/src/layouts/Head.astro b/src/layouts/Head.astro new file mode 100644 index 0000000..58718d0 --- /dev/null +++ b/src/layouts/Head.astro @@ -0,0 +1,106 @@ +--- +import Favicon from '../components/Favicon/Favicon.astro' +import IconSVG from '../assets/layouts/Base/favicon.svg' +import IconPNG from '../assets/layouts/Base/favicon.png' +import '@fontsource-variable/lexend' + +export interface Props { + siteName?: string + title?: string + description?: string + canonical?: string + image?: Array + twitter?: { + title?: string + card?: "summary" | "summary_large_image" | "app" | "player" + site?: string + creator?: string + } + og?: { + title?: string + type?: string + description?: string + url?: string + } +} + +const props = Astro.props +--- + + + + + + + + + + + + + + + +{props.siteName && ( + +)} + + +{props.title && ( + {props.title} + // +)} + + +{props.description && ( + +)} + + +{(typeof props.canonical === 'string' || typeof props.canonical == 'undefined') && ( + +)} + + + + + + +{props.twitter?.site && ( + +)} + + +{props.twitter?.creator && ( + +)} + + +{(props.twitter?.title ?? props.title) && ( + +)} + + + +{(props.og?.title ?? props.title) && ( + +)} + + +{(props.og?.description ?? props.description) && ( + +)} + + + + + + + + +{props.image?.map((img) => ( + + + + +))} diff --git a/src/pages/index.astro b/src/pages/index.astro index ea36d7b..b9c7edc 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -1,24 +1,60 @@ --- -import Layout from '../layouts/Layout.astro' import { getCollection } from 'astro:content' -import Breadcrumb from 'components/global/Breadcrumb.astro' import { Image } from 'astro:assets' +import Layout from 'layouts/Layout.astro' const projects = await getCollection('projects') +const clients = await Promise.all((await getCollection('clients')).map(async (it) => ({...it, obj: await it.render()}))) --- -
- -
+
+ +
+

Développement de solutions selon vos besoins

+
+

Projets

+
{projects.map((it) => ( - + {it.data.image && ( )}

{it.data.title}

))} -
-
+ +

Clients

+
+
+
+
+

Tâches :

+
+
+ {clients.map((client, index) => { + const { Content } = client.obj + client.data.logo + return ( + <> + {index > 0 && ( + + )} + + + ) + })} +
+
diff --git a/src/pages/projets/[project].astro b/src/pages/projets/[project].astro index d6aa9bf..853a065 100644 --- a/src/pages/projets/[project].astro +++ b/src/pages/projets/[project].astro @@ -5,16 +5,16 @@ 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 }, - })); + 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(); --- -
+

{entry.data.title}

Sortie initial le {entry.data.created.toLocaleDateString('fr')} diff --git a/tailwind.config.cjs b/tailwind.config.cjs index 1a8843c..724a8f8 100644 --- a/tailwind.config.cjs +++ b/tailwind.config.cjs @@ -12,14 +12,7 @@ module.exports = { lg: '4rem', xl: '5rem', '2xl': '6rem', - }, - // screens: { - // sm: '640px', - // md: '700px', - // lg: '1024px', - // xl: '1280px', - // '2xl': '1536px', - // } + } }, fontFamily: { fontFamily: {