# clover sitegen framework this repository contains clover's "sitegen" framework, which is a set of tools that assist building websites. these tools power https://paperclover.net. - **HTML "Server Side Rendering") engine written from scratch.** (~500 lines) - A more practical JSX runtime (`class` instead of `className`, built-in `clsx`, `html()` helper over `dangerouslySetInnerHTML` prop, etc). - Integration with [Marko][1] for concisely written components. - TODO: MDX-like compiler for content-heavy pages like blogs. - Different languages can be used at the same time. Supports `async function` components, ``, and custom extensions. - **Incremental static site generator and build system.** - Build entire production site at start, incremental updates when pages change; Build system state survives coding sessions. - The only difference in development and production mode is hidden source-maps and stripped `console.debug` calls. The site you see locally is the same site you see deployed. - (TODO) Tests, Lints, and Type-checking is run alongside, and only re-runs checks when the files change. For example, changing a component re-tests only pages that use that component and re-lints only the changed file. - **Integrated libraries for building complex, content heavy web sites.** - Static asset serving with ETag and build-time compression. - Dynamicly rendered pages with static client. (`#import "#sitegen/view"`) - Databases with a typed SQLite wrapper. (`import "#sitegen/sqlite"`) - TODO: Meta and Open Graph generation. (`export const meta`) - TODO: Font subsetting tools to reduce bytes downloaded by fonts. - **Built on the battle-tested Node.js runtime.** [1]: https://next.markojs.com Included is `src`, which contains `paperclover.net`. Website highlights: - [Question/Answer board, custom markdown parser and components][q+a]. - [File viewer with prefetching + client-side navigation][file]. - [Personal, friends-only blog with password protection][friends]. [q+a]: https://paperclover.net/q+a [file]: https://paperclover.net/file [friends]: https://paperclover.net/friends ## Development minimum system requirements: - a cpu with at least 1 core. - random access memory. - windows 7 or later, macos, or other operating system. my development machine, for example, is Dell Inspiron 7348 with Core i7 ``` npm install # production generation node run generate node .clover/out/server # "development" watch mode node run watch ``` ## Contributions No contributions to `src` accepted, only `framework`.