Alright, today is the second day of my first startup. I have codenamed the project “danny”, named after my second born :)
So, danny is going to be a web app which allows a typical user to host their websites using Dropbox. Let me first, lay down the objectives that danny is trying to achieve:
- A user should be able to quickly signup using their Dropbox account.
- Once they signup, a folder called “danny” should be added to their Dropbox “Apps” folder.
- Whenever they create a new site from danny’s web console, a new folder should be created in
~/Dropbox/Apps/dannywith the name of the site. And, it should host this website on
- Once the website is setup. Any changes to the site’s files on the user’s computer should be deployed to a draft website. For instance
- On the click of a button called “Publish”, this draft website should be published to
So, these are the minimum set of objectives that I have setup for danny. And, achieving this is going to require 3 large subsystems.
- The web console which allows users to authenticate using Dropbox and provides a UI.
- The listener sub system which listens to events from Dropbox when files change and keeps the data in sync.
- The webhost sub system which actually hosts the websites.
I am a huge fan of Elixir and Phoenix. And, Elixir lends itself very nicely to this particular problem. One of the difficult parts of the app will be to listen for lots of incoming events and to download lots of files. Both of which are a piece of cake for Elixir.
Here is a quick diagram I drew which shows the communication between different parts of the system.
All of these subsystems will be part of a single monolothic app initially. I may separate these towards the end.
Onward we go!