diff --git a/api/funkwhale_api/common/middleware.py b/api/funkwhale_api/common/middleware.py
index 96e9c45a667dbda91800c443b08a4b5191c7baa5..59d50b30ead3ea34f5219431475162889461b596 100644
--- a/api/funkwhale_api/common/middleware.py
+++ b/api/funkwhale_api/common/middleware.py
@@ -56,6 +56,10 @@ def serve_spa(request):
 
 
 def get_spa_html(spa_url):
+    if spa_url.startswith("/"):
+        # we try to open a local file
+        with open(spa_url) as f:
+            return f.read()
     cache_key = "spa-html:{}".format(spa_url)
     cached = caches["local"].get(cache_key)
     if cached:
diff --git a/api/tests/common/test_middleware.py b/api/tests/common/test_middleware.py
index 2ed875a53100fb216d09ade2af6fceea3bee4ca1..dd7cd76341fc53571613f94e988899a9ca93352a 100644
--- a/api/tests/common/test_middleware.py
+++ b/api/tests/common/test_middleware.py
@@ -126,6 +126,12 @@ def test_get_spa_html_from_http(local_cache, r_mock, mocker, settings):
     )
 
 
+def test_get_spa_html_from_disk(tmpfile):
+    with open(tmpfile.name, "wb") as f:
+        f.write(b"hello world")
+    assert middleware.get_spa_html(tmpfile.name) == "hello world"
+
+
 def test_get_route_head_tags(mocker, settings):
     match = mocker.Mock(args=[], kwargs={"pk": 42}, func=mocker.Mock())
     resolve = mocker.patch("django.urls.resolve", return_value=match)
diff --git a/changes/changelog.d/694.bugfix b/changes/changelog.d/694.bugfix
new file mode 100644
index 0000000000000000000000000000000000000000..7dd6e45a9233df5559c193c28e213aa385d4f05b
--- /dev/null
+++ b/changes/changelog.d/694.bugfix
@@ -0,0 +1 @@
+Fixed resizing issues for album cards on artist pages (#694)
diff --git a/changes/changelog.d/705.enhancement b/changes/changelog.d/705.enhancement
new file mode 100644
index 0000000000000000000000000000000000000000..9f25c9cbdb2d3b2410d582d45c52fcd1e0950915
--- /dev/null
+++ b/changes/changelog.d/705.enhancement
@@ -0,0 +1 @@
+Can now use a local file with FUNKWHALE_SPA_HTML_ROOT to avoid sending an HTTP request (#705)
diff --git a/front/src/components/audio/album/Card.vue b/front/src/components/audio/album/Card.vue
index a439a16b681284aa8aabab2285a227e8c3218733..2f19d7fbb4854f7c248726f64290d026bf087281 100644
--- a/front/src/components/audio/album/Card.vue
+++ b/front/src/components/audio/album/Card.vue
@@ -22,7 +22,8 @@
                 <td class="play-cell">
                   <play-button class="basic icon" :track="track" :discrete="true"></play-button>
                 </td>
-                <td colspan="6">
+                <td class="content-cell" colspan="5">
+                  <track-favorite-icon :track="track"></track-favorite-icon>
                   <router-link class="track discrete link" :to="{name: 'library.tracks.detail', params: {id: track.id }}">
                     <template v-if="track.position">
                       {{ track.position }}.
@@ -30,9 +31,6 @@
                     {{ track.title }}
                   </router-link>
                 </td>
-                <td>
-                  <track-favorite-icon :track="track"></track-favorite-icon>
-                </td>
               </tr>
             </tbody>
           </table>
@@ -92,16 +90,28 @@ export default {
 
 <!-- Add "scoped" attribute to limit CSS to this component only -->
 <style scoped lang="scss">
-
-table.fixed td.play-cell {
-  overflow: auto;
+.content-cell {
+  .link,
+  .button {
+    padding: 0.5em 0;
+  }
+  .link {
+    margin-left: 0.5em;
+    display: block;
+    white-space: nowrap;
+    overflow: hidden;
+    text-overflow: ellipsis;
+  }
 }
 tr {
   .favorite-icon:not(.favorited) {
-    display: none;
+    visibility: hidden;
   }
   &:hover .favorite-icon {
-    display: inherit;
+    visibility: visible;
+  }
+  .favorite-icon {
+    float: right;
   }
 }
 .expand {
diff --git a/front/src/components/library/Artist.vue b/front/src/components/library/Artist.vue
index b7154935f4745a7ddceea4cf3707599ba8b5d928..dd2be35ae1b00abba1077e3896d8368213c3f6ae 100644
--- a/front/src/components/library/Artist.vue
+++ b/front/src/components/library/Artist.vue
@@ -44,10 +44,8 @@
         <h2>
           <translate>Albums by this artist</translate>
         </h2>
-        <div class="ui stackable doubling three column grid">
-          <div class="column" :key="album.id" v-for="album in albums">
-            <album-card :mode="'rich'" class="fluid" :album="album"></album-card>
-          </div>
+        <div class="ui cards" >
+          <album-card :mode="'rich'" :album="album" :key="album.id" v-for="album in albums"></album-card>
         </div>
       </section>
       <section v-if="tracks.length > 0" class="ui vertical stripe segment">