From cb21f91bc100a8739000c2302cfdb9bdbcbf0e12 Mon Sep 17 00:00:00 2001 From: Asis Ferrer Date: Wed, 12 Nov 2025 19:29:57 +0000 Subject: [PATCH] Add Stock Manager App project with description and image - Introduced a new project entry for the Stock Manager App in the projects data. - Updated the Projects component to handle multi-line descriptions. - Added a new image for the Stock Manager App. - Replaced the link icon with a new source icon in the Projects component. - Added new SVG icons for PostgreSQL and source. - Updated the Prisma icon SVG file. --- public/stock-manager.webp | Bin 0 -> 5774 bytes src/components/Projects.astro | 36 +++++++++++++++-------------- src/data/index.ts | 41 ++++++++++++++-------------------- src/icons/link.svg | 8 ++----- src/icons/postgresql.svg | 2 ++ src/icons/prisma.svg | 8 +++++++ src/icons/source.svg | 2 ++ 7 files changed, 50 insertions(+), 47 deletions(-) create mode 100644 public/stock-manager.webp create mode 100644 src/icons/postgresql.svg create mode 100644 src/icons/prisma.svg create mode 100644 src/icons/source.svg diff --git a/public/stock-manager.webp b/public/stock-manager.webp new file mode 100644 index 0000000000000000000000000000000000000000..9c90c006427c9979ae069d6b392661941c09eb56 GIT binary patch literal 5774 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 literal 0 HcmV?d00001 diff --git a/src/components/Projects.astro b/src/components/Projects.astro index bac7387..cd7524c 100644 --- a/src/components/Projects.astro +++ b/src/components/Projects.astro @@ -30,7 +30,13 @@ interface ProjectProps {

{project.title}

-

{project.description}

+ {project.description && ( +
+ {project.description.split('\n').map((line, index) => ( +

{line}

+ ))} +
+ )}
{project.tags.map((tag: ProjectTag) => ( @@ -52,26 +58,22 @@ interface ProjectProps { name="link" class="w-6 h-6 mr-2 hover:scale-110 hover:text-gray-100 transition-transform duration-300" data-inline="false" - fill={"bg-white"} /> )} -
-
{project.repoUrl && ( - - - Source Code - + + + )}
diff --git a/src/data/index.ts b/src/data/index.ts index 2a088a2..026a951 100644 --- a/src/data/index.ts +++ b/src/data/index.ts @@ -75,28 +75,21 @@ export const projects = [ liveUrl: "https://hamitalia.com", repoUrl: null, }, - // { - // title: "E-Commerce Analytics Dashboard", - // description: - // "A full-stack web application using Next.js and TypeScript for the frontend, and a Python backend to process and display sales data. Features data visualization and user authentication.", - // tags: ["Next.js", "TypeScript", "Python", "React", "Data Visualization"], - // liveUrl: "#", - // repoUrl: "#", - // }, - // { - // title: "Automated Server Provisioning", - // description: - // "Developed a suite of Ansible playbooks and shell scripts to automate the setup and configuration of Linux web servers, reducing deployment time by over 80%.", - // tags: ["SysAdmin", "Ansible", "Bash", "Linux"], - // liveUrl: null, - // repoUrl: "#", - // }, - // { - // title: "Containerized Microservices Platform", - // description: - // "Designed and implemented a Docker-based microservices architecture for a suite of internal tools, improving scalability and simplifying maintenance.", - // tags: ["Docker", "Microservices", "System Design"], - // liveUrl: null, - // repoUrl: "#", - // }, + { + title: "Stock Manager App", + description: + `Aplicación full stack completa para la gestión de inventarios, activos y asignaciones de equipamiento desarrollada con Next.js, TypeScript, Prisma y PostgreSQL. \n + - Usuario: admin + - Contraseña: admin + `, + tags: [ + { name: "Next.js", icon: "nextjs" }, + { name: "TypeScript", icon: "ts" }, + { name: "Prisma", icon: "prisma" }, + { name: "PostgreSQL", icon: "postgresql" }, + ], + imageUrl: "/stock-manager.webp", + liveUrl: "https://stock.aferrer.dev", + repoUrl: "https://git.aferrer.dev/aferrer/stock-manager", + } ]; diff --git a/src/icons/link.svg b/src/icons/link.svg index 6249ad1..04e2113 100644 --- a/src/icons/link.svg +++ b/src/icons/link.svg @@ -1,6 +1,2 @@ - - - - - - \ No newline at end of file + + \ No newline at end of file diff --git a/src/icons/postgresql.svg b/src/icons/postgresql.svg new file mode 100644 index 0000000..ecfcb48 --- /dev/null +++ b/src/icons/postgresql.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/icons/prisma.svg b/src/icons/prisma.svg new file mode 100644 index 0000000..60c7a53 --- /dev/null +++ b/src/icons/prisma.svg @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/src/icons/source.svg b/src/icons/source.svg new file mode 100644 index 0000000..22a0dff --- /dev/null +++ b/src/icons/source.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file