Rewrite website as a Hyprland desktop

This commit is contained in:
SirBlob committed 2026-10-26 14:33:05 -04:00
1 parent 7c52779cf6
commit 3065ad6092
197 files changed
+5609 -17779

No files matched your search

+76
View File
@@ -0,0 +1,76 @@
import profileData from '#content/profile.json';
import experienceData from '#content/experience.json';
import leadershipData from '#content/leadership.json';
import aboutData from '#content/about.json';
import modelsData from '#content/models.json';
import desktopData from '#content/desktop.json';
import blogData from '#content/blog.json';
import openSourceData from '#content/projects/opensource.json';
import packagesData from '#content/projects/packages.json';
import hackathonsData from '#content/projects/hackathons.json';
import researchData from '#content/projects/research.json';
import type {
AboutContent,
BlogSettings,
DesktopContent,
Experience,
Leadership,
Model3D,
Profile,
Project,
ProjectCategory,
ProjectCategoryId
} from './types';
export type * from './types';
export const profile: Profile = profileData;
export const experience: Experience[] = experienceData;
export const leadership: Leadership[] = leadershipData;
export const about: AboutContent = aboutData;
export const models: Model3D[] = modelsData;
export const desktop: DesktopContent = desktopData;
export const blogSettings: BlogSettings = blogData;
function featuredFirst(projects: Project[]): Project[] {
return [...projects].sort((first, second) => Number(!!second.featured) - Number(!!first.featured));
}
export const projectCategories: ProjectCategory[] = [
{
id: 'opensource',
title: 'Open Source',
icon: 'ph:git-branch-duotone',
summary: 'Libraries and tools I build and maintain in the open.',
projects: featuredFirst(openSourceData)
},
{
id: 'packages',
title: 'Packages',
icon: 'ph:package-duotone',
summary: 'Published packages and CLI tools you can install directly.',
projects: featuredFirst(packagesData)
},
{
id: 'hackathons',
title: 'Hackathons',
icon: 'ph:trophy-duotone',
summary: 'Weekend builds, demos, and the awards they picked up.',
projects: featuredFirst(hackathonsData)
},
{
id: 'research',
title: 'Research',
icon: 'ph:microscope-duotone',
summary: 'Research roles, projects, and publications.',
projects: featuredFirst(researchData)
}
];
export function findProjectCategory(id: string): ProjectCategory | undefined {
return projectCategories.find((category) => category.id === id);
}
export function isProjectCategoryId(id: string): id is ProjectCategoryId {
return projectCategories.some((category) => category.id === id);
}
+154
View File
@@ -0,0 +1,154 @@
export interface Social {
name: string;
icon: string;
url: string;
}
export interface Education {
school: string;
degree: string;
graduation: string;
}
export interface Profile {
name: string;
displayName: string;
username: string;
hostname: string;
title: string;
email: string;
avatar: string;
bio: string;
tagline: string;
education: Education;
socials: Social[];
skills: Record<string, string[]>;
interests: string[];
}
export interface LabeledLink {
label: string;
url: string;
}
export interface Experience {
role: string;
organization: string;
employmentType?: string;
period: string;
highlights: string[];
tech?: string[];
awards?: string[];
links?: LabeledLink[];
}
export interface Leadership {
role: string;
organization: string;
url?: string;
}
export interface ProjectLinks {
demo?: string;
code?: string;
devpost?: string;
package?: string;
article?: string;
}
export interface HackathonEvent {
name: string;
university?: string;
location?: string;
year?: string;
}
export interface Award {
track: string;
place: string;
}
export interface Project {
name: string;
description: string;
tags: string[];
links: ProjectLinks;
image?: string;
featured?: boolean;
version?: string;
organization?: string;
period?: string;
event?: HackathonEvent;
awards?: Award[];
demoMayBeOffline?: boolean;
}
export type ProjectCategoryId = 'opensource' | 'packages' | 'hackathons' | 'research';
export interface ProjectCategory {
id: ProjectCategoryId;
title: string;
icon: string;
summary: string;
projects: Project[];
}
export interface Hobby {
name: string;
icon: string;
description: string;
}
export interface Game {
name: string;
image: string;
url: string;
}
export interface RatedTitle {
name: string;
rating: number;
url: string;
}
export interface AboutContent {
hobbies: Hobby[];
games: Game[];
shows: RatedTitle[];
movies: RatedTitle[];
}
export interface Model3D {
name: string;
description: string;
file: string;
software: string[];
polyCount?: string;
}
export type DesktopAction = { page: string } | { terminal: string } | { url: string };
export interface DesktopIcon {
label: string;
icon: string;
open: DesktopAction;
}
export interface Workspace {
number: number;
name: string;
path: string;
}
export interface DesktopContent {
defaultTheme: string;
workspaces: Workspace[];
icons: DesktopIcon[];
startupCommand: string;
}
export interface BlogSettings {
name: string;
tagline: string;
postsPerPage: number;
}