← ALL WORK

CommitCanvas.

Live web app

Turn a contribution grid into a canvas. Paint a pattern, preview lettering, and export the Python or Node.js script behind it.

The live CommitCanvas editor with RAM drawn in green pixels, text drawing controls, intensity choices, and Undo.
Actual product · editor captureCaptured 18 September 2026
01 / THE PURPOSE

Draw the pattern before writing the script.

A contribution graph has a small, fixed surface. CommitCanvas makes it editable: compose a pattern visually, then inspect the code that turns its painted cells into dated commits.

WHO IT’S FOR
People exploring contribution-graph artwork.
THE CONSTRAINT
Weeks, days, and intensity have to become dates and commit counts without losing the pattern.
02 / THE DECISIONS

The picture is also the input.

Drawing, lettering, and presets all change the same grid. The preview stays close to the input, while the export makes the translation into code visible.

  1. Keep the hand close to the result

    Painting changes the grid itself. Intensity, text, and preset patterns all write into the same surface, with undo keeping experimentation reversible.

  2. Make the translation visible

    The export turns painted cells into dates and intensity levels, then produces Python or Node.js. The generated script can be read before it is run.

03 / THE IMPLEMENTATION

A square becomes a date.

Inside the export loop, the cell’s column and row determine its date. Empty cells are skipped; painted cells carry their intensity into the generated output.

app/graph/page.tsxTypeScript
const level = grid[day][week]
if (level > 0) {
  const date = new Date(startDate)
  date.setDate(date.getDate() + week * 7 + day)
  dates.push({ date: date.toISOString().split("T")[0], level })
}
From the implementationExplore this source
Position → date
The week and day locate a square within the selected year’s grid.
Intensity → output
The stored level drives the number of dated commits in the generated script.
04 / WHERE IT STANDS
Live web app

A live editor. An inspectable export.

In the recorded live-editor check, entering “RAM” and pressing Draw produced the green letter pattern shown above.

KEEP IN MIND

Exported commits create artwork. They do not document prior coding activity.

Take a closer look.

  1. Choose a year and a drawing intensity.
  2. Paint a few squares, try lettering, and undo a change.
  3. Switch between Python and Node.js output to inspect the export.
Open CommitCanvasPaint a pattern, then inspect the generated code
Sources, credits & review notes

Contribution & credits. Project author, credited in the public repository.

The product capture was taken from the live editor on 18 September 2026. The source supports painting, intensity controls, text, presets, undo, and script generation; exported scripts were not executed during this review.

The exporter constructs local dates and serializes them to UTC. Behavior across time zones and the final pattern rendered by GitHub have not been verified.

PUBLIC SOURCE REVIEWED / 18 SEPTEMBER 2026

AN INVITATION TO PLAY / COMMITCANVAS

Make your mark.

A little experiment from CommitCanvas. Stamp your initials, lift the relief, keep the print.

One to four letters. A–Z.

A STUDY IN SMALL MARKS
33 squares of possibility.Turn it. Then lift to see your print.

Eighteen across. Seven down. A small space to make something your own.

02 Choose an ink to draw with
03 Or borrow a starting point
Precise pixel editor

Selected square: empty. Brush: sunlight ink.

Start with a mark. Make it yours.

Draw individual pixelsLarge squares. Room to experiment.

Drag with a mouse or tap a square. Scroll sideways to reach the whole grid. For keyboard editing, use the row and column controls in the precise pixel editor above.

33 of 126 squares marked. Changes appear in your relief above.

Your mark stays with you as you explore this tab; reloading starts fresh. Decorative art, with no GitHub activity or server upload.

Take the idea. Leave your mark.
NEXT FROM THE WORKBENCH / 03Article Agent