• Blog
  • Docs
  • Pricing
  • We’re hiring!
Log inSign up
charmaine

charmaine

blog-aug-7

Remix of valdottown/blog
Public
Like
blog-aug-7
Home
Code
9
components
12
posts
9
routes
6
styles
1
utils
8
IMAGES.md
README.md
TODOs.md
H
index.ts
Branches
1
Pull requests
Remixes
History
Environment variables
Val Town is a collaborative website to build and scale JavaScript apps.
Deploy APIs, crons, & store data – all from the browser, and deployed in milliseconds.
Sign up now
Code
/
/
x
/
charmaine
/
blog-aug-7
/
branch
/
main
/
version
/
4
/
code
/
posts
/
2025-08-07-clay-api.md
/
posts
/
2025-08-07-clay-api.md
Code
/
/
x
/
charmaine
/
blog-aug-7
/
branch
/
main
/
version
/
4
/
code
/
posts
/
2025-08-07-clay-api.md
/
posts
/
2025-08-07-clay-api.md
Search
8/7/2025
Viewing readonly version of main branch: v4
View latest version
2025-08-07-clay-api.md
title:
Stop scrolling, start enriching
description:
How we used Clay as an API for enrichments (and you can too)
pubDate:
2025-08-07T00:00:00.000Z
author:
Charmaine Lee

We’re a tiny team. I used to think user enrichment was for big companies. Then we set a goal: find 10 pre‑sales customers before launching Val Town for Teams. My day turned into dashboards, Google, and DMs. We even piped new users into Discord and did the “scroll a long feed of emails and hope you spot someone important” routine. It didn’t scale. Great users were joining, but finding the right ones felt like treasure hunting.

Why Val Town?

Clearbit used to be the obvious answer, but after the Twilio acquisition it wasn’t really an option for net‑new customers. Clay was great, but we wanted to use it like an API so anyone on our team can make calls to it directly and programmatically do custom things on top. Unfortunately, this isn't something they offer.

We tweeted about it and Clay responded with a way to do it! So we did it. We turned Clay into an API in Val Town: https://www.val.town/x/charmaine/clay-proxy/branch/main/code/README.md.

This is for our fellow engineers doing sales!

How it works

Your app POSTs to /enrich with an email or GitHub username and a Val bearer token. We verify you, generate a request id, and forward the payload to Clay with that id. Clay enriches and POSTs the result back to /clay-webhook using the same id. We stash the result under that id and, while your request is open, poll for it. When it returns, we give you the JSON back as if it's a normal request/response.

Enriching emails with Clay is as simple as

import { clay } from "https://esm.town/v/charmaine/clay-proxy/sdk.ts";

const result = await clay({
  email: "charmainekmlee@gmail.com",
  source: "user_signup"
});

You can get started here: https://www.val.town/x/charmaine/clay-proxy.

Vibe coding is a spectrum

Vibe coding is on a spectrum of how much you understand the code. The more you understand, the less you are vibing.

shapes at 25-07-30 10.32.53.png

Simply by being an engineer and asking for a web app with a persistent database, you are already vibing less than than a non-programmer who asks for an "app" without understanding the distinction between a web app and a native app, or how persistent data storage works.

Giving a credit card to a child

The worst possible situation is to have a non-programmer vibe code a large project that they intend to maintain. This would be the equivalent of giving a credit card to a child without first explaining the concept of debt.

As you can imagine, the first phase is ecstatic. I can wave this little piece of plastic in stores and take whatever I want!

Which is a lot like AI can build anything now! Nobody needs to learn how to code! Look at what it just made for me!

But if you wait a month, you'll get the credit card bill. Did I actually need to buy all those things? How will I get myself out of this hole?

It's similar for the vibe coder. My code broken. What do all these files and folders even do? How will I ever get this fixed? Can I get a refund for the $400 I spent vibe coding?

If you don't understand the code, your only recourse is to ask AI to fix it for you, which is like paying off credit card debt with another credit card.

Serious coding with AI in 2025

If you're building something serious that you intend to maintain in 2025, Andrej has the right of it:

[Keep] a very tight leash on this new over-eager junior intern savant with encyclopedic knowledge of software, but who also bullshits you all the time, has an over-abundance of courage and shows little to no taste for good code. And emphasis on being slow, defensive, careful, paranoid, and on always taking the inline learning opportunity, not delegating.

— Andrej Karpathy, twitter

How we approach building for AI

At Val Town, we've built AI into our product in dozens of ways. Townie is our AI asisstant that agentically reads & writes code, runs it, views the logs, and keeps iterating until it's done.

Townie is an awesome tool for vibe coding. I heartily recommend it to folks who understand these tradeoffs. I use it to vibe code sometimes. Other times I keep in on a tight leash as it makes surgical edits to a project I care about. Both are fun and useful.

Coding with AI is changing so quickly that it's hard to know what tomorrow will bring, but I'm confident that theory building will remain central to the activity of building complex software. Our technical expertise will still be relevant! And I'm optimistic that AI will continue to make programming better in suprising ways.

But if you know any non-programmers spending thousands of dollars vibe coding their billion dollar app idea today, please send them this post. Vibe coding is not going to get them where they want to go. They're going to have to learn to use their human eyes to read the code 😱, and learn that sometimes it's easier to start over with building a well-written code base from scratch than to fix a legacy one that nobody understands.


This essay is a distillation of a talk I gave last month, The Role of the Human Brain in Programming. Thanks to my fiance Emily for listening to me rant about these topics for months, and for filming my talk. Thanks Malte and Rippling for hosting the talk.

Thanks Geoffrey Litt, Jimmy Koppel, Max McDonnell, Tom MacWright, Charmaine Lee, Brent Jackson, and Dan Shipper for feedback on this post. Thanks Simon Willison and Andrej Karpathy for being voices of reason amidst all the AI hype and naysayers.

FeaturesVersion controlCode intelligenceCLIMCP
Use cases
TeamsAI agentsSlackGTM
DocsShowcaseTemplatesNewestTrendingAPI examplesNPM packages
PricingNewsletterBlogAboutCareers
We’re hiring!
Brandhi@val.townStatus
X (Twitter)
Discord community
GitHub discussions
YouTube channel
Bluesky
Open Source Pledge
Terms of usePrivacy policyAbuse contact
© 2025 Val Town, Inc.