diff --git a/src/components/elements/favorite-button.tsx b/src/components/elements/favorite-button.tsx
new file mode 100644
index 00000000..83a8a16d
--- /dev/null
+++ b/src/components/elements/favorite-button.tsx
@@ -0,0 +1,37 @@
+"use client";
+import useFavorites from "@lib/hooks/useFavorites";
+import { HTMLAttributes } from "react";
+import { HeartIcon } from "@heroicons/react/24/outline";
+import { clsx } from "clsx";
+import { useIsClient } from "usehooks-ts";
+
+type Props = HTMLAttributes & {
+ uuid: string;
+ title: string;
+ path: string;
+ units?: number;
+};
+
+const FavoriteButton = ({ uuid, title, path, units, ...props }: Props) => {
+ const { favs, addFav, removeFav } = useFavorites();
+ const isFavorite = favs.some((fav) => fav.uuid === uuid);
+
+ const onClick = () => {
+ isFavorite ? removeFav(uuid) : addFav(uuid, title, path, units);
+ };
+
+ // No need to add the button on the server, but also it doesn't show initial state correctly for some reason.
+ if (!useIsClient()) return null;
+
+ return (
+
+ );
+};
+
+export default FavoriteButton;
diff --git a/src/components/elements/favorites-list.tsx b/src/components/elements/favorites-list.tsx
new file mode 100644
index 00000000..cc5d76d5
--- /dev/null
+++ b/src/components/elements/favorites-list.tsx
@@ -0,0 +1,51 @@
+"use client";
+
+import useFavorites from "@lib/hooks/useFavorites";
+import {HeartIcon} from "@heroicons/react/24/outline";
+import {useIsClient} from "usehooks-ts";
+import { XMarkIcon } from "@heroicons/react/20/solid";
+
+
+const FavoritesList = () => {
+ const { favs, removeFav } = useFavorites();
+
+ const removeFavorite = (uuid: string) => removeFav(uuid);
+
+ // No need to add the button on the server, but also it doesn't show initial state correctly for some reason.
+ if (!useIsClient()) return;
+
+ return (
+
+ {favs.length > 0 ?
+
+ Your favorites list is empty. Tap the{" "}
+ {" "}
+ icon on courses you’re interested in to see them here. And share them with family and friends.
+
+ :
+ <>
+
+ {favs.map(fav =>
+
+
+
{fav.title}
+
Units {fav.units}
+
+ )}
+
+
+ Total units
+
+ >
+ }
+
+ {/* Shareable options: Text, Email, Copy Link */}
+