summaryrefslogtreecommitdiffhomepage
path: root/packages/web/src
diff options
context:
space:
mode:
authorFrank <[email protected]>2025-06-10 15:50:40 -0400
committerFrank <[email protected]>2025-06-10 15:50:42 -0400
commit772e1851c049f4f861632dacdee9cb1b3e0bda17 (patch)
tree55b593c297b61665bb5c50245742406adbe03d87 /packages/web/src
parent5ab2ff9589aadc36c778b919940475f0a966f8d2 (diff)
downloadopencode-772e1851c049f4f861632dacdee9cb1b3e0bda17.tar.gz
opencode-772e1851c049f4f861632dacdee9cb1b3e0bda17.zip
Share: render url on frontend
Diffstat (limited to 'packages/web/src')
-rw-r--r--packages/web/src/pages/s/[id].astro28
1 files changed, 25 insertions, 3 deletions
diff --git a/packages/web/src/pages/s/[id].astro b/packages/web/src/pages/s/[id].astro
index 523fa7e6c..c196a4290 100644
--- a/packages/web/src/pages/s/[id].astro
+++ b/packages/web/src/pages/s/[id].astro
@@ -1,4 +1,5 @@
---
+import { Base64 } from "js-base64";
import config from "virtual:starlight/user-config";
import StarlightPage from '@astrojs/starlight/components/StarlightPage.astro';
@@ -10,14 +11,35 @@ const { id } = Astro.params;
const res = await fetch(`${apiUrl}/share_data?id=${id}`);
const data = await res.json();
-const title = data.info.title;
-const ogImage = data.ogImage;
+let cost = 0;
+const models: Set<string> = new Set();
+const version = "v0.1.1";
+Object.values(data.messages).forEach((d) => {
+ const assistant = d.metadata?.assistant;
+ if (assistant) {
+ cost += assistant.cost;
+ models.add(assistant.modelID);
+ }
+});
+
+const encodedTitle = encodeURIComponent(
+ Base64.encode(
+ // Convert to ASCII
+ encodeURIComponent(
+ // Truncate to fit S3's max key size
+ data.info.title.substring(0, 700),
+ )
+ )
+);
+const encodedCost = encodeURIComponent(`$${cost.toFixed(2)}`);
+
+const ogImage = `https://social-cards.sst.dev/opencode-share/${encodedTitle}.png?cost=${encodedCost}&model=${Array.from(models).join(",")}&version=${version}&id=${id}`;
---
<StarlightPage
hasSidebar={false}
frontmatter={{
- title: title,
+ title: data.info.title,
pagefind: false,
template: "splash",
tableOfContents: false,