Should I vibe code
Organize relationship lists, enrich context manually, and run lightweight outreach
Rebuild the pipeline board, fine. The part that ends in "send to 400 people" is not a side project.
?
Their verdict, the Standard price and the build-time estimate come from their entry, MIT-licensed. Checked 2026-08-04.
?
Our verdict, the regret score and everything below it. Editorial and unsponsored — nobody can pay to be moved.
The honest answer
why the verdict is what it is
Contacts, companies, a pipeline with stages — that is a schema and an afternoon, and you will have something usable before dinner. Folk's real surface is the two features either side of it: a browser extension that lifts people off LinkedIn into your database, and a send button rated in thousands of messages a month. Build the middle and you have an address book with opinions. Build the ends and you have built a cold-outreach machine pointed at people who never gave you their address, with your own sending domain as the fuse.
What actually breaks
not "if". the specific failures.
- A sequence that keeps sending after someone replies "take me off this", because unsubscribe was the last thing you built
- Deduplication merging two records and silently dropping the note that said do not contact
- Your domain's sending reputation, spent in one afternoon on a list somebody bought
- Enriched addresses that are guesses — first.last@company.com — bouncing hard enough to get the domain flagged
- A deletion request arriving by email, which has to be executed across contacts, notes, activity, sequence membership and the CSV you exported in March
The sequence is supposed to skip anyone who replied, and it does, as long as the reply lands in the mailbox you poll. On Tuesday a bounce handler you wrote in ten minutes marks a thread unread, the poller reads it as new, and step three goes out to two hundred people who had already answered — including four who answered with some version of stop emailing me. One of them forwards the whole thread to your largest customer, who is on the list because you imported everyone. The mail is sent. There is no recall, no pause that helps, nothing to roll back. What is left is writing the apology, and then working out whether the person who asked twice now has a complaint form open.
Is that you?
the verdict is a default, not a law
- It is your own address book with deal stages on top and nothing ever sends
- Every contact handed you their details directly and you can say when
- Outbound goes through a real ESP, and your app only ever hands it a list
- Contacts arrive by scraping, enrichment or a purchased list
- The app sends mail itself, from your own domain, in sequences
- You cannot execute "delete everything you hold about me" as one operation
- More than one person uses it and nothing records who saw which record
If you build it anyway
the checklist, then the prompt that enforces it
- Suppression before send. A global do-not-contact table, checked at send time rather than import time, honoured by every sequence — built before the first message leaves.
- One-click unsubscribe in every message, and treat a reply containing "unsubscribe", "remove me" or "stop" as one too. People reply; they do not click.
- Send through an ESP that handles bounces, complaints and List-Unsubscribe. Your own SMTP is how a domain gets blocked, and reputation comes back slowly.
- Record provenance on every contact — where it came from, when, and whether they opted in. "I don't know" is the answer that costs money.
- Make deletion one operation across contacts, notes, activity, sequence membership and exports, and write the test that proves nothing survives it.
- Rate-limit per day and per recipient domain, and halt any sequence automatically when its bounce or complaint rate crosses a threshold you chose in advance.
I am building a lightweight CRM that will eventually send email to the people
in it. The database is other people's personal data and the send button is the
sharp edge. Apply these and push back if I ask you to break them.
1. Build the suppression list first — before contacts, before the pipeline,
before anything can send. One global do-not-contact table, checked at send
time, on every message, in every sequence.
2. Then build deletion: a single operation that removes a person from contacts,
notes, activity, sequence membership and any generated export. Write the
test that proves nothing is left behind.
3. Every contact row records where it came from, when, and whether they opted
in. Make provenance non-nullable, and exclude any import that lacks it from
sending entirely.
4. Do not send over SMTP from my own server. Use an ESP that handles bounces,
complaints, suppression and List-Unsubscribe headers, and treat a hard
bounce as an immediate permanent suppression.
5. Every message carries a working one-click unsubscribe, and an inbound reply
containing "unsubscribe", "remove" or "stop" counts as an opt-out.
6. Any reply pauses that contact's sequence immediately, and pausing is also
the default for any error you cannot classify.
7. Rate-limit outbound per day and per recipient domain, halt any sequence
above a bounce or complaint threshold, and tell me the numbers you picked.
8. Never generate addresses from name-plus-domain patterns. Those are guesses,
they bounce, and bounces are precisely what damages a sending domain.
9. Log every send with recipient, sequence, step and timestamp, so "who did we
email on Tuesday" is one query.
10. Out of scope, deliberately: bought lists, profile scraping, and anything
that drives a logged-in LinkedIn session.
11. Before the first real send, ask me what my lawful basis is for the
addresses in this database — and note that paying for a CRM would not fix
a shrug either.That one keeps you out of trouble. For the prompt that actually builds it, canivibecodeit.com has one.
their build prompt ↗Or don’t build it
the boring option, and the way back out
The moment it sends. $30 a member buys suppression, bounce handling, unsubscribe plumbing and people who notice when your domain starts smelling bad — none of which you will build in the first month, and all of which you will need by about week three.
$30/mo is cheaper than your weekend.
Contacts export cleanly; provenance does not, unless you kept it. Store source, consent state and opt-out date as columns from the very first import, so when you move to a real CRM the list arrives with its receipts. A CSV of names and addresses with no history behind it is a list you cannot prove you are allowed to use, which makes it a list you should not import anywhere.
Active open-source modern CRM with extensible data models — a far better starting point than an empty schema.
Questions
Isn't a CRM just a database of contacts?
Yes, and that is the problem in one sentence: it is a database of people who did not put themselves in it. Every row carries obligations — access, correction, deletion — that arrive whether or not you built a screen for them.
Can I not just send the sequences from my own SMTP server?
You can, once. Deliverability is reputation, and reputation is built from bounce rates, complaint rates, authentication and volume history that a new sending IP does not have. An ESP is not doing anything you cannot code; it is doing something you cannot accumulate.
The LinkedIn extension is the genuinely useful bit. Why leave it out?
Because it fills your database faster than your consent story can keep up, it breaks every time the page markup changes, and automating a logged-in session risks the account you are scraping from. If you want the enrichment, buy it from someone whose terms say you may.
- CAN-SPAM Act compliance guide for business (FTC, US)
- GDPR Art. 7 — conditions for consent (EU)
- GDPR Art. 5 — principles relating to processing of personal data (EU)
Every week, someone ships something they shouldn’t have.
New verdicts, the worst thing that landed in the trap, and the occasional incident report. No other email, ever.
last reviewed 2026-08-04 · verdict is editorial and unsponsored · shared entry data from canivibecodeit under MIT · not legal advice