diff --git a/assets/bun.lockb b/assets/bun.lockb
index b0a82ae..e7f3c73 100755
Binary files a/assets/bun.lockb and b/assets/bun.lockb differ
diff --git a/assets/js/app.js b/assets/js/app.js
index 5faf26a..aeef705 100644
--- a/assets/js/app.js
+++ b/assets/js/app.js
@@ -1,14 +1,14 @@
-// Establish Phoenix Socket and LiveView configuration.
-import { Socket, LongPoll } from "phoenix";
-import { LiveSocket } from "phoenix_live_view";
+// Phoenix assets are imported from dependencies.
 import topbar from "topbar";
 
 let csrfToken = document.querySelector("meta[name='csrf-token']").getAttribute("content");
-let socketPath = document.querySelector("meta[name='socket-path']").getAttribute("content");
-let socketTransport = document.querySelector("meta[name='socket-transport']").getAttribute("content");
-let normalizedTransport = (socketTransport == "longpoll") ? LongPoll : WebSocket;
+let livePath = document.querySelector("meta[name='live-path']").getAttribute("content");
+let liveTransport = document .querySelector("meta[name='live-transport']") .getAttribute("content");
 
-let liveSocket = new LiveSocket(socketPath, Socket, { transport: normalizedTransport, params: { _csrf_token: csrfToken }});
+let liveSocket = new LiveView.LiveSocket(livePath, Phoenix.Socket, {
+  transport: liveTransport === "longpoll" ? Phoenix.LongPoll : WebSocket,
+  params: { _csrf_token: csrfToken },
+});
 
 // Show progress bar on live navigation and form submits
 topbar.config({ barColors: { 0: "#29d" }, shadowColor: "rgba(0, 0, 0, .3)" });
diff --git a/dev.exs b/dev.exs
index af25241..a2f0427 100644
--- a/dev.exs
+++ b/dev.exs
@@ -5,7 +5,7 @@
 Mix.install([
   {:ecto_sqlite3, ">= 0.0.0"},
   {:error_tracker, path: ".", force: true},
-  {:phoenix_playground, "~> 0.1.7"}
+  {:phoenix_playground, "~> 0.1.8"}
 ])
 
 otp_app = :error_tracker_dev
diff --git a/lib/error_tracker/web.ex b/lib/error_tracker/web.ex
index 448909d..c04dd8b 100644
--- a/lib/error_tracker/web.ex
+++ b/lib/error_tracker/web.ex
@@ -62,7 +62,7 @@ defmodule ErrorTracker.Web do
   ```elixir
   config :error_tracker,
     socket: [
-      path: "/my-custom-socket-path"
+      path: "/my-custom-live-path"
       transport: :longpoll # (accepted values are :longpoll or :websocket)
     ]
   ```
diff --git a/lib/error_tracker/web/components/core_components.ex b/lib/error_tracker/web/components/core_components.ex
index 12eb26d..4c413b4 100644
--- a/lib/error_tracker/web/components/core_components.ex
+++ b/lib/error_tracker/web/components/core_components.ex
@@ -26,7 +26,7 @@ defmodule ErrorTracker.Web.CoreComponents do
       ]}
       {@rest}
     >
-      <%= render_slot(@inner_block) %>
+      {render_slot(@inner_block)}
     
     """
   end
@@ -42,7 +42,7 @@ defmodule ErrorTracker.Web.CoreComponents do
       ]}
       {@rest}
     >
-      <%= render_slot(@inner_block) %>
+      {render_slot(@inner_block)}
     
     """
   end
@@ -80,7 +80,7 @@ defmodule ErrorTracker.Web.CoreComponents do
       class={["text-sm font-medium me-2 py-1 px-2 rounded-lg ring-1 ring-inset", @color_class]}
       {@rest}
     >
-      <%= render_slot(@inner_block) %>
+      {render_slot(@inner_block)}
     
     """
   end
@@ -124,9 +124,9 @@ defmodule ErrorTracker.Web.CoreComponents do
         :if={assigns[:title]}
         class={["text-sm font-semibold mb-2 uppercase text-gray-400", @title_class]}
       >
-        <%= @title %>
+        {@title}
       
-      <%= render_slot(@inner_block) %>
+      {render_slot(@inner_block)}
     
     """
   end
diff --git a/lib/error_tracker/web/components/layouts.ex b/lib/error_tracker/web/components/layouts.ex
index 2ad77a4..9714c81 100644
--- a/lib/error_tracker/web/components/layouts.ex
+++ b/lib/error_tracker/web/components/layouts.ex
@@ -2,16 +2,25 @@ defmodule ErrorTracker.Web.Layouts do
   @moduledoc false
   use ErrorTracker.Web, :html
 
-  @default_socket_config %{path: "/live", transport: :websocket}
+  phoenix_js_paths =
+    for app <- ~w[phoenix phoenix_html phoenix_live_view]a do
+      path = Application.app_dir(app, ["priv", "static", "#{app}.js"])
+      Module.put_attribute(__MODULE__, :external_resource, path)
+      path
+    end
+
+  @static_path Application.app_dir(:error_tracker, ["priv", "static"])
+  @external_resource css_path = Path.join(@static_path, "app.css")
+  @external_resource js_path = Path.join(@static_path, "app.js")
 
-  @css_path Application.app_dir(:error_tracker, ["priv", "static", "app.css"])
-  @js_path Application.app_dir(:error_tracker, ["priv", "static", "app.js"])
+  @css File.read!(css_path)
 
-  @external_resource @css_path
-  @external_resource @js_path
+  @js """
+  #{for path <- phoenix_js_paths, do: path |> File.read!() |> String.replace("//# sourceMappingURL=", "// ")}
+  #{File.read!(js_path)}
+  """
 
-  @css File.read!(@css_path)
-  @js File.read!(@js_path)
+  @default_socket_config %{path: "/live", transport: :websocket}
 
   embed_templates "layouts/*"
 
@@ -97,7 +106,7 @@ defmodule ErrorTracker.Web.Layouts do
         class="whitespace-nowrap flex-0 block py-2 px-3 rounded-lg text-white hover:text-white hover:bg-gray-700 md:hover:bg-transparent md:border-0 md:hover:text-sky-500"
         {@rest}
       >
-        <%= render_slot(@inner_block) %>
+        {render_slot(@inner_block)}
       
     
     """
diff --git a/lib/error_tracker/web/components/layouts/live.html.heex b/lib/error_tracker/web/components/layouts/live.html.heex
index b6b6845..a495577 100644
--- a/lib/error_tracker/web/components/layouts/live.html.heex
+++ b/lib/error_tracker/web/components/layouts/live.html.heex
@@ -1,4 +1,4 @@
 <.navbar id="navbar" {assigns} />