A living almanac of seasons, soil, and the quiet knowledge that used to be common. Rust axum with minijinja and Vite.
agriculturealmanacaxumfolk-knowledgegardeningminijinjarustseasonalvite
1> **Archived.** This project is no longer in use and no longer maintained. Last updated July 2026.
2> I no longer own `darkfurrow.com`, so anything served there is unrelated to this code.
3> `templates/index.html` still hardcodes that domain in its canonical and social tags.
4
5# Dark Furrow
6
7The earth remembers what we forgot.
8
9A living almanac of seasons, soil, and the quiet knowledge that used to be common.
10
11## What is this?
12
13Dark Furrow is a seasonal almanac for the modern web. It surfaces the slow, forgotten rhythms that humans used to live by: what's growing right now, what's ready to harvest, what the sky is doing, what our ancestors called this week.
14
15Most people can't name what's in season. Most people don't know when to plant a seed or what phase the moon is in. This knowledge used to be ordinary. Now it's nearly gone.
16
17This project is an attempt to tend that knowledge. To present it simply, quietly, and beautifully. It is an art piece as much as a tool.
18
19## How it works
20
21A single living page.
22
23The page knows the date and the season. It calculates the moon phase, the sunrise and sunset, the lengthening or shortening of days. It holds planting calendars, seasonal food, old folk names for storms and stars, and the kind of practical wisdom that used to be passed down and no longer is.
24
25Each day, the page draws a fresh handful of these from a seed tied to the day itself, so the words shift from one morning to the next but hold steady until the next sunrise.
26
27The page reads as one column of plain sections you can scan: sky, garden, kitchen, foraging, folklore. The aesthetic is text-forward, minimal, and dark. Like reading by firelight. Like soil before dawn.
28
29For now it is keyed to planting zone 7a (North Carolina) and the America/New_York sky. The structure leaves room to grow into other zones later.
30
31## Philosophy
32
33- No external APIs. The data is encoded by hand, the math is simple, the knowledge is old. Moon phases and the sun's comings and goings are computed in place.
34- No feeds, no accounts, no engagement. Just a page that breathes with the year.
35- It grows slowly, like the things it describes.
36
37## Running it
38
39You need Rust (cargo) and bun.
40
41```
42make run # dev server with live-reloading assets, on port 8000
43make build # production assets and release binary
44make start # run the release binary
45cargo test # parity tests for the seeded picks, moon math, and sun math
46```
47
48## How the content is organized
49
50The words live as Markdown under `content/`, one file per topic and season, as `content/<topic>/<season>.md`, alongside the seasons, moods, haiku, and moon tips. To add or change what the almanac says, edit those files. No database, no build step for the prose itself.
51
52By default the app reads `content/`, `templates/`, and the built assets from the working directory. Point it elsewhere with `DARKFURROW_ROOT`.
53
54## Tech
55
56Rust (axum) serves the page and a small JSON twin of it at `/api/content`. minijinja renders the template, comrak renders the Markdown, and the astronomy is done in process. The frontend is built with Vite and Sass (managed with bun) into content-hashed assets. Fonts are self-hosted. It ships as a small Alpine Docker image with no external runtime dependencies.
57
58## Status
59
60Early. Planting season.