Hey HN! We're so excited to show you Val Town (<a href="https://val.town" rel="nofollow">https://val.town</a>)! A "val" is a JavaScript/TypeScript function or value that runs on our servers. We aim to get you from idea to running code in seconds: type code, run it, get its API endpoint, schedule it - all from the browser, in a couple keystrokes.<p>We're a startup of 4 people, mostly in NYC. We've been working on this for 6 months and are eager for feedback from the HN community.<p>Why do we need yet another online coding IDE? While researching devtools[1], I found myself wanting something halfway between Replit and Zapier: a tool that makes hosting, deploying, scheduling, and authenticating easy, but is first-and-foremost a programming tool.<p>We added `console.email` to the runtime to make it incredibly easy to email yourself. We don't have npm imports yet, but we do have a low-friction system that treats every user as a namespace, so you can refer to `@me.foo + 1` or `@yourFriend.bar()` right in your code. There are a lot of thorny implications this newfangled import scheme creates, but also many joyous and carefree coding experiences! One of my favorite features is that we store every evaluation, up and down the callstack, including inputs, outputs, logs, etc, which has been an amazing aid to debugging.<p>So far, Val Town is mostly used for what we're calling "programmatic notifications": query a data source for new items on an interval and email them to yourself.<p>Get notified when users you "follow" post on Hacker News: <a href="https://www.val.town/stevekrouse.hnFollowPollJob" rel="nofollow">https://www.val.town/stevekrouse.hnFollowPollJob</a><p>Get notified when to close your window during fire season in SF: <a href="https://www.val.town/stevekrouse.aqi" rel="nofollow">https://www.val.town/stevekrouse.aqi</a><p>Get notified when there are new citations on a paper: <a href="https://www.val.town/ernest.newCitationNotification" rel="nofollow">https://www.val.town/ernest.newCitationNotification</a><p>Subscribe to RSS feeds: <a href="https://www.val.town/stevekrouse.pollRSSFeeds" rel="nofollow">https://www.val.town/stevekrouse.pollRSSFeeds</a><p>A good place to get started would be forking one of those vals and modifying it to suit your needs. Some folks are using the tool in other ways, such as in webhook contexts, and we encourage those uses as well. We'd LOVE to pair-program with anyone looking to try out the tool and give feedback. Email steve@val.town :-)<p>Main site: <a href="https://val.town" rel="nofollow">https://val.town</a>
Docs: <a href="https://val-town.notion.site/Val-Town-Docs-01c8eb9c534b4899802f3a9e31d540ab" rel="nofollow">https://val-town.notion.site/Val-Town-Docs-01c8eb9c534b48998...</a>
Discord: <a href="https://discord.gg/dHv45uN5RY" rel="nofollow">https://discord.gg/dHv45uN5RY</a>
Blog & Newsletter: <a href="https://val-town.notion.site/Blog-6d3ef714d0c849e9be71b3986a1dcd46" rel="nofollow">https://val-town.notion.site/Blog-6d3ef714d0c849e9be71b3986a...</a><p>[1] - Whole Code Catalog: <a href="https://futureofcoding.org/catalog/" rel="nofollow">https://futureofcoding.org/catalog/</a>
This is pretty neat!<p>I went ahead and dropped in a string tokenizer that I've been working on, and it worked straight away! (link: <a href="https://www.val.town/embed/catapart.magnitTokenize" rel="nofollow">https://www.val.town/embed/catapart.magnitTokenize</a>)
I'm sure I'm doing it inefficiently, but it's pretty sweet that it just plain worked!<p>Thanks for building such an open platform! I know I can get some real value of utilities like this, so it's nice to know that there are folks out there willing to provide them! Hopefully any code I can add can be of use to someone!<p>edited to add: I also included a test of the tokenizer, if anyone was wanting to tokenize some strings with it: <a href="https://www.val.town/embed/catapart.testTokenizer" rel="nofollow">https://www.val.town/embed/catapart.testTokenizer</a>
Congrats on the launch! I love this idea. It’s so simple but it immediately clicks. My instant reaction was thinking of the various ways I’d totally use this (and gladly pay for it, if reasonably priced).<p>A few things:<p>- Add support for user secrets.<p>- Work on pricing ASAP. You’ve built something dope. You can be paid for it. In fact, I prefer to pay, because it makes it easier for me to feel that the product won’t just disappear after I begin to use it and rely on it. I also just like knowing folks are compensated for the work they do.<p>- Due to the type of product this is, security should be the #1 priority here. I understand you’re in the early stages, but please make this a focus. V8 has pretty decent isolation, but honestly, for a product like this, WebAssembly is your friend — it was quite literally designed for this type of product. A side benefit of relying on WebAssembly is that you’ll be able to support as many languages/environments as you can get to compile.<p>Once again, dope work!
I want to draw particular attention to the use case of following HN users. I've been using it for a couple of months, and been finding a lot more great comments here as a result. There's a separate front-end that's the best way to get started following people: <a href="https://www.hnfollow.com" rel="nofollow">https://www.hnfollow.com</a>. And if you find yourself wishing it worked slightly differently for you, well you can go edit the underlying Val then.<p>Hit me up if you would like help setting this up for yourself and don't want to join the Discord or something. My email is in my profile. You basically need to create a new Val for yourself called `hackerNewsAuthors` that's just an array of HN username strings.
Oooh I think this is great<p>Another one, as an example, check the FDA food and drug alerts for medicine you take. I guess the pharmacy should email you but who knows, it's just filtering an xml for a set of regex. I built a cheap example myself on a micro self hosted server I use for other things<p>Having quick and easy email behind a very simple url is great. Another usecase I use is I have a tiny http endpoint which just emails based on the url parameter (e.g. since it's only me my.server.com/email?msg=DONE_AI_training). Then I can use it to notify me when a long running job is done, using curl or the easy off the shelf requests that's in any language
This is super nice. Please let me pay so you don't disappear.<p>Are there any other services that make it this easy? DigitalOcean functions have a UI for quick prototyping but afaik Google Cloud, Vercel, Cloudflare etc wrap similar functionality inside projects or similar idiosyncrasies which adds friction if all you're after is a function and an endpoint.
Quick start -<p>click "new val"<p>type `console.email("hello from valtown", "valtown");` , see email in about 10 seconds, and the val link has a log of emails sent<p>new val, `export hackerNewsAuthors = ["stevekrouse", "dustingetz"];`<p>go here, click fork <a href="https://www.val.town/stevekrouse.hnFollowPollJob" rel="nofollow">https://www.val.town/stevekrouse.hnFollowPollJob</a><p>run<p>i think the hook is running now, wait for steve to post again to see?<p>if someone is feeling motivated, maybe integrate a weather API and mail it every morning?
This is super awesome. A cloud cron builder and workflow builder is something the world really needs. If you add secrets and user accounts you're off to the races here.
Why call it a "Cloud Scripting Site" rather than a "Javascript Cloud Scripting Site"?<p>It's very specifically javascript so it seems odd to name it as if it's something broader.<p>(Or does "cloud scripting" already have a specific association with js that has somehow passed me by?)<p>EDIT - I guess "Typescript/Javascript Cloud Scripting Site" is a bit of a mouthful but still...
I love this idea and think there's a good chance I'll use it in the future.<p>Generally I use followthatpage.com for getting notified of changes on a few simple pages.<p>However, one idea that would be a pretty good use case of your tool is to get notified of new search results for any query on OpenLibrary.org .<p>For example, if I wanted to be notified if there are any new books added to OpenLibrary that mention "hackerNews" I could use this search <a href="https://openlibrary.org/search/inside?q=hackernews" rel="nofollow">https://openlibrary.org/search/inside?q=hackernews</a> with this api call <a href="https://openlibrary.org/search/inside.json?q=hackernews" rel="nofollow">https://openlibrary.org/search/inside.json?q=hackernews</a><p>I probably won't build this now but if someone does please let me know.
Looks nice. Is there any persistant key/value store?<p>I like your <a href="https://www.val.town/ernest.newCitationNotification" rel="nofollow">https://www.val.town/ernest.newCitationNotification</a> but it works because the JSON returned by the API call happens to include a list of citations by date, rather than just returning a citation count.<p>If you had an API that just returned a count, how would I check to see if the count had increased since the last call?<p>For the air quality example, <a href="https://www.val.town/stevekrouse.aqi" rel="nofollow">https://www.val.town/stevekrouse.aqi</a>, what prevents the script from emailing you once per hour? During a file season that would be annoying.
Seems very cool!<p>I gotta say hosting someone else's code seems very ballsy. Building a service like this is something I've considered before but always wonder, how do you make sure they're not doing unscrupulous activities?
Really cool concept, really enjoyed playing with this a few months ago and great to see so much progress - especially emails. I do think it will lower the bar for what's worth writing code for
Big fan of the idea!<p>I've been using Google Apps Script[1] for similar use cases but the limited feature set has been frustrating. Glad to see something more modern come up!<p>I wonder if HTML parsing is possible since there isn't npm support to import a parser yet. Maybe by dropping the parser as a separate val?<p>[1] - <a href="https://www.google.com/script/start/" rel="nofollow">https://www.google.com/script/start/</a>
Very fun so far! I have been having trouble deleting any existing val or writing to an exported val from an unexported val.<p>A specific example is one I made "@demo.newPaste", which seemed to fail to write to "exported @demo.pastes" until I also exported "@demo.newPaste". Is this maybe a mistake by me, a bug, or intended behavior?
I love the whole "town" vibe with the ability to reference code written by other people.<p>Echoing others in this thread who say we'd love to pay for it. I think introducing private Vals may go against what you're going for, but I hope you find a good monetization strategy!
This looks really cool, I find the mix between Zapier and Code to be :chef-kiss:<p>Do you plan to allow for self-hosting? eg. An org that wants to have a private version of this, or even internal version of it.
I love the concept and will definitely try this out. Quick piece of feedback though – the "val.town" domain name isn't going to help with broader appeal for the product.
I've tried this out and it's very cool. I think one particular application is roll-your-own "social listening" which usually requires buying tools.
How do you plan to compete against<p><a href="https://autocode.com/" rel="nofollow">https://autocode.com/</a>
<a href="https://pipedream.com/" rel="nofollow">https://pipedream.com/</a>
<a href="https://modal.com" rel="nofollow">https://modal.com</a>
<a href="https://telefunc.com/" rel="nofollow">https://telefunc.com/</a>
?