RemCTL (Federico Viticci's Reminders CLI): category `automation`, hero reused from MacStories OG card. Body flags the private-API caveat — RemCTL reads Reminders' SQLite + ReminderKit directly. Editorio (indie markdown+code editor): category `writing`, hero reused from Reddit OG. No homepage exists yet; review acknowledges single- Reddit-post documentation. Used astro:assets <Image> for responsive srcset on the small JPG. Muxy (SwiftUI workspace): category `terminal`, fresh hero from the github.com/muxy-app/muxy README. The find sold this as "a terminal with a sidebar" — the review's blockquote opens by correcting that. Muxy is actually a full SwiftUI workspace (Git tooling, file tree, command palette, Mermaid preview, 490 themes, iOS+Android companion apps). Review link points to github repo per user direction.
81 lines
4.3 KiB
TypeScript
81 lines
4.3 KiB
TypeScript
import type { ImageMetadata } from 'astro';
|
|
|
|
import alcove from '../content/reviews/alcove/hero.png';
|
|
import altTab from '../content/reviews/alt-tab/hero.jpg';
|
|
import apex from '../content/reviews/apex-markdown-processor/hero.png';
|
|
import bartender from '../content/reviews/bartender-6-dynamic-peninsula/peninsula.png';
|
|
import blip from '../content/reviews/blip/hero.jpg';
|
|
import continueYn from '../content/reviews/continue-y-n-game/hero.png';
|
|
import cursorCamp from '../content/reviews/cursor-camp-neal-fun/hero.png';
|
|
import editorio from '../content/reviews/editorio/hero.jpeg';
|
|
import esproP7 from '../content/reviews/espro-p7-french-press/hero.jpg';
|
|
import finalist from '../content/reviews/finalist/hero.png';
|
|
import folderPeek from '../content/reviews/folder-peek/screenshot.png';
|
|
import gnome from '../content/reviews/gnome-gif-menubar/screenshot.png';
|
|
import gumShell from '../content/reviews/gum-shell/hero.png';
|
|
import hyperkey from '../content/reviews/hyperkey/hero.png';
|
|
import ice from '../content/reviews/ice/ice-bar.png';
|
|
import macMouseFix from '../content/reviews/mac-mouse-fix/studio-display.png';
|
|
import monitorcontrol from '../content/reviews/monitorcontrol/hero.png';
|
|
import muxy from '../content/reviews/muxy-terminal/hero.png';
|
|
import remctl from '../content/reviews/remctl-reminders-cli/hero.png';
|
|
import smartmoverShortcut from '../content/reviews/smartmover-shortcut/hero.jpg';
|
|
import superkey from '../content/reviews/superkey/hero.jpg';
|
|
import tablepro from '../content/reviews/tablepro/hero.png';
|
|
import timelined from '../content/reviews/timelined/hero.png';
|
|
import tot from '../content/reviews/tot/seven-dots.png';
|
|
import valchooseBarfBags from '../content/reviews/valchoose-barf-bags/hero.jpg';
|
|
import zenteek from '../content/reviews/zenteek-music-player/library.png';
|
|
|
|
import antinote from '../content/reviews/antinote/swipe.mp4';
|
|
import cotypist from '../content/reviews/cotypist/hero.mp4';
|
|
import dockdoor from '../content/reviews/dockdoor/alttab.mp4';
|
|
import fluxMarkdown from '../content/reviews/flux-markdown/demo.mp4';
|
|
import homerow from '../content/reviews/homerow/overlay.mp4';
|
|
import loop from '../content/reviews/loop-radial-window-manager/radial-menu.mp4';
|
|
import monocle from '../content/reviews/monocle/spotlight.mp4';
|
|
import shottr from '../content/reviews/shottr/text-erase.mp4';
|
|
import typewhisper from '../content/reviews/typewhisper/demo.mp4';
|
|
|
|
export type Hero =
|
|
| { kind: 'image'; src: ImageMetadata }
|
|
| { kind: 'video'; src: string };
|
|
|
|
export const heroes: Record<string, Hero | undefined> = {
|
|
alcove: { kind: 'image', src: alcove },
|
|
'alt-tab': { kind: 'image', src: altTab },
|
|
'apex-markdown-processor': { kind: 'image', src: apex },
|
|
'bartender-6-dynamic-peninsula': { kind: 'image', src: bartender },
|
|
blip: { kind: 'image', src: blip },
|
|
'continue-y-n-game': { kind: 'image', src: continueYn },
|
|
'cursor-camp-neal-fun': { kind: 'image', src: cursorCamp },
|
|
editorio: { kind: 'image', src: editorio },
|
|
'espro-p7-french-press': { kind: 'image', src: esproP7 },
|
|
finalist: { kind: 'image', src: finalist },
|
|
'folder-peek': { kind: 'image', src: folderPeek },
|
|
'gnome-gif-menubar': { kind: 'image', src: gnome },
|
|
'gum-shell': { kind: 'image', src: gumShell },
|
|
hyperkey: { kind: 'image', src: hyperkey },
|
|
ice: { kind: 'image', src: ice },
|
|
'mac-mouse-fix': { kind: 'image', src: macMouseFix },
|
|
monitorcontrol: { kind: 'image', src: monitorcontrol },
|
|
'muxy-terminal': { kind: 'image', src: muxy },
|
|
'remctl-reminders-cli': { kind: 'image', src: remctl },
|
|
'smartmover-shortcut': { kind: 'image', src: smartmoverShortcut },
|
|
superkey: { kind: 'image', src: superkey },
|
|
tablepro: { kind: 'image', src: tablepro },
|
|
timelined: { kind: 'image', src: timelined },
|
|
tot: { kind: 'image', src: tot },
|
|
'valchoose-barf-bags': { kind: 'image', src: valchooseBarfBags },
|
|
'zenteek-music-player': { kind: 'image', src: zenteek },
|
|
antinote: { kind: 'video', src: antinote },
|
|
cotypist: { kind: 'video', src: cotypist },
|
|
dockdoor: { kind: 'video', src: dockdoor },
|
|
'flux-markdown': { kind: 'video', src: fluxMarkdown },
|
|
homerow: { kind: 'video', src: homerow },
|
|
'loop-radial-window-manager': { kind: 'video', src: loop },
|
|
monocle: { kind: 'video', src: monocle },
|
|
shottr: { kind: 'video', src: shottr },
|
|
typewhisper: { kind: 'video', src: typewhisper },
|
|
};
|