Skip to content

Repository files navigation

Linr

Linr screenshot

linr.cc — visual timelines for careers, projects, and life stories.

Linr draws events as a git-style tree: lanes, branches, and connections over time. Data stays in your browser (localStorage). Export JSON for backup, or SVG/Print for sharing.

Features

  • Multiple timelines — create, switch, rename, and delete
  • Range & punctual events — start/end dates or a single date
  • Parent / bifurcation links — child events branch from a parent lane
  • Optional description & image — URL or upload (stored as base64)
  • Vertical or horizontal layout
  • Fit / Expand — fit to screen, or expand to natural size with adaptive date ticks
  • Hover cards — hover a line or node to see details; related parent/children highlight
  • Import / Export
    • JSON — full data backup (all timelines)
    • SVG — vector of the active timeline (natural size)
    • Print — print the same SVG

How it works

  1. Add events with a title, dates, color, and optional parent.
  2. Linr assigns lanes and draws connectors (solid for ranges, dashed for branches).
  3. Everything persists in localStorage under the Linr key.
  4. Export JSON to move data between browsers; export SVG/Print for documents and slides.

No account, no server, no sync — by design.

Run locally

Requirements: Node.js 20+ and npm.

npm install
npm run dev

Open the URL Vite prints (usually http://localhost:5173).

Command Description
npm run dev Dev server with HMR
npm run build Production build → dist/
npm run preview Serve the production build locally
npm run lint Lint with Oxlint

Production

Site: https://linr.cc

This is a static Vite app. Build output is in dist/.

Deploy (Vercel — recommended)

  1. Push this repo to GitHub.
  2. Import the project in Vercel.
  3. Framework preset: Vite (build: npm run build, output: dist).
  4. Add the domain linr.cc (and www if you want) in Vercel → Domains.
  5. Point DNS at Vercel as they instruct (A/CNAME).

vercel.json in the repo sets SPA-friendly headers/caching.

Deploy elsewhere

Any static host works after npm run build:

  • Netlify — publish dist, use netlify.toml
  • Cloudflare Pages — build command npm run build, output dist
  • GitHub Pages — serve dist (set base in vite.config.js if using a subpath)

Pre-flight checklist

  • npm run lint passes
  • npm run build succeeds
  • npm run preview looks correct
  • Custom domain DNS → host
  • HTTPS enabled (automatic on Vercel/Netlify/Cloudflare)

Project structure

src/
  components/   # Timeline, Toolbar, EventEditor, …
  hooks/        # useTimeline (state + persistence)
  utils/        # layout, storage, SVG export
public/         # favicon, static assets
docs/           # design notes / specs

Contributing

See CONTRIBUTING.md.

License

Private / unpublished unless otherwise stated. Contact the maintainers before redistributing.

About

visual timelines for careers, projects, and life stories

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Contributors

Languages