Files
Website/src/lib/pages/portfolio.ts
2025-11-28 19:00:24 +00:00

136 lines
5.4 KiB
TypeScript

import type { TerminalLine } from '$lib/components/tui/types';
import { user, skills, projects } from '$lib/config';
export const lines: TerminalLine[] = [
// Header command
{ type: 'command', content: 'cat ~/about.md' },
{ type: 'blank', content: '' },
// Avatar image
{ type: 'image', content: '', image: user.avatar, imageAlt: user.name, imageWidth: 150 },
{ type: 'blank', content: '' },
// User info
{ type: 'header', content: `(&primary,bold)${user.name}(&)` },
{ type: 'info', content: `(&accent)${user.title}(&)` },
{ type: 'output', content: `(&white)Location:(&) (&primary)${user.location}(&)` },
{ type: 'output', content: `(&muted)${user.bio}(&)` },
{ type: 'blank', content: '' },
{ type: 'output', content: `(&primary, bold)Links >(&)`, inline: true },
{ type: 'link', href: "/portfolio#contact", content: `(&bg-blue,black)Contact(&)`, inline: true },
{ type: 'link', href: "/portfolio#skills", content: `(&bg-orange,black)Skills(&)`, inline: true },
{ type: 'link', href: "/portfolio#projects", content: `(&bg-green,black)Projects(&)`, inline: true },
{ type: 'blank', content: '' },
{ type: 'divider', content: 'CONTACT', id: 'contact' },
{ type: 'blank', content: '' },
// Contact buttons - dynamically generated from socials array
...user.socials.map(social => ({
type: 'button' as const,
content: `${social.name}`,
icon: social.icon,
style: 'primary' as const,
href: social.link,
inline: true
})),
// {
// type: 'button',
// content: `Email: ${user.email}`,
// icon: 'mdi:email',
// style: 'secondary',
// href: `mailto:${user.email}`
// },
{ type: 'blank', content: '' },
{ type: 'divider', content: 'SKILLS', id: 'skills' },
{ type: 'blank', content: '' },
// Skills as TUI sections
// Languages
{ type: 'info', content: '(&blue,bold)▸ Languages(&)' },
{ type: 'output', content: ' ' + skills.languages.map(s => `(&cyan)${s}(&)`).join(' (&muted)•(&) ') },
{ type: 'blank', content: '' },
// Frameworks
{ type: 'info', content: '(&magenta,bold)▸ Frameworks(&)' },
{ type: 'output', content: ' ' + skills.frameworks.map(s => `(&pink)${s}(&)`).join(' (&muted)•(&) ') },
{ type: 'blank', content: '' },
// Applications
{ type: 'info', content: '(&green,bold)▸ Tools(&)' },
{ type: 'output', content: ' ' + skills.tools.map(s => `(&green)${s}(&)`).join(' (&muted)•(&) ') },
{ type: 'blank', content: '' },
// Platforms
{ type: 'info', content: '(&yellow,bold)▸ Platforms(&)' },
{ type: 'output', content: ' ' + skills.platforms.map(s => `(&yellow)${s}(&)`).join(' (&muted)•(&) ') },
{ type: 'blank', content: '' },
// Applications
{ type: 'info', content: '(&purple,bold)▸ Applications(&)' },
{ type: 'output', content: ' ' + skills.applications.map(s => `(&purple)${s}(&)`).join(' (&muted)•(&) ') },
{ type: 'blank', content: '' },
// Databases
{ type: 'info', content: '(&cyan,bold)▸ Databases(&)' },
{ type: 'output', content: ' ' + skills.databases.map(s => `(&cyan)${s}(&)`).join(' (&muted)•(&) ') },
{ type: 'blank', content: '' },
// Interests
{ type: 'info', content: '(&accent,bold)▸ Interests(&)' },
{ type: 'output', content: ' ' + skills.interests.map(s => `(&muted)${s}(&)`).join(' (&muted)•(&) ') },
{ type: 'blank', content: '' },
{ type: 'divider', content: 'PROJECTS', id: 'projects' },
{ type: 'blank', content: '' },
// Featured projects with buttons
...projects.filter(p => p.featured).flatMap(project => [
{ type: 'header' as const, content: `(&primary,bold)${project.name}(&)` },
{ type: 'output' as const, content: `(&muted)${project.description}(&)` },
{ type: 'info' as const, content: `(&info)TechStack: (&primary)${project.tech.join(', ')}(&)` },
...(project.github ? [{
type: 'button' as const,
content: 'View on GitHub',
icon: 'mdi:github',
style: 'accent' as const,
href: project.github
}] : []),
...(project.live ? [{
type: 'button' as const,
content: 'View Live Demo',
icon: 'mdi:open-in-new',
style: 'accent' as const,
href: project.live
}] : []),
{ type: 'blank' as const, content: '' }
]),
// Other projects
...projects.filter(p => !p.featured).flatMap(project => [
{ type: 'success' as const, content: `(&success)${project.name}(&)` },
{ type: 'output' as const, content: `(&muted)${project.description}(&)` },
{ type: 'info' as const, content: `(&info)TechStack:(&) (&primary)${project.tech.join(', ')}(&)` },
...(project.github ? [{
type: 'button' as const,
content: 'View on GitHub',
icon: 'mdi:github',
style: 'accent' as const,
href: project.github
}] : []),
...(project.live ? [{
type: 'button' as const,
content: 'View Live',
icon: 'mdi:open-in-new',
style: 'accent' as const,
href: project.live
}] : []),
{ type: 'blank' as const, content: '' }
]),
// End
{ type: 'success', content: `(&success)Portfolio loaded successfully!(&)` }
];