What are you building with Ionic? We want to know!


Aertv is a service for watching live TV online here in Ireland. Yesterday we release our long awaited Android app which was built with Ionic. Developing with Ionic meant we could bring the project in house and get something shipped much faster.

See Aertv on Google Play.


Thanks a lot @max , it means a lot coming from you, and we’re thrilled to have you in our waiting list ( also a big thank you to the awesome @Ben )

We hope you’ve tried the android version of our app, we’ve spent a lot of time on making it as smooth as possible and will release a bunch of tutorial on what we’ve learned on the forum soon!

Have a great day, you guys rock


I’m making a food delivery app for a high profile restaurant in NYC.



I’m quite excited to introduce a personal project. It’s called Overstand, let’s say that is an app that allows you to go far beyond from understanding, it let’s you chat with people from different countries, while everyone is writing in their own language. A simultaneous translation app.

It’s in very Beta, but I made it as a holidays project. I wanted to build a product from 0 in no more than 4-5 days, I took care of the branding, the concept, an hipothetical monetization path, the marketing website and of course the development of the app!

It’s now available for Android, as a web app and is on the way to the iTunes store.

Check it out here: http://www.overstand.io/

I have a long list of features I’d like to add, some of them:

  • A signup system in order to have private chat rooms
  • Push notifications
  • A better inviting system
  • Some kind of contacts sync
  • Adding some js localization
  • Some UI enhancements ( date time on every message, identify users with colors… )

What do you think guys?


What you use for your backend?


Thanks for your interest! For our backend with used Parse combined with Pusher!

Thank to all of you for your interest in Viceversa, you’ve been amazing!

Realtime communication practices with ionic

Last weekend I built an app with friends, the users just share their geolocation anonymously with their Facebook friends, it was cool to learn about Google Maps and Facebook Login.

Using ngCordova, Google analytics, Maps, Facebook, Toast sometimes.

Only available for Android right now, https://play.google.com/store/apps/details?id=io.nwhere

It may be available on App Store next week (It was built in two days, it may have a lot of bugs)

We are thinking about some feature to add, we’d love feedback :slight_smile:



I’ve made iSpot, checkout the android version : https://play.google.com/store/apps/details?id=com.frnchnrd.citygram , the ios version need some tweaking before it’s approved by apple :frowning: .
Urgh such a pain dealing with apple’s rules…


Thanks for the insights


Could you elaborate maybe on what apple issues you’re having? It’s always nice to have some ideas with hybrid apps on what they’re picky about. And the app by the way looks beautiful!


Currently working on my new startup Brownie Points App, not yet released but should be popular once that happens “Fingers crossed”


Could you maybe share some of the things that Apple is looking for?


Max and the Ionic Team -

Firstly, I’m a massive fan, and I wouldn’t be where I am today without this framework. I’m a one man show that runs a craftbeer app called beersmash. The app is really a crowd sourced beer mapping engine, and a social platform for pubs, brewers and beers.

Little backstory…
I’m coming from the Appcelerator / Titanium (Ti) platform which I thought used to be the shiz 3-4 years ago, but as that platform got more and more technical, bloated and SLOW I started looking for options. I initially released to the app stores with a Ti build but as I wanted to build more features into my app, the framework didn’t work, without more experience and time.

Where I saved time with Ionic

  1. Angular JS - not only is it a productive framework it’s well documented and lots of resources are available if you get stuck, Ti alloy is a wanna be MVC that is slow and just not as productive as Angular JS.

  2. Side Menu Slider - I think people might take this for granite but building this is no fun and I did it with Ti and I have to say, the ionic slider is much better performance wise and usability wise than any thing I did or saw on Ti.

  3. Item option - Wow! this is one of the coolest things in the framework and it sold me immediately when I saw it. I had spent days trying to do this in Ti working with animations, easings… it was a colossal nightmare, I achieved this in less than 5 minutes by marking up the ion-option and viola. Brilliant!

  4. Pull to refresh - Another one of those necessary items in mobile apps and once again building from scratch totally sucks, this feature is awesome

  5. ionicLoading - just well done, love the features to hide and show. Dead Simple!

I’ve read lots of good posts on why ionic kicks ass, but for me, its about productivity. I was able to achieve things that I just couldn’t do in Ti (maybe because of skill set or time), either way Ionic saved me and breathed some life back into my hobby.


Just a few photos of my app.


hello vmaliko, nice app and I give it a try!
i was seeing the pictures and i’m interested in a photo browser like you have implemented. Is it was done using a component? Or it was done from scratch?

Thanks for you help and good luck with your app!


I agree with everyone else; ViceVersa is a perfect showcase for what Ionic is capable of. I am currently nearing the tail-end of development on an app called Nobly and would love to pick your brain on how you accomplished some of the smooth scrolling and transitions that you did on ViceVersa. They’re the best I’ve seen yet on the platform. I’d be happy to pay you for a 2-3 hour consultation if that’s something you’d be available for. If so, please feel free to reach out to me directly.

And congrats either way on the launch of a great app in ViceVersa!


Wow, just wow!

Thanks a lot for this, what a great way to start our day!
We’re based in Paris, so it might be a bit difficult to reach out, but you can email me at jonathan@viceversa.io if you need help, and we’ll figure a way out!
We’re currently in the showcase in the “new apps” section (even tho the formatting of our image is off, I’ll talk about it with the great @katiegv) and are in touch with the ionic team for a blog post so stay tuned!

Again, I would like to thank all of you for your interest in Viceversa, it means the world to us and we will start releasing blog posts on how to optimize your app as soon as our app is stable and officially released.

Have an awesome day everyone!


Nice job guys! Good to see someone else from Paris


Hi everyone!

Our company is building its app in Ionic. OpenLine is an app that any employee can use in their workplace to have honest discussions without needing to reveal their identity.

  • We’ve released an iPhone app, and Android app, and a web app, all using the same codebase thanks to Ionic!
  • The app syncs in realtime to the Scala backend using websockets.
  • We use Amazon SNS for push notifications.
  • We use HTML5 appcache to deploy updates over the air without needing to wait for app store review turnaround.


Hi mikemintz,

Openline looks like a great app. Just tried the webapp version and try the ios app soon.

Can you give us any thoughts on how to convert the ionic app into webapp (any lessons learned) and also how to use HTML5appcache to do deploy over air…



Thanks @iqlas!

For the webapp, we pretty much just have the webserver serve the www folder. We created a separate cordova hook to add <script src="cordova.js"></script> so that it won’t attempt to load in the webapp.

Anytime we use a cordova plugin, we have graceful degradation. E.g. for toast messages, if window.cordova exists, call $cordovaToast.showShortBottom; otherwise, use jqlite to create an absolute position div and $timeout to destroy it after a few seconds.

For the appcache, we did the following:

Update config.xml with the following

<content src="native-loader.html"/>
<platform name="android">
  <preference name="ErrorUrl" value="file:///android_asset/www/cordova-error-page.html"/>
<platform name="ios">
  <preference name="ErrorUrl" value="cordova-error-page.html"/>

The native-loader.html is a short HTML file that just uses javascript to redirect to index.html hosted on our server. We use a cordova hook to set the URL in native-loader.html by platform. Our webserver serves the latest copy of platforms/android/assets/www for android, and platforms/ios/www for ios.

The cordova-error-page.html is a friendly error page with a reload button, which is displayed if the user does not have internet when they first open the app (irrelevant once they have first downloaded the appcache).

Our index.html starts with <html manifest="cache.manifest">. We have a scala script that regenerates www/cache.manifest each time we deploy an upgrade, which includes a recursive list of files that need to be downloaded by the browser (including cordova/plugins).

The services.js file defines a constant with the latest version number. When it connects via websocket to the server, the browser sends the version number, and the server sends a response telling it whether or not it has to upgrade. If it has to upgrade, we display an $ionicPopup to ask the user to upgrade. When they tap the upgrade button, we run the following code:

$ionicLoading.show({template: 'Downloading update'});
var applyUpdate = function() {
  $ionicLoading.show({template: 'Installing update'});
var appCache = window.applicationCache;
if (appCache.status === appCache.UNCACHED || appCache.status === appCache.OBSOLETE) {
} else {
  appCache.addEventListener('error', function() {
    var popupOpts = {
      title: 'Could not download update',
      template: 'There was a problem downloading the latest version of OpenLine. Please check that internet service is working on your device.',
      okText: 'Try again'
    if (!mustUpgrade) popupOpts.cancelText = 'Later';
    var popupFn = mustUpgrade ? $ionicPopup.alert : $ionicPopup.confirm;
  appCache.addEventListener('updateready', applyUpdate);
  appCache.addEventListener('noupdate', applyUpdate);

When a new user installs the app, the latest version will be downloaded automatically. When they reopen the app after a new version has been released, they’ll be prompted to update. When they have the app open during the upgrade process, the server will close all existing websockets, and when the browser reconnects they will resend their old version number and be prompted to upgrade.