From e3141794b95e534656427fadf0354435c62254d6 Mon Sep 17 00:00:00 2001 From: Ariel Costas Guerrero Date: Thu, 10 Apr 2025 21:42:41 +0200 Subject: Fix formatting --- src/assets/Favicon.astro | 58 +++--- src/content.config.ts | 34 ++-- src/i18n/en.json | 176 +++++++++--------- src/i18n/es.json | 176 +++++++++--------- src/i18n/index.ts | 44 ++--- src/layouts/ContactPageLayout.astro | 165 +++++++++-------- src/layouts/HomePageLayout.astro | 89 +++++---- src/layouts/Layout.astro | 318 +++++++++++++++++---------------- src/layouts/PortfolioPageLayout.astro | 150 ++++++++-------- src/layouts/TrajectoryPageLayout.astro | 111 ++++++------ src/pages/blog.xml.ts | 29 ++- src/pages/blog/[id].astro | 85 ++++----- src/pages/blog/index.astro | 116 ++++++------ src/pages/contact.astro | 162 +++++++++-------- src/pages/en/contact.astro | 2 +- src/pages/en/index.astro | 2 +- src/pages/en/portfolio.astro | 2 +- src/pages/en/trajectory.astro | 2 +- src/pages/index.astro | 2 +- src/pages/portfolio/[id].astro | 75 ++++---- src/pages/portfolio/index.astro | 2 +- src/partials/Footer.astro | 72 ++++---- src/partials/Header.astro | 105 ++++++----- src/partials/TechnologyBadge.astro | 216 +++++++++++----------- 24 files changed, 1132 insertions(+), 1061 deletions(-) (limited to 'src') diff --git a/src/assets/Favicon.astro b/src/assets/Favicon.astro index 01b7291..3ba1f76 100644 --- a/src/assets/Favicon.astro +++ b/src/assets/Favicon.astro @@ -1,36 +1,36 @@ - - - - - + + + + + - Site icon + Site icon - + diff --git a/src/content.config.ts b/src/content.config.ts index 1c24b41..999e4af 100644 --- a/src/content.config.ts +++ b/src/content.config.ts @@ -1,25 +1,25 @@ -import { glob } from 'astro/loaders'; -import { defineCollection, z } from 'astro:content'; +import { glob } from "astro/loaders"; +import { defineCollection, z } from "astro:content"; const blog = defineCollection({ - loader: glob({ pattern: '**/*.{md,mdx}', base: "src/data/blog" }), - schema: z.object({ - title: z.string(), - metaDescription: z.string(), - publishedAt: z.coerce.date() - }) + loader: glob({ pattern: "**/*.{md,mdx}", base: "src/data/blog" }), + schema: z.object({ + title: z.string(), + metaDescription: z.string(), + 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()) - }) -}) + 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, - portfolio + blog, + portfolio, }; diff --git a/src/i18n/en.json b/src/i18n/en.json index 1c4c1b1..6cdebe1 100644 --- a/src/i18n/en.json +++ b/src/i18n/en.json @@ -1,89 +1,89 @@ { - "header": { - "home": "Home", - "trajectory": "Trajectory", - "portfolio": "Portfolio", - "blog": "Blog", - "contact": "Contact" - }, - "footer": { - "copyright": "All rights reserved.", - "contentLicencedUnder": "Unless otherwise stated, the content of this site is licensed under", - "sourceCodeAvailableOn": "Source code for this site is available on", - "andIsLicencedUnder": "and is licenced under", - "eupl": "European Union Public Licence" - }, - "contactPage": { - "title": "Contact", - "description": "The ways to contact me, either by email, phone or social networks.", - "headline": "Get in touch with me!", - "enableJs": "JavaScript must be enabled to view the email address and phone number. This is done to prevent scrapers and spam.", - "intro": "The easiest way to contact me is through my email address: Enable JS. You can also use WhatsApp with the phone number Enable JS.", - "socialMedia": "You can also find me on some social networks:" - }, - "homePage": { - "title": "Home", - "description": "Homepage of my website", - "welcome": "Welcome to my website. My name is Ariel, and here you will find information about me and my projects.", - "whoAmI": "Who am I?", - "whoAmIDesc": "I am a web developer who likes to learn new things and share knowledge. I enjoy programming, web design, and creativity. I love creating new things and learning from others.", - "moreAboutMe": "More about me", - "whatIDo": "What do I do?", - "whatIDoDesc": "I currently work as a software developer and Cloud administrator at a technology company. I develop web applications in PHP and deploy them in the cloud securely and efficiently.", - "myPortfolio": "My portfolio", - "latestBlogPosts": "Latest blog posts", - "viewAllPosts": "View all posts" - }, - "trajectoryPage": { - "title": "Trajectory", - "description": "My trajectory as a software developer, with information about my education, work experience and projects I have worked on.", - "headline": "My trajectory as a developer", - "intro": "I am a software developer living in Vigo, Spain. I love technology and I enjoy learning new things. I am professionally dedicated to software development in all its aspects: from architecture design, implementation and production deployment, to other aspects such as user experience, accessibility and security.", - "techTitle": "Technologies I master", - "techDescription1": "I mainly master the Microsoft ecosystem: .NET (C#), ASP.NET Core, SQL Server, Azure and Azure DevOps. I also have experience with other languages and technologies, such as PHP, Python and Java. Additionally, I have frontend knowledge with HTML5, CSS3, JavaScript and TypeScript.", - "techDescription2": "I also have experience with DevOps tools such as Docker, Kubernetes, Terraform and GitHub Actions; as well as the Azure Cloud ecosystem.", - "educationTitle": "Education and credentials", - "efsetCert1": "Official EF SET C2 Proficient Certificate", - "efsetCert2": ": certifies my C2 English level, the highest according to the Common European Framework of Reference for Languages.", - "viewCertificate": "View certificate", - "azureDeveloperCert1": "Microsoft Certified: Azure Developer Associate", - "azureDeveloperCert2": ": certifies my knowledge in Azure application development.", - "viewCredential": "View credential", - "azureDevOpsCert1": "Microsoft Certified: Azure DevOps Engineer Expert", - "azureDevOpsCert2": ": certifies my knowledge in implementing DevOps methodologies in Azure with Azure DevOps and GitHub.", - "higherTechCert1": "Higher Technical Certificate in Multiplatform Application Development", - "higherTechCert2": ": higher vocational training degree, obtained at", - "higherTechCert3": "IES de Teis", - "higherTechCert4": "in Vigo.", - "experienceTitle": "Work experience", - "estelaria1": "Estelaria Solutions (Q3 2023 - present)", - "estelaria2": "Full-stack application development, mainly in PHP with Symfony, MongoDB and Vanilla JavaScript. In addition, I implemented a considerable number of improvements in usability, accessibility and performance.", - "estelaria3": "I am also responsible for managing the infrastructure on AWS, and implementing collaboration tools such as Jira and GitHub.", - "polygon1": "Internship at Polygon-E (Q2 2023)", - "polygon2": "I did my professional training internship at Polygon-E, where I developed several internal management applications with ASP.NET Core and Blazor, deploying on on-premise environments with Windows Server, IIS and SQL Server.", - "projectsTitle": "Projects", - "projectsDescription": "You can find the (public) projects I have worked on in my portfolio and on my GitHub profile." - }, - "portfolioPage": { - "title": "Portfolio", - "description": "A list of projects I have worked on in recent years, with the technologies used.", - "headline": "My portfolio", - "intro": "In this section, you will find a list of the projects I have worked on, both for third parties and my own. If you would like more information about any of them, please do not hesitate to contact me.", - "freelanceTitle": "Projects for third parties (freelance)", - "freelanceDesc": "I have developed projects for third parties by commission, the most notable being the following:", - "orderExtractorTitle": "Online Order Purchase Extractor", - "orderExtractorDesc": "Desktop application that extracts data about online orders from various platforms (such as WooCommerce, Amazon, and eBay). More information.", - "touristInfoTitle": "Tourist Information Point on Mobile Devices", - "touristInfoDesc": "Web application for tourist information, with QR codes, 360° content, and YouTube embedding. More information.", - "wpConsultingTitle": "WordPress Consulting", - "wpConsultingDesc": "Maintenance, optimisation, and migration work for WordPress websites and WooCommerce online shops. More information. Contact.", - "ownProjectsTitle": "My own projects", - "ownProjectsDesc": "Additionally, I have several personal projects that I have developed in my own time, some of which are active and open source.", - "personalWebTitle": "Personal Website", - "personalWebDesc": "Developed with Astro, a static site generator that lets you write content in Markdown and publish to the web with excellent performance. Deployed on Azure Static Web Apps.", - "mientrenoTitle": "MiEntreno (end-of-course project)", - "mientrenoDesc": "Web application for managing sports training, with a simple and easy-to-use interface. Developed with ASP.NET Core, Razor Pages, and SQL Server. More information. Source code.", - "vigo360Title": "Vigo 360", - "vigo360Desc": "Blog about Vigo and its surroundings, mainly focused on mobility and toponymy. Developed in Go, with a MySQL database and deployed on a VPS managed by myself. More information. Source code. Website." - } -} \ No newline at end of file + "header": { + "home": "Home", + "trajectory": "Trajectory", + "portfolio": "Portfolio", + "blog": "Blog", + "contact": "Contact" + }, + "footer": { + "copyright": "All rights reserved.", + "contentLicencedUnder": "Unless otherwise stated, the content of this site is licensed under", + "sourceCodeAvailableOn": "Source code for this site is available on", + "andIsLicencedUnder": "and is licenced under", + "eupl": "European Union Public Licence" + }, + "contactPage": { + "title": "Contact", + "description": "The ways to contact me, either by email, phone or social networks.", + "headline": "Get in touch with me!", + "enableJs": "JavaScript must be enabled to view the email address and phone number. This is done to prevent scrapers and spam.", + "intro": "The easiest way to contact me is through my email address: Enable JS. You can also use WhatsApp with the phone number Enable JS.", + "socialMedia": "You can also find me on some social networks:" + }, + "homePage": { + "title": "Home", + "description": "Homepage of my website", + "welcome": "Welcome to my website. My name is Ariel, and here you will find information about me and my projects.", + "whoAmI": "Who am I?", + "whoAmIDesc": "I am a web developer who likes to learn new things and share knowledge. I enjoy programming, web design, and creativity. I love creating new things and learning from others.", + "moreAboutMe": "More about me", + "whatIDo": "What do I do?", + "whatIDoDesc": "I currently work as a software developer and Cloud administrator at a technology company. I develop web applications in PHP and deploy them in the cloud securely and efficiently.", + "myPortfolio": "My portfolio", + "latestBlogPosts": "Latest blog posts", + "viewAllPosts": "View all posts" + }, + "trajectoryPage": { + "title": "Trajectory", + "description": "My trajectory as a software developer, with information about my education, work experience and projects I have worked on.", + "headline": "My trajectory as a developer", + "intro": "I am a software developer living in Vigo, Spain. I love technology and I enjoy learning new things. I am professionally dedicated to software development in all its aspects: from architecture design, implementation and production deployment, to other aspects such as user experience, accessibility and security.", + "techTitle": "Technologies I master", + "techDescription1": "I mainly master the Microsoft ecosystem: .NET (C#), ASP.NET Core, SQL Server, Azure and Azure DevOps. I also have experience with other languages and technologies, such as PHP, Python and Java. Additionally, I have frontend knowledge with HTML5, CSS3, JavaScript and TypeScript.", + "techDescription2": "I also have experience with DevOps tools such as Docker, Kubernetes, Terraform and GitHub Actions; as well as the Azure Cloud ecosystem.", + "educationTitle": "Education and credentials", + "efsetCert1": "Official EF SET C2 Proficient Certificate", + "efsetCert2": ": certifies my C2 English level, the highest according to the Common European Framework of Reference for Languages.", + "viewCertificate": "View certificate", + "azureDeveloperCert1": "Microsoft Certified: Azure Developer Associate", + "azureDeveloperCert2": ": certifies my knowledge in Azure application development.", + "viewCredential": "View credential", + "azureDevOpsCert1": "Microsoft Certified: Azure DevOps Engineer Expert", + "azureDevOpsCert2": ": certifies my knowledge in implementing DevOps methodologies in Azure with Azure DevOps and GitHub.", + "higherTechCert1": "Higher Technical Certificate in Multiplatform Application Development", + "higherTechCert2": ": higher vocational training degree, obtained at", + "higherTechCert3": "IES de Teis", + "higherTechCert4": "in Vigo.", + "experienceTitle": "Work experience", + "estelaria1": "Estelaria Solutions (Q3 2023 - present)", + "estelaria2": "Full-stack application development, mainly in PHP with Symfony, MongoDB and Vanilla JavaScript. In addition, I implemented a considerable number of improvements in usability, accessibility and performance.", + "estelaria3": "I am also responsible for managing the infrastructure on AWS, and implementing collaboration tools such as Jira and GitHub.", + "polygon1": "Internship at Polygon-E (Q2 2023)", + "polygon2": "I did my professional training internship at Polygon-E, where I developed several internal management applications with ASP.NET Core and Blazor, deploying on on-premise environments with Windows Server, IIS and SQL Server.", + "projectsTitle": "Projects", + "projectsDescription": "You can find the (public) projects I have worked on in my portfolio and on my GitHub profile." + }, + "portfolioPage": { + "title": "Portfolio", + "description": "A list of projects I have worked on in recent years, with the technologies used.", + "headline": "My portfolio", + "intro": "In this section, you will find a list of the projects I have worked on, both for third parties and my own. If you would like more information about any of them, please do not hesitate to contact me.", + "freelanceTitle": "Projects for third parties (freelance)", + "freelanceDesc": "I have developed projects for third parties by commission, the most notable being the following:", + "orderExtractorTitle": "Online Order Purchase Extractor", + "orderExtractorDesc": "Desktop application that extracts data about online orders from various platforms (such as WooCommerce, Amazon, and eBay). More information.", + "touristInfoTitle": "Tourist Information Point on Mobile Devices", + "touristInfoDesc": "Web application for tourist information, with QR codes, 360° content, and YouTube embedding. More information.", + "wpConsultingTitle": "WordPress Consulting", + "wpConsultingDesc": "Maintenance, optimisation, and migration work for WordPress websites and WooCommerce online shops. More information. Contact.", + "ownProjectsTitle": "My own projects", + "ownProjectsDesc": "Additionally, I have several personal projects that I have developed in my own time, some of which are active and open source.", + "personalWebTitle": "Personal Website", + "personalWebDesc": "Developed with Astro, a static site generator that lets you write content in Markdown and publish to the web with excellent performance. Deployed on Azure Static Web Apps.", + "mientrenoTitle": "MiEntreno (end-of-course project)", + "mientrenoDesc": "Web application for managing sports training, with a simple and easy-to-use interface. Developed with ASP.NET Core, Razor Pages, and SQL Server. More information. Source code.", + "vigo360Title": "Vigo 360", + "vigo360Desc": "Blog about Vigo and its surroundings, mainly focused on mobility and toponymy. Developed in Go, with a MySQL database and deployed on a VPS managed by myself. More information. Source code. Website." + } +} diff --git a/src/i18n/es.json b/src/i18n/es.json index 0e6e8bb..6ad3bc4 100644 --- a/src/i18n/es.json +++ b/src/i18n/es.json @@ -1,89 +1,89 @@ { - "header": { - "home": "Inicio", - "trajectory": "Trayectoria", - "portfolio": "Portafolio", - "blog": "Blog", - "contact": "Contacto" - }, - "footer": { - "copyright": "Todos los derechos reservados.", - "contentLicencedUnder": "Salvo que se indique lo contrario, el contenido de este sitio está bajo licencia", - "sourceCodeAvailableOn": "El código fuente de este sitio está disponible en", - "andIsLicencedUnder": "y se ofrece bajo licencia", - "eupl": "Licencia Pública de la Unión Europea" - }, - "contactPage": { - "title": "Contacto", - "description": "Las formas de ponerte en contacto conmigo, ya sea por correo electrónico, teléfono o redes sociales.", - "headline": "¡Ponte en contacto conmigo!", - "enableJs": "Es necesario activar JavaScript para ver la dirección de correo electrónico y el número de teléfono. Esto se hace para evitar scrapers y spam.", - "intro": "La forma más sencilla de contactar conmigo es a través de mi dirección de correo electrónico: Activa JS. También puedes usar WhatsApp con el número de teléfono Activa JS.", - "socialMedia": "También puedes encontrarme en algunas redes sociales:" - }, - "homePage": { - "title": "Inicio", - "description": "Página de inicio de mi web", - "welcome": "Te doy la bienvenida a mi web. Me llamo Ariel, y aquí encontrarás información sobre mí y mis proyectos.", - "whoAmI": "¿Quién soy?", - "whoAmIDesc": "Soy un desarrollador web que le gusta aprender cosas nuevas y compartir su conocimiento. Me gusta la programación, el diseño web y la creatividad. Me encanta crear cosas nuevas y aprender de los demás.", - "moreAboutMe": "Más información sobre mí", - "whatIDo": "¿Qué hago?", - "whatIDoDesc": "Actualmente trabajo como desarrollador de software y administrador Cloud en una empresa de tecnología. Me encargo de desarrollar aplicaciones web en PHP y desplegarlas en la nube de forma segura y eficiente.", - "myPortfolio": "Mi portfolio", - "latestBlogPosts": "Últimas entradas del blog", - "viewAllPosts": "Ver todas las entradas" - }, - "trajectoryPage": { - "title": "Trayectoria", - "description": "Mi trayectoria como desarrollador de software, con información sobre mi educación, experiencia laboral y proyectos en los que he trabajado.", - "headline": "Mi trayectoria como desarrollador", - "intro": "Soy un desarrollador de software que vive en Vigo, España. Me gusta mucho la tecnología, y me gusta aprender cosas nuevas. Me dedico profesionalmente al desarrollo de software en todos sus ámbitos: desde el diseño de la arquitectura, la implementación y el despliegue en producción, pasando por otros aspectos como la experiencia de usuario, la accesibilidad y la seguridad.", - "techTitle": "Tecnologías que domino", - "techDescription1": "Domino principalmente el ecosistema de Microsoft: .NET (C#), ASP.NET Core, SQL Server, Azure y Azure DevOps. También tengo experiencia con otros lenguajes y tecnologías, como PHP, Python y Java. Además, tengo conocimientos de frontend con HTML5, CSS3, JavaScript y TypeScript.", - "techDescription2": "También tengo experiencia con herramientas de DevOps como Docker, Kubernetes, Terraform y GitHub Actions; así como el ecosistema Cloud de Azure.", - "educationTitle": "Educación y credenciales", - "efsetCert1": "Certificado oficial EF SET C2 Proficient", - "efsetCert2": ": acredita mi nivel de inglés C2, el más alto según el Marco Común Europeo de Referencia para las Lenguas.", - "viewCertificate": "Ver certificado", - "azureDeveloperCert1": "Microsoft Certified: Azure Developer Associate", - "azureDeveloperCert2": ": acredita mis conocimientos en el desarrollo de aplicaciones en Azure.", - "viewCredential": "Ver credencial", - "azureDevOpsCert1": "Microsoft Certified: Azure DevOps Engineer Expert", - "azureDevOpsCert2": ": acredita mis conocimientos en la implementación de metodologías de DevOps en Azure con Azure DevOps y GitHub.", - "higherTechCert1": "Técnico Superior en Desarrollo de Aplicaciones Multiplataforma", - "higherTechCert2": ": título de formación profesional de grado superior, obtenido en el", - "higherTechCert3": "IES de Teis", - "higherTechCert4": "en Vigo.", - "experienceTitle": "Experiencia laboral", - "estelaria1": "Estelaria Solutions (Q3 2023 - actualidad)", - "estelaria2": "Desarrollo de aplicaciones full-stack, principalmente en PHP con Symfony, MongoDB y JavaScript Vanilla. Además, implementé una cantidad considerable de mejoras en usabilidad, accesibilidad y rendimiento.", - "estelaria3": "También me encargo de la gestión de la infraestructura en AWS, y de la implementación de herramientas de colaboración como Jira y GitHub.", - "polygon1": "FCT en Polygon-E (Q2 2023)", - "polygon2": "Realicé mis prácticas de formación profesional en la empresa Polygon-E, donde desarrollé varias aplicaciones de gestión interna con ASP.NET Core y Blazor, desplegando sobre entornos on-premise con Windows Server, IIS y SQL Server.", - "projectsTitle": "Proyectos", - "projectsDescription": "Puedes encontrar los proyectos (públicos) en los que he trabajado en mi portfolio y en mi perfil de GitHub." - }, - "portfolioPage": { - "title": "Portfolio", - "description": "Un listado de los proyectos en los que he trabajado en los últimos años, con las tecnologías utilizadas.", - "headline": "Mi portfolio", - "intro": "En esta sección encontrarás una lista de los proyectos en los que he trabajado, tanto para terceros como propios. Si quieres más información sobre alguno de ellos, no dudes en contactar conmigo.", - "freelanceTitle": "Proyectos para terceros (freelance)", - "freelanceDesc": "He realizado desarrollos de proyectos para terceros por encargo, siendo los más destacados los siguientes:", - "orderExtractorTitle": "Extractor de pedidos compra online", - "orderExtractorDesc": "Aplicación de escritorio que extrae los datos sobre los pedidos on-line de diversas plataformas (como WooCommerce, Amazon y Ebay). Más información.", - "touristInfoTitle": "Punto de información turística en móviles", - "touristInfoDesc": "Aplicación web de información turística, con QR, contenido en 360º e incrustado de YouTube. Más información.", - "wpConsultingTitle": "Consultoría WordPress", - "wpConsultingDesc": "Trabajos de mantenimiento, optimización y migración de sitios web WordPress y tiendas online WooCommerce. Más información. Contactar.", - "ownProjectsTitle": "Proyectos propios", - "ownProjectsDesc": "Además, tengo varios proyectos propios que he desarrollado en mi tiempo, estando algunos de ellos en activo, y como código abierto.", - "personalWebTitle": "Web personal", - "personalWebDesc": "Desarrollado con Astro, un generador de sitios web estáticos que permite escribir contenido en Markdown y publicar en la web con un rendimiento excelente. Desplegado sobre Azure Static Web Apps.", - "mientrenoTitle": "MiEntreno (proyecto fin de ciclo)", - "mientrenoDesc": "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. Más información. Código fuente.", - "vigo360Title": "Vigo 360", - "vigo360Desc": "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 VPS administrado por mí mismo. Más información. Código fuente. Web." - } -} \ No newline at end of file + "header": { + "home": "Inicio", + "trajectory": "Trayectoria", + "portfolio": "Portafolio", + "blog": "Blog", + "contact": "Contacto" + }, + "footer": { + "copyright": "Todos los derechos reservados.", + "contentLicencedUnder": "Salvo que se indique lo contrario, el contenido de este sitio está bajo licencia", + "sourceCodeAvailableOn": "El código fuente de este sitio está disponible en", + "andIsLicencedUnder": "y se ofrece bajo licencia", + "eupl": "Licencia Pública de la Unión Europea" + }, + "contactPage": { + "title": "Contacto", + "description": "Las formas de ponerte en contacto conmigo, ya sea por correo electrónico, teléfono o redes sociales.", + "headline": "¡Ponte en contacto conmigo!", + "enableJs": "Es necesario activar JavaScript para ver la dirección de correo electrónico y el número de teléfono. Esto se hace para evitar scrapers y spam.", + "intro": "La forma más sencilla de contactar conmigo es a través de mi dirección de correo electrónico: Activa JS. También puedes usar WhatsApp con el número de teléfono Activa JS.", + "socialMedia": "También puedes encontrarme en algunas redes sociales:" + }, + "homePage": { + "title": "Inicio", + "description": "Página de inicio de mi web", + "welcome": "Te doy la bienvenida a mi web. Me llamo Ariel, y aquí encontrarás información sobre mí y mis proyectos.", + "whoAmI": "¿Quién soy?", + "whoAmIDesc": "Soy un desarrollador web que le gusta aprender cosas nuevas y compartir su conocimiento. Me gusta la programación, el diseño web y la creatividad. Me encanta crear cosas nuevas y aprender de los demás.", + "moreAboutMe": "Más información sobre mí", + "whatIDo": "¿Qué hago?", + "whatIDoDesc": "Actualmente trabajo como desarrollador de software y administrador Cloud en una empresa de tecnología. Me encargo de desarrollar aplicaciones web en PHP y desplegarlas en la nube de forma segura y eficiente.", + "myPortfolio": "Mi portfolio", + "latestBlogPosts": "Últimas entradas del blog", + "viewAllPosts": "Ver todas las entradas" + }, + "trajectoryPage": { + "title": "Trayectoria", + "description": "Mi trayectoria como desarrollador de software, con información sobre mi educación, experiencia laboral y proyectos en los que he trabajado.", + "headline": "Mi trayectoria como desarrollador", + "intro": "Soy un desarrollador de software que vive en Vigo, España. Me gusta mucho la tecnología, y me gusta aprender cosas nuevas. Me dedico profesionalmente al desarrollo de software en todos sus ámbitos: desde el diseño de la arquitectura, la implementación y el despliegue en producción, pasando por otros aspectos como la experiencia de usuario, la accesibilidad y la seguridad.", + "techTitle": "Tecnologías que domino", + "techDescription1": "Domino principalmente el ecosistema de Microsoft: .NET (C#), ASP.NET Core, SQL Server, Azure y Azure DevOps. También tengo experiencia con otros lenguajes y tecnologías, como PHP, Python y Java. Además, tengo conocimientos de frontend con HTML5, CSS3, JavaScript y TypeScript.", + "techDescription2": "También tengo experiencia con herramientas de DevOps como Docker, Kubernetes, Terraform y GitHub Actions; así como el ecosistema Cloud de Azure.", + "educationTitle": "Educación y credenciales", + "efsetCert1": "Certificado oficial EF SET C2 Proficient", + "efsetCert2": ": acredita mi nivel de inglés C2, el más alto según el Marco Común Europeo de Referencia para las Lenguas.", + "viewCertificate": "Ver certificado", + "azureDeveloperCert1": "Microsoft Certified: Azure Developer Associate", + "azureDeveloperCert2": ": acredita mis conocimientos en el desarrollo de aplicaciones en Azure.", + "viewCredential": "Ver credencial", + "azureDevOpsCert1": "Microsoft Certified: Azure DevOps Engineer Expert", + "azureDevOpsCert2": ": acredita mis conocimientos en la implementación de metodologías de DevOps en Azure con Azure DevOps y GitHub.", + "higherTechCert1": "Técnico Superior en Desarrollo de Aplicaciones Multiplataforma", + "higherTechCert2": ": título de formación profesional de grado superior, obtenido en el", + "higherTechCert3": "IES de Teis", + "higherTechCert4": "en Vigo.", + "experienceTitle": "Experiencia laboral", + "estelaria1": "Estelaria Solutions (Q3 2023 - actualidad)", + "estelaria2": "Desarrollo de aplicaciones full-stack, principalmente en PHP con Symfony, MongoDB y JavaScript Vanilla. Además, implementé una cantidad considerable de mejoras en usabilidad, accesibilidad y rendimiento.", + "estelaria3": "También me encargo de la gestión de la infraestructura en AWS, y de la implementación de herramientas de colaboración como Jira y GitHub.", + "polygon1": "FCT en Polygon-E (Q2 2023)", + "polygon2": "Realicé mis prácticas de formación profesional en la empresa Polygon-E, donde desarrollé varias aplicaciones de gestión interna con ASP.NET Core y Blazor, desplegando sobre entornos on-premise con Windows Server, IIS y SQL Server.", + "projectsTitle": "Proyectos", + "projectsDescription": "Puedes encontrar los proyectos (públicos) en los que he trabajado en mi portfolio y en mi perfil de GitHub." + }, + "portfolioPage": { + "title": "Portfolio", + "description": "Un listado de los proyectos en los que he trabajado en los últimos años, con las tecnologías utilizadas.", + "headline": "Mi portfolio", + "intro": "En esta sección encontrarás una lista de los proyectos en los que he trabajado, tanto para terceros como propios. Si quieres más información sobre alguno de ellos, no dudes en contactar conmigo.", + "freelanceTitle": "Proyectos para terceros (freelance)", + "freelanceDesc": "He realizado desarrollos de proyectos para terceros por encargo, siendo los más destacados los siguientes:", + "orderExtractorTitle": "Extractor de pedidos compra online", + "orderExtractorDesc": "Aplicación de escritorio que extrae los datos sobre los pedidos on-line de diversas plataformas (como WooCommerce, Amazon y Ebay). Más información.", + "touristInfoTitle": "Punto de información turística en móviles", + "touristInfoDesc": "Aplicación web de información turística, con QR, contenido en 360º e incrustado de YouTube. Más información.", + "wpConsultingTitle": "Consultoría WordPress", + "wpConsultingDesc": "Trabajos de mantenimiento, optimización y migración de sitios web WordPress y tiendas online WooCommerce. Más información. Contactar.", + "ownProjectsTitle": "Proyectos propios", + "ownProjectsDesc": "Además, tengo varios proyectos propios que he desarrollado en mi tiempo, estando algunos de ellos en activo, y como código abierto.", + "personalWebTitle": "Web personal", + "personalWebDesc": "Desarrollado con Astro, un generador de sitios web estáticos que permite escribir contenido en Markdown y publicar en la web con un rendimiento excelente. Desplegado sobre Azure Static Web Apps.", + "mientrenoTitle": "MiEntreno (proyecto fin de ciclo)", + "mientrenoDesc": "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. Más información. Código fuente.", + "vigo360Title": "Vigo 360", + "vigo360Desc": "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 VPS administrado por mí mismo. Más información. Código fuente. Web." + } +} diff --git a/src/i18n/index.ts b/src/i18n/index.ts index 4ed1a52..3e6083b 100644 --- a/src/i18n/index.ts +++ b/src/i18n/index.ts @@ -1,34 +1,34 @@ -import Spanish from './es.json'; -import English from './en.json'; +import Spanish from "./es.json"; +import English from "./en.json"; export const SHOW_DEFAULT_LANGUAGE = false; export const DEFAULT_LANGUAGE = "es"; export type LanguageKeys = "es" | "en"; -export const languages: Record = { - es: { - code: "es", - name: "Español" - }, - en: { - code: "en", - name: "English" - } -} +export const languages: Record = { + es: { + code: "es", + name: "Español", + }, + en: { + code: "en", + name: "English", + }, +}; export const LANGUAGE_CODES = Object.keys(languages); export const useTranslations = (lang: string | undefined) => { - switch (lang) { - case languages.en.code: - return English; - case languages.es.code: - default: - return Spanish; - } -} + switch (lang) { + case languages.en.code: + return English; + case languages.es.code: + default: + return Spanish; + } +}; export function getUrlWithoutLocale(url: string) { - return url.replace(/\/[a-z]{2}\//, "/"); -} \ No newline at end of file + return url.replace(/\/[a-z]{2}\//, "/"); +} diff --git a/src/layouts/ContactPageLayout.astro b/src/layouts/ContactPageLayout.astro index 3b3c278..c09969f 100644 --- a/src/layouts/ContactPageLayout.astro +++ b/src/layouts/ContactPageLayout.astro @@ -5,95 +5,94 @@ import Layout from "./Layout.astro"; const t = useTranslations(Astro.currentLocale); const schema = { - "@context": "https://schema.org", - "@type": "ContactPage", - url: "https://www.costas.dev/contact", - headline: t.contactPage.headline, + "@context": "https://schema.org", + "@type": "ContactPage", + url: "https://www.costas.dev/contact", + headline: t.contactPage.headline, }; --- - diff --git a/src/layouts/HomePageLayout.astro b/src/layouts/HomePageLayout.astro index 146eaec..0906a11 100644 --- a/src/layouts/HomePageLayout.astro +++ b/src/layouts/HomePageLayout.astro @@ -4,59 +4,56 @@ import Layout from "./Layout.astro"; import { useTranslations } from "../i18n"; const blogCollection = (await getCollection("blog")).sort((a, b) => { - return b.data.publishedAt.getTime() - a.data.publishedAt.getTime(); + return b.data.publishedAt.getTime() - a.data.publishedAt.getTime(); }); const t = useTranslations(Astro.currentLocale); const schema = { - "@context": "http://schema.org", - "@type": "WebSite", - id: "https://www.costas.dev/", - url: "https://www.costas.dev/", - headline: t.homePage.title, + "@context": "http://schema.org", + "@type": "WebSite", + id: "https://www.costas.dev/", + url: "https://www.costas.dev/", + headline: t.homePage.title, }; --- - + + + + diff --git a/src/pages/en/contact.astro b/src/pages/en/contact.astro index ef69d6e..6ccb15c 100644 --- a/src/pages/en/contact.astro +++ b/src/pages/en/contact.astro @@ -2,4 +2,4 @@ import ContactPageLayout from "../../layouts/ContactPageLayout.astro"; --- - \ No newline at end of file + diff --git a/src/pages/en/index.astro b/src/pages/en/index.astro index 8c5945a..a7c9dbf 100644 --- a/src/pages/en/index.astro +++ b/src/pages/en/index.astro @@ -2,4 +2,4 @@ import HomePageLayout from "../../layouts/HomePageLayout.astro"; --- - \ No newline at end of file + diff --git a/src/pages/en/portfolio.astro b/src/pages/en/portfolio.astro index 63840f5..17c4637 100644 --- a/src/pages/en/portfolio.astro +++ b/src/pages/en/portfolio.astro @@ -2,4 +2,4 @@ import PortfolioPageLayout from "../../layouts/PortfolioPageLayout.astro"; --- - \ No newline at end of file + diff --git a/src/pages/en/trajectory.astro b/src/pages/en/trajectory.astro index 3f5ff77..cb5b088 100644 --- a/src/pages/en/trajectory.astro +++ b/src/pages/en/trajectory.astro @@ -2,4 +2,4 @@ import TrajectoryPageLayout from "../../layouts/TrajectoryPageLayout.astro"; --- - \ No newline at end of file + diff --git a/src/pages/index.astro b/src/pages/index.astro index 8ac64a6..2dd3973 100644 --- a/src/pages/index.astro +++ b/src/pages/index.astro @@ -2,4 +2,4 @@ import HomePageLayout from "../layouts/HomePageLayout.astro"; --- - \ No newline at end of file + diff --git a/src/pages/portfolio/[id].astro b/src/pages/portfolio/[id].astro index 55bac3f..b92ecbd 100644 --- a/src/pages/portfolio/[id].astro +++ b/src/pages/portfolio/[id].astro @@ -5,51 +5,62 @@ import { type GetStaticPaths } from "astro"; import TechnologyBadge from "../../partials/TechnologyBadge.astro"; interface Props { - entry: any; + entry: any; } -export const getStaticPaths: GetStaticPaths = (async () => { - const entries = await getCollection("portfolio"); - return entries.map((entry: any) => ({ - params: { id: entry.id }, - props: { entry }, - })); -}); +export const getStaticPaths: GetStaticPaths = async () => { + const entries = await getCollection("portfolio"); + return entries.map((entry: any) => ({ + params: { id: entry.id }, + props: { entry }, + })); +}; const { entry } = Astro.props; const { Content } = await render(entry); --- - - - - - Volver al portfolio - + + + + + Volver al portfolio + -

{entry.data.title}

+

{entry.data.title}

- + -

Tecnologías utilizadas

+

Tecnologías utilizadas

- {entry.data.technologies.map((technology: string) => ( - - ))} + { + entry.data.technologies.map((technology: string) => ( + + )) + }
diff --git a/src/pages/portfolio/index.astro b/src/pages/portfolio/index.astro index 63840f5..17c4637 100644 --- a/src/pages/portfolio/index.astro +++ b/src/pages/portfolio/index.astro @@ -2,4 +2,4 @@ import PortfolioPageLayout from "../../layouts/PortfolioPageLayout.astro"; --- - \ No newline at end of file + diff --git a/src/partials/Footer.astro b/src/partials/Footer.astro index 0bb0570..2265576 100644 --- a/src/partials/Footer.astro +++ b/src/partials/Footer.astro @@ -1,43 +1,49 @@ --- -import { useTranslations } from "../i18n" +import { useTranslations } from "../i18n"; const t = useTranslations(Astro.currentLocale); ---
-

- Copyright © 2023-{new Date().getFullYear()} Ariel Costas Guerrero. {t.footer.copyright} -

- -

- {t.footer.contentLicencedUnder} CC BY-SA 4.0. - - {t.footer.sourceCodeAvailableOn} GitHub - {t.footer.andIsLicencedUnder} {t.footer.eupl} 1.2 -

+

+ Copyright © 2023-{new Date().getFullYear()} Ariel Costas Guerrero. { + t.footer.copyright + } +

+ +

+ {t.footer.contentLicencedUnder} + CC BY-SA 4.0. + + {t.footer.sourceCodeAvailableOn} + GitHub + {t.footer.andIsLicencedUnder} + {t.footer.eupl} 1.2 +

diff --git a/src/partials/Header.astro b/src/partials/Header.astro index bd8c9d6..6df38e8 100644 --- a/src/partials/Header.astro +++ b/src/partials/Header.astro @@ -1,60 +1,67 @@ --- import { getRelativeLocaleUrl } from "astro:i18n"; -import { useTranslations } from "../i18n" +import { useTranslations } from "../i18n"; const t = useTranslations(Astro.currentLocale); ---
- {t.header.home} - {t.header.trajectory} - {t.header.portfolio} - {t.header.blog} - {t.header.contact} + {t.header.home} + {t.header.trajectory} + {t.header.portfolio} + {t.header.blog} + {t.header.contact}
diff --git a/src/partials/TechnologyBadge.astro b/src/partials/TechnologyBadge.astro index 09cd377..c5e170e 100644 --- a/src/partials/TechnologyBadge.astro +++ b/src/partials/TechnologyBadge.astro @@ -1,95 +1,95 @@ --- interface Technology { - name: string; - colour: string; - text?: "light" | "dark"; - icon: string; + name: string; + colour: string; + text?: "light" | "dark"; + icon: string; } export const technologies: { [key: string]: Technology } = { - java: { - name: "Java", - colour: "#e76f00", - icon: "java", - }, - dotnet: { - name: ".NET", - colour: "#512bd4", - icon: "dotnet", - }, - go: { - name: "Go", - colour: "#00add8", - icon: "go", - }, - mysql: { - name: "MySQL", - colour: "#3a75b0", - icon: "mysql", - }, - mongodb: { - name: "MongoDB", - colour: "#4db33d", - icon: "mongodb", - }, - sqlserver: { - name: "SQL Server", - colour: "#cc2927", - icon: "sqlserver", - }, - php: { - name: "PHP", - colour: "#8892be", - icon: "php", - }, - python: { - name: "Python", - colour: "#306998", - icon: "python", - }, - javascript: { - name: "JavaScript", - colour: "#ffe70b", - text: "dark", - icon: "javascript", - }, - typescript: { - name: "TypeScript", - colour: "#007acc", - icon: "typescript", - }, - azure: { - name: "Azure", - colour: "#0089d6", - icon: "azure", - }, - linux: { - name: "Linux", - colour: "#010101", - icon: "linux", - }, - windows: { - name: "Windows", - colour: "#0078d6", - icon: "windows", - }, - astro: { - name: "Astro", - colour: "#3d50f5", - icon: "astro", - }, - rabbitmq: { - name: "RabbitMQ", - colour: "#ff6600", - icon: "rabbitmq", - }, + java: { + name: "Java", + colour: "#e76f00", + icon: "java", + }, + dotnet: { + name: ".NET", + colour: "#512bd4", + icon: "dotnet", + }, + go: { + name: "Go", + colour: "#00add8", + icon: "go", + }, + mysql: { + name: "MySQL", + colour: "#3a75b0", + icon: "mysql", + }, + mongodb: { + name: "MongoDB", + colour: "#4db33d", + icon: "mongodb", + }, + sqlserver: { + name: "SQL Server", + colour: "#cc2927", + icon: "sqlserver", + }, + php: { + name: "PHP", + colour: "#8892be", + icon: "php", + }, + python: { + name: "Python", + colour: "#306998", + icon: "python", + }, + javascript: { + name: "JavaScript", + colour: "#ffe70b", + text: "dark", + icon: "javascript", + }, + typescript: { + name: "TypeScript", + colour: "#007acc", + icon: "typescript", + }, + azure: { + name: "Azure", + colour: "#0089d6", + icon: "azure", + }, + linux: { + name: "Linux", + colour: "#010101", + icon: "linux", + }, + windows: { + name: "Windows", + colour: "#0078d6", + icon: "windows", + }, + astro: { + name: "Astro", + colour: "#3d50f5", + icon: "astro", + }, + rabbitmq: { + name: "RabbitMQ", + colour: "#ff6600", + icon: "rabbitmq", + }, }; interface Props { - // tech must be name of the key of one of the technologies - code: string; + // tech must be name of the key of one of the technologies + code: string; - size?: "small" | "large"; + size?: "small" | "large"; } const { code, size } = Astro.props; @@ -97,38 +97,38 @@ const tech = technologies[code] as Technology; --- - {tech.name} + {tech.name} -- cgit v1.3