2025-05-03 13:19:10 -07:00
|
|
|
/**
|
|
|
|
* Represents the frontmatter for a project
|
|
|
|
*/
|
2025-04-26 23:21:07 -07:00
|
|
|
export type ProjectFrontmatter = {
|
|
|
|
/**
|
|
|
|
* The title of the project
|
|
|
|
*/
|
|
|
|
title: string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The description of the project
|
|
|
|
*/
|
|
|
|
description: string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The tags of the project
|
|
|
|
* (eg. ["JavaScript", "React", "Node.js"])
|
|
|
|
*/
|
|
|
|
tags?: string[];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The GitHub URL of the project
|
|
|
|
*/
|
|
|
|
githubUrl?: string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The live URL of the project
|
|
|
|
*/
|
|
|
|
liveUrl?: string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Whether the project should be featured on the homepage
|
|
|
|
*/
|
|
|
|
featured?: boolean;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The date the project was created or started in W3C format
|
|
|
|
* (this will determine the sort order of the projects)
|
|
|
|
*/
|
|
|
|
timestamp: string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The URL of the project on the website
|
2025-05-03 02:44:08 -07:00
|
|
|
* (eg. https://justin.deal/projects/my-project)
|
2025-04-26 23:21:07 -07:00
|
|
|
*/
|
|
|
|
filename: string;
|
|
|
|
};
|
|
|
|
|
2025-05-03 13:19:10 -07:00
|
|
|
/**
|
|
|
|
* Represents the frontmatter for an article
|
|
|
|
*/
|
2025-04-26 23:21:07 -07:00
|
|
|
export type ArticleFrontmatter = {
|
|
|
|
/**
|
|
|
|
* The title of the article
|
|
|
|
*/
|
|
|
|
title: string;
|
|
|
|
|
|
|
|
/**
|
2025-05-03 13:19:10 -07:00
|
|
|
* The summary description of the article
|
2025-04-26 23:21:07 -07:00
|
|
|
*/
|
|
|
|
description: string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The tags of the article
|
|
|
|
* (eg. ["JavaScript", "React", "Node.js"])
|
|
|
|
*/
|
|
|
|
tags?: string[];
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The estimated time to read the article in minutes
|
|
|
|
*/
|
|
|
|
time: number;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Whether the article should be featured on the homepage
|
|
|
|
*/
|
|
|
|
featured: boolean;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The timestamp the article was published in W3C format
|
|
|
|
*/
|
|
|
|
timestamp: string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The URL of the article on the website
|
2025-05-03 02:44:08 -07:00
|
|
|
* (eg. https://justin.deal/blog/my-article)
|
2025-04-26 23:21:07 -07:00
|
|
|
*/
|
|
|
|
filename: string;
|
|
|
|
};
|
2025-05-03 13:19:10 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Represents a service in the homelab
|
|
|
|
*/
|
|
|
|
export type Service = {
|
|
|
|
/**
|
|
|
|
* The name of the service
|
|
|
|
*/
|
|
|
|
name: string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The URL to the service
|
|
|
|
*/
|
|
|
|
link: string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The URL to the service icon
|
|
|
|
*/
|
|
|
|
icon: string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Alternative text for the service icon
|
|
|
|
*/
|
|
|
|
alt: string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Tags associated with the service for filtering and categorization
|
|
|
|
*/
|
|
|
|
tags?: string[];
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Represents a category of services in the homelab
|
|
|
|
*/
|
|
|
|
export type ServiceCategory = {
|
|
|
|
[category: string]: Service[];
|
|
|
|
};
|
2025-05-03 16:07:12 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Represents a social media profile
|
|
|
|
*/
|
|
|
|
export type SocialMedia = {
|
|
|
|
/**
|
|
|
|
* The name of the social media platform
|
|
|
|
*/
|
|
|
|
name: string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The URL to your profile
|
|
|
|
*/
|
|
|
|
url: string;
|
|
|
|
|
|
|
|
/**
|
2025-05-04 16:59:10 -07:00
|
|
|
* The URL to the dark version of the icon from selfh.st/icons
|
|
|
|
* Used in light theme
|
2025-05-03 16:07:12 -07:00
|
|
|
*/
|
2025-05-04 16:59:10 -07:00
|
|
|
iconDark: string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The URL to the light version of the icon from selfh.st/icons
|
|
|
|
* Used in dark theme
|
|
|
|
*/
|
|
|
|
iconLight: string;
|
2025-05-03 16:07:12 -07:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Alternative text for the icon
|
|
|
|
*/
|
|
|
|
alt: string;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Whether to show this social media profile in the footer
|
|
|
|
*/
|
|
|
|
showInFooter?: boolean;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Whether to show this social media profile on the about page
|
|
|
|
*/
|
|
|
|
showInAbout?: boolean;
|
|
|
|
};
|