◊(Local Yarn Code "overview.scrbl at [5ac5a1e3]")

File code-docs/overview.scrbl artifact d9ff4aa0 part of check-in 5ac5a1e3


#lang scribble/manual

@; Copyright (c) 2019 Joel Dueck
@;
@; Copying and distribution of this file, with or without modification,
@; are permitted in any medium without royalty provided the copyright
@; notice and this notice are preserved.  This file is offered as-is,
@; without any warranty.

@(require "scribble-helpers.rkt"
          racket/runtime-path)

@(require (for-label racket/base))

@title{Overview}

@section{Source Code}

Here’s a rough diagram showing how the @tt{.rkt} modules in this project relate to each other, and
to the Pollen source documents.

@(define-runtime-path source-diagram "source-diagram.png")
@centered{@responsive-retina-image[source-diagram]}

The solid-line connections indicate explicit @racket[require] relationships. Dotted arrows generally
indicate implicit exports in the Pollen environment: docs and metas to templates,
@filepath{pollen.rkt} to source documents and templates. The orange lines highlight the provision
and use of the functions in @filepath{crystalize.rkt}.

Individual articles, while they are being rendered to HTML pages, save copies of their metadata and
HTML to the SQLite cache. This is done by calling functions in @filepath{crystalize.rkt} from within
the template.

Any pages that gather content from multiple articles, such as Series pages and the RSS feed, pull
this content directly from the SQLite cache. This is much faster than trawling through Pollen’s
cached metas of every article looking for matching articles.

This is the least complex system I could devise that can @tt{A)} implement everything I want in my
@wiki{Design and Layout}, @tt{B)} cleanly separate dependencies for print and web output, and
@tt{C)} organize an ever-growing collection of hundreds of individual notes and articles without
noticable loss of speed.