From a2830a0dd6f634147456406c7855881ff298078e Mon Sep 17 00:00:00 2001 From: Ariel Costas Guerrero Date: Thu, 5 Jun 2025 20:03:27 +0200 Subject: Refresh portfolio design and fonts --- src/layouts/BlogListLayout.astro | 325 ++++++++++++++++++++++++++++++++++ src/layouts/Layout.astro | 5 +- src/layouts/PortfolioItemLayout.astro | 77 ++++++++ src/layouts/PortfolioPageLayout.astro | 120 ++++++------- 4 files changed, 457 insertions(+), 70 deletions(-) create mode 100644 src/layouts/BlogListLayout.astro create mode 100644 src/layouts/PortfolioItemLayout.astro (limited to 'src/layouts') diff --git a/src/layouts/BlogListLayout.astro b/src/layouts/BlogListLayout.astro new file mode 100644 index 0000000..4ad72ea --- /dev/null +++ b/src/layouts/BlogListLayout.astro @@ -0,0 +1,325 @@ +--- +import { getCollection } from "astro:content"; +import Layout from "@/layouts/Layout.astro"; + +const blogCollection = (await getCollection("blog")).sort((a, b) => { + return b.data.publishedAt.getTime() - a.data.publishedAt.getTime(); +}); + +// Agrupar artículos por fecha +const groupedPosts = blogCollection.reduce( + (acc: Record, post) => { + const year = post.data.publishedAt.getFullYear(); + const month = post.data.publishedAt.getMonth() + 1; + const key = `${year}-${month}`; + if (!acc[key]) { + acc[key] = []; + } + acc[key].push(post); + return acc; + }, + {}, +); + +// Colección de todas las etiquetas únicas +const allTags = [...new Set(blogCollection.flatMap(post => post.data.tags || []))].sort(); + +function humaniseDate(date: Date) { + const result = date.toLocaleDateString("es-ES", { + month: "long", + year: "numeric", + }); + return result.charAt(0).toUpperCase() + result.slice(1); +} + +const schema = { + "@context": "https://schema.org", + "@type": "Blog", + headline: "Blog de Ariel Costas", + description: + "En este blog encontrarás artículos sobre desarrollo, tecnología y otras temáticas que pueda querer compartir. Disclaimer de siempre: las opiniones son mías, y no representan a ninguna empresa o institución.", + publisher: { + "@type": "Person", + name: "Ariel Costas Guerrero", + url: "https://www.costas.dev", + }, + author: { + "@type": "Person", + name: "Ariel Costas Guerrero", + url: "https://www.costas.dev", + }, +}; +--- + + + + + + diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 976e8a3..0df9191 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -1,6 +1,5 @@ --- -import "@fontsource/beiruti"; -import "@fontsource-variable/sen"; +import "@fontsource-variable/onest"; import Header from "../partials/Header.astro"; import Footer from "../partials/Footer.astro"; @@ -111,7 +110,7 @@ const { title, description, empty } = Astro.props; align-self: center; - max-width: 82ch; + max-width: min(1000px, 90vw); font-size: 1.2rem; padding-block-end: 3rem; diff --git a/src/layouts/PortfolioItemLayout.astro b/src/layouts/PortfolioItemLayout.astro new file mode 100644 index 0000000..95715cb --- /dev/null +++ b/src/layouts/PortfolioItemLayout.astro @@ -0,0 +1,77 @@ +--- +import Layout from "@/layouts/Layout.astro"; +import { render } from "astro:content"; +import TechnologyBadge from "@/components/TechnologyBadge.astro"; +import type { InferEntrySchema } from "astro:content"; +import { Icon } from "astro-icon/components"; + +interface Props { + entry: any; +} + +const { entry } = Astro.props; +const data = entry.data as InferEntrySchema<"portfolio">; +const { Content } = await render(entry); +--- + + + + + + + Volver al portfolio + + +

{data.title}

+ + + +
+ {data.githubLink && + + GitHub + } + + {data.onlineLink && + + En línea + } + + {data.demoLink && + + Demo + } +
+ +

Tecnologías utilizadas

+ + { + data.technologies.map((technology: string) => ( + + )) + } +
+ + diff --git a/src/layouts/PortfolioPageLayout.astro b/src/layouts/PortfolioPageLayout.astro index c2d2b38..e213c10 100644 --- a/src/layouts/PortfolioPageLayout.astro +++ b/src/layouts/PortfolioPageLayout.astro @@ -2,7 +2,7 @@ import t from "../i18n/es.json"; import Layout from "./Layout.astro"; -import TechnologyBadge from "../partials/TechnologyBadge.astro"; +import PortfolioProject from "@/components/PortfolioProject.astro"; const schema = { "@context": "https://schema.org", @@ -29,31 +29,33 @@ const schema = {

{t.portfolioPage.freelanceDesc}

-
-

{t.portfolioPage.orderExtractorTitle}

- -

- - - -

- -
-

{t.portfolioPage.touristInfoTitle}

- -

- - - -

- -
-

{t.portfolioPage.wpConsultingTitle}

- -

- - -

+ + + + + + +

{t.portfolioPage.ownProjectsTitle}

@@ -61,52 +63,36 @@ const schema = {

{t.portfolioPage.ownProjectsDesc}

-
-

{t.portfolioPage.personalWebTitle}

- -

{t.portfolioPage.personalWebDesc}

- - - -
- -
-

{t.portfolioPage.mientrenoTitle}

- -

- - - - - -

- -
-

{t.portfolioPage.vigo360Title}

- -

- - - - -

+ + + + +
-- cgit v1.3