mirror of
https://github.com/mmahdium/portfolio.git
synced 2026-09-30 11:31:42 +03:30
Initial commit (secrets removed)
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
import { sections } from "@/data/sections"
|
||||
|
||||
/* Types are defined from the data */
|
||||
|
||||
export type SectionName = (typeof sections)[number]["name"]
|
||||
|
||||
export type Section = {
|
||||
name: SectionName
|
||||
icon: string
|
||||
components: Component[]
|
||||
}
|
||||
|
||||
export type ComponentName = (typeof sections)[number]["components"][number]["name"]
|
||||
|
||||
export type Component = {
|
||||
name: ComponentName
|
||||
aliases?: string[]
|
||||
help: string
|
||||
}
|
||||
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
declare type Optional<T> = T | undefined // sugar
|
||||
|
||||
// https://stackoverflow.com/a/75926487/2255491
|
||||
declare function useNuxtApp(): NuxtApp
|
||||
@@ -0,0 +1,128 @@
|
||||
export type SocialLinks = Partial<{
|
||||
website: string
|
||||
github: string
|
||||
linkedin: string
|
||||
twitter: string
|
||||
x: string
|
||||
email: string
|
||||
telegram: string
|
||||
instagram: string
|
||||
whatsapp: string
|
||||
spotify: string
|
||||
bento: string
|
||||
}>
|
||||
|
||||
export type Profile = {
|
||||
name: string
|
||||
title: string
|
||||
location?: string
|
||||
summary: string
|
||||
avatar?: string
|
||||
socials?: SocialLinks
|
||||
}
|
||||
|
||||
export type SkillType =
|
||||
| 'Language'
|
||||
| 'Framework'
|
||||
| 'Library'
|
||||
| 'Tool'
|
||||
| 'Service'
|
||||
| 'DevOps'
|
||||
| 'Testing'
|
||||
| 'Data'
|
||||
|
||||
export const SKILL_TYPES: readonly SkillType[] = [
|
||||
'Language',
|
||||
'Framework',
|
||||
'Library',
|
||||
'Tool',
|
||||
'Service',
|
||||
'DevOps',
|
||||
'Testing',
|
||||
'Data'
|
||||
] as const
|
||||
|
||||
export type Tag = {
|
||||
label: string
|
||||
icon?: string
|
||||
description?: string
|
||||
to?: string
|
||||
type?: SkillType
|
||||
}
|
||||
|
||||
export type TagGroup = {
|
||||
title: string
|
||||
items: Tag[]
|
||||
}
|
||||
|
||||
// Backward-compatible single-position experience
|
||||
export type Experience = {
|
||||
company: string
|
||||
role: string
|
||||
start: string
|
||||
end?: string
|
||||
ongoing?: boolean
|
||||
description: string[]
|
||||
icons?: string[]
|
||||
location?: string
|
||||
type?: string // e.g., Full-time, Self-employed
|
||||
link?: string
|
||||
linkLabel?: string
|
||||
logo?: string
|
||||
}
|
||||
|
||||
// Position inside a company timeline (LinkedIn-style)
|
||||
export type Position = {
|
||||
title: string
|
||||
start: string
|
||||
end?: string
|
||||
ongoing?: boolean
|
||||
description: string[]
|
||||
icons?: string[]
|
||||
location?: string
|
||||
type?: string
|
||||
link?: string
|
||||
linkLabel?: string
|
||||
logo?: string
|
||||
}
|
||||
|
||||
// Company grouping multiple positions
|
||||
export type CompanyExperience = {
|
||||
company: string
|
||||
link?: string
|
||||
logo?: string
|
||||
location?: string
|
||||
type?: string
|
||||
positions: Position[]
|
||||
}
|
||||
|
||||
export type Education = {
|
||||
school: string
|
||||
degree: string
|
||||
start: string
|
||||
end: string
|
||||
icons?: string[]
|
||||
logo?: string
|
||||
}
|
||||
|
||||
export type Project = {
|
||||
name: string
|
||||
description: string
|
||||
status?: string
|
||||
links?: { label: string; to: string; icon?: string }[]
|
||||
icons?: string[]
|
||||
thumbnail?: string
|
||||
opensource?: boolean
|
||||
category?: 'current' | 'freelance' | 'public'
|
||||
}
|
||||
|
||||
export type PortfolioData = {
|
||||
profile: Profile
|
||||
mainTools: TagGroup
|
||||
roles: TagGroup
|
||||
values: TagGroup
|
||||
// Supports both single experiences and grouped company timelines
|
||||
experiences: Array<Experience | CompanyExperience>
|
||||
education: Education[]
|
||||
projects: Project[]
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
export type Recommendation = {
|
||||
author: string
|
||||
author_title: string
|
||||
relationship: string
|
||||
date: string
|
||||
linkedin_url: string
|
||||
recommendation_url: string
|
||||
text: string
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user