Generate SVG timelines from CSV
Find a file
codex 9dfb143264
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
chore(consistency): refresh work-record index
Refs CUST-WP-0067-T10

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2583210@bnt-lap001
Assistant-Session: f2bff2d5-e9b2-4338-92ca-10282a927006
2026-08-25 14:30:51 +02:00
.claude/rules docs: workplan-first agent guidance prose (CUST-WP-0055 T04 batch 5) 2026-07-08 19:51:58 +02:00
.forgejo/workflows Add Forgejo CI smoke workflow (enablement template) 2026-07-08 13:29:11 +02:00
example feat: add DOM-based prototype template system for full Inkscape editability 2026-01-23 23:50:37 +01:00
example-1 feat: add clean timeline example without swimlanes 2025-11-28 03:39:17 +01:00
example-proto feat: add DOM-based prototype template system for full Inkscape editability 2026-01-23 23:50:37 +01:00
my-project refactor: use abstract ITEM placeholders with dynamic property mapping 2025-11-27 23:17:34 +01:00
test fix: initialize file editor and remove broken individual file uploads 2026-01-23 23:14:57 +01:00
workplans Complete TMLN-WP-0002 distribution packaging checklist 2026-07-08 15:21:09 +02:00
.custodian-brief.md chore(consistency): sync task status from DB [auto] 2026-07-08 15:22:01 +02:00
.gitignore feat: add Windows distribution build with cross-platform server scripts 2026-01-23 16:13:16 +01:00
.repo-classification.yaml chore(classification): add repo classification 2026-08-25 14:02:44 +02:00
AGENTS.md docs(agents): repoint remote State Hub URL to the in-cluster address 2026-08-25 00:22:16 +02:00
CLAUDE.md Regenerate agent instructions from state-hub templates (CUST-WP-0055 T01) 2026-07-08 14:50:38 +02:00
DEPENDS.md add: comprehensive TDD test infrastructure 2025-11-18 23:36:22 +01:00
engine.js feat: add DOM-based prototype template system for full Inkscape editability 2026-01-23 23:50:37 +01:00
file-editor.js feat: add inline file editing with modification tracking and save functionality 2026-01-23 17:15:36 +01:00
generator-dom.js feat: add DOM-based prototype template system for full Inkscape editability 2026-01-23 23:50:37 +01:00
generator.js feat: add custom placeholder mapping for non-standard templates 2025-11-28 03:24:33 +01:00
index.html feat: add DOM-based prototype template system for full Inkscape editability 2026-01-23 23:50:37 +01:00
INTENT.md Seeded INTENT.md and stuff 2026-07-08 14:31:33 +02:00
LICENSE Adopt Target Revenue Source License V1C1 (org-wide preliminary rollout) 2026-07-30 01:11:00 +02:00
Makefile feat: add DOM-based prototype template system for full Inkscape editability 2026-01-23 23:50:37 +01:00
package.json test: improve test infrastructure and fix test assertions 2025-11-27 08:59:23 +01:00
PROTOTYPE_TEMPLATES.md feat: add DOM-based prototype template system for full Inkscape editability 2026-01-23 23:50:37 +01:00
README.md Complete TMLN-WP-0002 distribution packaging checklist 2026-07-08 15:21:09 +02:00
REFACTORING_PLAN.md refactor: complete migration to template-v2 architecture 2025-11-27 15:29:58 +01:00
SCOPE.md Complete State Hub bootstrap (TMLN-WP-0001); add TMLN-WP-0002 2026-07-08 15:07:17 +02:00
TEMPLATE_V2_GUIDE.md feat: add custom placeholder mapping for non-standard templates 2025-11-28 03:24:33 +01:00
TEST_FINDINGS.md test: improve test infrastructure and fix test assertions 2025-11-27 08:59:23 +01:00
TESTING.md add: comprehensive TDD test infrastructure 2025-11-18 23:36:22 +01:00
TimelineSvg.png chore: added project logo 2025-11-18 23:37:40 +01:00
TROUBLESHOOTING.md feat: add folder picker for automatic project file loading 2026-01-23 16:34:35 +01:00
vitest.config.js add: comprehensive TDD test infrastructure 2025-11-18 23:36:22 +01:00
WINDOWS_USAGE.md feat: add folder picker for automatic project file loading 2026-01-23 16:34:35 +01:00
WORK-RECORDS.md chore(consistency): refresh work-record index 2026-08-25 14:30:51 +02:00

README TimelineSvg

TimelineSvg is a lightweight, browser-based system for generating multi-lane timelines as clean, scalable SVG graphics. It reads simple CSV files, applies a configurable project definition, and renders a fully customizable timeline without requiring any backend or build pipeline.

All processing happens locally in the users browser — completely offline and fully private.


Features

  • Pure browser execution — no server, no installation
  • CSV-driven timelines with customizable field mappings
  • Automatic layout of months, lanes, and items
  • SVG templates with macros ({{MONTHS}}, {{LANES}})
  • Replaceable CSS and templates at runtime
  • Internal and external view modes
  • Offline SVG export (external view only)
  • Extremely easy to extend or theme

How It Works

TimelineSvg is built around three components:

1. project.json — The project configuration

Each project folder provides a project.json, defining:

{
  "name": "Example Project",
  "dataSource": "example/sample.csv",
  "stylesheet": "example/style.css",
  "svgTemplate": "example/template.svg",
  "settings": {
    "timelineMonths": 18
  },
  "fieldMapping": {
    "id": "ID",
    "title": "Title",
    "lane": "Lane",
    "due": ["Due"]
  }
}

This controls:

  • data source
  • styling
  • template structure
  • date range
  • field mapping between CSV and internal timeline model

2. CSV input

The CSV must contain at least:

  • a title
  • a date (any common format: YYYY-MM-DD, DD.MM.YYYY, etc.)
  • a lane/group field

Example:

ID,Title,Due,Lane
1,Implement API,2025-12-01,Backend
2,UI Prototype,2026-02-15,Frontend

3. Template-based SVG rendering

TimelineSvg replaces two macros in the template:

  • {{MONTHS}} → month labels and vertical grid lines
  • {{LANES}} → lane backgrounds, labels, and items

Example template:

<svg xmlns="http://www.w3.org/2000/svg">
  <rect width="100%" height="100%" fill="#FFFFFF"/>
  {{MONTHS}}
  {{LANES}}
</svg>

This makes TimelineSvg highly customizable: You can recreate any design, layout, or branding using your own SVG template.


Usage

1. Open the application

Just open index.html in any modern browser (Chrome, Firefox, Safari, Edge).

2. Load a project

You can choose between:

  • Automatic loading - When served via HTTP, the app auto-loads from project.json in project folders (binect/, my-project/, or example/)
  • Load Project Folder - Click "📂 Load Project Folder" and select an entire project directory. All files (project.json, CSV, CSS, SVG) will be loaded automatically
  • Load files individually - Upload project.json first, then manually upload CSV, CSS, and SVG files using the individual file buttons

3. Preview the timeline

The timeline renders automatically when the CSV loads and is displayed inside the viewer container.

4. Switch views

  • Internal View: IDs are visible
  • External View: IDs are hidden (used for export)

5. Export SVG

Click Download SVG → an external-view SVG is saved to disk.


Project Structure

/
│ index.html
│ engine.js
│ generator.js
│
├─ example/
│   ├─ project.json
│   ├─ style.css
│   ├─ template.svg
│   └─ sample.csv
│
└─ my-project/
    ├─ project.json
    ├─ style.css
    ├─ template.svg
    └─ data.csv

Customizing Your Own Project

To create your own timeline project:

  1. Duplicate the example/ folder
  2. Adjust project.json (dataSource, mappings, template)
  3. Replace the CSV with your data
  4. Modify the SVG template for your layout
  5. Open index.html and load your project

TimelineSvg will take care of the rest.


Why SVG?

  • infinitely scalable
  • editable in design tools
  • embeddable in documents, websites, and presentations
  • easy to script, style, and customize

Requirements

  • Any modern browser
  • No build tools
  • No server
  • No dependencies except PapaParse (bundled by CDN)

Release checklist (offline distribution)

Before tagging a release or handing the tool to non-developers:

  1. make test — Vitest suite green
  2. make dist — verify dist/ contains core JS, sample projects, DIST_README.md, start-server.bat, start-server.sh
  3. make dist-zip — archive builds (timeline-svg-dist.zip or .tar.gz)
  4. Smoke on Windows per WINDOWS_USAGE.md (double-click start-server.bat, load example/ project)
  5. Smoke locally: make serve → open http://localhost:8000, export SVG from my-project/
  6. Confirm example/ and my-project/ project.json + CSV + template-v2.svg load without console errors