My personal website build process
The build process takes exported content and prepares it for the Eleventy static site generator, reorganizing the folder structure and syncing to the final website source.
Folder Structure
| Directory | Purpose |
|---|---|
~/Code/digital-garden-python-export |
Source (output from My personal website export process) |
~/Code/digital-garden-ready |
Intermediate staging directory |
~/Code/notes |
Final Eleventy site source |
Algorithm
-
Clean staging directory - remove and recreate
digital-garden-ready -
Create directory structure in staging:
notes/pages/articles/posts/newsletters/assets/
-
First sync pass - rsync content to staging (files only, no directories):
export/clippings→ready/notesexport/notes→ready/notesexport/spaces→ready/notesexport/website/pages→ready/pagesexport/website/articles→ready/articlesexport/website/posts→ready/postsexport/website/newsletters→ready/newsletters
-
Asset sync - rsync assets including subdirectories:
export/assets/→ready/assets
-
Final sync to Eleventy - rsync to
notes/src/with delete flag (removes files no longer in source):ready/articles→notes/src/articlesready/assets→notes/src/assetsready/newsletters→notes/src/newslettersready/notes→notes/src/notesready/pages→notes/src/pagesready/posts→notes/src/posts
-
Run image uploader - execute
~/Code/digital-garden-scripts/image_uploader.py -
Clean site directory - remove and recreate
notes/_sitefor fresh build
Key Design Decisions
- Flattening content types - clippings, notes, and spaces all merge into a single
notes/directory in the final site - Using rsync with delete - ensures removed content is also removed from the website
- Staging directory - provides a clean intermediate state before final sync
- Separate image uploader - handles asset optimization/uploading as a distinct step