Commit graph

15 commits

Author SHA1 Message Date
b304e2ac9f feat: metadata generation library
this takes what i love about 'next/meta' (originally imported via my
'next-metadata' port) and consolidates it into a simple 250 line
library. instead of supporting all meta tags under the sun, only the
most essential ones are exposed. less common meta tags can be added with
JSX under the 'extra' field.

a common problem i had with next-metadata was that open graph embeds
copied a lot of data from the main meta tags. to solve this, a highly
opiniated 'embed' option exists, which simply passing '{}' will trigger
the default behavior of copying the meta title, description, and
canonical url into the open graph meta tags.
2025-08-15 22:31:28 -07:00
f1d4be2553 feat: dynamic page regeneration (#24)
the asset system is reworked to support "dynamic" entries, where each
entry is a separate file on disk containing the latest generation's
headers+raw+gzip+zstd. when calling view.regenerate, it will look for
pages that had "export const regenerate" during generation, and render
those pages using the view system, but then store the results as assets
instead of sending as a response.

pages configured as regenerable are also bundled as views, using the
non-aliasing key "page:${page.id}". this cannot alias because file
paths may not contain a colon.
2025-08-11 22:43:27 -07:00
30ad9c27ff chore: rework Clover Engine API, remove "SSR" term
"server side rendering" is a misleading term since it implies there is a
server. that isn't neccecarily the case here, since it supports running
in the browser. I think "clover engine" is cute, short for "clover html
rendering engine". Instead of "server side rendering", it's just rendering.

This commit makes things a lot more concise, such as `ssr.ssrAsync`
being renamed to `render.async` to play nicely with namespaced imports.
`getCurrentRender` and `setCurrentRender` are just `current` and
`setCurrent`, and the addon interface has been redesigned to force
symbols with a wrapping helper.
2025-08-02 22:22:07 -04:00
8c0bd4c6c6 rewrite incremental.ts (#21)
the problems with the original implementation was mostly around error
handling. sources had to be tracked manually and provided to each
incremental output. the `hasArtifact` check was frequently forgotten.
this has been re-abstracted through `incr.work()`, which is given an
`io` object. all fs reads and module loads go through this interface,
which allows the sources to be properly tracked, even if it throws.

closes #12
2025-08-02 20:56:36 -04:00
dec10df6ba add "source of truth" server to replace the old cache url 2025-08-02 20:56:36 -04:00
395492a631 format 2025-08-02 20:56:36 -04:00
922f59583d file viewer work 2025-08-02 20:56:36 -04:00
2cb5f47d4f get clo file viewer running 2025-08-02 20:56:36 -04:00
91c646d454 finish q+a 2025-08-02 20:56:36 -04:00
7bd2a90f7f work on porting paperclover.net and also some tests 2025-08-02 20:56:36 -04:00
c80e407ae0 experiment: streaming suspense implementation 2025-08-02 20:56:36 -04:00
3f3342f019 add content type library 2025-06-08 12:38:25 -07:00
bf4f8fe436 fix all type errors 2025-06-07 17:01:34 -07:00
f7b465e0c1 restore clover ssr engine from the dead. comment the code a bit too. 2025-06-07 16:17:52 -07:00
edb35537dc recover marko-runtime.ts and parts of ssr.ts 2025-06-07 03:46:14 -07:00