Almanac documentation

A personal Ghost theme for essays, notes and a digital garden: a writing heatmap, everything listed by year, growth stages, sidenotes in the margin and a Wander button.
Thank you for choosing Almanac. This guide covers everything from uploading the theme to setting up paid memberships. If something is not covered here, write to support@codememory.com — we answer within one working day.
- Version1.0.0
- Ghost6.0.0 or later
- Live demoalmanac.ghostcms.templates.codememory.com
- AuthorCode Memory
Highlights
- Writing heatmap: the last twelve months as a calendar of squares, darker for essays than for notes, each square linking to that day's entry
- Everything, by year: the homepage, tags and authors list entries as dated rows with a heading for each year, even across Load more
- Growth stages from internal tags: #seedling, #budding and #evergreen show as small marks on rows and posts, with a legend
- Sidenotes: write ((like this)) and the text becomes a numbered note in the margin on wide screens, and a tap-to-open note on phones
- Planted and last tended dates: posts show when they were published and, if edited later, when they were last tended
- Notes stream: short posts with the internal tag #note get their own row style, a sidebar stream and a Note template
- Note post template: an index card with ruled lines and links to the older and newer note
- Wander: a dice button that opens a random post, in the header, after every post, in the footer and on the 404 page
- Today's almanac line under the site name: weekday, date, week and day of the year, in the reader's language
- Start here, garden beds and growth stages in the homepage side column
- Archive, Garden (tags with their newest entries) and People page templates
- A dot-grid paper look in light mode and a night-ink dark mode, with a reader toggle
- Membership page with tiers and a monthly/yearly switch; styled paywall for members and paid posts
- Sign in, sign up and account pages
- Self-hosted fonts (Crimson Pro, DM Mono)
- Fully translatable, 17 theme settings, no jQuery
What is in the download
themeforest-almanac-ghost-theme/ ├── documentation/ ← you are here ├── sample-content/almanac-sample-content.json ← optional demo posts (see Sample content) └── almanac_1.0.0_for_ghost_6.0.0_or_later/ ├── almanac.zip ← upload this file to Ghost └── almanac/ ← the same theme, unzipped, with source files
You only need almanac.zip to use the theme. The unzipped folder is there for developers who
want to change the code (see Development).
Installation
- Sign in to your Ghost admin (
yoursite.com/ghost). - Go to Settings → Design & branding → Customize → Change theme.
- Click Upload theme and choose
almanac.zipfrom thealmanac_1.0.0_for_ghost_6.0.0_or_laterfolder. Do not upload the whole download. - Click Activate.
Updating
When a new version is released, download it from your ThemeForest Downloads page and upload the new
almanac.zip the same way. Ghost asks whether to overwrite the existing theme — choose
Overwrite. Your content, navigation and theme settings are kept.
If you edited the theme files yourself, keep a copy of your changes first: an update replaces every file.
Quick setup (10 minutes)
To make your site look like the demo, do these steps in order. Each one is explained in detail further down.
- Brand: Settings → Design & branding → set the Accent colour, upload a logo and a site icon.
- Navigation: Settings → Navigation → add your main links (see Navigation).
- Pages: create the pages in Pages and templates and pick the matching template.
- Membership: Settings → Membership → turn on signups; add paid tiers and connect Stripe (see Membership).
- Theme settings: Design & branding → Theme tab (see Theme settings).
- Archive: create a page with the slug
archiveand the Archive template. The Everything, by year button after each post links to it. - Notes: for a short post, add the internal tag
#noteand choose the Note template. Give all notes the same public tag (for example Notes) as their first tag so the older/newer links follow the notes. - Growth stages: add
#seedling,#buddingor#evergreento any post. - Start here: mark your best posts as Featured; the first five appear in the homepage side column.
Sample content
The download includes the demo's text as a Ghost import file:
sample-content/almanac-sample-content.json. It holds 48 posts, 9 pages, 8 tags
and the demo writers, with the same templates and settings per post as the live demo. Use it to see how
Almanac looks with real content, or as a starting point you edit.
- Use a new or test site — the import adds posts next to anything you already have.
- Go to Settings → Advanced → Import/Export → Import content.
- Choose
almanac-sample-content.jsonand confirm. - Set up Navigation, page templates and theme settings as described below. Ghost does not import these from a content file.
Logo, colours and fonts
Accent colour
Settings → Design & branding → Accent colour. Almanac uses it for buttons, links, highlights and the reading-progress bar. Almanac uses your accent colour (moss green #2F6B4F by default) for the heatmap squares, year headings, links and buttons. Sidenote numbers use a rust colour set in CSS as --rust. Each tag's accent colour is the top border of its bed on the Garden page.
Logo
Upload a logo in Design & branding → Brand. Without a logo, Almanac shows the site title in the theme's display font. A transparent PNG or SVG around 400 × 100 px works best. If your logo is dark, upload a light version in the Theme tab under Logo for dark mode.
Fonts
Almanac ships its own fonts (Crimson Pro, DM Mono), hosted inside the theme — no requests to Google. To use different fonts, pick a Heading font and Body font in Design & branding → Brand. The theme follows your choice everywhere. Choose Theme default to go back.
Light and dark mode
In the Theme tab, Color scheme sets the default: Light, Dark or System (follows the reader's device). Readers can switch with the moon/sun button in the header or the switch in the menu; their choice is remembered on that device.
Theme settings
Settings → Design & branding → Customize. Theme settings are split between the Site wide, Homepage and Post tabs. Every setting:
| Setting | Group | Type | Default | What it does |
|---|---|---|---|---|
| Color scheme | Site wide | select | Light (Light / Dark / System) | Readers can still switch with the sun/moon button. |
| Logo for dark mode | Site wide | image | — | Optional light version of your logo for dark mode. |
| Newsletter title | Site wide | text | Letters from the almanac | Title of the newsletter box. |
| Newsletter text | Site wide | text | empty | Text of the newsletter box. Empty = site description. |
| Footer text | Site wide | text | empty | Small footer line. Empty = site description. |
| Show share buttons | Post | boolean | On | Share buttons (X, Facebook, LinkedIn, copy link) under posts. |
| Show author box | Post | boolean | On | Author photo and bio under posts. |
| Show related posts | Post | boolean | On | Three posts from the same tag under each post. |
| Show reading progress | Post | boolean | On | Progress bar at the top of the screen while reading a post. |
| Hero title | Homepage | text | empty | The big line at the top of the homepage. Empty = site description. |
| Show date line | Site wide | boolean | On | Today's date and week of the year under the site name. |
| Show heatmap | Homepage | boolean | On | A year of entries as a calendar of squares. |
| Heatmap title | Homepage | text | A year of writing | |
| Show notes | Homepage | boolean | On | The latest posts with the internal tag #note, beside the list. |
| Notes title | Homepage | text | Latest notes | |
| Show tended date | Post | boolean | On | Show "last tended" when a post was edited after it was published. |
| Show sidenotes | Post | boolean | On | Text written ((like this)) becomes a numbered note in the margin. |
The writing heatmap and the year list
The homepage shows the last twelve months as a calendar: one square per day, one column per week. A day with an essay is darker than a day with a note; two entries on one day are darker still. Hover or focus a square to see the date and titles; click it to open the entry. The line above the calendar counts entries, essays and notes, and your longest run of weeks with at least one entry.
The heatmap reads your newest 100 posts. Turn it off with Show heatmap, or rename it with Heatmap title.
Every list of posts groups entries under a heading for each year. On the homepage and the Archive page the heading also shows how many entries that year has.
Sidenotes
Write an aside inside double brackets in any paragraph or list item:
In the morning I do it first. ((Urgent and important are different words for a reason.))Almanac replaces it with a small number. On screens wider than 1180 pixels, the note sits in the right margin beside its line, the way old books printed them. On smaller screens, readers tap the number to open the note under the line. Numbers run through the whole post.
Turn sidenotes off with Show sidenotes: the text then appears in ordinary brackets.
Growth stages and tended dates
Mark how finished a post is with one internal tag (a tag whose name starts with #, which readers never see):
#seedling: a first rough idea#budding: taking shape, still growing#evergreen: finished, and still true
The stage shows as a small mark on list rows, in the post meta line, on the Garden page and in the legend on the homepage. The words are translatable in locales/.
Each post says when it was planted (published). When you edit a post at least two days after publishing it, Almanac also shows last tended with the edit date. Turn that off with Show tended date.
Notes, Wander and the dateline
Posts with the internal tag #note are short entries. They get a lighter italic row in lists, their own stream in the homepage side column (Show notes, Notes title), and the Note post template: an index card with ruled lines and links to the older and newer note.
The Wander button (a small die) opens a random post from your site's sitemap. It never opens the page you are already on.
Under the site name, the dateline shows today's weekday, date, week of the year and day of the year, in the language of your site. Turn it off with Show date line.
Pages and templates
Almanac includes page templates for the pages every membership site needs. Create a page in Ghost (Pages → New page), set its URL in the page settings, then choose the Template in the same panel.
| Template | Suggested URL | Use |
|---|---|---|
Archivecustom-archive.hbs | /archive/ | Every entry (up to 100), newest first, grouped by year with a count for each year. |
Gardencustom-topics.hbs | /topics/ | Every public tag as a garden bed with its colour, description, entry count and newest three entries. |
Peoplecustom-writers.hbs | /writers/ | Every author with at least one post: photo, location, bio and entry count. |
Membershipcustom-membership.hbs | /membership/ | Your tiers with a monthly/yearly switch. The page body (for example a FAQ made of toggle cards) appears below. |
Signincustom-signin.hbs | /signin/ | Email sign-in form (magic link) with the page's feature image. |
Signupcustom-signup.hbs | /signup/ | Free signup form with name and email and the page's feature image. |
Accountcustom-account.hbs | /account/ | Signed-in members see their plan, renewal date, card and links to manage billing and newsletters. |
Tip: the membership page shows your tiers automatically. Anything you write in the page body appears underneath — the demo uses toggle cards for a FAQ.
Post templates
Choose a template per post in the post settings panel → Template.
| Template | Use | |
|---|---|---|
Notecustom-note.hbs | A short entry on an index card with ruled lines, and links to the older and newer note. |
Membership, tiers and payments
Almanac is built for Ghost's members features: free and paid signups, tiers, a paywall and the Portal popup.
1. Turn on signups
Settings → Membership → Access → Who should be able to subscribe? → Anyone can sign up.
2. Connect Stripe
Settings → Membership → Tiers → Connect with Stripe. Use test mode first, then switch to live mode when you are ready to take real payments.
3. Create tiers
Settings → Membership → Tiers. Add a name, monthly and yearly prices, a description and benefits. Almanac shows every public tier on the membership page with a monthly/yearly switch, and marks the second tier as Most popular.
4. Members-only content
In a post's settings set Post access to Members only, Paid-members only or
specific tiers. Readers without access see the start of the post and a paywall box that invites them to join
or upgrade. To choose where the preview stops, add a Public preview divider in the editor
(type /public).
5. Sign-up forms and buttons
Subscribe forms in the theme create free members and send a confirmation email. Every Subscribe, Sign in and Account button opens Ghost's Portal popup, so members can change plans, update cards and cancel without leaving your site.
config.production.json.Reading features
- Reading progress bar on posts, in the post's topic colour (can be turned off in the Post tab).
- Image lightbox: click any image or gallery photo in a post to see it full screen; use the arrow keys to move through a gallery.
- Every editor card is styled: images (regular, wide, full), galleries, quotes, callouts, toggles, bookmarks, buttons, videos, audio, files, products, headers and signups. Create a page with every card to check your brand — the demo's style guide shows them all.
Posts per page
The home, tag and author pages load 15 posts, then a
Load more button fetches the next set without reloading the page. To change the number, edit
"posts_per_page" in package.json, zip the theme folder and upload it again.
Translation
Every word in the theme can be translated.
- In the unzipped theme folder, copy
locales/en.jsonto a new file named after your language code, for examplelocales/fr.json. - Translate the values (the text on the right). Keep the keys (the text on the left) and anything in
{curly braces}unchanged. - Zip the theme folder and upload it.
- Settings → General → Publication language → enter the same code (
fr).
Custom CSS
Small style changes do not need a new theme upload. Settings → Code injection → Site header:
<style>
:root { --rust: #7a4e7e; }
body { background-image: none; }
</style>
Development
For larger changes, work on the unzipped almanac/ folder. You need Node.js 20 or later.
cd almanac npm install # once npm run dev # rebuild CSS/JS on every change npm run build # one-off build npm test # check the theme with gscan npm run zip # dist/almanac.zip, ready to upload
CSS lives in src/css (one file per area, joined by main.css); JavaScript in
src/js. Built files go to assets/built. Templates are Handlebars files in the theme root
and in partials/.
Questions
The homepage looks empty after I activated the theme.
The home sections use your posts, featured posts and tags. Publish a few posts, mark some as Featured and add tags. The heatmap fills in as you publish; the notes stream needs posts with the #note tag; Start here needs featured posts.
The membership page shows no prices.
Paid tiers only appear once Stripe is connected and the tiers are public (Settings → Membership → Tiers).
Sign-in emails do not arrive.
Check your email settings (self-hosted: Mailgun or SMTP in the config file). Ask readers to look in their spam folder.
How do I remove "Published with Ghost" from the footer?
Delete the link from partials/footer.hbs in the unzipped theme, zip the folder and upload it again.
Can I use the theme on more than one site?
A Regular licence covers one site (one end product). Buy one licence per site.
Are the demo images included?
No. Demo photos come from Pixabay and are only used on the demo site. The theme itself contains no stock photos.
Support
Support is included with your purchase and covers: answering questions about the theme's features, and fixing bugs. It does not cover custom changes or problems with third-party code.
Email support@codememory.com with your purchase code and your site address. See the changelog for what changed in each version and third-party materials for credits.