From 54dab1e00b38693e96c801d0c5a020693a35bbda Mon Sep 17 00:00:00 2001 From: Ariel Costas Guerrero <94913521+arielcostas@users.noreply.github.com> Date: Fri, 14 Mar 2025 22:21:47 +0100 Subject: Refactor SCSS imports to use @use syntax, update portfolio entries, and add new projects --- src/content.config.ts | 16 +++- src/data/blog/necesitas-saber-bitcoin.md | 16 ---- src/data/portfolio/dynamic-tourist-info.mdx | 9 ++ src/data/portfolio/mientreno.mdx | 17 ++++ src/data/portfolio/order-extractor.mdx | 11 +++ src/data/portfolio/vigo-360.mdx | 15 +++ src/data/portfolio/wp-consulting.mdx | 9 ++ src/layouts/Layout.astro | 2 +- src/pages/blog/[id].astro | 12 ++- src/pages/portfolio/[id].astro | 55 +++++++++++ src/pages/portfolio/dynamic-tourist-info.astro | 26 ------ src/pages/portfolio/index.astro | 124 +++++++++++++++---------- src/pages/portfolio/order-extractor.astro | 28 ------ src/pages/portfolio/vigo-360.astro | 29 ------ src/pages/trajectory.astro | 8 ++ src/partials/Footer.astro | 2 +- src/partials/Header.astro | 2 +- src/partials/TechnologyBadge.astro | 14 +-- 18 files changed, 223 insertions(+), 172 deletions(-) delete mode 100644 src/data/blog/necesitas-saber-bitcoin.md create mode 100644 src/data/portfolio/dynamic-tourist-info.mdx create mode 100644 src/data/portfolio/mientreno.mdx create mode 100644 src/data/portfolio/order-extractor.mdx create mode 100644 src/data/portfolio/vigo-360.mdx create mode 100644 src/data/portfolio/wp-consulting.mdx create mode 100644 src/pages/portfolio/[id].astro delete mode 100644 src/pages/portfolio/dynamic-tourist-info.astro delete mode 100644 src/pages/portfolio/order-extractor.astro delete mode 100644 src/pages/portfolio/vigo-360.astro (limited to 'src') diff --git a/src/content.config.ts b/src/content.config.ts index 539db1c..1c24b41 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -2,14 +2,24 @@ import { glob } from 'astro/loaders'; import { defineCollection, z } from 'astro:content'; const blog = defineCollection({ - loader: glob({ pattern: '**/*.md', base: "src/data/blog" }), + loader: glob({ pattern: '**/*.{md,mdx}', base: "src/data/blog" }), schema: z.object({ title: z.string(), metaDescription: z.string(), - publishedAt: z.date() + publishedAt: z.coerce.date() }) }); +const portfolio = defineCollection({ + loader: glob({ pattern: '**/*.{md,mdx}', base: "src/data/portfolio" }), + schema: z.object({ + title: z.string(), + description: z.string(), + technologies: z.array(z.string()) + }) +}) + export const collections = { - blog + blog, + portfolio }; diff --git a/src/data/blog/necesitas-saber-bitcoin.md b/src/data/blog/necesitas-saber-bitcoin.md deleted file mode 100644 index 0dbb684..0000000 --- a/src/data/blog/necesitas-saber-bitcoin.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: "Necesitas saber esto antes de 'invertir' en Bitcoin" -metaDescription: "Desmitifiquemos las criptomonedas y entendamos cómo funcionan antes de invertir en ellas." -publishedAt: 2025-03-12 ---- - -En los últimos años, hemos oído mucho sobre criptomonedas y otros criptoactivos, pero ¿realmente la gente entiende cómo funcionan? ¿Saben realmente lo que están comprando o simplemente están siguiendo una moda? - -Cuando decides invertir en acciones, acudes a un bróker regulado que compra y custodia acciones de una empresa en tu nombre. Esta transacción se realiza en un mercado regulado, como la Bolsa de Madrid (BME) en España o la Bolsa de Nueva York (NYSE) en Estados Unidos, bajo la supervisión de un regulador (CNMV en España, SEC en Estados Unidos) y una cámara de compensación como IberClear en España o la NSCC en Estados Unidos. - -Sin embargo, ¿qué ocurre con las criptomonedas? Es posible que ni siquiera estés comprando el activo en sí, sino un derivado (como un CFD) que replica el precio de la criptomoneda. En el mejor de los casos, adquieres una anotación en una base de datos que indica que posees una cantidad determinada en un exchange, con la esperanza de poder transferirla a tu cartera privada. - -En cierto modo, este sistema se asemeja más al de un banco que al del mercado de valores. Con la diferencia de que los bancos tienen una reserva fraccionaria obligatoria (por ejemplo, el 1% para depósitos a la vista o de menos de dos años en la Eurozona), mientras que los exchanges de criptomonedas no están obligados a tenerla. Además, si un banco quiebra, tus depósitos están asegurados (hasta 100.000€ por titular y entidad en la Eurozona), pero si un exchange quiebra, puedes perderlo todo, como ocurrió con FTX. - -Por otro lado, las criptomonedas no están reguladas, lo que permite que cualquier persona con conocimientos básicos pueda llevar a cabo esquemas de "pump and dump" (inflar y vender) y quedarse con el dinero de inversores desinformados. No existe un regulador que te proteja ni leyes que lo prohíban. Ejemplos recientes incluyen las estafas relacionadas con Trump, Melania y LIBRA, que fue promocionada por Milei, supuestamente sin su conocimiento. - diff --git a/src/data/portfolio/dynamic-tourist-info.mdx b/src/data/portfolio/dynamic-tourist-info.mdx new file mode 100644 index 0000000..677f0f6 --- /dev/null +++ b/src/data/portfolio/dynamic-tourist-info.mdx @@ -0,0 +1,9 @@ +--- +title: "Punto de información turística en móviles" +description: "Creación de un sitio web dinámico con PHP adaptado a móviles y accesible mediante QR en localizaciones físicas" +technologies: ["php"] +--- + +Creación de un sitio web dinámico con PHP adaptado a móviles y accesible mediante QR en localizaciones físicas. Cada página muestra datos de la ubicación correspondiente en tres idiomas (castellano, gallego e inglés), una galería de imágenes en 360º con la biblioteca PanoLens y vídeos incrustados de YouTube. + +Desasrrollado entre 2020 y 2021, en colaboración con [Kendra](https://kendra.es/). \ No newline at end of file diff --git a/src/data/portfolio/mientreno.mdx b/src/data/portfolio/mientreno.mdx new file mode 100644 index 0000000..a7d8fab --- /dev/null +++ b/src/data/portfolio/mientreno.mdx @@ -0,0 +1,17 @@ +--- +title: "MiEntreno" +description: "Creación de un sitio web dinámico con PHP adaptado a móviles y accesible mediante QR en localizaciones físicas" +technologies: ["dotnet", "sqlserver", "azure", "rabbitmq"] +--- + +Aplicación web para la gestión de entrenamientos deportivos, con una interfaz sencilla y fácil de usar. Desarrollado con ASP.NET Core, Razor Pages y SQL Server, y alojada en Azure App Service. + +La aplicación permite a los entrenadores personales crear y gestionar rutinas de entrenamiento para sus clientes, que pueden proporcionar _feedback_ sobre estos. Además, los clientes pueden ver sus rutinas de entrenamiento y registrar sus progresos en la aplicación. + +La principal complejidad que me encontré en este proyecto fue la implementación de los dos roles de usuario (entrenador y cliente) y la gestión de los permisos de acceso a las distintas partes de la aplicación, con filtrado para evitar mostrar datos potencialmente sensibles. + +Además, el tiempo de desarrollo era muy limitado, al tratarse del proyecto final de ciclo, en un plazo de 3 meses desde la concepción de la idea, redacción del proyecto y desarrollo de la aplicación. Podría considerarse un _MVP_ (Producto Mínimo Viable) de la idea original, con muchas funcionalidades que quedaron fuera del alcance de este proyecto. + +También, fue un "campo de pruebas" para mí, ya que fue el primer proyecto serio que desarrollé con ASP.NET Core, y donde también quise introducir el uso de emailing transaccional, colas de mensajes y otros conceptos más avanzados que no había utilizado antes en una aplicación real. + +El código fuente se puede encontrar en [GitHub](https://github.com/arielcostas/mientreno) bajo la licencia GNU Affero GPL v3.0. \ No newline at end of file diff --git a/src/data/portfolio/order-extractor.mdx b/src/data/portfolio/order-extractor.mdx new file mode 100644 index 0000000..d0a2ea6 --- /dev/null +++ b/src/data/portfolio/order-extractor.mdx @@ -0,0 +1,11 @@ +--- +title: "Extractor de pedidos (2023-actualidad)" +description: "Extractor de pedidos de compra online para generar informes de ventas y rentabilidad" +technologies: ["java", "windows"] +--- + +Implementación de una aplicación de escritorio que extrae los datos sobre los pedidos on-line de diversas plataformas (como WooCommerce, Amazon y Ebay) para almacenar de forma local y centralizada. Además, cruza estos datos con la base de datos de productos en almacén y sus precios de coste, para generar informes de Excel sobre los ingresos y costes por cada pedido, así como calcular la rentabilidad de estos. + +Los principales problemas enfrentados en este proyecto fueron la diversidad de formatos de los datos de entrada y la necesidad de mantener la aplicación actualizada con los cambios en las plataformas de venta online; además de no contar con SDKs oficiales para estas plataformas, teniendo que implementar llamadas HTTP a las API públicas, a veces con autenticación compleja o firma de peticiones (como AWS Signature V4). + +Por otra parte, está la distribución, instalación y actualización de la aplicación en los equipos del cliente, teniendo que generar un instalador MSI firmado a partir del Java compilado y _shaded_ con sus dependencias mediante maven, y `jpackage` para generar el ejecutable nativo de Windows. \ No newline at end of file diff --git a/src/data/portfolio/vigo-360.mdx b/src/data/portfolio/vigo-360.mdx new file mode 100644 index 0000000..de42b5f --- /dev/null +++ b/src/data/portfolio/vigo-360.mdx @@ -0,0 +1,15 @@ +--- +title: "Vigo 360" +description: "Desarrollo y publicación de un blog sobre Vigo" +technologies: ["go", "mysql", "linux"] +--- + +Blog sobre Vigo y su entorno, orientado principalmente a hablar de movilidad y toponimia. Desarrollado en Go, con base de datos MySQL y desplegado sobre infraestructura propia. + +Opté por desarrollarlo de cero, en lugar de invertir mis esfuerzos en aprender a desarrollar sobre WordPress, por la necesidad de mantener una tonelada de plugins, un tema propio y código que no controlaba. Además, me permitió aprender Go y desplegar una aplicación en producción. + +Además de esto, ocasionalmente publico contenido en este blog sobre transporte público, movilidad y toponimia en Vigo y su entorno; sin fines de lucro y con un nivel de rigor que nos ha llevado a ser citados en medios de comunicación locales como un medio especializado en estos temas. + +El blog cuenta con un sistema publicaciones, comentarios, etiquetas y búsqueda (con Algolia), así como optimización para buscadores y redes sociales con etiquetas de OpenGraph, Twitter Cards y datos semánticos de Schema.org mediante JSON-LD. + +Durante 2025 se planea hacer una reescritura de la aplicación usando .NET para poder implementar nuevas funcionalidades, como procesamiento de fondo de ciertas tareas (generar miniaturas, indexar contenido, etc.) y mejorar la manteniabilidad del código, o búsqueda mediante vectores sin depender de terceros. diff --git a/src/data/portfolio/wp-consulting.mdx b/src/data/portfolio/wp-consulting.mdx new file mode 100644 index 0000000..0b6a35f --- /dev/null +++ b/src/data/portfolio/wp-consulting.mdx @@ -0,0 +1,9 @@ +--- +title: "Consultoría WordPress" +description: "Trabajos de mantenimiento, optimización y migración de sitios web WordPress y tiendas online WooCommerce" +technologies: ["php"] +--- + +Trabajos de mantenimiento, optimización y migración de sitios web WordPress y tiendas online WooCommerce. Incluyendo la instalación y configuración de plugins, temas y optimización de rendimiento y SEO. + +Trabajo bajo la premisa de reducir la dependencia de plugins y temas de terceros, y de mejorar la seguridad y rendimiento de los sitios web; además de usar herramientas optimizadas y sin limitaciones artificiales bajo muros de pago, en la medida de lo posible. diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 2f508f9..4952d55 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -52,7 +52,7 @@ const { title, description } = Astro.props; diff --git a/src/pages/portfolio/dynamic-tourist-info.astro b/src/pages/portfolio/dynamic-tourist-info.astro deleted file mode 100644 index ed2be9f..0000000 --- a/src/pages/portfolio/dynamic-tourist-info.astro +++ /dev/null @@ -1,26 +0,0 @@ ---- -import Layout from "../../layouts/Layout.astro"; -import TechnologyBadge from "../../partials/TechnologyBadge.astro"; ---- - - - ← Volver al portfolio - -

Punto de información turística en móviles (2020-2021)

- -

- Creación de un sitio web dinámico con PHP adaptado a móviles y accesible - mediante QR en localizaciones físicas. Cada página muestra datos de la - ubicación correspondiente en tres idiomas (castellano, gallego e - inglés), una galería de imágenes en 360º con la biblioteca PanoLens y - vídeos incrustados de YouTube. -

- -

Tecnologías utilizadas

- - - -
diff --git a/src/pages/portfolio/index.astro b/src/pages/portfolio/index.astro index ff80ae8..43f776b 100644 --- a/src/pages/portfolio/index.astro +++ b/src/pages/portfolio/index.astro @@ -30,95 +30,117 @@ const schema = {

Proyectos para terceros (freelance)

- En contadas ocasiones, he realizado proyectos para terceros por encargo: + He realizado desarrollos de proyectos para terceros por encargo, siendo los más destacados los siguientes:

- + + +

Proyectos propios

- Además, tengo varios proyectos propios que he desarrollado en mi tiempo - libre: + Además, tengo varios proyectos propios que he desarrollado en mi tiempo, estando algunos de ellos en activo, y como código abierto.

- + + + + + + + \ No newline at end of file diff --git a/src/pages/portfolio/order-extractor.astro b/src/pages/portfolio/order-extractor.astro deleted file mode 100644 index a799c6d..0000000 --- a/src/pages/portfolio/order-extractor.astro +++ /dev/null @@ -1,28 +0,0 @@ ---- -import Layout from "../../layouts/Layout.astro"; -import TechnologyBadge from "../../partials/TechnologyBadge.astro"; ---- - - - ← Volver al portfolio - -

Extractor de pedidos (2023-actualidad)

- -

- Implementación de una aplicación de escritorio que extrae los datos - sobre los pedidos on-line de diversas plataformas (como WooCommerce, - Amazon y Ebay) para almacenar de forma local y centralizada. Además, - cruza estos datos con la base de datos de productos en almacén y sus - precios de coste, para generar informes de Excel sobre los ingresos y - costes por cada pedido, así como calcular la rentabilidad de estos. -

- -

Tecnologías utilizadas

- - - - -
diff --git a/src/pages/portfolio/vigo-360.astro b/src/pages/portfolio/vigo-360.astro deleted file mode 100644 index 46c4cc2..0000000 --- a/src/pages/portfolio/vigo-360.astro +++ /dev/null @@ -1,29 +0,0 @@ ---- -import Layout from "../../layouts/Layout.astro"; -import TechnologyBadge from "../../partials/TechnologyBadge.astro"; ---- - - - ← Volver al portfolio - -

Vigo 360 (2021-actualidad)

- -

- Implementación de una aplicación de escritorio que extrae los datos - sobre los pedidos on-line de diversas plataformas (como WooCommerce, - Amazon y Ebay) para almacenar de forma local y centralizada. Además, - cruza estos datos con la base de datos de productos en almacén y sus - precios de coste, para generar informes de Excel sobre los ingresos y - costes por cada pedido, así como calcular la rentabilidad de estos. -

- -

Tecnologías utilizadas

- - - - - -
diff --git a/src/pages/trajectory.astro b/src/pages/trajectory.astro index 8bb5da5..87557de 100644 --- a/src/pages/trajectory.astro +++ b/src/pages/trajectory.astro @@ -44,6 +44,14 @@ const schema = {

Educación y credenciales

    +
  • + Certificado oficial EF SET C2 Proficient: + acredita mi nivel de inglés C2, el más alto según el Marco Común + Europeo de Referencia para las Lenguas. Ver certificado +
  • +
  • Microsoft Certified: Azure Developer Associate: acredita mis conocimientos en el desarrollo de aplicaciones en diff --git a/src/partials/Footer.astro b/src/partials/Footer.astro index 9db5a05..dae78b7 100644 --- a/src/partials/Footer.astro +++ b/src/partials/Footer.astro @@ -18,7 +18,7 @@