diff --git a/agenda/conference.py b/agenda/conference.py
index 24ed552..19e77bf 100644
--- a/agenda/conference.py
+++ b/agenda/conference.py
@@ -35,6 +35,8 @@ class Conference:
     longitude: float | None = None
     cfp_end: date | None = None
     cfp_url: str | None = None
+    free: bool | None = None
+    hackathon: bool | None = None
 
     @property
     def display_name(self) -> str:
diff --git a/templates/trip_page.html b/templates/trip_page.html
index a7a6169..a9bf8a8 100644
--- a/templates/trip_page.html
+++ b/templates/trip_page.html
@@ -44,7 +44,7 @@
 }
 
 #map {
-  height: 80vh;
+  height: 90vh;
 }
 
 </style>
@@ -53,75 +53,138 @@
 {% set end = trip.end %}
 
 {% block content %}
-<div class="p-2">
-  <h1>{{ trip.title }}<small class="text-muted">({{ display_date(trip.start) }})</small></h1>
-  <div>Countries: {{ trip.countries_str }}</div>
-  {% if end %}
-    <div>
-    Dates: {{ display_date_no_year(trip.start) }} to {{ display_date_no_year(end) }}
-    ({{ (end - trip.start).days }} nights)
+<div class="row">
+  <div class="col m-3">
+    <h1>{{ trip.title }}</h1>
+    <p class="lead">
+    {% if end %}
+      {{ display_date_no_year(trip.start) }} to {{ display_date_no_year(end) }}
+      ({{ (end - trip.start).days }} nights)
+    {% else %}
+      {{ display_date_no_year(trip.start) }} (end date missing)
+    {% endif %}
+    </p>
+
+    <div class="mb-3">
+    <div>Countries: {{ trip.countries_str }}</div>
+
+    {% set delta = human_readable_delta(trip.start) %}
+    {% if delta %}
+      <div>How long until trip: {{ delta }}</div>
+    {% endif %}
     </div>
-  {% else %}
-    <div>Start: {{ display_date_no_year(trip.start) }} (end date missing)</div>
-  {% endif %}
 
-  {% set delta = human_readable_delta(trip.start) %}
-  {% if delta %}
-    <div>{{ delta }} time</div>
-  {% endif %}
+    {% for item in trip.conferences %}
+      {% set country = get_country(item.country) if item.country else None %}
+      <div class="card my-1">
+        <div class="card-body">
+          <h5 class="card-title">
+            <a href="{{ item.url }}">{{ item.name }}</a>
+            <small class="text-muted">
+              {{ display_date_no_year(item.start) }} to {{ display_date_no_year(item.end) }}
+            </small>
+          </h5>
+          <p class="card-text">
+            Topic: {{ item.topic }}
+            | Venue: {{ item.venue }}
+            | Location: {{ item.location }}
+            {% if country %}
+              {{ country.flag }}
+            {% elif item.online %}
+              💻 Online
+            {% else %}
+              <span class="text-bg-danger p-2">
+                country code <strong>{{ item.country }}</strong> not found
+              </span>
+            {% endif %}
+            {% if item.free %}
+              | <span class="badge bg-success text-nowrap">free to attend</span>
+            {% elif item.price and item.currency %}
+              | <span class="badge bg-info text-nowrap">price: {{ item.price }} {{ item.currency }}</span>
+            {% endif %}
+          </p>
+        </div>
+      </div>
+    {% endfor %}
 
-  <div class="conferences">
-    {% for conf in trip.conferences %} {{ conference_row(conf, "going") }} {% endfor %}
-  </div>
+    {% for item in trip.accommodation %}
+      {% set country = get_country(item.country) if item.country else None %}
+      {% set nights = (item.to.date() - item.from.date()).days %}
+      <div class="card my-1">
+        <div class="card-body">
+          <h5 class="card-title">
+            {% if item.operator %}{{ item.operator }}: {% endif %}
+            <a href="{{ item.url }}">{{ item.name }}</a>
+            <small class="text-muted">
+              {{ display_date_no_year(item.from) }} to {{ display_date_no_year(item.to) }}
+              ({% if nights == 1 %}1 night{% else %}{{ nights }} nights{% endif %})
+            </small>
+          </h5>
+          <p class="card-text">
+            Address: {{ item.address }}
+            | Location: {{ item.location }}
+            {% if country %}
+              {{ country.flag }}
+            {% elif item.online %}
+              💻 Online
+            {% else %}
+              <span class="text-bg-danger p-2">
+                country code <strong>{{ item.country }}</strong> not found
+              </span>
+            {% endif %}
+            {% if item.price and item.currency %}
+              | <span class="badge bg-info text-nowrap">price: {{ item.price }} {{ item.currency }}</span>
+            {% endif %}
+          </p>
+        </div>
+      </div>
+    {% endfor %}
 
-  <div class="accommodation">
-    {% for conf in trip.accommodation %} {{ accommodation_row(conf, "going") }} {% endfor %}
-  </div>
+    <div class="travel">
+      {% for item in trip.travel %} {{ row[item.type](item) }} {% endfor %}
+    </div>
 
-  <div class="travel">
-    {% for item in trip.travel %} {{ row[item.type](item) }} {% endfor %}
-  </div>
+    <div class="mt-3">
+    <h4>Holidays</h4>
+    {% if holidays %}
 
-  {% if holidays %}
-  <div class="mt-3">
-  <h4>Holidays</h4>
+    <table class="table table-hover w-auto">
+    {% for item in holidays %}
+      {% set country = get_country(item.country) %}
+      <tr>
+        {% if loop.first or item.date != loop.previtem.date %}
+          <td class="text-end">{{ display_date(item.date) }}</td>
+        {% else %}
+          <td></td>
+        {% endif %}
+        <td>{{ country.flag }} {{ country.name }}</td>
+        <td>{{ item.display_name }}</td>
+      </tr>
+    {% endfor %}
+    </table>
+    {% else %}
+    <p>No public holidays during trip.</p>
+    {% endif %}
+    </div>
 
-  <table class="table table-hover w-auto">
-  {% for item in holidays %}
-    {% set country = get_country(item.country) %}
-    <tr>
-      {% if loop.first or item.date != loop.previtem.date %}
-        <td class="text-end">{{ display_date(item.date) }}</td>
-      {% else %}
-        <td></td>
+    <p>
+      {% if prev_trip %}
+        previous: {{ trip_link(prev_trip) }} ({{ (trip.start - prev_trip.end).days }} days)
       {% endif %}
-      <td>{{ country.flag }} {{ country.name }}</td>
-      <td>{{ item.display_name }}</td>
-    </tr>
-  {% endfor %}
-  </table>
+      {% if next_trip %}
+        next: {{ trip_link(next_trip) }} ({{ (next_trip.start - trip.end).days }} days)
+      {% endif %}
+    </p>
+
+    </div>
+  <div class="col">
+    <div id="map"></div>
   </div>
-  {% endif %}
-
-  <p>
-    {% if prev_trip %}
-      previous: {{ trip_link(prev_trip) }} ({{ (trip.start - prev_trip.end).days }} days)
-    {% endif %}
-    {% if next_trip %}
-      next: {{ trip_link(next_trip) }} ({{ (next_trip.start - trip.end).days }} days)
-    {% endif %}
-  </p>
-
-  {% if coordinates %}
-  <div id="map"></div>
-  {% endif %}
-
 </div>
 {% endblock %}
 
 {% block scripts %}
 
-{% if coordinates %}
 <script src="https://unpkg.com/leaflet@1.9.4/dist/leaflet.js"
    integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo="
    crossorigin=""></script>
@@ -137,5 +200,4 @@ var routes = {{ routes | tojson }};
 build_map("map", coordinates, routes);
 
 </script>
-{% endif %}
 {% endblock %}