This is basically a dirty hack :) I have no idea if messing with the default OSX apache config this way is frowned upon. My view is that it works now, and if it breaks I'll fix it. Add any domains you want to blacklist to /etc/hosts, pointing at 127.0.0.1. You need to enable web sharing to get apache running of course. Changes to the default /etc/apache2/httpd.conf ============================================== Listen 127.0.0.1:80 # so that the world can't see the list DocumentRoot "/Library/WebServer/Documents/public" # to fit in with passenger, you need to create the public dir (and maybe /tmp too) # add /public here too, and no multiviews (as per passenger docs) Options Indexes FollowSymLinks -MultiViews AllowOverride None Order allow,deny Allow from all New file /etc/apache2/other/passenger.conf ========================================== # This is basicaly what gets output by the passenger install + the PassengerDefaultUser root line LoadModule passenger_module /Library/Ruby/Gems/1.8/gems/passenger-2.2.8/ext/apache2/mod_passenger.so PassengerRoot /Library/Ruby/Gems/1.8/gems/passenger-2.2.8 PassengerRuby /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby PassengerDefaultUser root New file /Library/WebServer/Documents/config.ru =============================================== require 'rubygems' require 'appscript' require 'sinatra' require 'todo_app' run Sinatra::Application New file /Library/WebServer/Document/todo_app.rb ================================================ # This is very ugly but it works :) get "*" do output = [] output << "" output << " " output << " " output << " " output << " " output << "

Do something productive

" app = Appscript.app("Things.app") list = app.lists.ID("FocusToday").get current_location = nil list.to_dos.get.each do |todo| project = todo.project.get location = if project == :missing_value todo.area.get.name.get else project.name.get end if location != current_location if current_location != nil output << "" end output << "

#{location}

" current_location = location output << "" output << "" output << "" output.join("\n") end