Skip to content

Commit e9272dc

Browse files
Figma prototypes added
1 parent b188dad commit e9272dc

4 files changed

Lines changed: 118 additions & 21 deletions

File tree

components/projects-section.tsx

Lines changed: 118 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
"use client"
22

3-
import { useEffect, useRef } from "react"
4-
import { Github, ExternalLink } from "lucide-react"
3+
import { useEffect, useRef, useState } from "react"
4+
import { Github, ExternalLink, Figma, Code } from "lucide-react"
55
import Link from "next/link"
66

7-
// Ejemplo de proyectos - puedes reemplazarlos con tus proyectos reales
7+
// Example projects - you can replace them with your real projects
88
const projects = [
99
{
1010
id: 1,
@@ -18,7 +18,7 @@ const projects = [
1818
{
1919
id: 2,
2020
title: "Grunge Merch",
21-
description: "Interfaz web de una tienda de merch oficial de bandas de grunge y rock, con sistema de páginas de producto detalladas y galería de imágenes HD.",
21+
description: "Official grunge and rock band merch store web interface, with detailed product pages and HD image gallery.",
2222
image: "./projects/grunge.png",
2323
technologies: ["Next.js", "React", "Tailwind CSS", "APIs", "Web Scraping"],
2424
github: "https://github.com/UltimateCosmic/grunge",
@@ -51,10 +51,51 @@ const projects = [
5151
github: "https://github.com/UltimateCosmic/UltimateCosmic.github.io",
5252
demo: "https://cosmodev.me/",
5353
},
54+
{
55+
id: 6,
56+
title: "DeliPUCP",
57+
description: "Mobile app to reserve menus across the university dining halls. Figma prototype demonstrating menu browsing, schedule selection, and reservation flow.",
58+
image: "/projects/delipucp.png",
59+
technologies: ["Figma Prototype", "Mobile", "UI/UX"],
60+
github: "", // Private repository
61+
demo: "https://www.figma.com/proto/F94vpya9dZRTw9RioBY2Ah/DELIPUCP?node-id=23-5611&p=f&t=00qIgBVLQ8tHGD28-1&scaling=scale-down&content-scaling=fixed&page-id=0%3A1&starting-point-node-id=23%3A5611&show-proto-sidebar=1",
62+
figma: "https://www.figma.com/design/F94vpya9dZRTw9RioBY2Ah/DeliPUCP?node-id=0-1&t=8eErBWAJa3yqx32j-1",
63+
},
64+
{
65+
id: 7,
66+
title: "OdiparTrack",
67+
description: "A planning system developed as part of 9th-semester coursework. Figma prototype showcases task scheduling, progress tracking, and resource allocation features.",
68+
image: "/projects/odipartrack.png",
69+
technologies: ["Figma Prototype", "Planning System", "UI/UX"],
70+
github: "", // Private repository
71+
demo: "https://www.figma.com/proto/zJ4QQT8oATe2hilIgBmOQ9/OdiparTrack-Software---Prototype?node-id=47-11512&p=f&t=8dFNxVa6FVvgEaoK-1&scaling=min-zoom&content-scaling=fixed&page-id=23%3A845&starting-point-node-id=47%3A11512&show-proto-sidebar=1",
72+
figma: "https://www.figma.com/design/zJ4QQT8oATe2hilIgBmOQ9/OdiparTrack-Software---Prototype?node-id=23-845&t=xUV13eCrmrIxBU9h-1",
73+
},
74+
{
75+
id: 8,
76+
title: "MiTutor",
77+
description: "Tutoring management system for coordinating sessions between professors and students, developed during 7th-semester coursework. Figma prototype includes session booking, tutor profiles, and messaging flows.",
78+
image: "/projects/mitutor.png",
79+
technologies: ["Figma Prototype", "Education", "Scheduling"],
80+
github: "", // Private repository
81+
demo: "https://www.figma.com/proto/PNjuf2y76dcM4Ip6WOjzNt/Prototipo?node-id=2266-20827&p=f&t=20oUQkWg9payQwdf-1&scaling=min-zoom&content-scaling=fixed&page-id=6%3A16&starting-point-node-id=2266%3A20827",
82+
designType: "figma",
83+
figma: "", // Figma prototype exists but not publicly shared — mark as private
84+
},
5485
]
5586

87+
// Filter state: default to show non-Figma projects (code/other)
88+
// 'projects' = non-Figma items, 'designs' = Figma prototypes
89+
type FilterType = "projects" | "designs"
90+
5691
export function ProjectsSection() {
5792
const sectionRef = useRef<HTMLElement>(null)
93+
const [filter, setFilter] = useState<FilterType>("projects")
94+
95+
const filteredProjects = projects.filter((p) => {
96+
const isFigma = Boolean(p.figma) || p.designType === "figma"
97+
return filter === "designs" ? isFigma : !isFigma
98+
})
5899

59100
useEffect(() => {
60101
const observer = new IntersectionObserver(
@@ -87,8 +128,37 @@ export function ProjectsSection() {
87128
<h2 className="text-3xl font-bold leading-tight tracking-tighter md:text-4xl mb-8">
88129
<span className="text-dark-accent">#</span> Projects
89130
</h2>
131+
132+
{/* Filter tabs: Projects (default) / Designs - simple, full-width buttons, stack on mobile */}
133+
<div className="mb-6 flex w-full flex-col md:flex-row gap-3">
134+
<button
135+
onClick={() => setFilter("projects")}
136+
className={`flex-1 w-full flex items-center justify-center gap-2 px-3 py-2 rounded-md text-sm font-medium transition-colors ${
137+
filter === "projects"
138+
? "bg-dark-accent/10 text-dark-accent border border-dark-accent"
139+
: "bg-dark-surface text-dark-secondary border border-dark-border"
140+
}`}
141+
aria-pressed={filter === "projects"}
142+
>
143+
<Code className="h-4 w-4" />
144+
<span>Projects</span>
145+
</button>
146+
<button
147+
onClick={() => setFilter("designs")}
148+
className={`flex-1 w-full flex items-center justify-center gap-2 px-3 py-2 rounded-md text-sm font-medium transition-colors ${
149+
filter === "designs"
150+
? "bg-dark-accent/10 text-dark-accent border border-dark-accent"
151+
: "bg-dark-surface text-dark-secondary border border-dark-border"
152+
}`}
153+
aria-pressed={filter === "designs"}
154+
>
155+
<Figma className="h-4 w-4" />
156+
<span>Designs</span>
157+
</button>
158+
</div>
159+
90160
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-6">
91-
{projects.map((project) => (
161+
{filteredProjects.map((project) => (
92162
<div
93163
key={project.id}
94164
className="bg-dark-background rounded-lg overflow-hidden border border-dark-border transition-all duration-300 hover:border-dark-accent hover:shadow-lg hover:shadow-dark-accent/10 flex flex-col h-full"
@@ -122,22 +192,49 @@ export function ProjectsSection() {
122192
</div>
123193
</div>
124194
<div className="flex justify-between mt-auto">
125-
{project.github ? (
126-
<Link
127-
href={project.github}
128-
target="_blank"
129-
rel="noopener noreferrer"
130-
className="flex items-center text-dark-secondary hover:text-dark-accent transition-colors"
131-
>
132-
<Github className="h-4 w-4 mr-1" />
133-
<span className="text-sm">Code</span>
134-
</Link>
135-
) : (
136-
<span className="flex items-center text-dark-secondary/50">
137-
<Github className="h-4 w-4 mr-1" />
138-
<span className="text-sm">Private</span>
139-
</span>
140-
)}
195+
<div className="flex items-center space-x-4">
196+
{/* Show Code if repository exists */}
197+
{project.github && (
198+
<Link
199+
href={project.github}
200+
target="_blank"
201+
rel="noopener noreferrer"
202+
className="flex items-center text-dark-secondary hover:text-dark-accent transition-colors"
203+
>
204+
<Github className="h-4 w-4 mr-1" />
205+
<span className="text-sm">Code</span>
206+
</Link>
207+
)}
208+
209+
{/* If project has a Figma design URL, show Design with Figma icon.
210+
If project is a Figma prototype but has no public URL (designType === 'figma' && !project.figma),
211+
show "Private" with the Figma icon. Otherwise, if no github and no figma, show Private with GitHub icon. */}
212+
{project.figma ? (
213+
<Link
214+
href={project.figma}
215+
target="_blank"
216+
rel="noopener noreferrer"
217+
className="flex items-center text-dark-secondary hover:text-dark-accent transition-colors"
218+
>
219+
<Figma className="h-4 w-4 mr-1" />
220+
<span className="text-sm">Design</span>
221+
</Link>
222+
) : project.designType === "figma" ? (
223+
// Figma prototype exists but not publicly shared — show Private with Figma icon
224+
<span className="flex items-center text-dark-secondary/50">
225+
<Figma className="h-4 w-4 mr-1" />
226+
<span className="text-sm">Private</span>
227+
</span>
228+
) : (
229+
!project.github && (
230+
<span className="flex items-center text-dark-secondary/50">
231+
<Github className="h-4 w-4 mr-1" />
232+
<span className="text-sm">Private</span>
233+
</span>
234+
)
235+
)}
236+
</div>
237+
141238
<Link
142239
href={project.demo}
143240
target="_blank"

public/projects/delipucp.png

18.9 KB
Loading

public/projects/mitutor.png

680 KB
Loading

public/projects/odipartrack.png

2.77 MB
Loading

0 commit comments

Comments
 (0)