Personal hobby projects site by R C James — a bioinformatician and dual student at Sanofi with a background in R, Python, and chemoinformatics (RDKit).
The site contains a blog plus a small set of interactive tools.
Live at: chempananickal.github.io
The blog uses Eleventy (11ty) so posts can be written in Markdown and built into static HTML.
Write posts as Markdown files in blog/posts/.
Example front matter:
---
title: My New Post
description: Short summary for the blog index.
date: 2026-03-11
---
## Hello
This is a post.npm install
npm run dev
npm run build
npm run watchEleventy outputs the built site to _site/.
- Use
npm run devfor the normal Eleventy workflow. This serves the built site and rebuilds automatically. - If you want to keep using VS Code Live Server, run
npm run watchin one terminal and let Live Server serve_site. - Tool links on the homepage are generated automatically from files that follow
tools/tool-name/tool-name.html.
Path: tools/trie-hard/trie-hard.html
A step-by-step animated explainer for the uncompressed suffix trie — the conceptual precursor to the DAWG.
What it teaches:
- How every suffix of a word is inserted into a trie, character by character
- When an edge already exists (shared prefix) vs. when a new node must be created
- How to perform substring search in O(|pattern|) time by walking from the root
- Why the O(n²) node count of a suffix trie motivated compressed data structures like the DAWG
Features:
- DFS-based tree layout (leaves get unique vertical slots; internal nodes centre between their children) — always looks like a proper tree regardless of input
- Leaf nodes rendered with a double circle
- Substring search visualisation — shows each edge followed or the dead-end when the pattern is absent
- Light/dark mode toggle (shared
localStoragekey with Yo DAWG) - Keyboard navigation and touch support
Algorithm complexity: O(n²) nodes, O(n²) construction time, O(|pattern|) search time.
Path: tools/yo-dawg/yo-dawg.html
A step-by-step animated explainer for the Directed Acyclic Word Graph (suffix automaton).
What it teaches:
- How the
sa_extendalgorithm adds one character at a time to build the DAWG - What states, transitions, suffix links, and
lenvalues mean - How to find the Longest Common Substring (LCS) between two strings in O(|query|) time by traversing the completed automaton
Features:
- Pre-computed step snapshots — walk forward and back through every algorithm operation
- SVG graph with a
len-based hierarchical layout (transitions flow left→right, suffix links arc right→left) - Parallel-edge fan-out so overlapping edges are separated
- Full pseudocode reference (collapsible)
- Light/dark mode toggle (persists via
localStorage, respectsprefers-color-schemeas default) - Keyboard navigation (← / →)
- Touch-friendly, mobile-responsive
Algorithm complexity: O(n) states (at most 2n − 1), O(n) construction time.
- Vanilla HTML5, CSS3, JavaScript (ES6+,
"use strict") for the interactive pages - Eleventy for the markdown blog and reusable
idiottheme - SVG rendered as inline strings from JavaScript
- CSS custom properties for theming;
prefers-color-scheme+ manuallocalStoragetoggle - Win95-style bevelled buttons, Comic Neue headings,
prefers-reduced-motionsupport
index.html — homepage (Eleventy/Nunjucks)
feed.njk — Atom RSS feed (builds to /feed.xml)
_data/
site.js — global site config (title, author, URL)
tools.js — tool list data
_includes/
layouts/
idiot-base.njk — base HTML layout
idiot-post.njk — blog post layout
idiot/
assets/
idiot.css — theme styles
idiot.js — theme scripts (theme toggle, etc.)
blog/
index.njk — blog archive page
posts/
posts.11tydata.js — directory-level frontmatter defaults
*.md — blog posts
tools/
yo-dawg/
yo-dawg.html
yo-dawg.css
yo-dawg.js
trie-hard/
trie-hard.html
trie-hard.css
trie-hard.js
fonts/ — Comic Neue font files