Index: pages/index/buildCards.telefunc.ts
===================================================================
--- pages/index/buildCards.telefunc.ts	(revision 40ac7a920a0b08c324bf4201b03a36483cc3aad4)
+++ pages/index/buildCards.telefunc.ts	(revision 40ac7a920a0b08c324bf4201b03a36483cc3aad4)
@@ -0,0 +1,25 @@
+import {ctx, requireUser} from "../../server/telefunc/ctx";
+import * as drizzleQueries from "../../database/drizzle/queries";
+import {Abort} from "telefunc";
+
+export async function onGetHighestRankedBuilds({ limit }
+                                               : { limit?: number }) {
+    const context = ctx();
+
+    const highestRankedBuilds = await drizzleQueries.getHighestRankedBuilds(context.db, limit);
+
+    return highestRankedBuilds;
+}
+
+export async function onCloneBuild({ buildId }
+                                   : { buildId: number }) {
+    const { c, userId } = requireUser()
+
+    if (!Number.isInteger(buildId) || buildId <= 0) throw Abort();
+
+    const newBuild = await drizzleQueries.cloneBuild(c.db, userId, buildId);
+
+    if (!newBuild) throw Abort();
+
+    return newBuild;
+}
