Rewrite website as a Hyprland desktop
This commit is contained in:
1 parent
7c52779cf6
commit
3065ad6092
197 files changed
+5609
-17779
No files matched your search
@@ -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);
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
Reference in new issue
Block a user