-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathwork-section-data.ts
More file actions
121 lines (115 loc) · 3.74 KB
/
work-section-data.ts
File metadata and controls
121 lines (115 loc) · 3.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
export interface ProjectCard {
label: string;
accentColour: string;
title: string;
description: string;
repositoryUrl: string;
siteUrl?: string;
primaryCta?: string;
}
export const selectedWork: ProjectCard[] = [
{
label: "Flagship",
accentColour: "var(--accent-orange)",
title: "Threshold",
description: "About, not at: Threshold uses flexible time windows so alarms fit your life, not the other way around.",
repositoryUrl: "https://github.com/liminal-hq/threshold",
siteUrl: "https://threshold.liminalhq.ca/",
primaryCta: "Visit Site →",
},
{
label: "Working Memory",
accentColour: "var(--accent-blue)",
title: "Flow",
description:
"Local-first, terminal-native working memory for the shell. Track active threads, branch tangents, and keep context close while you work.",
repositoryUrl: "https://github.com/liminal-hq/flow",
primaryCta: "GitHub",
},
{
label: "Knowledge Base",
accentColour: "var(--accent-purple)",
title: "Liminal Notes",
description:
"Local-first, Markdown-based note-taking that treats your data as the source of truth. Built with Tauri, React, and Rust.",
repositoryUrl: "https://github.com/ScottMorris/liminal-notes",
siteUrl: "https://notes.liminalhq.ca/",
primaryCta: "Visit Site",
},
{
label: "Simulation",
accentColour: "var(--accent-cyan)",
title: "City Sim 1000",
description:
"Offline-ready city builder in TypeScript/Vite with PixiJS. Lay roads, power a skyline, and manage budget and demand.",
repositoryUrl: "https://github.com/ScottMorris/city-sim-1000",
siteUrl: "https://scottmorris.github.io/city-sim-1000/",
primaryCta: "Play Now",
},
];
export const experiments: ProjectCard[] = [
{
label: "CLI Utility",
accentColour: "var(--accent-purple)",
title: "SMDU",
description:
"A modern, terminal-based disk usage analyser inspired by ncdu, built with TypeScript and Ink.",
repositoryUrl: "https://github.com/ScottMorris/smdu",
siteUrl: "https://smdu.liminalhq.ca/",
},
{
label: "Linux Utility",
accentColour: "var(--accent-blue)",
title: "Emoji Nook",
description:
"Native Linux emoji picker built with Tauri and React. Launch it from a shortcut, search fast, and drop emoji into the app you were already using.",
repositoryUrl: "https://github.com/liminal-hq/emoji-nook",
},
{
label: "Knowledge Tooling",
accentColour: "var(--accent-orange)",
title: "Coherence Chat Exporter",
description:
"A CLI for archiving AI conversations into organised, tagged Markdown across providers.",
repositoryUrl: "https://github.com/liminal-hq/coherence-chat-exporter",
},
{
label: "PWA Utility",
accentColour: "var(--accent-cyan)",
title: "Keep Note Converter",
description:
"Installable Next.js PWA that converts pasted rich text into Google Keep-compatible markup.",
repositoryUrl: "https://github.com/ScottMorris/keep-note-converter",
},
];
export interface ProjectAccentStyles {
badge: {
color: string;
borderColor: string;
};
outline: {
borderColor: string;
};
}
// Product requirement: card outline accent must always match badge accent.
export function getProjectAccentStyles(accentColour: string): ProjectAccentStyles {
return {
badge: {
color: accentColour,
borderColor: accentColour,
},
outline: {
borderColor: accentColour,
},
};
}
export function getProjectCardCssVariables(accentColour: string): {
"--project-accent": string;
} {
return {
"--project-accent": getProjectAccentStyles(accentColour).outline.borderColor,
};
}
export function getPrimaryProjectUrl(project: ProjectCard): string {
return project.siteUrl ?? project.repositoryUrl;
}