FreeAgent Widget for Mac Dashboard

; updated

Going freelance has introduced me to a whole bunch of new chores and challenges, two of which are

Thankfully, there’s a tool which seems to hit the spot in terms of power and simplicity - FreeAgent. It seems to strike a great balance between gather all the information about expenses, payroll, taxes, invoices, timesheets and bills, whilst not requiring me to study accountancy to make progress.

Anyway, on my latest project (working with New Leaders via Free Range), I’m tracking my time in a relatively detailed way, and I thought it would be good to make use of the timesheet functionality that I’m already paying for. But, it’s a pain to go to the website every time I need to track a task. So:

FreeAgent Timesheets Widget

Download FreeAgent Widget 1.3 here. This is a Mac Dashboard widget, and so only works on Mac OS X. If you’re looking for a Windows tool, Aspect Webdesign have build one that might work for you

It’s fairly simple, functionally, but covers everything I need. Once you fill in your FreeAgent details, it will load your projects, and choosing a project will load the available tasks for that project. Hit the big middle button to start/pause timing, and then clicking “Post” will post that time to your account. I’ve added a few neat little tricks - try double-clicking the time and typing “1h30”, for example.

It’s not hugely sophisticated - you can’t manage your existing timesheets, or add a timesheet for another day - but clicking the ‘timeslips’ text will take you straight to your timesheets on the site should you need that.

I hope it’s useful for some people, and of course, since it’s on GitHub you’re free to fork and improve it. I’m also keen to try the new github issues feature if you’re having any problems.

Updates —-

interblah.net - Site Test

Site Test

Site Test

This page exercises all the major types of markup and dynasnips that should work. The main purpose is to act as a single page which contains almost all possible selectors, so that the CSS can be effectively minimised, but it also serves as a decent visual debug of the behaviour of vanilla-rb.

Table of Contents

Typography

This is a simple paragaph. Its contents are uninteresting; boring perhaps, but that’s fine & dandy really. Thanks to Kramdown, lots of normal markup should work, like emphasis and bolding, and “smart quotes” around ‘words’, that sort of thing.

this is a quote

Images

Images are rendered as block elements, but should have titles too.

All good so far.

Lists

Or indeed,

  1. a numbered
  2. list of
    1. salient, and
    2. fascinating
  3. things

Great, that all looks wonderful.

Headings

There are six heading levels, naturally

Header 1

Header 2

Header 3

Header 4

Header 5
Header 6

Sometimes between sections…


… we put a divider.

Code

First of all, here’s some ruby code1 via markdown:

class Hello
  WORLD = /every(.*)/i
  
  def world(name, surname = 'you')
    data = { full_name: [name, surname].join("\n") }
    100.times do |x|
      puts "Hello, #{data[:full_name]}"
    end
  end
end

Here’s some rendered via the code dyna:

class Hello WORLD = /every(.*)/i def world(name, surname = 'you') data = { full_name: [name, surname].join("\n") } 100.times do |x| puts "Hello, #{data[:full_name]}" end end end

Here’s that same sample, but with the syntax auto-detected:

class Hello WORLD = /every(.*)/i def world(name, surname = 'you') data = { full_name: [name, surname].join("\n") } 100.times do |x| puts "Hello, #{data[:full_name]}" end end end

Here’s some kramdown-specific code syntax, which I only just learned about2:

class Hello
  WORLD = /every(.*)/i

  def world(name, surname = 'you')
    data = { full_name: [name, surname].join("\n") }
    100.times do |x|
      puts "Hello, #{data[:full_name]}"
    end
  end
end

And another type of code block:

def why?
  return 42
end

… except it doesn’t get any of the server-side HTML enhancements, so there’s no syntax highlighting unless it’s done via Javascript.

OK! That’s the end of the content test.


  1. This is a footnote 

  2. Turns out there’s a bunch of handy extensions in Kramdown that I haven’t been using, but could’ve.