UI / dev tooling - /find/ index: sort by file birthtime desc (sub-day chronology even when many finds share the same frontmatter date); render the captured-at on its own line under the host (~0.65rem mono muted) - New dev-only filter at the top of /find/: All / Not in lists, persisted in localStorage; "not in lists" hides finds referenced by any superpost - New editorial-tags chip strip on each find card (dev-only): selected tags visible by default, full picker on hover/focus-within with a "…" button for arbitrary tag entry; clicks copy /edit-find-tag <slug> <tag> to the clipboard via the existing EditConfirm singleton - New optional editorialTags: string[] field on the find collection - New src/data/editorial-tags.json — master list of available tags (initial set: ["delete"]); display order follows file order /grid/ now uses the JS Masonry component instead of CSS column-count, so the middle column no longer "dips"; tile hover updated to match the home page's accent-glow / no-translate style Content - New review: apex-markdown-processor (graduated from find of same slug; hero reused from the find folder) - New review: sindre-sorhus-older-mac-apps (graduated; intentionally hero-less per the source page's text-only design) - New review: superkey (added by user; hero wired in src/lib/hero.ts) - 24 new finds captured by /daily-finds across travel, jokes, quotes, product picks, and indie tools - 2 new finds superposts: 2026-05-04-a-small-atlas, 2026-05-04-off-until-needed Misc - daily-finds.log.md and candidate-sources.md updated with the day's runs - build-finds skill prompt iterated by user
47 lines
2.2 KiB
TypeScript
47 lines
2.2 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 esproP7 from '../content/reviews/espro-p7-french-press/hero.jpg';
|
|
import folderPeek from '../content/reviews/folder-peek/screenshot.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 superkey from '../content/reviews/superkey/hero.jpg';
|
|
import tot from '../content/reviews/tot/seven-dots.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 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 },
|
|
'espro-p7-french-press': { kind: 'image', src: esproP7 },
|
|
'folder-peek': { kind: 'image', src: folderPeek },
|
|
hyperkey: { kind: 'image', src: hyperkey },
|
|
ice: { kind: 'image', src: ice },
|
|
'mac-mouse-fix': { kind: 'image', src: macMouseFix },
|
|
superkey: { kind: 'image', src: superkey },
|
|
tot: { kind: 'image', src: tot },
|
|
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 },
|
|
monocle: { kind: 'video', src: monocle },
|
|
shottr: { kind: 'video', src: shottr },
|
|
typewhisper: { kind: 'video', src: typewhisper },
|
|
};
|