Avatar

tmcw

👷 Building Val Town
Joined August 31, 2022
Likes
15
tmcw avatar
tmcw
bandcampWrapped
HTTP
Bandcamp Wrapped It's Spotify Wrapped, but for Bandcamp! . Bandcamp is for people who buy their music and probably most of them hoard MP3s. Like me. And this val helps those people turn their Bandcamp purchases of 2024 into HTML or Markdown suitable for blog posts on their blogs, which is probably a segment that has some overlap with the people who are wacky enough to buy their music instead of streaming it from some service. Because Bandcamp doesn't have an API, this hinges on you going to your purchases page, copying the purchases, and pasting it in. Thanks to the ability of the system clipboard to contain HTML , the same technology that makes copy-and-pasted text have unpredictable and annoying font and boldness choices also lets this parse and reformat that purchases page into something shareable. I would love for this to support embeds as well, but I haven't found a strategy yet: Bandcamp embeds use album IDs in the URLs, which are not exposed in the content on the purchases page. I'd have to scrape Bandcamp for that, which would probably inevitably be blocked by some 'bot protection' system. Also read about this on macwright.com .
1
jdan avatar
jdan
infoboxCrawler
HTTP
Forked from jdan/emperorOfJapanCrawler
4
tmcw avatar
tmcw
twitterAlert
Cron
Forked from stevekrouse/twitterAlert
1
tmcw avatar
tmcw
pinkGalliform
HTTP
Forked from tmcw/hackernewstopstory
1
janpaul123 avatar
janpaul123
VALLErun
HTTP
Forked from janpaul123/VALLE
4
janpaul123 avatar
janpaul123
VALLE
HTTP
Forked from janpaul123/valTownChatGPT2
15
maxm avatar
maxm
staticChess
HTTP
Check it out here: https://chess.maxmcd.com Plain, brutalist, no bloat chess. Every page is only html and css. Every chess move is made by clicking a link. Send a link to your friend and they'll send you one back to make your move. No silly animations or slick interactivity to trip up your gameplay. When Google indexes this site will we successfully compute all possible chess moves? Functionality is quite limited, and things might be broken. Please let me know if you find bugs! Inspired by this HN discussion about sites that have all possible game states of tic-tac-toe. I plan on extending this to support real gameplay. I think it could be a nice simple interface for long form games with friends. Might also be fun to add a static AI to play against. Feel free to PR any changes if you'd like to see something added.
30
pranjaldotdev avatar
pranjaldotdev
poller
Cron
bytes.dev newsletter notifier Tech Stack val.town - Infrastructure SQLite - Database Deno - Runtime Pushover - Notifications How it works At the lowest level it is powered by 3 main scripts, which are invoked by a scheduled cron job that runs daily scraper Goes to bytes.dev and scrapes latest published newsletter inserter Insert it to SQLite if this newsletter already not exists notifier Uses Pushover API to send ios mobile notifications Pushover notifications
3
xkonti avatar
xkonti
gptApiFramework
Script
Allows for automatic generation of Hono API compatible with GPTs. Endpoints' inputs and outputs need to be specified via types from which the Open API spec is generated automatically and available via /gpt/schema endpoint. ⚠️ Breaking changes introduced in v23 & 24: nothingToJson doesn't take the generic TResponse anymore. The type is inferred from the endpoint definition. The endpoint definition doesn't need the requestSchema , requestDesc and responseDesc defined anymore. The descriptions are inferred from the schema description. jsonToJson doesn't take the generic TRequest and TResponse anymore. Types are inferred from the endpoint definition. The endpoint definition doesn't need the requestDesc and responseDesc defined anymore. The descriptions are inferred from the schema description. Usage example: import { GptApi } from "https://esm.town/v/xkonti/gptApiFramework"; import { z } from "npm:zod"; /** * COMMON TYPES */ const ResponseCommandSchema = z.object({ feedback: z.string().describe("Feedback regarding submitted action"), command: z.string().describe("The command for the Mediator AI to follow strictly"), data: z.string().optional().describe("Additional data related to the given command"), }).describe("Contains feedback and further instructions to follow"); /** * INITIALIZE API */ const api = new GptApi({ url: "https://xkonti-planoverseerai.web.val.run", title: "Overseer AI API", description: "The API for interacting with the Overseer AI", version: "1.0.0", policyGetter: async () => { const { markdownToPrettyPage } = await import("https://esm.town/v/xkonti/markdownToHtmlPage?v=5"); return await markdownToPrettyPage("# Privacy Policy\n\n## Section 1..."); }, }); /** * REQUIREMENTS GATHERING ENDPOINTS */ api.nothingToJson({ verb: "POST", path: "/newproblem", operationId: "new-problem", desc: "Endpoint for informing Overseer AI about a new problem presented by the User", responseSchema: ResponseCommandSchema, responseDesc: "Instruction on how to proceed with the new problem", }, async (ctx) => { return { feedback: "User input downloaded. Problem analysis is required.", command: await getPrompt("analyze-problem"), data: "", }; }); export default api.serve();
2
maxm avatar
maxm
smileyPNG
HTTP
Forked from maxm/selfEditingWebsite
5
tmcw avatar
tmcw
express_example
Script
This val is simple, and just a way to test the express API.
1
simone avatar
simone
tradestationMargins
Script
An interactive, runnable TypeScript val by simone
2
Next