GitPedia
DimwitLabs

DimwitLabs/ode

A minimal, open-source, writing platform for writers who care about the craft

23 Releases
Latest: 2mo ago
v1.5.1Latest
DeepanshKhuranaDeepanshKhurana·2mo ago·April 6, 2026
GitHub

Added

  • `AI-DECLARATION.md` declaring AI usage transparency for the project.
v1.5.0
DeepanshKhuranaDeepanshKhurana·3mo ago·March 6, 2026
GitHub

Added

  • Configurable pagination parameters via `reader.pagination` in `config.yaml` with `columnWidth`, `columnHeight`, `lineHeight`, `avgCharWidth`, and `safetyMargin` options.

📋 Changed

  • Breaking: Rewrote pagination algorithm from line-based to character-based for more accurate page breaks.
  • CSS columns now allow content to break inside blocks (`break-inside: auto`) for natural text flow.
  • Theme scale overrides (`ui.theme.overrides.font.scale`) now affect pagination calculations.

🐛 Fixed

  • Theme config path now correctly reads `ui.theme.preset` instead of top-level `theme`.
  • Reader mode no longer overflows or cuts off content at column boundaries.
  • Blockquotes and lists split mid-content when needed instead of jumping entirely to next column.
  • Body of Work page now appears on first deploy when using a custom slug.
v1.4.6
DeepanshKhuranaDeepanshKhurana·3mo ago·March 6, 2026
GitHub

Added

  • Configurable characters per page in reader mode via `reader.charsPerPage` in `config.yaml`. Users may not need to change this at all. But the idea is to keep it configurable in case there are some visual artifacts in the reader mode. This is responsible for splitting the pages for the reader mode. (#25)

🐛 Fixed

  • Reader mode now correctly paginates lists, code blocks, and blockquotes instead of truncating them mid-element. (#24)
  • Body of Work page now appears on first deploy when using a custom slug; reliably. (#23)
v1.4.5
DeepanshKhuranaDeepanshKhurana·3mo ago·March 5, 2026
GitHub

🐛 Fixed

  • Category names with spaces now display correctly in reader mode header instead of showing URL-encoded values like `%20`. ([#21](https://github.com/DimwitLabs/ode/issues/21))
v1.4.4
DeepanshKhuranaDeepanshKhurana·3mo ago·February 28, 2026
GitHub

Added

  • [SHOWCASE.md](https://github.com/DimwitLabs/ode/blob/main/SHOWCASE.md) which also pushes it to the documentation at [docs.ode.dimwit.me/showcase](https://docs.ode.dimwit.me/showcase)
v1.4.3
DeepanshKhuranaDeepanshKhurana·3mo ago·February 27, 2026
GitHub

📋 Changed

  • Ode will now move from [DeepanshKhurana/ode](https://github.com/DeepanshKhurana/ode) to [DimwitLabs/ode](https://github.com/DimwitLabs/ode). Please ensure you update your `docker-compose.yml` for the new url which will be under `ghcr.io/dimwitlabs/ode:<tag>`. This version functionally changes nothing except this information. `v1.4.4` is planned to be from the new url. In that case, `ghcr.io/deepanshkhurana/ode:latest` will point to `v1.4.3` while `ghcr.io/dimwitlabs/ode:latest` will continue to get updates.
v1.4.2
DeepanshKhuranaDeepanshKhurana·3mo ago·February 27, 2026
GitHub

📋 Changed

  • OG images now generate asynchronously in background after build completes, allowing site to start serving immediately.

🐛 Fixed

  • Cache headers for dynamic content (`config.yaml`, `content/`, `generated/index/`, `feed.xml`) in nginx and Vercel configs.
  • RSS feed now correctly handles date-only entries with local timezone.
  • Sidebar piece count now reflects actual count from `pieces.json`.
v1.4.1
DeepanshKhuranaDeepanshKhurana·3mo ago·February 26, 2026
GitHub

Added

  • Configurable Body of Work page: `bodyOfWork.title` and `bodyOfWork.slug` fields in `config.yaml`.

🐛 Fixed

  • 502 error page now correctly uses theme from `ui.theme.preset` instead of defaulting to `journal`.
  • Deployment script now polls host filesystem for 502 page instead of waiting for container build.
v1.4.0
DeepanshKhuranaDeepanshKhurana·3mo ago·February 25, 2026
GitHub

Added

  • Social card preview system with OG image generation using `satori` and `@resvg/resvg-js`.
  • Pre-rendered meta pages for bots (WhatsApp, LinkedIn, Twitter, Facebook, etc.) with full `og:*` and `twitter:*` tags. Note that the tags work according to bot lists and would not be readily available on an online checker. However, `curl`ing the bots with a `User-Agent` e.g. `curl -H "User-Agent: WhatsApp/2.0"...` can be a good way to test. This works across `nginx` as well as `Vercel`. Configurations for both are provided in the repository as `nginx/` and `vercel.json`.
  • Content-based meta descriptions: first 160 characters extracted from markdown content with formatting stripped.
  • Reader URL bot support: `/reader/:collection?piece=:slug` serves appropriate meta pages to bots. The page is selected to be the piece the reader is currently reading.
  • Custom `bodyOfWork.description` field in `config.yaml` for `body-of-work` page social preview.
  • `nginx` configuration templates in `nginx/` directory with setup instructions.
  • OG images generated at 1200x630px with theme-specific styling.
  • Themed 502 error page generation with customizable text via `config.yaml`'s `redeployPage` section.
  • + 5 more

📋 Changed

  • Improved GitHub Actions deployment documentation in `WRITING.md` with SSH key setup guide. ([#18](https://github.com/DeepanshKhurana/ode/issues/18))

🐛 Fixed

  • Numeric values in `config.yaml` (e.g., `404`) now handled correctly. ([#17](https://github.com/DeepanshKhurana/ode/issues/17))

🗑️ Removed

  • `react-helmet` dependency (using React 19 native meta tags).
v1.2.9
DeepanshKhuranaDeepanshKhurana·4mo ago·February 21, 2026
GitHub

📋 Changed

  • Moved auto-generated files to `public/generated/` subdirectory for cleaner structure.
v1.2.8
DeepanshKhuranaDeepanshKhurana·4mo ago·February 20, 2026
GitHub

🐛 Fixed

  • Duplicate meta tags in `<head>` caused by hardcoded tags in `index.html` conflicting with dynamically added tags from `Layout.jsx` and `react-helmet` in `Header.jsx`.
v1.2.7
DeepanshKhuranaDeepanshKhurana·4mo ago·February 17, 2026
GitHub

Added

  • Development workflow with `:development` Docker tag for testing changes without affecting `:latest` users.
  • Automatic `robots.txt` generation during build process with sitemap URL from `config.yaml`. ([#12](https://github.com/DeepanshKhurana/ode/pull/12))
  • Support for `description` field in piece frontmatter for RSS feed descriptions (with fallback to first line of content). ([#11](https://github.com/DeepanshKhurana/ode/pull/11))
  • Routing support for `/feed/`, `/sitemap/`, `/robots`, and `/robots.txt` in both nginx and Vercel configurations. ([#12](https://github.com/DeepanshKhurana/ode/pull/12))
  • Version badge (v1.2.7) in documentation site navbar.

📋 Changed

  • RSS feed `<link rel="self">` now correctly points to `/feed.xml` instead of `/feed`. ([#11](https://github.com/DeepanshKhurana/ode/pull/11))
  • Footer styling restructured for better alignment on large displays - border now on article element with footer integrated into `HomepageViewer` component. ([#13](https://github.com/DeepanshKhurana/ode/pull/13))
  • Vercel rewrite rules optimized with specific routes ordered before catch-all pattern.

🐛 Fixed

  • RSS feed validation errors: removed invalid `managingEditor` field (was not in email format). ([#11](https://github.com/DeepanshKhurana/ode/pull/11))
  • RSS feed item structure: `<description>` now appears before `<content:encoded>` per RSS 2.0 best practices. ([#11](https://github.com/DeepanshKhurana/ode/pull/11))
  • Footer border extending beyond content on larger displays due to float-based alignment. ([#13](https://github.com/DeepanshKhurana/ode/pull/13))
  • ⚠️ Some changes were removed during a rebase. They were brought back as well.

🗑️ Removed

  • `managingEditor` field from RSS feed generation (optional field causing validation warnings). ([#11](https://github.com/DeepanshKhurana/ode/pull/11))
v1.2.5
DeepanshKhuranaDeepanshKhurana·5mo ago·December 27, 2025
GitHub

Added

  • New landing page at [ode.dimwit.me](https://ode.dimwit.me) with links to live demo, documentation, and repository.
  • Official documentation site powered by Docusaurus, featuring automated root markdown synchronization and search for easy access.
v1.2.2
DeepanshKhuranaDeepanshKhurana·6mo ago·December 1, 2025
GitHub

🐛 Fixed

  • Responsive horizontal margins now scale smoothly across existing intermediate breakpoints (xl, lg) to prevent excessively large margins on tablets and narrow desktop windows. ([#3](https://github.com/DeepanshKhurana/ode/issues/3))
v1.2.1
DeepanshKhuranaDeepanshKhurana·6mo ago·December 1, 2025
GitHub

📋 Changed

  • Updated [README.md](https://github.com/DeepanshKhurana/ode/blob/main/README.md)'s intro text to better answer "what is it?" first.
v1.2.0
DeepanshKhuranaDeepanshKhurana·6mo ago·November 30, 2025
GitHub

Added

  • Dynamic theme engine with 10 built-in presets (`almanac`, `blueprint`, `comic`, `doodle`, `exploit`, `journal` (default), `manuscript`, `recipe`, `screenplay`, `sketch`).
  • Theme configuration via `ui.theme.preset`, `ui.theme.overrides`, and `ui.theme.defaultMode` in `config.yaml` (fully backwards compatible; not having the sections does not break anything).
  • Support for local font files with automatic format detection.
  • Font scaling system with proportional sizing using `--font-scale` CSS variable.
  • Comprehensive theming documentation in [THEMING.md](https://github.com/DeepanshKhurana/ode/blob/main/THEMING.md) with screenshots of all presets.
  • Theme presets automatically register from `src/assets/themes/` directory.
  • New [ETHOS.md](https://github.com/DeepanshKhurana/ode/blob/main/ETHOS.md) documenting core principles and philosophy.
v1.1.2
DeepanshKhuranaDeepanshKhurana·7mo ago·November 25, 2025
GitHub

📋 Changes

  • Defaults are now initialised if the public directory is empty or has any files missing from the required structure. Helpful links will directly appear on the UI and the app will not break.
  • A build badge is added to the README to ensure Docker image status is always easy to find.
  • New `pages.notFound` config option to specify a custom 404 page (defaults to `obscured`).
  • Exclusions in `exclude.pages` and `exclude.pieces` now accept slugs without `.md` extension.
v1.1.1
DeepanshKhuranaDeepanshKhurana·7mo ago·November 25, 2025
GitHub

📋 Changes

  • New `config.yaml` parameter to control Body of Work order. If your config does not have the parameter and you update the app, it will default to `descending`.
v1.1.0
DeepanshKhuranaDeepanshKhurana·7mo ago·November 25, 2025
GitHub

📋 Changes

  • Major (breaking) change since the app now moves to a `docker-compose.yaml` setup fundamentally changing how to write content in it. `README.md` will have more context but you can now mount directories for content (`pieces` and `pages`) while using the public image to constantly rebuild the site on push or update. You are free to set this up yourself. `config.yaml`, `intro.md`, and `favicon.ico` can also be mounted.
  • Documentation for setting up a content repository and automation is now also available in [WRITING.md](https://github.com/DeepanshKhurana/ode/blob/main/WRITING.md).
v1.0.3
DeepanshKhuranaDeepanshKhurana·7mo ago·November 25, 2025
GitHub

Added

  • Feature: New `config.yaml` parameter will let you configure number of RSS feed items
v1.0.2
DeepanshKhuranaDeepanshKhurana·7mo ago·November 24, 2025
GitHub

📋 Changes

  • *Gestures!* The Reader mode now supports trackpad swipe and mobile swipe gestures.
v1.0.1
DeepanshKhuranaDeepanshKhurana·7mo ago·November 24, 2025
GitHub

📋 Changes

  • Added sitemap generation script at the build process.
  • Fixed an issue where URLs with / in the end would not strip to valid URLs.
v1.0.0
DeepanshKhuranaDeepanshKhurana·7mo ago·November 24, 2025
GitHub

📋 Changes

  • Initial public release of Ode.
  • Markdown-based content system for pieces and pages.
  • Reader mode with keyboard navigation with custom order.
  • Dark/Light mode with automatic theme switching.
  • RSS feed generation for all pieces.
  • Chronological "Body of Work" archive.
  • Random piece discovery feature.
  • Fully configurable site metadata, UI labels, ordering and exclusions via `config.yaml`.
  • + 2 more