Checkvist story
Helping people easily create, share, and collaborate on task lists and outlines.
Server update: task actions and other improvements
After the release of due dates we’ve got a lot of positive feedback, thanks a lot!But some people pointed to a problem we are very anxious about - interface clutter. As long as we add new functionality, we also add new interface elements. More functionality - more interface elements. More interface elements - harder to keep the interface clean.
Last week we made several server updates, trying to address this problem:
- Task actions.
Instead of having multiple controls to invoke task related actions we decided to group them under one Actions menu, which can be invoked on a selected task with a simple shortcut aa. The menu is also available from the toolbar. - Concise sidebar
Sidebar help have grown too big. To solve this, we decided to introduce concise sidebar mode. Now sidebar includes only very basic shortcuts (including new powerful aa). You can see more shortcuts by clicking the “more shortcuts” link at the bottom. Besides, you can completely hide the whole sidebar by clicking the cross in the top right corner. - Colored tasks under the Due tab
When tasks are marked with color and have a due date, we keep their color under the Due tab. - Go to a hyperlink with the keyboard
If a task text has a hyperlink, you can use shortcut gg to navigate to this link. Especially helpful after the “extract checklist” command. - Bugfixes
Various bugfixes, including incorrect positioning of subtasks, and better URL recognizing in task contents.

Thanks a lot to people who contributed the ideas included into this server update: English Atkins, Martin Brook, Ricardo Salta, Ted Penner.
More comments and suggestions are really welcome :)
Due dates and ASAP tasks
There are roughly two kinds of people: those who love to set a due date and those who hate seeing “overdue” list by the end of the day. We belong to the second group. Plan approximately, do as much as you can, don’t regret what’s beyond your capabilities.
But still, it is handy to have a shortlist of high priority tasks which should be completed as soon as possible. This prompted the solution: due dates for those who know the exact date, ASAP tasks for those who don’t.
dd is a new simple keyboard shortcut for setting (or clearing) a due date for a task. Press dd and select a date in the dialog window:
td and tm shortcuts will save you time - they set due date for today and tomorrow.
cd will clear due date, just two key presses, no dialog windows needed.
as shortcut will set the ASAP due (due with no definite date).
Run through your lists and put on your plate all you need to do in the first place - tomorrow if not today. Then open the Due tab on the index page, and see all ASAP tasks grouped on a single page. ASAP tasks are also included into the daily due notifications email.
But dialog window and keyboard shortcuts are not the only options. If a task ends with today, tomorrow, asap or 19 Jan, 2010 (see all supported date formats), Checkvist will automatically transform the word into due date: 
Don’t want this? End a task with the dot to keep Checkvist smart syntax at bay.
PRO users can subscribe to daily notification email which will include all overdue, due today, tomorrow and ASAP tasks. Select a checklist you want to watch on your Profile -> Notifications tab or click the email icon on the right side of the toolbar on any checklist page.
And now - let’s go planning! As always, we’d love to hear your thoughts, ideas, and - who knows! - bug reports.
The more and better, the better!
It’s good when a new great tool appears in your field. The better are tools, the higher expectations, the less half baked “app spam” you get while searching for a true helper in your work.
Besides, arrival of a new great tool stimulates the interest for the whole field. Your new “competitor” outsmarted you in visual design? Has more features? Found a better solution for a common problem? Well, now it’s your turn, give the users something better. And better. With each release.
Just keep on swimming, so everybody benefits.
We always loved Todoist and OmniOutliner for minimalism and smart features, Thinklinkr for smooth sleek visual design, and recently we had a great time playing with the newcomer, TeuxDeux.
And my, aren’t we glad to be listed beside it :)
New bookmarklet: Gmail and issue tracker integration
Seems, it’s time to update your bookmarklets!
The new bookmarklet is integrated with Gmail - click the “2Checkvist” link in the browser toolbar to create a Checkvist task associated with a specific email.
Same with the issue tracker integration - click the bookmarklet while browsing your issues to create a quick to-do list for yourself, your team, specific release, etc. So far Checkvist “understands” Atlassian Jira and JetBrains YouTrack issue link formats.
But of course you can use bookmarklet to save references to any web page as well and conveniently create a list of tasks while browsing the web.
Other enhancements include:- No pop-up window (no problems with browser pop-up paranoia)
- ESC to close the bookmarklet window
- Ctrl+Enter instead of clicking the Add button.
Drag and drop the new bookmarklet to the browser toolbar: 2Checkvist or update it later from your profile page.
Embed checklist to your web page
After releasing the iGoogle gadget for Checkvist it was rather natural to give users an easy way to embed lists to their web pages. Just like in an example below:
This checklist is marked as public, so anyone can view it even without having Checkvist account.
Now, when checklist author marks it as public from the share dialog, there is a code snippet which allows to embed this checklist to any HTML page (see screenshot below).

You can copy/paste code fragment from the text field and insert it into a web page. If needed, you can tweak width and height parameters.
Add Checkvist to your iGoogle homepage

Here’s a little something for your convenience: an iGoogle gadget. Add it to your personalized Google homepage and work with your list using the same keyboard shortcuts:
- Select a list you want by pressing ll
- Hide/show completed tasks by pressing hc
- Navigate the list, add new tasks, subtasks, complete or invalidate, use color - all fast, not taking your hands from keyboard.
OpenAPI usage examples (Javascript, Ruby)
We’ve got a number of requests to provide some examples of accessing Checkvist via OpenAPI. When I started preparing one, I found some inconsistencies in the OpenAPI docs and in the implementation. These issues have been fixed and now I’d like to give you some code examples.
In the examples, I’ll demonstrate usage of the JSON format for the returning data. Checkvist API also supports XML format, for details, please see the documentation.
Javascript
The Javascript example illustrates how to obtain checklist tasks data and embed the list into your web page.
The list will be organized into a hierarchy with simple UL tags. Completed tasks in the list will be striked, invalidated tasks are marked with italics. The parent UL tag will have CSS class checkvist_list to enable styling according to your needs.
Here is a sample of the generated HTML code:
<ul class="checkvist_list">
<li>This is an item</li>
<li>This is another item
<ul>
<li>This is a subitem</li>
<li><strike>This is a completed subitem</strike></li>
<li><em>This is invalidated subitem</em></li>
</ul>
</li>
</ul>
To embed the checklist, follow these steps:
Step 1. Add Javascript library for accessing Checkvist
In the HEAD section of your web page, add the following line:
<script type="text/javascript"
src="http://checkvist.com/javascript/checkvist_api.js"></script>
This sample library contains the code which accesses the Checkvist via OpenAPI and builds HTML for embedding into web page. You can download it and customize for your needs, if you want.
Step 2. Prepare target location for the embedded checklist
Add the following markup on your page at the place where you want to see the checklist:
<div id="checklist_container"></div>
Step 3. Determine the ID of the checklist you want to embed
This is an easy part. If your checklist has URL like http://checkvist.com/checklists/3318-checkvist-test-plan, than required checklist ID is 3318.
Step 4. Get your OpenAPI key
Visit your CheckVist profile page and click “View/update remote OpenAPI key” link. Copy the key from the text field.
Step 5. Add code which actually loads the checklist
Add the following block in the HEAD section of your Web page:
<script type="text/javascript">
function load_checklist_callback(data) {
document.getElementById('checklist_container').innerHTML =
checkvist.create_tasks_html(data);
}
function load_checklist() {
// Remove the next line if your checklist is public
checkvist.login('Your E-Mail', 'Your OpenID KEY');
checkvist.get_tasks(<Checklist ID>, 'load_checklist_callback');
}
var checkvist_interval = setInterval(function() {
if (document.getElementById('checklist_container')) {
clearInterval(checkvist_interval);
load_checklist();
}
}, 20);
</script>
In this code, you need to specify your login to CheckVist - e-mail address, OpenAPI key, and checklist ID to show.
If your checklist is public, there is no need to authenticate, so checkvist.login call can be omitted.
Actually, instead of calling setInterval function, you can invoke method load_checklist in your usual place of Javascript initialization code for your web page.
That’s it. When the page is loaded, the element checklist_container will be filled with checklist tasks. You can take a look at the checkvist_api.js and use it as a base for solving more complex tasks.
Ruby
As long as Checkvist OpenAPI is HTTP-based, you can use a standard Net::HTTP module to create requests, and JSON gem to parse responses.
Here is a sample class for accessing Checkvist from Ruby:
require 'net/http'
require 'uri'
require 'rubygems'
require 'json'
class SampleCheckvistApi
def initialize email = nil, api_key = nil, site = "http://checkvist.com"
@email = email
@api_key = api_key
@url = URI.parse(site)
end
# Obtain a list of checklists
def checklists()
json_call Net::HTTP::Get.new("/checklists.json")
end
# Obtain a list of tasks for given checklist
def tasks(checklist_id)
json_call Net::HTTP::Get.new("/checklists/#{checklist_id}/tasks.json")
end
# create a task in given checklist
def create_task(checklist_id, content, parent_task_id = nil, position = nil)
json_call Net::HTTP::Post.new("/checklists/#{checklist_id}/tasks.json"),
{ "task[parent_id]" => parent_task_id,
"task[position]" => position,
"task[content]" => content }
end
# update a task attribute. For task attributes, you can use "content", "parent_id", "position"
def update_task_attribute(checklist_id, task_id, attr_name, attr_value)
json_call Net::HTTP::Put.new("/checklists/#{checklist_id}/tasks/#{task_id}.json"), {"task[#{attr_name}]" => attr_value}
end
def json_call request, parameters = nil
request.basic_auth @email, @api_key if @email
request.set_form_data(parameters) if parameters
res = Net::HTTP.start(@url.host, @url.port) { |http|
http.request(request)
}
case res
when Net::HTTPSuccess
JSON.parse(res.body)
else
res.error!
end
end
end
And here is a sample of how to use SampleCheckvistApi class:
# Specify authentication data:
api = SampleCheckvistApi.new('email', 'OpenAPI key')
# For each public non-archived checklist
api.checklists.each do |checklist|
# Obtain its tasks:
tasks = api.tasks(checklist['id'])
# Tasks are sorted by parent_id, position
end
# Create a task in the first checklist
# Get ID of the first checklist:
first_checklist_id = api.checklists[0]["id"]
# Create the task at the end of the checklist:
new_task = api.create_task(checklist_id, "new task from api")
# Change task content to 'new text'
api.update_task_attribute(new_task['checklist_id'],
new_task['id'], "content", "new text")
# Change the parent of the task:
api.update_task_attribute(new_task['checklist_id'],
new_task['id'], "parent_id", tasks[0]['id'])
If you’re interested in using Checkvist API, or you’re going to use it, please let us know :). You may also want to subscribe to the checkvist-api newsgroup.
Good luck!
KIR
Bugfix server update
Hello,
For the last days we didn’t do a lot of new development, but bugs cannot wait, so here is a short summary of what was fixed for the last time:
- Fixed Remember Me support. Now users who checked “Remember Me” mark will be redirected from home page to their checklists page (as it was before introducing the paid plan)
- There were some bugs when recognizing URL in checklist text. If you notice incorrect URL recognizing, please let us know.
- OpenAPI fix: when tasks were returned in JSON format, the data was OK for Javascript interpretation, but didn’t confirm to JSON standard.
- No notifications were sent about deleted notes
- Copy/Paste/Move now copy notes for tasks as well
- MySQL database were updated to avoid some locking problems
- OpenAPI documentation was corrected in several places
And thanks all of view for your feedback, we really appreciate it!
Extract checklist and UI customization
This week we introduce a couple of features and a handful of bugfixes:
- Extract checklist - when a checklist gets too long, you can easily break it into several ones. Just select the top task of the node you want to extract, and press xx (new shortcut for xtract feature). The top task becomes the new checklist title, and the original list contains a link to the new one. See reference for details.
- UI Customization available to our Pro users - The first addition to the Pro plan allows changing the logo and colors of the Checkvist’s interface. Those who are sure of their web design skills can use custom CSS to customize Checkvists face into anything they fancy. See reference for details.
- (bug fixed) Changed behaviour of a parent task upon completion in the “Hide completed mode (see the discussion of this issue)
- (bug fixed) Corrected URL linking (thanks, Ricardo!)
- (bug fixed) Saving credentials upon login (the “Remember me” option) (thanks, Oleg!)
And - as usual - thank you so much for your feedback and so many ideas!
It's settled: Checkvist Pro
We’ve been almost silent for quite a while. And there is a reason behind that.
For more than a year, Checkvist was completely free. We have a lot of happy users, a lot of great feedback. It is a real joy to work on the tool.
We got some requests from people who would like to donate to our service to say thank you - and these were indeed pleasant requests. On the other hand, monthly hosting bills led us to a thought that Checkvist should probably pay for itself, or at least cover some expenses.
So we spent some time and introduced Checkvist Pro plan. As we promised before, all previous features, already available to Checkvist users, remained free.
Checkvist Pro plan is subscription-based, and it costs $15 for 6 months. Its benefits are valuable mostly for those who collaborate using Checkvist:
- Daily digest of the changes. You can either subscribe on changes in specific checklists, or subscribe for all available checklists.
- Private read-only sharing. This feature is useful in a case when you want to show results of your work to someone, but disallow modifications from your reviewer (writeable sharing is still available for free).
- Full HTTPS support. You can use HTTPS protocol to work with your lists, which makes your communications secure. For all (including non-Pro) accounts, HTTPS can still be used to register in the system and update user profile.
There is also a couple of new things available to free accounts as well:
- You can specify a custom message when sending a notification about changes
- You can choose recipients of the notification, and also send a copy to yourself
- Notification e-mail message was reworked and is available in HTML format
Under the hood, we’ve also made several time-consuming changes, in particular, migration to Ruby on Rails 2.3.3 and MySQL InnoDB engine.
And now, after the release, we can provide more frequent updates.
Stay tuned and thanks for being with us :)