Last week I had a neat idea. Well, at least *I* think it is a neat idea. Let me share it with you folks to get your take.
We have been spending a lot of time refining every aspect of the application development process for writing Ubuntu phone/tablet/desktop applications. This has included:
* Building a simple, and powerful [Ubuntu SDK](https://developer.ubuntu.com/get-started/).
* Building a comprehensive [knowledge base](https://developer.ubuntu.com/resources/) on [developer.ubuntu.com](https://developer.ubuntu.com/) for getting started writing your first app, and performing common programming tasks.
* Integrating source control, bug tracking, and more from [Launchpad](https://launchpad.net/) into the SDK.
* Providing a safe and secure, sand-boxed environment to run apps in, and an automated process for reviewing how these apps come into Ubuntu and are exposed to Ubuntu users.
This is all part of an end-to-end process to make writing apps for Ubuntu fun, simple, and intuitive from the minute you load the SDK to the minute your app appears on a users phone, tablet, or desktop.
## Project Websites
One piece we haven’t looked into is how app developers can set up a website for their app.
App websites vary tremendously in size and complexity. Some people just want a single static web page with details of the app and how to get it. Some want a more complex site with integrated forums, bug tracking, and more.
As part of what we can offer with Ubuntu, we should be able to bundle all aspects of your infrastructure too. Need a website? Check. Need a forum? Check. Need a bug tracker? Check.
Fortunately we have a powerful cloud orchestration tool in [Juju](https://juju.ubuntu.com/) that can not only simplify the deployment, management, and scaling of the service, but could potentially take virtually all of the pain out of getting the site set up in the first place, and then scale up where needed.
## The Idea
Let’s assume I have just published my first version of my app in Ubuntu. I now need a simple website to get my app on the web and known to users. While I want to start simple, there is a possibility though that my project may become hugely popular making me a king among men and require a larger, more expansive web presence.
Let’s start simple though. Ideally, I want to be able to specify some configuration detail like this in a file:
app:
app-name: Read All About It
download-archive-name: readallaboutit
launchpad-project: readallaboutit
website:
website-strapline: All the headlines in your hand.
screenshots: [‘https://www.myscreenshotonline.com/screen1.jpg’,
‘https://www.myscreenshotonline.com/screen1.jpg’]
page-about: True
page-developers: True
page-screenshots: True
page-contact: False
…and then do this:
juju deploy –config myconfig.yaml ubuntu-app-website
The charm would read in the configuration file and generate a set of static web pages based on that configuration.
As an example, it would pre-populate chunks of the page, and generate developer information on the *Developer* page with details of the main branch, bug tracking, a form to submit a bug, and more (we can pull this from the Launchpad project).
It could look simple like this:
This would mean an app developer could spin-up a super light-weight app website with just a configuration file and Juju on whichever cloud service they prefer. This would be light-weight both in terms of getting up and running and resource usage; you could set this up on a tiny cloud instance. As ever, if my project was to get slashdotted I could scale up the service, as with any other Juju charm.
Now let’s assume I want to add more functionality to my website. This is where the real power of Juju could come in. Let’s assume I want a forum. I should be able to run:
juju deploy ubuntu-app-website-forum
juju relate ubuntu-app-website ubuntu-app-website-forum
This would then spin up a forum (or Discourse site) but the charm would integrate it into the existing website with a navigation link and shared theming. It could then look like this:
We could then conceivably have any number of supported additions (e.g. mailing lists, video streams, event organization, tutorial content, API docs etc) for the website that app maintainers can use to easily expand their service as they see fit.
## Next Steps
I shared this idea with Jorge who thought it was a neat idea. He then talked with Marco who has been putting together a first cut that we can experiment with. If anyone is interested in helping to build this, please let me know in the comments.