aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/layouts/Layout.astro64
-rw-r--r--src/pages/contact.astro2
-rw-r--r--src/pages/portfolio.astro72
-rw-r--r--src/pages/portfolio/dynamic-tourist-info.astro26
-rw-r--r--src/pages/portfolio/order-extractor.astro28
-rw-r--r--src/pages/portfolio/vigo-360.astro29
-rw-r--r--src/partials/MainWrapper.astro64
-rw-r--r--src/partials/TechnologyBadge.astro144
8 files changed, 334 insertions, 95 deletions
diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro
index 2395461..2333acd 100644
--- a/src/layouts/Layout.astro
+++ b/src/layouts/Layout.astro
@@ -1,7 +1,6 @@
---
import "@fontsource-variable/sen";
import Header from "../partials/Header.astro";
-import MainWrapper from "../partials/MainWrapper.astro";
import Footer from "../partials/Footer.astro";
interface Props {
@@ -9,7 +8,7 @@ interface Props {
description: string;
}
-const { title, description } = Astro.props;
+const { title, description, transitionName, transitionAnimate } = Astro.props;
---
<!doctype html>
@@ -44,9 +43,9 @@ const { title, description } = Astro.props;
</head>
<body>
<Header />
- <MainWrapper>
+ <main>
<slot />
- </MainWrapper>
+ </main>
<Footer />
</body>
</html>
@@ -99,4 +98,61 @@ const { title, description } = Astro.props;
*::selection {
background-color: transparentize($accent, 0.85);
}
+
+ li > time {
+ font-family: $monoFontStack;
+ }
+
+ main {
+ box-sizing: border-box;
+ margin: 0.75rem 1rem 3rem;
+ padding: 1.5rem 3rem;
+ border-radius: $floatingRadius;
+ box-shadow: $shadow;
+ margin-bottom: auto;
+
+ align-self: center;
+
+ max-width: 82ch;
+ font-size: 1.2rem;
+
+ background-color: $lightAlt;
+
+ a {
+ color: $accentDark;
+ transition: color 0.2s ease-in-out;
+
+ &:hover {
+ color: $accent;
+ }
+ }
+
+ > * {
+ margin-block: 0.75em;
+ }
+
+ > p > code {
+ word-break: break-word;
+ font-family: $monoFontStack;
+
+ color: $accentDark;
+ background-color: #f6f6f6;
+ }
+
+ h1 {
+ font-size: 2.75rem;
+ line-height: 1;
+ margin-bottom: 1rem;
+ }
+
+ p.meta {
+ display: block;
+ font-size: 0.85rem;
+ margin-bottom: 1rem;
+ }
+
+ pre {
+ overflow: scroll;
+ }
+ }
</style>
diff --git a/src/pages/contact.astro b/src/pages/contact.astro
index 7e89762..3cb6dc5 100644
--- a/src/pages/contact.astro
+++ b/src/pages/contact.astro
@@ -27,8 +27,6 @@ const schema = {
<p>También puedes encontrarme en algunas redes sociales:</p>
<dl>
- <dt>Mastodon</dt>
- <dd><a href="https://masto.es/@arielcg">@arielcg@masto.es</a></dd>
<dt>GitHub</dt>
<dd><a href="https://github.com/arielcostas">@arielcostas</a></dd>
<dt>LinkedIn</dt>
diff --git a/src/pages/portfolio.astro b/src/pages/portfolio.astro
index c6ae4db..926d6b0 100644
--- a/src/pages/portfolio.astro
+++ b/src/pages/portfolio.astro
@@ -1,16 +1,22 @@
---
+import { ViewTransitions } from "astro:transitions";
import Layout from "../layouts/Layout.astro";
+import TechnologyBadge from "../partials/TechnologyBadge.astro";
const schema = {
"@context": "https://schema.org",
"@type": "WebPage",
- "url": "https://www.costas.dev/portfolio",
- "headline": "Mi portfolio de proyectos"
+ url: "https://www.costas.dev/portfolio",
+ headline: "Mi portfolio de proyectos",
};
---
<Layout title="Portfolio" description="Los proyectos en los que he trabajado">
- <script type="application/ld+json" slot="head-jsonld" set:html={JSON.stringify(schema)}></script>
+ <script
+ type="application/ld+json"
+ slot="head-jsonld"
+ set:html={JSON.stringify(schema)}
+ ></script>
<h1>Mi portfolio</h1>
@@ -18,7 +24,7 @@ const schema = {
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
- <a href="/contacto">contactar conmigo</a>.
+ <a href="/contact">contactar conmigo</a>.
</p>
<h2>Proyectos para terceros (freelance)</h2>
@@ -30,14 +36,21 @@ const schema = {
<ul>
<li>
<p>
- <strong>Extractor de pedidos compra online (2023)</strong>
- 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.
+ <strong
+ >Extractor de pedidos compra online (2023-actualidad)</strong
+ >
</p>
+
+ <p>
+ Aplicación de escritorio que extrae los datos sobre los pedidos
+ on-line de diversas plataformas (como WooCommerce, Amazon y
+ Ebay).
+ <a href="/portfolio/order-extractor">Leer más</a>
+ </p>
+
+ <TechnologyBadge size="small" code="java" />
+ <TechnologyBadge size="small" code="javafx" />
+ <TechnologyBadge size="small" code="windows" />
</li>
<li>
@@ -45,12 +58,16 @@ const schema = {
<strong>
Punto de información turística en móviles (2020-2021)
</strong>
- 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.
</p>
+
+ <p>
+ Aplicación web de información turística, con QR, contenido en 360º e incrustado
+ de YouTube.
+ <a href="/portfolio/dynamic-tourist-info">Leer más</a>
+ </p>
+
+ <TechnologyBadge size={"small"} code="php" />
+ <TechnologyBadge size={"small"} code="webtrio" />
</li>
</ul>
@@ -69,6 +86,10 @@ const schema = {
permite escribir contenido en Markdown y publicar en la web con un
rendimiento excelente. Desplegado sobre Azure Static Web Apps.
</p>
+
+ <TechnologyBadge size="small" code="webtrio" />
+ <TechnologyBadge size="small" code="astro" />
+ <TechnologyBadge size="small" code="azure" />
</li>
<li>
@@ -79,6 +100,12 @@ const schema = {
Razor Pages y SQL Server. Desplegado en Azure App Service, y usando
sistemas como RabbitMQ y Azure Communication Services.
</p>
+
+ <TechnologyBadge size="small" code="dotnet" />
+ <TechnologyBadge size="small" code="sqlserver" />
+ <TechnologyBadge size="small" code="azure" />
+ <TechnologyBadge size="small" code="linux" />
+ <TechnologyBadge size="small" code="rabbitmq" />
</li>
<li>
@@ -88,15 +115,10 @@ const schema = {
movilidad y toponimia. Desarrollado en Go, con base de datos MySQL
y desplegado sobre VPS administrado por mí mismo.
</p>
- <p>
- Además, dentro del ámbito de este proyecto, he desarrollado más
- herramientas, como un bot de Telegram que informa sobre las
- llegadas de autobuses en tiempo real, a partir de los datos
- obtenidos mediante <i>web scraping</i> de la web de Vitrasa.
- <a href="https://vigo360.es/post/publicamos-bot-infobus"
- >Más información</a
- >.
- </p>
+
+ <TechnologyBadge size="small" code="go" />
+ <TechnologyBadge size="small" code="mysql" />
+ <TechnologyBadge size="small" code="linux" />
</li>
</ul>
</Layout>
diff --git a/src/pages/portfolio/dynamic-tourist-info.astro b/src/pages/portfolio/dynamic-tourist-info.astro
new file mode 100644
index 0000000..ed2be9f
--- /dev/null
+++ b/src/pages/portfolio/dynamic-tourist-info.astro
@@ -0,0 +1,26 @@
+---
+import Layout from "../../layouts/Layout.astro";
+import TechnologyBadge from "../../partials/TechnologyBadge.astro";
+---
+
+<Layout
+ 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"
+>
+ <a href="/portfolio">← Volver al portfolio</a>
+
+ <h1>Punto de información turística en móviles (2020-2021)</h1>
+
+ <p>
+ 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.
+ </p>
+
+ <h2>Tecnologías utilizadas</h2>
+
+ <TechnologyBadge size={"small"} code="php" />
+ <TechnologyBadge size={"small"} code="webtrio" />
+</Layout>
diff --git a/src/pages/portfolio/order-extractor.astro b/src/pages/portfolio/order-extractor.astro
new file mode 100644
index 0000000..a799c6d
--- /dev/null
+++ b/src/pages/portfolio/order-extractor.astro
@@ -0,0 +1,28 @@
+---
+import Layout from "../../layouts/Layout.astro";
+import TechnologyBadge from "../../partials/TechnologyBadge.astro";
+---
+
+<Layout
+ title="Extractor de pedidos"
+ description="Extractor de pedidos de compra online"
+>
+ <a href="/portfolio">← Volver al portfolio</a>
+
+ <h1>Extractor de pedidos (2023-actualidad)</h1>
+
+ <p>
+ 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.
+ </p>
+
+ <h2>Tecnologías utilizadas</h2>
+
+ <TechnologyBadge size={"small"} code="java" />
+ <TechnologyBadge size={"small"} code="javafx" />
+ <TechnologyBadge size={"small"} code="windows" />
+</Layout>
diff --git a/src/pages/portfolio/vigo-360.astro b/src/pages/portfolio/vigo-360.astro
new file mode 100644
index 0000000..46c4cc2
--- /dev/null
+++ b/src/pages/portfolio/vigo-360.astro
@@ -0,0 +1,29 @@
+---
+import Layout from "../../layouts/Layout.astro";
+import TechnologyBadge from "../../partials/TechnologyBadge.astro";
+---
+
+<Layout
+ title="Vigo 360"
+ description="Desarrollo y publicación de un blog sobre Vigo"
+>
+ <a href="/portfolio">← Volver al portfolio</a>
+
+ <h1>Vigo 360 (2021-actualidad)</h1>
+
+ <p>
+ 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.
+ </p>
+
+ <h2>Tecnologías utilizadas</h2>
+
+ <TechnologyBadge size={"small"} code="go" />
+ <TechnologyBadge size={"small"} code="webtrio" />
+ <TechnologyBadge size={"small"} code="mysql" />
+ <TechnologyBadge size={"small"} code="linux" />
+</Layout>
diff --git a/src/partials/MainWrapper.astro b/src/partials/MainWrapper.astro
deleted file mode 100644
index cceda92..0000000
--- a/src/partials/MainWrapper.astro
+++ /dev/null
@@ -1,64 +0,0 @@
-<main>
- <slot/>
-</main>
-
-<style is:global lang="scss">
- @import "../../styles/shared.scss";
-
- li > time {
- font-family: $monoFontStack;
- }
-
- main {
- box-sizing: border-box;
- margin: 0.75rem 1rem 3rem;
- padding: 1.5rem 3rem;
- border-radius: $floatingRadius;
- box-shadow: $shadow;
- margin-bottom: auto;
-
- align-self: center;
-
- max-width: 82ch;
- font-size: 1.2rem;
-
- background-color: $lightAlt;
-
- a {
- color: $accentDark;
- transition: color 0.2s ease-in-out;
-
- &:hover {
- color: $accent;
- }
- }
-
- > * {
- margin-block: 0.75em;
- }
-
- > p > code {
- word-break: break-word;
- font-family: $monoFontStack;
-
- color: $accentDark;
- background-color: #f6f6f6;
- }
-
- h1 {
- font-size: 2.75rem;
- line-height: 1;
- margin-bottom: 1rem;
- }
-
- p.meta {
- display: block;
- font-size: 0.85rem;
- margin-bottom: 1rem;
- }
-
- pre {
- overflow: scroll;
- }
- }
-</style>
diff --git a/src/partials/TechnologyBadge.astro b/src/partials/TechnologyBadge.astro
new file mode 100644
index 0000000..491bcea
--- /dev/null
+++ b/src/partials/TechnologyBadge.astro
@@ -0,0 +1,144 @@
+---
+interface Technology {
+ name: string;
+ colour: string;
+ text?: "light" | "dark";
+ icon: string;
+}
+
+export const technologies: { [key: string]: Technology } = {
+ java: {
+ name: "Java",
+ colour: "#f29111",
+ icon: "java",
+ },
+ dotnet: {
+ name: ".NET",
+ colour: "#512bd4",
+ icon: "dotnet",
+ },
+ go: {
+ name: "Go",
+ colour: "#00add8",
+ icon: "go",
+ },
+ mysql: {
+ name: "MySQL",
+ colour: "#f29221",
+ 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",
+ },
+ webtrio: {
+ name: "Web trio",
+ colour: "#ff400c",
+ icon: "webtrio",
+ },
+ azure: {
+ name: "Azure",
+ colour: "#0089d6",
+ icon: "azure",
+ },
+ javafx: {
+ name: "JavaFX",
+ colour: "#c91e21",
+ icon: "javafx",
+ },
+ 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;
+
+ size?: "small" | "large";
+}
+
+const { code, size } = Astro.props;
+const tech = technologies[code] as Technology;
+---
+
+<span class={`pill-${size ?? "small"} text-${tech.text ?? "light"}`}>
+ {tech.name}
+</span>
+
+<style define:vars={{ colour: tech.colour }}>
+ span {
+ display: inline-block;
+ background-color: var(--colour);
+ font-weight: bold;
+ text-transform: uppercase;
+ border-radius: 0.5em;
+ padding: 0.5em 1em;
+ }
+
+ .text-dark {
+ color: #000;
+ }
+
+ .text-light {
+ color: #fff;
+ }
+
+ .pill-small {
+ padding: 0.35em 0.5em;
+ border-radius: 0.25em;
+
+ font-size: 0.75em;
+ }
+
+ .pill-large {
+ padding: 0.35 0.75em;
+ border-radius: 0.5em;
+
+ font-size: 0.75em;
+ }
+</style>