Ridgeline Shell
A three-layer rain jacket for long wet days
$189.00
See the whole entryLike Astro, if Astro were made for React.
Write it in React, style it with your own CSS, or hand it to your agent: every page ships as plain HTML, and only the components you mark "use client" wake up in the browser.
npm create pagedeckStart a component with "use client" once, in its own file, not at every place you use it. Each page that renders it gets it as an island, and no other page pays for it.
A page with nothing interactive ships plain HTML and CSS, without one script tag.
Pages, layouts and islands are all React components. There is no template language to learn and no wrapper file to write.
0 B
of JavaScript on a page with nothing interactive
This page, measured by its own build. One byte more fails the build.
See what one island costs ›pagedeck ships no CSS, no theme and no part names to learn: the markup is your own React. Here is one component, rendered twice from the same CMS entry. Only the stylesheet changes, and neither one costs a byte of JavaScript.
A three-layer rain jacket for long wet days
$189.00
See the whole entry.paper .teaser {
padding: 36px 32px;
border-radius: 2px;
background: #f4efe6;
color: #2b2118;
font-family: Georgia, "Times New Roman", serif;
box-shadow: 0 18px 40px rgb(0 0 0 / .4);
}
.paper .teaser h3 {
margin: 0 0 8px;
font-size: 34px;
font-style: italic;
font-weight: 400;
}
.paper .teaser p {
margin: 0 0 18px;
font-size: 18px;
line-height: 1.5;
}
.paper .teaser a {
color: #8a3b12;
}A three-layer rain jacket for long wet days
$189.00
See the whole entry.signal .teaser {
display: grid;
gap: 12px;
padding: 24px;
border: 2px solid #3ddc97;
background: #000;
color: #3ddc97;
font-family: ui-monospace, Menlo, monospace;
text-transform: uppercase;
}
.signal .teaser h3 {
margin: 0;
font-size: 20px;
letter-spacing: .08em;
}
.signal .teaser h3::after {
content: "";
display: inline-block;
width: .6em;
height: 1em;
margin-left: .3em;
vertical-align: -.15em;
background: currentcolor;
}
.signal .teaser p {
margin: 0;
font-size: 14px;
}
.signal .teaser a {
justify-self: start;
padding: 8px 14px;
background: #3ddc97;
color: #000;
font-size: 14px;
text-decoration: none;
}The browser already knows how to show a page. pagedeck hands it finished HTML and steps aside, so the only JavaScript on a page is the JavaScript that page asked for.
Every page renders to HTML when the site builds, so your words are on screen before a single script runs.
Give each page a JavaScript budget, and the build fails when a page ships one byte more. This page's budget is 0 B.
A server component reads the whole CMS entry when the site builds. On /server-data it reads 67.1 kB and sends the browser 2.3 kB.
See it on /server-data ›Whether you write the code or your coding agent does, pagedeck leaves less to guess.
Pages are React components, and islands use React's own "use client". An agent that knows React already knows how to build here.
pagedeck is written in TypeScript and ships its types, so your editor and your agent see every option.
Ship more JavaScript than a page's budget, link to a page that does not exist, or render a second main landmark, and the build stops. Your agent hears about it before your readers do.
pagedeck looks after landmarks and search for you, for the keyboard and the screen reader alike. Each line below is backed by a test in pagedeck's own repo.
Try the search ›Every page gets exactly one main landmark. A component that renders a second fails the build.
Search is a combobox: arrow keys walk the results, Enter follows one, Escape closes them.
Text typed into search before it hydrates is kept, caret and all.
pagedeck is part of deck.cool, a family of unstyled React packages that look like you and work like the browser. Meet the family ›