Thursday, December 15, 2011

Short update on Picutive progress.

Work is progressing slowly but steadily on Picutive. It's on-line, you can upload photos and format them for your selected photo type, and have them emailed for free or printed and delivered after paying by Paypal. Fulfillment is still manual, but as I haven't had any orders (or even visitors) it's not really a problem at the moment.  I have roughly 40 types of photos defined in the system. It takes me about one hour to do one country, which usually consists of one passport and one visa photo.

I have started listening to the Lifestyle Business Podcast with Dan Andrews, where I heard one thing that really made me think. The question was, "How can I grow my business as quickly as possible?".  The answer was, "outsource as much as possible".  Most of the time required to set up the document types is spent searching for the relevant information on the web. Creating the code is relatively fast at this point (although somewhat complicated). The obvious solution is to outsource the web search portion of this work.

I have used Odesk once before with reasonable results, so I spent an hour writing some instructions and creating a spread sheet in google docs for the VA to fill in with data.  Within 30 minutes of posting the job, I had roughly 45 responses. I am interested in working with people in the Philippines because it seems the combination of good English, good education and low costs makes a great value so although there were many suitable candidates from Asia (Pakistan mainly) I focused on the candidates from the Philippines. Then I focused on the responses that indicated the person had at least read my request.  This lead to Rodel, who I hired for a limited run (max 15 hours) at a rate of $2.50 per hour.  He started the next day, but unfortunately misunderstood what I wanted (probably my explanation was not clear). This can happen, which is why you have to limit the first run and check the first results (this is why I like using google docs, you can see the results in real-time.  A few emailed exchanges (his written English seems to be very good) later and we are back on track.

Assuming that he can process one country per hour, that will give me 100 countries for $250.  This will give  me around 200 photo types which is a solid offering. It will take me about 15 minutes to process each country, so that's 25 hours worth of work.  I can manage that in about a month (maybe a little sooner as vacations are coming, so the wife and kids tend to sleep later giving me more time to work in the mornings). For me to do this one my own, it would take a minimum of four months, with no other developments going on. Is a 3-month acceleration worth $250?  I think so - besides, I would go nuts if I had to do only this for 4 months!

I want to build up at least 100 documents before adding any additional features. I should reach this goal in mid January. After that, I want to set this up as a business in the US, with a US bank account, so I can use the super simple (and reasonably priced) Stripe credit card processing. This will make the experience much nicer for the user (higher conversion too, based on stories of switching from Paypal).

After that, the next feature is to add the Assistant functionality. This will be a big change, but it will be the main differentiation for my product. I want to use RSpec and Cucumber to make my attempt at Behaviour Driven Development (BDD).  Once I am comfortable with this process, I can further eliminate myself by just writing specs and letting other coders (who are certainly better and faster than me) fill in the blanks.  I will have fully testable code so I can re-factor or add features later with a good certainty that I won't break anything done by others.  This will be a big step into making it to the next level of lifestyle design.

Of course I also need revenue to pay these guys, so I will have to start marketing Picutive as well.  I can start locally with my and my wife's companies. They would both benefit from such a service. I know enough admins to get some first users (people in my office are traveling all the time). Once I get the process running well, I will approach the travel office for our companies to propose the service. I will offer a discount in exchange for being able to use the company name and logo on our web site (happy customers).  I'm thinking of something like offering it for 14.90 normally, and giving 2CHF off if the user has an Alstom email address.

Other features that could be implemented are:
  • Creating and adding travel tips (originally, the plan was to add these to a separate page, but now, I'm thinking to just add them to the bottom of the document pages - have to test which combination is best for SEO and ultimately conversions.
  • Multiple copies of a print can be ordered (must come from customers)
  • Multiple types of prints can be ordered. (must come from customers)
  • Checking the document validity
    • Intersting idea may be to offer this as a service to other photo providers - I could make an API! 

Tuesday, June 7, 2011

The Business Plan

In this post I want to capture my thoughts on the how Picutive will operate, where I currently am and the next steps.


The Plan
Picutive is intended to be a solution for the busy business traveler who needs passport or visa photos.  The goal is to make obtaining a high-quality pass photo nearly effortless. Although it is probably impossible to fully reach this goal the strategy will be based on keeping the site as simple as possible, a la 37 Signals.  This means only features that reduce the effort required to do the job will be considered.  User Interface design should be clean and intuitive.  Important decisions will be made for the customer. In short, it should just work.  Finally, the solution should be a good value for the customer.

High quality pass photos must first meet the requirements for a particular document (passport, visa, etc).  This includes the dimensioning and composition.  Second, the print must be of acceptable quality - good colors, printed on professional paper.  I rely on the user to import a  picture that is in focus with acceptable lighting.

The two major pain points with creating visa a pass photos are to first find the photo requirements and second to properly scale, crop and print the picture.  I will create a listing of document photo requirements that I will keep up-to-date via automatically checking the relevant web-site on a periodic basis. Any changes that are detected will be flagged and personally investigated. Any document that has been changed will have a status of 'unsure' until it has been checked and updated if required.  The application will automatically scale, crop and layout the photos for printing. It will also check that the photo has sufficient resolution for a good quality print.  The customer will have the option to have the digital print emailed, with a list of printing tips or to purchase prints to be delivered at their address. These printing tips will actually be a relatively long list of all the ways to mess up while self-printing, which will hopefully induce some of the users to just pay for the prints to be delivered.  There are three major hurdles for first time users.
  1. Uploading a print: They have to take a suitable picture and upload it. The app will check that the pictures resolution and dimensions are acceptable and give feedback on what needs to be improved.
  2. Entering a shipping address: This will only be done once the user has decided to purchase prints to keep friction low.
  3. Entering payment details: This will be the last step in the process. Options will be to use paypal and amazon. Amazon is interesting because the user can use the info in his Amazon account.
Once these are completed, subsequent prints can be ordered without re-entering the details.

A typical work flow will be that the user selects a document, uploads a picture*, orders the prints, enters an address* and gives payment information*.  This still seems like too much for me, but I don't know how to reduce it further other than eliminating the * marked steps for follow-on photos.  Despite this being quite a lot of steps, it should still be a good option compared to going to the photographer's shop and having prints made, which takes about 45 minutes and costs 30-40 CHF.  A further optimization, that will come at a later stage, is to allow an assistant to manage the process for the traveler.  She can create and account, upload a photo, add and address and give payment info. She can even have the photos shipped to her or directly to the traveler.  I think this will be useful feature.

Marketing
  1. SEO: I will make a 'Country' page that will act as SEO bait. It will include usefull travel tips, links to recommended sites and books for further info and of course links to the photo requirements for passports and visas.
  2. Pay-per-click (Google Addwords):  There were not many competitors for relevant keywords, so hopefully this will be a viable channel.
  3. Viral:  This one is not obvious, but at the very least, there can be a 'Recommend this service' button. Also, I think that there are some possibilities to reward Assistants for promoting this to their colleauges and getting their team to use the service. Either offer gift certificates or donations based on orders from their team or through people they have brought on to the service.
Where I am

Currently the web site is a work in progress.
  • Picture upload, checking, formatting and layout is now more or less working. Some more tests should be created, but this will come.
  • File handling for the images is implemented, but I am not super happy. Currently full resolution images are created and stored in a publicly accessible location.  I think it would be better to save the base images in a database and create thumbs and doc-versions on the fly. Smart caching would minimize the server load.
  • The request print by email is not implemented yet.
  • The 'Order' creation is being implemented. I would like to optimize the address acquisition process.
    • Show the last used existing address
      • Edit option will replace this div with a form to edit the current address
      • Create option will replace this div with a blank form to create a new address
      • Next/Previous buttons will switch to other available addresses.
    • If no address exists, show the form to create a new address.
  • The payment flow is not yet implemented.
    • Start with PayPal
    • Follow with Amazon
    • Others
  • Need to make a customer support email address
    • use google apps for that.
    • Find out why it is broken (probably the dns server settings...)
 What to do next
  1. The Order creation
  2. First payment option
  3. Customer support email address
  4. Get it online.

Tuesday, May 17, 2011

Adding port to ports.conf crashes MYSQL

I want to run a VM as a staging server. I need to use non-standard web ports because the standard http port (80) is being used by another VM on the same pc as a full time server.

I am using deprec and capistrano to automate the entire deploy process. This was working fine as long as I did everything over my local 'intranet'. ie I would set the domain to '192.168.1.13' in my deploy.rb file.  I also set up the ssh port on this VM for 3060. This worked. I just had to set the :port option in deploy.rb and everything went fine. After install and deploy, I could point my browser at 192.168.1.13 and everything was working fine.  That's great, but I can't test my payment processing if the server cannot be accessed from the outside world. So, I setup port-forwarding on port 3050 on the router to the VM's internal IP address (192.168.1.13) and added the port to my /etc/apache2/ports.conf
Listen 80
Listen 3050
I would then restart the VM and after reloading the browse I get the rails error message.  I found this error in my rails production log:
Mysql2::Error (Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)):
Some good tips here

http://dev.mysql.com/doc/refman/5.5/en/can-not-connect-to-server.html


helped me realize that the mysql server was not running.


I then ran:
sudo mysqld --verbose
which told me that there was an unknown option:
skip-bdb
that was causing the shutdown.  I looked in my.cnf and sure enough this option was set (it is something to do with berkly data base). I commented it out and then tried to restart mysql, which worked. 


Connecting back to 192.68.1.13 on the browser now gets a proper response.


I have no idea why adding the "Listen 3050" bit to '/etc/apache2/ports.conf' causes mysql to no longer recognize the 'skip-bdb' comment, but after 4 days of playing around with this, at least I have made some progress!


I think I will post this on server fault to see if I can get a better understanding of the root cause.


Another issue, which I'm still dealing with is that if I add the port to the apache-vhost file that deprec will copy to the server for me, it also prevents the mysql db install from going forward, thus wrecking the whole install. I guess the problem is related.


Tuesday, March 29, 2011

Some ImageScience Documentation

I am adding the ImageMgic and Rmagick gem to do some basic image resizing and cropping with Carrierwave.

To install image magick on Ubuntu, this helped.


http://stackoverflow.com/questions/3704919/installing-rmagick-on-ubuntu

Saturday, February 26, 2011

Carrierwave file uploads on Rails3

I was highly motivated by this RailsCasts episode to try the carrierwave file uploader gem in my new application.

So far, there was only one problem. The gem from RubyForge gives an error telling me that my uploader class is an unrecognized constant when I try to mount it in the corresponding model.

The solution was to set the Gemfile to download the gem directly from Git, like this:

gem 'carrierwave', :git => 'https://github.com/jnicklas/carrierwave.git'

This solved the problem: