-
+
-
-
-
+
);
-}
\ No newline at end of file
+}
diff --git a/frontend/src/components/video/VideoCard.tsx b/frontend/src/components/video/VideoCard.tsx
index 7cc2519..084aafc 100644
--- a/frontend/src/components/video/VideoCard.tsx
+++ b/frontend/src/components/video/VideoCard.tsx
@@ -25,9 +25,12 @@ const VideoCard = ({ id, title, duration, createdAt, onEdit, onDelete, className
const [confirmDelete, setConfirmDelete] = useState(false);
const menuRef = useRef
(null);
- setTimeout(() => {
- setTimeAgo(dateToTimeAgo(stringToDate(createdAt)));
- }, 1000);
+ useEffect(() => {
+ const interval = setInterval(() => {
+ setTimeAgo(dateToTimeAgo(stringToDate(createdAt)));
+ }, 1000);
+ return () => clearInterval(interval);
+ }, [createdAt]);
useEffect(() => {
isThumbnailAvailable(id)
diff --git a/frontend/src/pages/Home.tsx b/frontend/src/pages/Home.tsx
index 73e7258..c2f704d 100644
--- a/frontend/src/pages/Home.tsx
+++ b/frontend/src/pages/Home.tsx
@@ -3,8 +3,8 @@ import { Upload, Scissors, SlidersHorizontal, Radio, LayoutGrid, Play } from "lu
const features = [
{
icon: Upload,
- title: "Upload & convert",
- description: "Drop in a video file. Non-native formats are converted automatically before editing.",
+ title: "Upload & compress",
+ description: "Drop in a video file, set your clip range and export settings, then compress.",
},
{
icon: Scissors,
@@ -71,7 +71,7 @@ const Home = () => {
{/* Format note */}
- Supports MP4, MOV, WebM, and OGG. Non-native formats are converted on upload.
+ Supports MP4, MOV, WebM, and OGG.
);
diff --git a/frontend/src/utils/endpoints.ts b/frontend/src/utils/endpoints.ts
index b711d07..d75b09b 100644
--- a/frontend/src/utils/endpoints.ts
+++ b/frontend/src/utils/endpoints.ts
@@ -1,4 +1,4 @@
-import type {VideoMetadata, APIResponse, User, Clip, JobResponse } from "./types.ts";
+import type { VideoMetadata, APIResponse, User, Clip, JobResponse } from "./types.ts";
const API_URL = import.meta.env.VITE_API_URL;
@@ -6,57 +6,34 @@ export class AuthError extends Error {
constructor() { super("Not authenticated"); this.name = "AuthError"; }
}
-/**
- * Login function
- * @param GoogleToken - The Google token received from the frontend.
- * @return A promise that resolves to a JWT
- */
-const login = async (GoogleToken: string): Promise