11---
22const shipped = [
33 {
4+ slug: ' full-disk-index' ,
45 icon: ' /icons/database.svg' ,
56 title: ' Live full-disk index' ,
67 description:
78 ' Indexes your entire drive once in about 4 minutes. Then stays current forever, even across restarts.' ,
89 },
910 {
11+ slug: ' private-llm' ,
12+ icon: ' /icons/sparkles.svg' ,
13+ title: ' Private LLM included' ,
14+ description:
15+ ' Comes with an on-device model for free, private use. Bring your own OpenAI/Anthropic/etc. API key for smarter results.' ,
16+ },
17+ {
18+ slug: ' speed' ,
1019 icon: ' /icons/rocket.svg' ,
11- title: ' Blazing fast' ,
20+ title: ' Really, really fast' ,
1221 description:
13- ' Built in Rust. Opens a 100k-file folder in 4 seconds with icons, sizes, and dates. Try that in Finder .' ,
22+ ' Built in Rust. Opens a 100k-file folder in 4 seconds with icons, sizes, and dates, cold. In 1 second when warm .' ,
1423 },
1524 {
25+ slug: ' keyboard-first' ,
1626 icon: ' /icons/keyboard.svg' ,
1727 title: ' Keyboard-first' ,
18- description: ' Navigate , select, copy, move. All without touching your mouse. Two panes, tabs, command palette .' ,
28+ description: ' Kb-first navigate , select, copy, move, rename; menus, tabs, settings; command palette. But works with a mouse, too .' ,
1929 },
2030]
2131
2232const upcoming = [
2333 {
34+ slug: ' smart-search' ,
2435 icon: ' /icons/search.svg' ,
2536 title: ' Smart search' ,
2637 description:
27- ' Find files by describing them : "that PDF contract from last month" or "screenshots with error messages. "' ,
38+ ' Find files by saying : "that PDF contract from last month" or "all my node_modules folders "' ,
2839 badge: ' Works but early stage' ,
2940 },
3041 {
42+ slug: ' ai-rename' ,
3143 icon: ' /icons/brain.svg' ,
3244 title: ' Natural language rename' ,
33- description:
34- ' Type "make these lowercase and add date prefix" and watch it happen. No regex, no scripts, just words.' ,
45+ description: ' Commands like "make these files lowercase and add date prefix". No regex, no scripts.' ,
3546 badge: ' Coming soon' ,
3647 },
3748 {
49+ slug: ' ai-batch' ,
3850 icon: ' /icons/zap.svg' ,
39- title: ' AI batch operations ' ,
40- description: ' Organize hundreds of files with a single command. "Sort these into folders by project name." ' ,
51+ title: ' AI file organization ' ,
52+ description: ' Say "Clean up my Downloads folder" to get a list of move/delete suggestions you can approve/reject. ' ,
4153 badge: ' Coming soon' ,
4254 },
4355]
@@ -51,19 +63,22 @@ const upcoming = [
5163 Built for <span class =" gradient-text" >power users</span >
5264 </h2 >
5365 <p class =" mx-auto max-w-2xl text-lg text-[var(--color-text-secondary)]" >
54- Fast, keyboard-driven, and getting smarter.
66+ Fast, keyboard-driven, and getting smarter every week .
5567 </p >
5668 </div >
5769
5870 <!-- Shipped features -->
59- <div class =" grid gap-6 md:grid-cols-2 lg:grid-cols-3 " >
71+ <div class =" grid gap-6 md:grid-cols-2" >
6072 {
6173 shipped .map ((feature ) => (
62- <div class = " group relative rounded-2xl border border-[var(--color-border)] bg-[var(--color-surface)] p-8 transition-all duration-300 hover:border-[var(--color-accent)]/30 hover:bg-[var(--color-surface-elevated)]" >
74+ <a
75+ href = { ` /features#${feature .slug } ` }
76+ class = " group relative block rounded-2xl border border-[var(--color-border)] bg-[var(--color-surface)] p-8 no-underline transition-all duration-300 hover:border-[var(--color-accent)]/30 hover:bg-[var(--color-surface-elevated)]"
77+ >
6378 <img src = { feature .icon } alt = " " class = " mb-4 size-10" />
6479 <h3 class = " mb-2 text-xl font-semibold" >{ feature .title } </h3 >
6580 <p class = " text-[var(--color-text-secondary)]" >{ feature .description } </p >
66- </div >
81+ </a >
6782 ))
6883 }
6984 </div >
@@ -77,20 +92,19 @@ const upcoming = [
7792 <div class =" grid gap-6 md:grid-cols-2 lg:grid-cols-3" >
7893 {
7994 upcoming .map ((feature ) => (
80- <div class = " group relative rounded-2xl border border-[var(--color-accent)]/30 bg-gradient-to-br from-[var(--color-surface)] to-[var(--color-accent)]/5 p-8 transition-all duration-300 hover:border-[var(--color-accent)]/50" >
95+ <a
96+ href = { ` /features#${feature .slug } ` }
97+ class = " group relative block rounded-2xl border border-[var(--color-accent)]/30 bg-gradient-to-br from-[var(--color-surface)] to-[var(--color-accent)]/5 p-8 no-underline transition-all duration-300 hover:border-[var(--color-accent)]/50"
98+ >
8199 { feature .badge && (
82- <a
83- href = " /roadmap"
84- class = " absolute top-4 right-4 rounded-full bg-[var(--color-accent)]/20 px-2.5 py-1 text-xs font-medium text-[var(--color-accent-text)] transition-colors hover:bg-[var(--color-accent)]/30"
85- aria-label = { ` ${feature .badge } — view roadmap ` }
86- >
100+ <span class = " absolute top-4 right-4 rounded-full bg-[var(--color-accent)]/20 px-2.5 py-1 text-xs font-medium text-[var(--color-accent-text)]" >
87101 { feature .badge }
88- </a >
102+ </span >
89103 )}
90104 <img src = { feature .icon } alt = " " class = " mb-4 size-10" />
91105 <h3 class = " mb-2 text-xl font-semibold" >{ feature .title } </h3 >
92106 <p class = " text-[var(--color-text-secondary)]" >{ feature .description } </p >
93- </div >
107+ </a >
94108 ))
95109 }
96110 </div >
0 commit comments