373
374 if (icon) {
375 c.header("Content-Type", "image/svg+xml");
376 return c.body(
377 <svg
1import { createTidbytWorkoutsImage } from "https://esm.town/v/andreterron/createTidbytWorkoutsImage";
2
3export const pelotonTidbytWorkouts = createTidbytWorkoutsImage;
1# Blob Storage - [Docs ↗](https://docs.val.town/std/blob)
2
3Val Town comes with blob storage built-in. It allows for storing any data, like text, JSON, or images. You can access it via [`std/blob`](https://www.val.town/v/std/blob).
4
5Blob storage is scoped globally to your account. If you set a blob in one val, you can retrieve it by the same key in another val. It's backed by Cloudflare R2.
12 let query = `?start_time=${
13 new Date(lastRunAt.getTime() - 5 * msSecond).toISOString()
14 }&expansions=attachments.media_keys&media.fields=duration_ms,height,media_key,preview_image_url,public_metrics,type,url,width,alt_text`;
15 const result = await twitterJSON({
16 url: `https://api.twitter.com/2/users/1721850098575908864/mentions` + query,
33 },
34 {
35 type: "image_url",
36 image_url: attachment.url,
37 },
38 ],
3Replies to mentions on twitter with the emojis your photo evokes. Inspired by [Devon Zuegel](https://twitter.com/devonzuegel/status/1719789094035919144).
4
5
6
7Migrated from folder: Archive/emojisearch/emojiSearchBot
17 },
18 {
19 type: "image_url",
20 image_url:
21 "https://media.cleanshot.cloud/media/60976/KXVUGiSb0DD4jYqnaASkHYliQLpYPUnTBIiylySQ.jpeg?Expires=1699376932&Signature=XR1~tmcXRwHgQXh1BRZh3pa0RQrq00nSGTw3w-YHbNm6kCJXpCq13J6eORE1XDdZlPWq9yy5B~h6~nR889GmtuA67E5Fno839LyxPXA4RIBMIySVNF1py55grAba4JGZkt1oLqNeoKIcyUJYBOTcf41kNq0cJfEv0PSYrCpJbWiB1pcIAVg-WrgIF-R7MNdKQMwEUfSbbTSECRiTIIVU9GtBqqnGaSSot~2r28Tpj7~mACnyk9gNhewqeGOpYReCgw6cmmkrmh-5tNsqMtxeWoxXcT5EuXXEcX908grVzlLxLJQBQ5Tv2gmJprNsAIAgo6u01gWHAZL-OTpXn3firg__&Key-Pair-Id=K269JMAT9ZF4GZ",
22 },
3This Todo App is server rendered *and* client-hydrated React. This architecture is a lightweight alternative to NextJS, RemixJS, or other React metaframeworks with no compile or build step. The data is saved server-side in [Val Town SQLite](https://docs.val.town/std/sqlite/).
4
5
6
7## SSR React Mini Framework
33 title: string;
34 description: string;
35 image: string | null;
36 pubDate: string;
37 type: string;
51
52
53
54
55
1import { email } from "https://esm.town/v/std/email";
2import { nasaImageDetails } from "https://esm.town/v/wallek/nasaImageDetails";
3
4export const todaysNasaMail = async () => {
5 const { html, nasaAPOD } = await nasaImageDetails();
6 console.log({ html, nasaAPOD });
7 const mailMeTodaysNasaImage = await email({
8 html: "<a href=\"https://wallek-nasaImage.web.val.run\">Weblink</a><br/><br/><br/>" + html,
9 subject: `Daily NASA – ${nasaAPOD.title}`,
10 });