Overview
All TypeScript interfaces are defined insrc/types/index.ts. This document provides comprehensive documentation for each interface and its fields.
Core Types
SocialLink
Represents a social media profile link with icon and accessibility information. Source:src/types/index.ts:3-8
The URL to the social media profile or contact method.Examples:
"https://github.com/avivkeller""https://linkedin.com/in/avivkeller""mailto:me@aviv.sh"
The icon identifier used with astro-icon library.Format:
{collection}:{icon-name}Examples:"simple-icons:github""simple-icons:linkedin""mdi:email"
Human-readable label for the link, used for accessibility and display.Examples:
"GitHub""LinkedIn""Email"
Optional relationship attribute for the link (e.g.,
"noopener", "noreferrer").Project
Represents a portfolio project with metadata, links, and technology stack. Source:src/types/index.ts:10-17
The project name or title.Examples:
"Termview""Keyframed""Node.js Core"
A brief description of the project, its purpose, and key features.Example:
Optional project thumbnail or logo image imported from the assets directory.Type: Astro’s
ImageMetadata type for optimized imagesUsage:Optional array of technologies, frameworks, or languages used in the project.Examples:
URL to the project’s GitHub repository.Format:
https://github.com/{username}/{repo}Example: "https://github.com/avivkeller/termview"Optional URL to the project’s live website or demo.Examples:
"https://example.com""https://npm.im/package-name"
Achievement
Represents an award, recognition, or notable accomplishment. Source:src/types/index.ts:19-23
The achievement title or description.Examples:
"Node.js Contributor""HackerOne Top 100""Open Source Award 2024"
Optional icon identifier for visual representation.Format:
{collection}:{icon-name}Examples:"simple-icons:nodejs""mdi:trophy"
Link to more information about the achievement (profile, certificate, announcement, etc.).Examples:
"https://github.com/nodejs/node""https://hackerone.com/aviv_keller"
BlogPost
Represents a blog post with frontmatter metadata. Source:src/types/index.ts:25-33
The relative or absolute URL to the blog post.Examples:
"/blog/my-first-post""https://blog.example.com/post"
Metadata extracted from the blog post’s frontmatter.
NavigationItem
Represents a navigation menu item. Source:src/types/index.ts:35-39
The URL or path for the navigation link.Examples:
"/projects""/about""https://external-site.com"
The display text for the navigation item.Examples:
"Projects""About Me""Contact"
Optional link target attribute for controlling how the link opens.Common values:
"_blank"- Opens in a new tab/window"_self"- Opens in the same frame (default)
Position
Represents a job position within a work experience entry. Source:src/types/index.ts:41-44
The job title or role.Examples:
"Software Engineer""Senior Developer""Technical Lead"
The time period for this position.Format: Flexible, human-readable formatExamples:
"Jan 2022 - Present""2020 - 2022""Summer 2021"
WorkExperience
Represents a complete work experience entry with company information and positions held. Source:src/types/index.ts:46-52
The company or organization name.Examples:
"Google""NASA""Acme Corporation"
URL to the company’s website.Examples:
"https://google.com""https://nasa.gov"
The employment type.Allowed values:
"full-time"- Full-time employment"part-time"- Part-time employment"contract"- Contract or freelance work"internship"- Internship position"volunteer"- Volunteer work
Array of positions held at this company, ordered chronologically (most recent first).Type: Array of Position objectsExample:
Optional array of technologies used during this experience.Examples:
Type Unions
Employment Type
TheWorkExperience.type field uses a union of string literals:
External Dependencies
ImageMetadata
Imported from Astro for optimized image handling:Project.image field and provides metadata about imported images including dimensions, format, and source path.