diff --git a/js/script.js b/js/script.js
new file mode 100644
index 0000000..7c97bfd
--- /dev/null
+++ b/js/script.js
@@ -0,0 +1,107 @@
+var bookletNames = [
+  'nadal2020joves',
+  'nadal2020nens',
+];
+
+var isBookletShown = false;
+
+function showSection(section) {
+  document.querySelectorAll('section').forEach(el => {
+    if (el.id === section)
+      el.removeAttribute('hidden');
+    else
+      el.setAttribute('hidden', '');
+  });
+}
+
+function songElement(song) {
+  var div = document.createElement('div');
+  div.classList.add('song');
+
+  var title = document.createElement('h3');
+  title.classList.add('song-title');
+  title.textContent = song.title;
+
+  var author = document.createElement('div');
+  author.classList.add('song-author');
+  author.textContent = song.author;
+
+  var performers = document.createElement('div');
+  performers.classList.add('performers');
+
+  song.performers.forEach(performer => {
+    var item = document.createElement('div');
+    item.classList.add('performers-item');
+
+    var span = document.createElement('span');
+    span.classList.add('instrument');
+    span.textContent = performer.instrument;
+
+    var people = document.createTextNode(': ' + performer.names.join(', '));
+
+    item.append(span, people);
+    performers.append(item);
+  });
+
+  div.append(title, author, performers);
+  return div;
+}
+
+function loadBooklet(booklet) {
+  console.info('Booklet: ', booklet);
+
+  document.getElementById('concert-title').textContent = booklet.title;
+  document.getElementById('concert-subtitle').textContent = booklet.subtitle;
+
+  var bookletContent = document.getElementById('booklet-content');
+  booklet.songs.forEach(song => {
+    var songEl = songElement(song);
+    bookletContent.append(songEl);
+  });
+
+  showSection('booklet');
+}
+
+function checkBooklets(booklets) {
+  if (isBookletShown)
+    return;
+
+  var now = Date.now();
+  var latest = null;
+  booklets.forEach(booklet => {
+    if (booklet.begins * 1000 <= now &&
+        (latest === null || booklet.begins * 1000 < booklet.begins))
+      latest = booklet;
+  });
+
+  if (latest === null)
+    showSection('wait-screen');
+  else {
+    loadBooklet(latest);
+    isBookletShown = true;
+  }
+}
+
+window.addEventListener('load', _ => {
+  if ('serviceWorker' in navigator) {
+    navigator.serviceWorker.register('/sw.js')
+        .then(_ => {
+          var promises = [];
+          bookletNames.forEach(name => {
+            var p = fetch('concerts/' + name + '.json').then(res => res.json());
+            promises.push(p);
+          });
+
+          Promise.all(promises).then(booklets => {
+            checkBooklets(booklets);
+            window.setTimeout(_ => { checkBooklets(booklets); }, 60 * 1000);
+          });
+        })
+        .catch(err => {
+          showSection('cant-install');
+          console.error('The service worker failed to be registered.');
+        });
+  } else {
+    showSection('no-service-worker');
+  }
+});
