◊(Local Yarn Code "Artifact [d9ff4aa0]")

Artifact d9ff4aa0548cf8479c9ea4c23def28de5770c2822a330b23f15015f5238158f8:


#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.