diff --git a/DESIGN.md b/DESIGN.md index e474d91c..c71f3f6c 100644 --- a/DESIGN.md +++ b/DESIGN.md @@ -354,7 +354,7 @@ Motifs carry data. Each answers one pitch line from `COPY.md` and spends one ros **Run chip.** It pairs with "No more skill bloat". Run and install sit side by side, and run is preselected. Run has a dashed border and a hollow rose dot, because nothing stays. Install has a solid border and a filled dot, because files land. A consequence line under the chip says what each choice leaves on disk. -**Braille spark.** It pairs with "Stay hyped". Seven braille bars (`⣀⣤⣶⣿`) show seven days of social mentions, with today in rose. The mention count sits beside it, with its noun from `sparkCount`, so one mention reads "1 mention". On the site, a day with no mentions draws the lowest bar at 40% opacity as a track, so a lone bar still reads as one day of seven. Plain text keeps the blank cell. The spark is made of characters, so the same line works on the site, in the weekly email, in Discord and in a terminal. It replaces the trending flame emoji. +**Braille spark.** It pairs with "Stay hyped". Seven columns of braille dots show seven days of social mentions, filled from the bottom, with today in rose. The mention count sits beside it, with its noun from `sparkCount`, so one mention reads "1 mention". On the site, `SparkDots` draws each day as one SVG column of up to four dots, about 20px for the week. A day with no mentions draws one dot at 40% opacity as a track, so a lone column still reads as one day of seven. Plain text prints the same levels as braille bars (`⣀⣤⣶⣿`) and keeps the blank cell, so the spark works in the weekly email, in Discord and in a terminal. The trending mark is four rising columns of the same dots. The spark replaces the trending flame emoji. **Change grid.** It pairs with "Keep updated". A 13-week grid of days, today at the bottom right. Each change is a stone dot, and the newest change is rose. A ring around a dot shows the size of the version bump, only where a version is known. @@ -468,6 +468,8 @@ These are editorial sets, not necessarily database collections yet. If a set has - **Trending shares the /skills shell**: `/skills/trending` uses the full-width layout from `/skills`. Its heading replaces `CompactPageHeader` and lines up with the results column. A sticky 14rem sidebar holds the range links, then the weekly CTA and the skilld install. Nothing sits right of the board, so the board takes every column the sidebar leaves. Rows switch on their own width, and the post carousel shows two cards where it has room. On narrow screens the ranges are a compact row above the board, and the CTA stays after the fifth row. Harlan asked for this on 2026-10-06. It supersedes the 2026-10-01 call that dropped the 9/3 sidebar for taking a quarter of the board's width: that sidebar sat right of a 64rem board, and this one sits left of a board that runs the full page width. - **Trending rows scan in one pass**: the rank is a plain mono number, and the first three are a step darker. Each metadata line runs source, stars, then the signal that ranked the row, and an empty slot renders nothing. Descriptions stop at two lines, the run chip is as wide as its command, and the post carousel shows whole cards only. The sidebar invitation drops the email preview and the card. Its button is the rail's one solid rose element, so the install chip beside it inks its dot. Harlan asked for this polish on 2026-10-06. - **Trending rows take two lines of words**: the first line says what the Skill does, and the second says why it ranked. A row ranked by posts shows at most three poster circles, the third counting the rest, then the first post as one quote line. The circles open the post carousel, and the quote line steps aside while the carousel shows. The braille spark sits beside the Skill name, where the shorter name line has room. Every post stays in the server HTML. A row dropped from 292px to 78px on desktop and from 377px to 163px on a phone. Harlan picked this from a lab of five takes on 2026-10-06. It supersedes the two-line descriptions and the carousel under every row. +- **The spark draws dots, not braille text, on the site**: as text, each bar was a two-column braille cell in a fallback font, so the week measured 70px in headless Chrome on Linux and its width changed per system. One SVG column of dots per day draws the same levels in 20px. The trending mark is four rising columns. Plain text keeps the braille bars. Harlan asked for a more compact trending mark on 2026-10-06. +- **Trending rows hold a fixed name column**: the identity column stops at 17rem and truncates the name, and the words take the rest. As a share of the row it left a wide gap on wide screens. The quote line sits one size under the description: its handle is muted, and only the Skill name in it lifts to toned ink. Quotes drop emoji and Unicode letter styles. Automated accounts, such as GitHub trending auto-posters and Grok, never lead a row's posts while a person posted. The homepage shows the top five rows. Harlan asked for this on 2026-10-06. - **A three-step lifecycle band replaces the four tiles**: under the hero, one band maps the product in its real order: find Skills, run, fork or install, keep up to date. Each step is one link: a mono step name, then one short sans line. No markers, pitch lines or commands. A line of stone dots joins the steps. Run, the default, carries the band's one rose dot, so no step lights rose on hover. From 1024px, three centered columns sit under the centered hero; below that, a vertical list with the dots down the left. The hero and the band must fit a 1440×900 viewport. Harlan cut it from six steps on 2026-10-06, because six columns of mixed type read as too busy. - **A Developers menu groups the build surfaces**: the desktop header keeps Trending Skills and Find Skills as links, and folds CLI, MCP server, SDK and Make a skill into one Developers menu, as nuxtseo.com does. The trigger is a button, so a keyboard opens the panel without leaving the page; the panel's last link reaches `/developers`. Harlan asked for this on 2026-10-06. - **The Developers menu is a bento**: the three ways to connect stack as compact rows, each a lucide icon tile, a name and one line. Make a skill fills the second column as the one large card, with an ember atmosphere and the File minimap in its corner. It names both routes: the guides and Skillgen. `/make-skill` is the one entry for authors and routes to either, so Skillgen has no card of its own. The mobile menu lists the same four items as a plain group. Harlan chose this over five uniform cards on 2026-10-06. diff --git a/app/components/BrailleSpark.vue b/app/components/BrailleSpark.vue index aecc3ec5..49926be0 100644 --- a/app/components/BrailleSpark.vue +++ b/app/components/BrailleSpark.vue @@ -1,15 +1,15 @@ + + + + diff --git a/app/components/TrendingMark.vue b/app/components/TrendingMark.vue index 87bd99a2..f09607f6 100644 --- a/app/components/TrendingMark.vue +++ b/app/components/TrendingMark.vue @@ -1,42 +1,20 @@ - - diff --git a/app/pages/brand-kit/index.vue b/app/pages/brand-kit/index.vue index a6cff8d7..5c54d49c 100644 --- a/app/pages/brand-kit/index.vue +++ b/app/pages/brand-kit/index.vue @@ -167,7 +167,7 @@ const legend = [ Braille spark

- Seven days as seven braille bars. Today is rose. + Seven days, one column of dots each. Today is rose.

diff --git a/app/pages/index.vue b/app/pages/index.vue index cbb5512e..1ffe0277 100644 --- a/app/pages/index.vue +++ b/app/pages/index.vue @@ -37,7 +37,10 @@ defineOgImage('Page.takumi', { }, { alt: 'skilld, agent skills for you and your agent' }) /** Skills the trending section shows: the head of the week board. */ -const HOME_BOARD_ROWS = 3 +const HOME_BOARD_ROWS = 5 + +/** Fewest Skills the section shows at all. */ +const HOME_BOARD_MIN_ROWS = 3 const serverTimingHeader = useResponseHeader('Server-Timing') const homeDataStartedAt = performance.now() @@ -124,7 +127,7 @@ const trendingBoard = computed(() => * the homepage costs more attention than it returns. Counted from what the * server sent, so a dead avatar never hides the section after it rendered. */ -const showTrending = computed(() => (trendingData.value?.board.length ?? 0) >= HOME_BOARD_ROWS) +const showTrending = computed(() => (trendingData.value?.board.length ?? 0) >= HOME_BOARD_MIN_ROWS) const weekBoardPath = trendingRangeMeta('week').path diff --git a/layers/marketing/app/components/TrendingPostCard.vue b/layers/marketing/app/components/TrendingPostCard.vue index ad851f61..cc181e14 100644 --- a/layers/marketing/app/components/TrendingPostCard.vue +++ b/layers/marketing/app/components/TrendingPostCard.vue @@ -1,7 +1,7 @@