{"id":19903950,"url":"https://github.com/zerotohero-dev/jfdi","last_synced_at":"2025-05-03T00:31:29.877Z","repository":{"id":10213824,"uuid":"12309992","full_name":"zerotohero-dev/JFDI","owner":"zerotohero-dev","description":"A Hacker's Way of Getting Stuff Done","archived":false,"fork":false,"pushed_at":"2016-05-09T12:54:05.000Z","size":189,"stargazers_count":11,"open_issues_count":41,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-29T09:52:04.417Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":"jobandtalent/AnimatedTextInput","license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zerotohero-dev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-08-22T23:10:39.000Z","updated_at":"2025-01-13T09:28:14.000Z","dependencies_parsed_at":"2022-09-19T09:01:21.555Z","dependency_job_id":null,"html_url":"https://github.com/zerotohero-dev/JFDI","commit_stats":null,"previous_names":["v0lkan/jfdi"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zerotohero-dev%2FJFDI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zerotohero-dev%2FJFDI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zerotohero-dev%2FJFDI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zerotohero-dev%2FJFDI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zerotohero-dev","download_url":"https://codeload.github.com/zerotohero-dev/JFDI/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252126534,"owners_count":21698963,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-12T20:26:05.239Z","updated_at":"2025-05-03T00:31:29.349Z","avatar_url":"https://github.com/zerotohero-dev.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003e **NOTE**\n\u003e\n\u003e This project is no longer maintained (*at least for a while*).\n\u003e\n\u003e If you want to be the maintainer, contact me\n\u003e at me@volkan.io\n\u003e\n\n![JFDI Travis CI Build Status](https://api.travis-ci.org/v0lkan/JFDI.png) \u0026nbsp;\n![JFDI NPM version](https://badge.fury.io/js/jfdi.png)\n\n**Table of Contents**\n\n- [A Hacker's Way of Getting $#!% Done](#a-hackers-way-of-getting--done)\n    - [Every Saga Has a Beginning](#every-saga-has-a-beginning)\n    - [Why a Command Line Interface?](#why-a-command-line-interface)\n        - [Why \"Right Now\"?](#why-right-now)\n    - [It is Plain Text Files, Baby!](#it-is-plain-text-files-baby!)\n    - [When You Don't Have Access to `jfdi` CLI](#when-you-dont-have-access-to-jfdi-cli)\n    - [Supported Platforms](#supported-platforms)\n    - [Project Directory Structure](#project-directory-structure)\n    - [Where Can I Get Help?](#where-can-i-get-help)\n    - [Where Is the Documentation?](#where-is-the-documentation)\n    - [How Do I Setup **JFDI**?](#how-do-i-setup-jfdi)\n        - [Setup for Linux / Mac](#setup-for-linux--mac)\n        - [Setup for Windows](#setup-for-windows)\n    - [Configuration](#configuration)\n    - [Usage](#usage)\n        - [Displaying Help](#displaying-help)\n        - [Adding a Goal](#adding-a-goal)\n        - [Listing Goals](#listing-goals)\n        - [Deferring a Goal](#deferring-a-goal)\n        - [Appending Text to a Goal](#appending-text-to-a-goal)\n        - [Prepending Text to a Goal](#prepending-text-to-a-goal)\n        - [Replacing Text within a Goal](#replacing-text-within-a-goal)\n        - [Listing Deferred Goals](#listing-deferred-goals)\n        - [Moving a Goal Back to Today's Queue](#moving-a-goal-back-to-today's-queue)\n        - [Marking a Goal as Done](#marking-a-goal-as-done)\n        - [Searching for Goals](#searching-for-goals)\n    - [Things to Be Implemented](#things-to-be-implemented)\n    - [Versioning](#versioning)\n    - [How Do I Contribute?](#how-do-i-contribute)\n    - [I Have A Question](#i-have-a-question)\n    - [License](#license)\n    - [Contact Information](#contact-information)\n\n# A Hacker's Way of Getting $#!% Done\n\n## Every Saga Has a Beginning\n\nIt all started with [the **JFDI** Methodology](https://gist.github.com/v0lkan/2694911) and [the **JFDI** Manifesto](https://gist.github.com/v0lkan/2731233).\n\n\u003e In a nutshell, **JFDI** is a *command line interface* to help you focus what goals you can achieve **right now**.\n\n## Why a Command Line Interface?\n\nBecause, we geeks live in the terminal.\n\nUsing something that is already running, and is most of the time available in front of your eyes, will help you **overcome the inertia** of launching a separate app to manage your goals \u0026ndash; Here's why:\n\n\u003e Adding a **JFDI** goal is as simple as typing `jfdi save the world`.\n\u003e\n\u003e You don't have to wait for\u0026hellip;\n\u003e\n\u003e * your shiny dandy GTD desktop app to launch\u0026hellip;\n\u003e * index its tasks\u0026hellip;\n\u003e * connect to the Internet\u0026hellip;\n\u003e * sync recent data\u0026hellip;\n\u003e * render a pretty UI\u0026hellip;\n\u003e\n\u003e If after all that hassle, you will still need to click an \"add task\" button, just to add a simple goal, than it is **too much work already**.\n\nAnd when it is **too much work**, your subconscious will resist to use that app **forever**.\n\n* That's why there are **hundreds** of **TODO** applications out there, which people have hard time habituating;\n* And that's why the majority of people are not satisfied with their \"*task management software*\".\n\n\u003e Now compare how you would **JFDI**, instead:\n\u003e\n\u003e     Type your goal, hit _enter_ and bang!* it's there.\n\u003e\n\u003e \\* *Yes, this does make a \"bang!\" sound effect in your mind ;).*\n\nNo process can be less interruptive, and faster!\n\nThe main aim of the application is to help you accomplish **what need to be get done today**, with as little distraction as possible.\n\nSo unlike other productivity \u003cstike\u003epr\\*n\u003c/stike\u003e apps, you will not find dates, schedules, reminders, labels\u0026hellip; to distract you away in **JFDI**.\n\n### Why \"Right Now\"?\n\nBecause it's f\\*cking \" **JFDI** \" !\n\n\u003e Planning Is a Bummer!\n\nAdmit it, most of the time you don't plan launching a manless spaceship to the moon. Your typical **runway** is something like\u0026hellip;\n\n* Fix bug id UNP9959: \"Unicorns and ponies should live together\".\n* Remember the milk.\n* Save the world.\n\n\u003e Why torture your brain by setting *due dates* weeks from now to those simple tasks?!\n\n**JFDI** what you can do **right now**, and *bump* the rest to **tomorrow**.\n\n## It is Plain Text Files, Baby!\n\nDo you know what is universally reachable, and modifiable, without needing to download any special software?\n\n\u003e A plain text file!\n\nYou can edit your text file on your Mac, on your PC, on your smart phone, on your tablet, on Mars, and on the moon\u0026hellip;\n\nMoreover, text files are damn fast to edit; **they do not distract you**.\n\nWhat **JFDI** does is similar:\n\n\u003e **JFDI** maintains *plain text files* in a **synchronization** directory of your choice.\n\nIf you set your **synchronization** directory to something like:\n\n`/home/procrastinator/Dropbox/JFDI/`\n\ngiven that */home/procrastinator/Dropbox/* is your [Dropbox][dropbox] folder, **JFDI** will put three text files to that folder:\n\n* **today.txt**,\n* **tomorrow.txt**,\n* and **done.txt**;\n\nthen you can edit these files wherever you want.\n\nAnd once you are done, they will be synchronized **everywhere**.\n\n[dropbox]: http://dropbox.com/\n\n## When You Don't Have Access to `jfdi` CLI\n\nSince those files are plain text files, you can use **any text editor** to modify them even if you don't have access to `jfdi` command line interface.\n\n\u003e Since **JFDI** data files are plain text files, they are universally portable.\n\u003e\n\u003e For instance you can use an editor like [textastic][textastic] to edit your goal list on your smart phone or tablet, and then when you are back in front of your computer, you can use `jfdi` to modify those files from where you left.\n\n**JFDI** gives you the liberty to modify your files however you like.\n\nIt only has a single requirement:\n\n    Keep each goal on a separate line.\n\nIt will play nicely, as long as you remember to **keep each goal on its own line**.\n\nAnd as long as you follow this simple rule, you can edit your text files in whichever text editor you like, and when you run `jfdi` again, it will catch up and parse the files properly.\n\n[textastic]: http://www.textasticapp.com/\n\n## Supported Platforms\n\n\u003e **JFDI** does not have any platform-specific dependencies.\n\nYou should be able to run it on **any platform that supports Node.JS**.\n\nIt should work properly in all major **Windows**, **Mac OSX**, and **Linux** platforms.\n\nIf you face any particular issue with your platform [file an issue][issue].\n\n## Project Directory Structure\n\nThe directory structure of the project is as follows:\n\n* **test**: Unit tests.\n* **lib**: Helper modules.\n* **i18n**: Localization (*not implemented yet*)\n* **config**: Custom configuration (*not implemented yet*)\n* **data**: Configuration folder (*do not touch*).\n* *index.js*: The entry point of the program.\n* *README.md*: This file you are looking at.\n* *CHANGELOG.md*: Things that has been done so far.\n* *LICENSE.md*: Boring copyright stuff.\n* *package.json*: npm package information.\n\n## Where Can I Get Help?\n\nHere are the places you can get help:\n\n* If you are experiencing a problem, or if you have found a bug, or if you want\nsome cool sh\\*t to be implemented [you can file an issue][issue];\n* If you want to figure out how a specific command works, this README that you\nare reading right now will be helpful;\n* And you can always [send an e-mail to **volkan@o2js.com**][me].\n\n## Where Is the Documentation?\n\nCurrently the only documentation is this **README** file that you are looking at. It will be regularly updated as new features are added to the project.\n\n\u003e You can also get command line help if you type `jfdi -h` or `jfdi --help` in the console.\n\nIn addition to this **README** file, you can also read [this o2js.com blog post][o2-done] for usage examples, and installation details.\n\n...\n\n\u003e If you write reviews in your blog, [send an e-mail to **volkan@o2js.com**][me] and it will be cited here, as an additional resource, ASAP.\n\n[o2-done]: http://o2js.com/jfdi-a-hackers-way-to-get-stuff-done\n\n## Can I Get the **Cutting-Edge** Version?\n\nIf you are okay to trade up slight unstability for added coolness, additional commands and more features; then you might want to check out [the **develop** branch][develop].\n\n[The develop branch][develop] is more frequently updated than the master branch. You will probably have a \"mostly working\" app, with incomplete tests.\n\n\u003e Any code that breaks the tests are generally not pushed to develop, therefore [the **develop** branch][develop] is generally safe with missing tests and documentation.\n\nTo use the **develop** branch, `git clone` and `npm link` it as follows:\n\n    [root@john.doe:~]#git clone https://github.com/v0lkan/JFDI.git\n    [root@john.doe:~]#git checkout develop\n    [root@john.doe:~]#cd JFDI\n    [root@john.doe:~]#npm link\n\nIf you have issues setting up the **develop** version, [send an e-mail to **volkan@o2js.com**][me].\n\n[develop]: https://github.com/v0lkan/JFDI/tree/develop\n\n## How Do I Setup **JFDI**?\n\nSetting up your **JFDI** environment is easy.\n\n### Setup for Linux / Mac\n\nYou should have [Node.JS](http://nodejs.org/) installed, first.\n\nOnce you have **Node.JS** installed, just run:\n\n    sudo npm install -g jfdi\n\nin your terminal, and you will have **JFDI** installed globally.\n\n### Setup for Windows\n\nIt is similar to Linux setup. After having installed **Node.JS**, just run.\n\n    npm install -g jfdi\n\nin the command prompt, and you are done.\n\n## Configuration\n\n\u003e **Tip**:\n\u003e\n\u003e For Linux users setting up an alias like `alias j=\"sudo jfdi\";` may save you a few keystrokes.\n\n\u003e **Tip**:\n\u003e\n\u003e You might need root privileges to use **JFDI**.\n\u003e\n\u003e If the command examples given below do not work for you, replace `jfdi` with `sudo jfdi`, and try them again.\n\u003e\n\u003e If they still fail, [file a bug report][issue].\n\nTo configure your **JFDI**, just type `jfdi` to the terminal.\n\n    [root@john.doe:~]# jfdi\n\nAnd you will get a prompt similar to this:\n\n    ### Set Your JFDI for the First Time ###\n\n        It looks like this is the first time you are using JFDI.\n        Don't worry, it's easy.\n\n        The only thing you need to configure is a folder to\n        store your JFDI data.\n\n        Where do you want to store your JFDI data?\n        Enter the full path ( like: /home/ninja/Dropbox/JFDI/ ).\n\n    prompt: path:\n\nJust type in the **full path** of a valid folder on your system.\n\n    prompt: path:  /home/procrastinator/Dropbox/JFDI/\n\nand then press enter. You will get the following notification upon success:\n\n    ### Yay! ####\n\n        Ready to go! You can use JFDI now.\n\n        Visit\n\n        https://github.com/v0lkan/JFDI/blob/master/README.md\n\n        for usage examples.\n\nYou can further verify everything is set up by checking your **JFDI** data directory:\n\n    [root@john.doe:~]# ls /root/Dropbox/JFDIExample/ -al\n    total 8\n    drwxr-xr-x  2 root root 4096 Sep 10 17:22 .\n    drwx------ 11 root root 4096 Sep 10 13:50 ..\n    -rw-r--r--  1 root root    0 Sep 10 17:22 done.txt\n    -rw-r--r--  1 root root    0 Sep 10 17:22 today.txt\n    -rw-r--r--  1 root root    0 Sep 10 17:22 tomorrow.txt\n\nIf everything is set up correctly, once you run `jfdi` once more, you will get the following message:\n\n    [root@john.doe:~]# jfdi\n\n    ### JFDI List For Today ###\n\n       *Zero Inbox* for today! Hooray!\n\n       Sample Usage:\n           Add a Goal       : jfdi [-a] \"Save the world; one goal at a time.\"\n           List Goals       : jfdi -l\n           List All Commands: jfdi -h\n\nWhich means that you are all set! Congratulations!\n\n## Usage\n\n### Displaying Help\n\n    [root@john.doe:~]# jfdi -h\n\n### Adding a Goal\n\nUse\n\n    [root@john.doe:~]# jfdi Save the cheerleader, save the world.\n\nOr you can use quotes if you have special characters in your goal:\n\n    [root@john.doe:~]# jfdi \"Save the cheerleader, (save the world).\"\n\n\u003e **Tip**:\n\u003e\n\u003e This quotation feature works similar in all other **JFDI** commands too. So if you have special text which might be parsed as a command, just put it inside quotes to use it.\n\nHere is a sample response:\n\n    [root@john.doe:~]# jfdi Save the cheerleader, save the world.\n\nThe above command will output the updated goals list.\n\n    ### JFDI List For Today ###\n\n    0 Save the cheerleader, save the world.\n\n### Listing Goals\n\nJust type `jfdi`.\n\n    [root@john.doe:~]# jfdi\n\nThe above command will output:\n\n    ### JFDI List For Today ###\n\n    0 learn kung-fu\n    1 buy milk.\n    2 Save the cheerleader, save the world.\n\n### Deferring a Goal\n\nUse `jfdi -d \u003cgoal id\u003e`.\n\nFor the above list of goals, using\n\n    [root@john.doe:~]# jfdi -d 1\n\nwill output:\n\n    ### JFDI List For Today ###\n\n    0 learn kung-fu\n    1 Save the cheerleader, save the world.\n\n(*note that \"buy milk\" goal for id 1 has been moved*)\n\n### Appending Text to a Goal\n\nUse `jfdi -m \u003cgoal id\u003e -D \"\u003ctext to append\u003e\"`.\n\nNote that you will need to enclose your text in quotes (\"\") if it has multiple words.\n\nYou can also use the parameters in their long forms:\n\n    jfdi --append \u003cgoal id\u003e --text \"\u003ctext to append\u003e\"\n\nAs in:\n\n    jfdi --append 1 --text \" Save the universe, too.\"\n\n### Prepending Text to a Goal\n\nUse `jfdi -m \u003cgoal id\u003e -D \"\u003ctext to append\u003e\"`.\n\nNote that you will need to enclose your text in quotes (\"\") if it has multiple words.\n\nYou can also use the parameters in their long forms:\n\n    jfdi --append \u003cgoal id\u003e --text \"\u003ctext to append\u003e\"\n\nAs in:\n\n    jfdi --append 1 --text \"Find the cheerleader. \"\n\n### Replacing Text within a Goal\n\nUse `jfdi -r \u003cgoal id\u003e -D \"\u003ctext to replace\u003e\" -w \"\u003creplacement\u003e\"`. You can also use the parameters in their long forms:\n\n    jfdi --replace \u003cgoal id\u003e --text \"\u003ctext to replace\u003e\" --with \"\u003creplacement\u003e\"\n\nAs in:\n\n    jfdi --replace 1 --text \"Cheerleader\" --with \"Blonde Immortal Cheerleader\"\n\n\u003e **Hint**:\n\u003e\n\u003e The `--replace` parameter accepts regular expressions too.\n\u003e So you can use something like\n\u003e\n\u003e     `jfdi --replace 1 --text \"Ch.{2,2}rl[ea][ea]d.r\" --with \"Blonde Immortal Cheerleader\"`\n\u003e\n\u003e and do the same replacement.\n\n### Listing Deferred Goals\n\nUse `jfdi tomorrow`.\n\nFor the above **today** queue, using\n\n    [root@john.doe:~]# jfdi tomorrow\n\nwill output something similar to the following:\n\n    ### Upcoming JFDI Stuff ###\n\n    0 buy milk.\n\n### Moving a Goal Back to Today's Queue\n\nUse `jfdi -e \u003cid\u003e`.\n\nFor the above **tomorrow** queue, using\n\n    [root@john.doe:~]# jfdi -e 0\n\nwill output\n\n    ### JFDI List For Today ###\n\n    0 buy milk.\n    1 learn kung-fu\n    2 Save the cheerleader, save the world.\n\nYou can see that \"buy milk\" goal has been moved to the top of your **tomorrow**\nqueue.\n\n### Marking a Goal as Done\n\nIt's as easy as `jfdi \u003cid\u003e`.\n\nFor the above example, using\n\n    [root@john.doe:~]# jfdi 1\n\nwill output\n\n    ### JFDI List For Today ###\n\n    0 buy milk.\n    1 Save the cheerleader, save the world.\n\nNow you know kung fu!\n\n### Searching for Goals\n\n* Use `jfdi -f \u003cphrase\u003e` for today's goals.\n* Use `jfdi -f \u003cphrase\u003e tomorrow` for tomorrow's goals.\n\nFor the above goals list,\n\n    [root@john.doe:~]# jfdi -f milk\n\nor\n\n    [root@john.doe:~]# jfdi -f \"milk\"\n\nwill output:\n\n    ### \"milk\" for Today ###\n\n    0 buy milk.\n\nAnd\n\n    [root@john.doe:~]# jfdi -f ponies tomorrow\n\nwill output:\n\n    ### \"ponies\" for Tomorrow ###\n\n    0 find ponies and rainbows\n\n(*given that there exists such a goal in your tomorrow's queue*)\n\n...\n\nThat's a basic summary of what you can do with **JFDI**. There are many aliases to the above commands; so, for example, instead of using `jfdi -e \u003cid\u003e` you can use `jfdi --expedite \u003cid\u003e`, too. Type `jfdi --help` for more information on the available commands that you can use.\n\n## Things to Be Implemented\n\nSee the [issue list][issues] for what's coming up next.\n\n\u003e **Hint**:\n\u003e\n\u003e [file an issue if you want more stuff][issue].\n\n[issues]: https://github.com/v0lkan/JFDI/issues\n\n## Versioning\n\nEach functional change in **JFDI** code increments the version number.\n\nThe version of the project is maintained at `package.json`; and it has `MAJOR.MINOR.PATCH` format.\n\n* **MAJOR** version changes are breaking, incompatible API changes.\n* **MINOR** version changes are **enhancements** and **new functionality** that have been added in a non-breaking, backwards-compatible manner.\n* **PATCH** version changes are non-breaking, backwards-compatibile **bug fixes**.\n\nWith the following exception:\n\n\u003e Although the maintainers of this codebase will try to the best abilities not to introduce breaking changes, any version less than **1.0.0** are exempt from the above rules, and may introduce breaking changes at any time.\n\nEach major version of **JFDI** will be maintained as tagged snapshots for each version.\n\n## Deployment Policy\n\n* Everything is implemented and tested on the **develop** branch first;\n* Then unit tests are written on the **develop** branch for the changes;\n* Once the [CI][travis] is **all green**, **develop** branch is merged into **master**.\n* Once the **master** gives all green on the on the **CI** too, then the final module is `npm publish`ed.\n\n[travis]: https://travis-ci.org/v0lkan/JFDI\n\n## How Do I Contribute?\n\n**JFDI** is in active development, and any contribution is highly appreciated.\n\nContribution is simple. Just follow these steps:\n\n1. Fork this repository;\n2. Switch to the **develop** branch (`git checkout develop`);\n2. Create a feature branch (`git checkout -b my-awesome-feature`);\n3. Commit your changes (`git commit -am 'Added a great feature.');\n4. Push to the branch (`git push origin my-awesome-feature`);\n5. Create a new pull requests.\n\n## I Have A Question\n\n[File an issue][issue] or [Send an e-mail to **volkan@o2js.com**][me].\n\n## License\n\n**JFDI** is distributed under the **MIT** license.\nYou can play with it however you like.\n\nSee [LICENSE.md][license] for details.\n\n## Contact Information\n\n**Project Owner**:  [Volkan Özçelik][volkan.io] \u003cvolkan@o2js.com\u003e.\n\n[volkan.io]: http://volkan.io/\n[me]: mailto:volkan@o2js.com\n[license]: https://github.com/v0lkan/JFDI/blob/master/LICENSE.md\n[issue]: https://github.com/v0lkan/JFDI/issues/new\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzerotohero-dev%2Fjfdi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzerotohero-dev%2Fjfdi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzerotohero-dev%2Fjfdi/lists"}