Giter Site home page Giter Site logo

anotherkamila / tasksched Goto Github PK

View Code? Open in Web Editor NEW
36.0 5.0 3.0 2.99 MB

An opinionated Taskwarrior web UI. Great for scheduling when to do your tasks.

License: MIT License

JavaScript 13.34% Elm 73.75% Makefile 3.61% HTML 2.90% CSS 3.67% Python 2.73%
elmlang taskwarrior scheduling scheduled-tasks time-management timewarrior drag-and-drop

tasksched's Introduction

tasksched

An opinionated Taskwarrior web UI. Great for scheduling when to do your tasks.

screenshot

Drag & drop tasks into the dates to schedule / re-schedule them (or drag them to the unscheduled part to unschedule).

A pretty "next task" page is included:

next task page screenshot

It displays your next scheduled task, or the most urgent task if none are scheduled.

Overview

This is meant to run "locally", i.e. it does not attempt to deal with authentication, taskserver, or anything. The app must be able to call the task CLI with your setup. Therefore, run it as your user, either locally, or on a server where you have set up task synchronization (make sure to put it behind HTTP auth or something if you allow access from the outside).

It does not use taskserver as AFAIK there is no standardized HTTP API. Instead, the included small server translates HTTP calls to calls to the task CLI.

How to use

Requires node and npm. Install these using your distro's package manager.

make run will install dependencies, build the app and run the server. That's all -- make run, open http://localhost:5000/ and enjoy :-)

Make sure that the task CLI is set up and ready to use before using this.

Integration with Timewarrior

If you have the Timewarrior hook installed (~/.task/hooks/on-modify.timewarrior), the Next Task page will show a start/pause button to encourage actually tracking time :-)

Task links

If a task has the task_url attribute set, a clickable icon with that URL will be rendered. This is especially useful if you use something like Bugwarrior (together with a hook to add a unified task_url attribute instead of $provider_url).

Optional: Vagrant

If you want to run this in a Vagrant VM, download the Vagrantfile and run vagrant up. Then

vagrant ssh
su - tasks
task add Stuff

Note that running it on your "normal" host, as your normal user, is more convenient and the recommended way. This is useful only if you cannot run it on your machine.

How to get the best Chrome new tab page ever

point this extension: https://chrome.google.com/webstore/detail/new-tab-url/njigpponciklokfkoddampoienefegcl/related to your "Next task page" URL (http://localhost:5000/#next)

Like Tasksched?

Send a pull request, motivate me, or become a patron!

contributions welcome Say Thanks! Liberapay patrons

Thanks to

tasksched's People

Contributors

anotherkamila avatar evilham avatar robertbasden avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

tasksched's Issues

Documentation

Write up:

[ ] High-level install instructions: "needs task set up, no auth" etc.
[ ] Low-level install instructions: "you need node.js, run server.js, serve static files from somewhere"

[idea]: Mindmapping-like interface to taskwarrior

Sometimes filters are not enough and a huge list of tasks can be a bit... Overwhelming on TW and tasksched even with the search bar for filters which is pure love <3 (kudos to past me on that :-D).

I've been thinking about a way to have $something that makes things easier to navigate, an option would be a visual mindmapping-like interface.

Functionality wise, it would be absolutely necessary to:

  • Manipulate "blocks / depends" for tasks
  • Create tasks on-the-fly
  • Use the search bar for filters
  • "Zoom in and out"

It'd also be nice to:

  • Be able to schedule things from this interface
  • Be able to close tasks (should be added to tasksched's interface too :-D)
  • Have helper buttons for the filters based on the task / project.

There are some things that interact here:

  • Hierarchy
  • Task inter-Dependency

And different use-cases:

  • General overview (macro-managing/planning)
  • Planning (micro-managing/planning)

I think Dependency maps quite well to "blocks / depends" in TW and Hierarchy can be inferred from it: in the end tasks behave like a directed graph without cycles (I think! :-D am I wrong?).
To infer hierarchy from dependencies, we can think of hierarchy being inverse to the length of the longest chain of blocked tasks and dynamically be mapped to 3-4 levels. (e.g.: 0 tasks blocked by T means T has hierarchy 1 / top, longest chain of tasks blocked by T with length: 1-2 mean hierarchy is 2 / mid, with length 3-5 would have hierarchy 3/low and with length 6+ hierarchy 4/marginal).
Likely "Hierarchy" should be tunable as a TW UDA.

In a "General overview" mode, we'd emphasise tasks with a high hierarchy and in "Planning" mode items with a low hierarchy.

I think TW's priority wouldn't be fit for this "Hierarchy" concept, since that's more of an urgency measure which is correlated but not a direct mapping in most cases.

Does this at least kinda make sense? Is it worth exploring?

Does it sound like Too Much Work (tm) and maybe it's just better to use FreeMind?

Bootstrap instructions not working

Hi !

Tried to start this project, but it seems that the bootstrap instructions are missing something:

$ sudo apt install vagrant virtualbox
... //install goes ok

$ vagrant up
Bringing machine 'tasksched' up with 'virtualbox' provider...
There are errors in the configuration of this machine. Please fix
the following errors and try again:

SSH:
* The following settings shouldn't exist: insert_key, password

vm:
* The box 'https://files.devuan.org/devuan_jessie/virtual/devuan_jessie_1.0.0_amd64_vagrant.box' could not be found.

Seems to be broken on current ubuntu lts.

There are two issues with installation.

  1. The elm download location has changed.
  2. elm 0.18 requires downgrading to node v10
npm ERR! Downloading Elm binaries from https://dl.bintray.com/elmlang/elm-platform/0.18.0/linux-x64.tar.gz                             
npm ERR! Error decompressing linux-x64.tar.gz Error: incorrect header check         

Display links stored in annotations

If a task annotation is a URL, it should be displayed in the same way as the task_url attribute. This is useful because annotations are more convenient to use with the commandline (and therefore I use them).

An alternative solution would be to create a wrapper (taskwarrior capsule?) which makes manipulating the task_url attribute more convenient.

More identifying info in the 'months' view

In the 'months' view, with no (or few) scheduled tasks, I see several "DECEMBER 1" labels listed on the page. If these had more details, such as "2019 DECEMBER 1", or maybe just "2020 JANUARY 1" when the year changes, and " 1" for all the other months, it would be a little easier to distinguish them.

Screen Shot 2019-05-21 at 15 23 25

Proper use of "someday"

When using someday on taskwarrior, it actually uses +20 years, maybe we want to show any tasks due/scheduled further than 10 years in the future as due/scheduled "someday"

Better handling of anything between "next year" to "someday

Follow up for #22 (thank you @robertbasden !).

Tasksched shows only "Month date", and "someday" for anything over 10 years; which can be confusing if something is scheduled on say, March 20th 2019 (today being February 2018).

Maybe we want to have 4 tiers of date formatting:

  • Month date: for anything under 1 year
  • "Next year" for anything between 1-2 years
  • "In X years" for X years, with X between 2-10 years
  • "Someday" for anything over 10 years

@AnotherKamila mentioned that these conditionals should go out of TaskView.elm as a date formatting function, she'll probably add details on that :).

Next page: add link to image source

Pictures are often wonderful :-D sometimes it'd be nice to be able to figure out where the picture was taken and so on, a discrete link to the unsplash webpage would be great.

Right drawer for unscheduled tasks

Put the unscheduled tasks into a drawer instead of freely floating and making a mess and being terrible. The drawer should be on the right.

On desktop: permanent/fixed/never goes away.
On smaller screens: closed by default, closes on drag start to reveal the scheduling buckets.

Add search / filter to make it easier to find tasks

Add a search field that filters tasks.

Do not try to re-implement taskwarrior's filtering -- just take the text in the search field and send a request to the server every time. It's not worth it to do it locally.

This needs support in the server -- it should accept the search (e.g. as a query string parameter) and add it to its filter.

Display all scheduled tasks, even the WAITING ones

Anything that is scheduled should be displayed, regardless of whether it is displayed in "normal" taskwarrior output. Such as a WAITING task.

This just needs changing the filter. Question is: what to?

Timewarrior integration

  • Detect timewarrior presence by the existence of the default hook (.task/hooks/on-modify.timewarrior).
  • If timewarrior is present, show a start/pause button on Next page
  • Clicking start/pause translates to task ID start/stop

DISCUSS: Context and Next report support

Right now tasksched basically uses task export and, if I recall correctly, it filters by task state on the ELM side of things.

This complicates things a bit, like: what about context support? Or custom next reports?

I'd think it's kind of to be expected that what is shown on task and what is shown on tasksched's interface are the same, which means supporting these two things.

One way I'd go about that, would be replacing the task export call with three calls:

  • task _get rc.context: will return the current context or nothing
  • task _get rc.context.$CONTEXT: will return the filter for the current context OR task _get rc.report.next.filter will return the filter for the next report
  • task $FILTER export: will return (and pass to tasksched) the filtered tasks

If I recall correctly, spawn should take care of shell escaping, it should be checked in any case (filters contain stuff like ! and context names can be "weird").

What do people using tasksched think? :-)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.