Lightweight, interactive planning tool that visualizes a series of tasks using an HTML canvas

Overview

Planner

Lightweight, interactive planning tool that visualizes a series of tasks using an HTML canvas.

Planner JS meta-image

Try it yourself at plannerjs.dev

Plans created with Planner are automatically saved to the URL and can be easily shared with others.

If you like this project ☕️ buy me a cup of coffee at patreon.com/bvaughn 😃


Examples

View years example

Planner screenshot

View months example

Planner screenshot

View weeks example

Planner screenshot

View days example

Planner screenshot


Converting legacy plans

Planner switched from jsurl2 to Base64 encoding due to URL parsing problems jsurl2 caused websites like Twitter. If you created a plan with using the old jsurl2 encoding, you can migrate to the new format at the URL below:

https://plannerjs.dev/api/convert?(your-data-here)

Comments
  • Planner should support color keywords, not just hex

    Planner should support color keywords, not just hex

    Example

    Assigning a CSS color keyword like black instead of #000000 to color throws error:

    Screen Shot 2022-02-03 at 1 21 20 PM

    Expected Behavior

    1. If color's value doesn't begin with a #, compare it to a dictionary of CSS colors.
    2. If not in the dictionary, either throw error or use "transparent" (your choice).
    3. If in the dictionary, use that keyword for the color.
    opened by rachelnabors 5
  • Milestones Support

    Milestones Support

    Using isMilestone flag, support the creation of milestones into the data, which can be dependent tasks. They could theoretically also be parent tasks, though this does not seem typical and is not yet supported.

    tasks.js data now has one sample milestone.

    opened by peterdresslar 5
  • Planner should have way to view very long timelines

    Planner should have way to view very long timelines

    Example

    When planning shorter duration efforts over longer time periods (think weeks in months), the bars get condensed to the point of not being legible at a glance:

    Screen Shot 2022-02-03 at 1 39 39 PM

    Expected behavior

    It would be useful to see a monthly or weekly view with a "map" of the greater whole to one side.

    Mural has a feature like this, as an example of what I'm describing:

    Screen Shot 2022-02-03 at 1 44 39 PM
    opened by rachelnabors 3
  • Wrong Environment variables on production

    Wrong Environment variables on production

    Looks like ENV_HOST and NEXT_PUBLIC_VERCEL_URL are set incorrectly for https://plannerjs.dev/ leading to mixed content warning for favicons and invalid og:url.

    Thank you for making this public btw. Awesome project :tada:

    opened by tux-tn 3
  • Generate os:image from chart data

    Generate os:image from chart data

    It seems like Planner can generate plan-specific og:image images dynamically by rendering a Canvas on the server and then capturing a screenshot (using Puppeteer or Playwright) and returning that. Some related tweet threads:

    • https://twitter.com/terrysahaidak/status/1478727805907214342
    • https://twitter.com/MichaelDeBoey93/status/1478539507343441921
    • https://twitter.com/anthonygarvan/status/1478512005275398148

    Vercel's og-image repo might also be a nice starting point to fork: https://github.com/vercel/og-image

    This would be a nice upgrade from the current behavior which is to just return the following hard-coded og:image:

    Planner JS meta-image

    opened by bvaughn 3
  • Awsome little example!

    Awsome little example!

    Appreciate you making this public. Good to see how you guys build React apps (from the view of the rest of us). Took me a minute to realize that "loosing focus" updates the data when I type in changes. No need (IMHO) to fix, but might be helpful to add a text note to that behavior.

    discussion 
    opened by pkellner 3
  • Render Timeline with Variable Timescales

    Render Timeline with Variable Timescales

    Includes need for in-data length units, which I wish were named durations. I'd be happy to take a hack at this. Should be able to support data inputs like:

    createTask({
      id: "mile",
      name: "Bar",
      month: 2,
      length: 3d,
      dependency: "m-dep",
      owner: "susan",
    });
    createTask({
      name: "Foo",
      month: 2,
      length: 1w,
      isOngoing: true,
      owner: "team",
    });
    createTask({
      name: "Baz",
      month: 2,
      length: 3m,
      isOngoing: true,
      owner: "team",
    });
    
    opened by peterdresslar 3
  • Fix duplicate entries in legend due to case sensitive owner key

    Fix duplicate entries in legend due to case sensitive owner key

    👋 Fixing a small bug I noticed, if you have a key that is not all lowercase in the owners object, it leads to having duplicate entries in the legend:

    Before:

    Screen Shot 2022-01-12 at 2 09 04 PM

    (Notice how there are two "Planner" entries in the legend)

    After:

    Screen Shot 2022-01-12 at 2 07 57 PM

    (No more duplicate entries 🎉 )

    opened by clauderic 2
  • Add support for different time ranges (e.g. days, weeks, months)

    Add support for different time ranges (e.g. days, weeks, months)

    • [x] Replace month-centric index+duration with start/stop date.
    • [x] Scale horizontal axis (and labels) to fit the supplied tasks.
    • [x] Don't mutate dates; store temporal metadata in a Map somewhere.
    • [x] Auto-import and upgrade previous data format from URL.
    • [x] Add e2e tests.
    • [ ] Re-consider @js-temporal/polyfill usage (it's pretty large; maybe check dayjs?)

    View years example

    Screen Shot 2022-01-04 at 3 21 23 PM

    View months example

    Screen Shot 2022-01-04 at 3 21 28 PM

    View weeks example

    Screen Shot 2022-01-04 at 3 21 36 PM

    View days example

    Screen Shot 2022-01-04 at 3 21 43 PM

    opened by bvaughn 2
  • little error

    little error

    Hi bro, that's great ❤ i try to added new team metadata, when i changed the "name", i saw a error

    Screenshot (68)

    i think it can be fix with "?." operator

    src/utils/color.js => line 2

    export function hexToRgb(hex) {
      if (hex?.length === 4) {
    
    opened by Amir-Alipour 2
  • Add support for pan and zoom actions

    Add support for pan and zoom actions

    Relates to #25

    • [x] Add horizontal and vertical pan interaction
    • [x] Add zoom interaction
    • [x] Write e2e tests
    • [x] Update previous e2e tests
    • [x] Add click-and-drag pan interaction

    https://user-images.githubusercontent.com/29597/152462071-6622ce90-d41e-4bbd-9bf3-5afe07e4654d.mov

    opened by bvaughn 1
  • Add rudimentary support for touch events (e.g. pinch to zoom, pan)

    Add rudimentary support for touch events (e.g. pinch to zoom, pan)

    • [x] Add basic pinch/scroll support for touch devices
    • [x] Support double tap to zoom in
    • [ ] Add momentum scrolling style ease of when touch event ends
    • [ ] Find out how to write unit tests (can Playwright do this?)
    opened by bvaughn 1
Owner
Brian Vaughn
React JS core team at @facebook; formerly at @treasure-data and @google.
Brian Vaughn
Javascript Canvas Library, SVG-to-Canvas (& canvas-to-SVG) Parser

Fabric.js Fabric.js is a framework that makes it easy to work with HTML5 canvas element. It is an interactive object model on top of canvas element. I

Fabric.js 23.6k Jan 3, 2023
Javascript Canvas Library, SVG-to-Canvas (& canvas-to-SVG) Parser

Fabric.js Fabric.js is a framework that makes it easy to work with HTML5 canvas element. It is an interactive object model on top of canvas element. I

Fabric.js 23.6k Jan 3, 2023
JavaScript diagramming library for interactive flowcharts, org charts, design tools, planning tools, visual languages.

GoJS, a JavaScript Library for HTML Diagrams GoJS is a JavaScript and TypeScript library for creating and manipulating diagrams, charts, and graphs. S

Northwoods Software Corporation 6.6k Dec 30, 2022
HTML5 Canvas Gauge. Tiny implementation of highly configurable gauge using pure JavaScript and HTML5 canvas. No dependencies. Suitable for IoT devices because of minimum code base.

HTML Canvas Gauges v2.1 Installation Documentation Add-Ons Special Thanks License This is tiny implementation of highly configurable gauge using pure

Mykhailo Stadnyk 1.5k Dec 30, 2022
React + Canvas = Love. JavaScript library for drawing complex canvas graphics using React.

React Konva React Konva is a JavaScript library for drawing complex canvas graphics using React. It provides declarative and reactive bindings to the

konva 4.9k Jan 9, 2023
Konva.js is an HTML5 Canvas JavaScript framework that extends the 2d context by enabling canvas interactivity for desktop and mobile applications.

Konva Konva is an HTML5 Canvas JavaScript framework that enables high performance animations, transitions, node nesting, layering, filtering, caching,

konva 8.7k Jan 8, 2023
Canvas rendering library, Sprite manipulation of canvas

el-canvas Canvas rendering library, Sprite manipulation of canvas hello world <div id="app"><div></div></div> yarn add elem-canvas or npm i

null 15 Apr 13, 2022
Demonstration of liquid effect on HTML Canvas using Matter.js and SVG Filters (Blur + Contrast)

Canvas Liquid Effect Demonstration of liquid (or gooey) effect on HTML Canvas using Matter.js and SVG Filters (feGaussianBlur and feColorMatrix). DEMO

Utkarsh Verma 78 Dec 24, 2022
Financial lightweight charts built with HTML5 canvas

Lightweight Charts Demos | Documentation | Discord community TradingView Lightweight Charts are one of the smallest and fastest financial HTML5 charts

TradingView, Inc. 5.8k Jan 9, 2023
Bring data to life with SVG, Canvas and HTML. :bar_chart::chart_with_upwards_trend::tada:

D3: Data-Driven Documents D3 (or D3.js) is a JavaScript library for visualizing data using web standards. D3 helps you bring data to life using SVG, C

D3 103.8k Jan 3, 2023
JAVASCRIPT library with which you can easily draw CANVAS HTML

easycanvas Quick start Documentation: gaidadei.ru/easycanvas Download: gaidadei.ru/easycanvas/easyc.zip Buy premium: gaidadei.ru/easycanvas/premium (A

null 18 Nov 12, 2022
HTML Canvas game for Vivatech Gamejam of March 2022.

Viva Tech Gamejam A HTML Canvas game made in 2 days for the Vivatech Gamejam of March 22. Requirements Nodejs and Yarn. If you're on MacOS and have Ho

Antoine Oddoz 3 Mar 29, 2022
Renders HTML into the browser's canvas

rasterizeHTML.js Renders HTML into the browser's canvas. See the API. Install $ npm install rasterizehtml Then include a script tag with node_modules

Christoph Burgmer 2.3k Dec 30, 2022
Pretty time-series line graphs

Morris.js - pretty time-series line graphs Morris.js is the library that powers the graphs on http://howmanyleft.co.uk/. It's a very simple API for dr

null 7k Dec 24, 2022
Cubism.js: A JavaScript library for time series visualization.

Cubism.js Cubism.js is a D3 plugin for visualizing time series. Use Cubism to construct better realtime dashboards, pulling data from Graphite, Cube a

Square 4.9k Jan 3, 2023
📈 A small, fast chart for time series, lines, areas, ohlc & bars

?? μPlot A small (~35 KB min), fast chart for time series, lines, areas, ohlc & bars (MIT Licensed) Introduction μPlot is a fast, memory-efficient Can

Leon Sorokin 7.5k Jan 7, 2023
Synchro Charts is a front-end component library that provides a collection of components to visualize time-series data.

Synchro Charts Synchro Charts is a front-end component library that provides a collection of components to visualize time-series data. You can learn m

Amazon Web Services - Labs 60 Dec 29, 2022
Simple HTML5 Charts using the tag

Simple yet flexible JavaScript charting for designers & developers Documentation Currently, there are two versions of the library (2.9.4 and 3.x.x). V

Chart.js 59.4k Jan 7, 2023
The Swiss Army Knife of Vector Graphics Scripting – Scriptographer ported to JavaScript and the browser, using HTML5 Canvas. Created by @lehni & @puckey

Paper.js - The Swiss Army Knife of Vector Graphics Scripting If you want to work with Paper.js, simply download the latest "stable" version from http:

Paper.js 13.5k Dec 30, 2022