Skip to content

Commit 63e9136

Browse files
authored
Merge pull request #11 from FedeCodeLab/development
🌟🌟🌟 Release 2.0.0 🌟🌟🌟
2 parents 088d916 + 42f983c commit 63e9136

File tree

9 files changed

+104
-24
lines changed

9 files changed

+104
-24
lines changed
30.8 KB
Loading

public/logos/firebase.svg

Lines changed: 23 additions & 0 deletions
Loading

public/logos/vercel.svg

Lines changed: 10 additions & 0 deletions
Loading

public/portadas/expansiva.png

605 KB
Loading

src/components/Portfolio/_components/ProjectCard.tsx

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
"use client"; // si estás usando App Router
1+
"use client";
22

3+
import { useInView } from "react-intersection-observer";
4+
import { motion, useAnimation } from "framer-motion";
35
import { Project } from "@/types/project";
6+
import { useEffect } from "react";
47
import Image from "next/image";
58
import { CTA } from "./CTA";
6-
import { motion, useAnimation } from "framer-motion";
7-
import { useInView } from "react-intersection-observer";
8-
import { useEffect } from "react";
99

1010
export const ProjectCard = ({
1111
title,
@@ -15,6 +15,7 @@ export const ProjectCard = ({
1515
deploy,
1616
techs,
1717
image,
18+
list,
1819
}: Project) => {
1920
const controls = useAnimation();
2021
const { ref, inView } = useInView({
@@ -43,16 +44,33 @@ export const ProjectCard = ({
4344
}}
4445
className="relative overflow-hidden rounded-lg flex flex-col"
4546
>
46-
<div className="absolute inset-0 bg-blue-950 opacity-50 backdrop-blur-xl z-0" />
47-
48-
<div className="relative z-10 flex flex-col h-full">
49-
<div className="p-6 flex flex-col flex-1">
47+
<div className="relative z-10 flex flex-col lg:flex-row">
48+
<div className="relative block lg:hidden w-full h-[250px]">
49+
<Image
50+
src={image}
51+
fill
52+
alt="Portada"
53+
className="object-cover rounded-md"
54+
/>
55+
</div>
56+
<div className="pt-6 lg:py-0 lg:pl-0 lg:pr-16 flex flex-col flex-3">
5057
<div className="flex flex-col gap-2">
51-
<div>
52-
<h4 className="text-lg font-semibold">{title}</h4>
58+
<div className="pb-4">
59+
<h4 className="text-[2rem] font-semibold">{title}</h4>
5360
<p className="text-sm text-gray-400">{type}</p>
5461
</div>
55-
<p className="text-gray-400">{content}</p>
62+
<p
63+
className="text-gray-400 lg:max-w-[500px]"
64+
dangerouslySetInnerHTML={{ __html: content }}
65+
/>
66+
67+
{list && (
68+
<ul className="text-gray-400 text-[14px]">
69+
{list.map((item, index) => (
70+
<li key={index}>{item}</li>
71+
))}
72+
</ul>
73+
)}
5674

5775
<div className="flex flex-wrap gap-2 mt-2">
5876
{techs.map((tech, index) => (
@@ -65,13 +83,18 @@ export const ProjectCard = ({
6583
))}
6684
</div>
6785
</div>
68-
<div className="mt-auto pt-6">
86+
<div className="mt-auto md:mt-0 pt-6">
6987
<CTA repository={repository} deploy={deploy} />
7088
</div>
7189
</div>
7290

73-
<div className="aspect-video w-full relative">
74-
<Image src={image} fill alt="Portada" className="object-cover" />
91+
<div className="relative w-full hidden lg:block md:w-auto md:min-w-[500px] md:h-[400px] rounded-md">
92+
<Image
93+
src={image}
94+
fill
95+
alt="Portada"
96+
className="object-cover rounded-md"
97+
/>
7598
</div>
7699
</div>
77100
</motion.article>

src/components/Portfolio/index.tsx

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ const projects: Project[] = [
99
title: "BeBot Design",
1010
type: "Experiencia Laboral",
1111
content:
12-
"BeBot Design es una web que presenta la propuesta de la empresa en la creación de bots con identidad propia, mediante una interfaz clara y profesional que refuerza su presencia digital.",
12+
"✨ Implementé Next-intl para la internacionalización (i18n) en múltiples idiomas y apliqué renderizado del lado del servidor (SSR) para optimizar la performance y el SEO. Desarrollé animaciones complejas con Framer Motion y diseñé la interfaz con Tailwind CSS, logrando un sistema escalable, consistente y orientado a la experiencia del usuario.<br/><br/>🧪 Llevé a cabo tareas de optimización SEO técnico, identificando y resolviendo problemas de indexación y rendimiento. Finalmente, realicé el deploy con Firebase Hosting y Functions, asegurando estabilidad y disponibilidad en producción.",
1313
repository: "",
1414
deploy: "https://bebot.design/",
1515
techs: [
@@ -26,12 +26,12 @@ const projects: Project[] = [
2626
image: "/portadas/bebot.PNG",
2727
},
2828
{
29-
title: "Conversational UX Academy",
29+
title: "CUX Academy",
3030
type: "Experiencia Laboral",
3131
content:
32-
"Actualmente me encuentro participando en el desarrollo de la página oficial de Cux Academy para la empresa BeBot, contribuyendo a la optimización de la experiencia digital y al crecimiento de su presencia online.",
32+
"✨ Implementé un chatbot creado con Voiceflow, optimizando la integración y garantizando un flujo conversacional fluido. Para enriquecer la experiencia de usuario, desarrollé animaciones complejas con Framer Motion y diseñé la interfaz con Tailwind CSS, logrando un sistema escalable y consistente.<br/><br/>🧪 Realicé el deploy estático en producción vía FTP, asegurando estabilidad y disponibilidad. Además, integré un script de Octopus para la gestión de suscripciones e implementé estados globales con Zustand para un control eficiente de la aplicación.",
3333
repository: "",
34-
deploy: "https://cux.academy/",
34+
deploy: "https://www.cux.academy/",
3535
techs: [
3636
"Next.js",
3737
"Typescript",
@@ -42,14 +42,15 @@ const projects: Project[] = [
4242
"Octopus",
4343
"Voiceflow",
4444
"FTP",
45+
"Zustand",
4546
],
4647
image: "/portadas/cux.png",
4748
},
4849
{
4950
title: "Spotify Clone",
5051
type: "Proyecto",
5152
content:
52-
"Clon de Spotify realizado con Astro.js en el cual se puede reproducir música, interactuar con el volumen y cambiar las canciones entre albums.",
53+
"✨ Desarrollé un clon de Spotify con Astro.js, recreando la experiencia de un reproductor de música moderno y funcional.<br/><br/>🧪 Implementé la reproducción de canciones, control de volumen e interacción entre distintos álbumes, logrando una interfaz responsiva y fluida que emula la experiencia original de la plataforma.",
5354
repository: "https://github.com/FedeCodeLab/SpotifyClone",
5455
deploy: "https://spotify-clone-fedecodelab.vercel.app/",
5556
techs: [
@@ -63,6 +64,16 @@ const projects: Project[] = [
6364
],
6465
image: "/portadas/spotify.png",
6566
},
67+
{
68+
title: "Expansiva",
69+
type: "Proyecto",
70+
content:
71+
"✨ Desarrollé el sitio web de Expansiva, una plataforma para un evento artístico que fusiona poesía, tecnología y estética visual. El sitio muestra el programa, artistas invitados, imagen generativa y contenido multimedia de una forma inmersiva y moderna.<br/><br/>🧪 Implementé una experiencia interactiva que combina diseño visual con contenido poético, integré galerías de imágenes, programación de actividades y secciones de contenido artístico, prioricé una interfaz responsiva y estilizada para dispositivos móviles y de escritorio y colaboré con el equipo creativo para reflejar el espíritu experimental del proyecto.",
72+
repository: "https://github.com/FedeCodeLab/Expansiva",
73+
deploy: "https://expansiva.vercel.app/",
74+
techs: ["React", "Javascript", "Tailwind"],
75+
image: "/portadas/expansiva.png",
76+
},
6677
{
6778
title: "Deliveloz",
6879
type: "Proyecto",
@@ -119,7 +130,7 @@ const projects: Project[] = [
119130
];
120131

121132
export const Portfolio = forwardRef<HTMLDivElement>((_, ref) => {
122-
const [visibleCount, setVisibleCount] = useState(6);
133+
const [visibleCount, setVisibleCount] = useState(3);
123134

124135
const handleLoadMore = () => {
125136
setVisibleCount(projects.length);
@@ -131,7 +142,7 @@ export const Portfolio = forwardRef<HTMLDivElement>((_, ref) => {
131142
className="w-[90%] max-w-[1250px] mx-auto flex flex-col items-center justify-center gap-8 pt-20"
132143
>
133144
<h2 className="heading-3">Proyectos</h2>
134-
<div className="grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-6">
145+
<div className="grid grid-cols-1 gap-16">
135146
{projects.slice(0, visibleCount).map((project, idx) => (
136147
<ProjectCard
137148
key={idx}
@@ -142,6 +153,7 @@ export const Portfolio = forwardRef<HTMLDivElement>((_, ref) => {
142153
deploy={project.deploy}
143154
image={project.image}
144155
techs={project.techs}
156+
list={project.list}
145157
/>
146158
))}
147159
</div>

src/components/Tecnologies/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ export default function Tecnologies() {
1111
</h2>
1212
<div className="flex flex-col gap-6">
1313
<UseVelocity baseVelocity={2}>
14-
<ListLogos start={0} end={7} animation="left" position="bottom-2" />
14+
<ListLogos start={0} end={8} animation="left" position="bottom-2" />
1515
</UseVelocity>
1616
<UseVelocity baseVelocity={-2}>
17-
<ListLogos start={7} end={14} animation="right" position="top-2" />
17+
<ListLogos start={7} end={17} animation="right" position="top-2" />
1818
</UseVelocity>
1919
</div>
2020
</section>

src/services/logos.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,5 +68,15 @@
6868
"id": "logo-14",
6969
"name": "Motion",
7070
"image": "/logos/motion.svg"
71+
},
72+
{
73+
"id": "logo-15",
74+
"name": "Firebase",
75+
"image": "/logos/firebase.svg"
76+
},
77+
{
78+
"id": "logo-15",
79+
"name": "Vercel",
80+
"image": "/logos/vercel.svg"
7181
}
7282
]

src/types/project.d.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,13 @@ export type ProjectTech =
2727
| "MUI"
2828
| "Cloudinary"
2929
| "Jquery"
30-
| "React";
30+
| "React"
31+
| "Zustand";
3132

3233
export interface Project {
3334
title: string;
3435
type: string;
36+
list?: string[];
3537
repository: string;
3638
deploy: string;
3739
content: string;

0 commit comments

Comments
 (0)