DAILY NEWS

Stay Ahead, Stay Informed – Every Day

Advertisement
29 Zapier + Make automations replaced in four weeks


The bill that I no longer understood One morning in March, I reread the list of recurring direct debits from L’Atelier Palissy, and I came across a line that surprised me by its regularity: Zapier Pro, $73.50, every month for eighteen months. Next to it, a smaller but equally discreet Make Pro. I count: twenty-one active Zaps, nine Make scenarios, a few stopped, a few obviously broken for weeks. Nobody noticed, because each automation lived on its own dashboard, with its own history, its own logs that no one ever looked at. I didn’t know exactly what each one did. I knew there were about thirty of them, that they passed data from Formidable to Mailchimp, from Meta Lead Ads to a shared Google Sheet, from Stripe to a confirmation email, that they triggered on webhook, on polling, on schedule, and that half of the silent system failures probably came from there. I didn’t have the energy to go look, because going to look meant opening a tool in which I wasn’t at home. Twenty-eight days later, it was gone. Zero Zap, zero Make scenario, everything replaced by three hundred lines of TypeScript running in my Rembrandt ERP, under Sentry, under tests, with a single overview that I look at in the morning at coffee. If you have 30 seconds. Zapier/Make automations pay three invisible debts: they live outside your database, they log elsewhere than your monitoring, and they are triggered by rules that we end up no longer reading. Replacing thirty automations with a single event pipeline takes four weeks, not six months, provided you follow a golden rule: never cut a Zap before having validated its replacement in double writing for three to five days. The article gives the method, timetable and cost avoided. Three invisible debts The first debt that no-code tools produce is called, in internal literature which does not yet exist, distributed debt. Your data lives in three places at once, and none of the three are canonical. My CRM thought the truth was in Google Sheets. Mailchimp believed the truth came from Zapier. Supabase didn’t think anything because I only wrote part of what was happening there. The day a lead lands in three different tabs with three different spellings, no one knows which record is the real one. The only way to decide is to choose a place that wins by construction, and do everything else as a slave. The second debt is the absence of unified monitoring. A broken Zap sends an email to the address that created the Zapier account, possibly to no one. A Make scenario that fails in its third step leaves the first two consuming quotas, and the only trace is a small red number in a dashboard that no one opens. Sentry, Datadog, Grafana — none aggregate. You learn that your automation is dead when a customer calls to say that they have not received their confirmation email. The third debt is the most silent, and it is that of the rules that we forget to have written. A Zap created eleven months ago to manage a particular case of the summer season continues to run the following winter, and it routes a Paris lead to the email address of a colleague who has left the house. You don’t see it, because the lead is still coming, apparently. Nobody rereads a Zap. It’s done so that we don’t have to read it. This is precisely what makes it a debt. The golden rule that took me two weeks to accept. My first attempt, at the beginning of April, was naive. I’d write a Rembrandt replacement, cut the Zap, move on to the next one. My third attempt ended in Slack at 11 p.m., a Meta lead lost because my webhook was not deployed on the correct Vercel environment, and the certainty that if I continued like this, I was going to break at least one critical element before the end of the week. I set the following rule, which I kept until the last Zap. Never cut a Zap before having validated its replacement in double writing for three to five days. Concretely: I write the replacement, I deploy it, it runs at the same time as the Zap. Each lead arrives in duplicate in my Supabase, and in the email address of the team that receives the notification. For three to five days, I compare: same lead, same data, same timings, same emails sent? If so, I cut the Zap. If not, I disable my code and I still have a spinning net while I figure out what broke. The worst possible side effect during the transition is a lead received twice by the sales team. It’s an annoyance, not a disaster. A lost lead is a silent catastrophe that we discover a month later. The architecture that replaced the thirty automations The target is of a simplicity that was not visible as long as I stayed in the no-code tools. Meta Ads ──┐ Formidable ──┤ Stripe ──┤──► Webhooks Rembrandt ──► Supabase (single source) Manual ──┘ │ ├── Gmail SMTP (internal notifications) ├── Slack (team alerts) ├── Meta CAPI (campaign feedback) ├── automation_logs (traceability) └── Cron → Mailchimp then Brevo Enter fullscreen mode Exit fullscreen mode A single entry point per source, a single storage location, a parallel fan-out to the notification tools. The core is contained in a file called lib/lead-pipeline.ts which executes the outgoing integrations in parallel after each insert in the contacts table. export async function runLeadPipeline(lead: Lead) { await Promise.allSettled(( syncMailchimp(lead), notifySlack(lead), notifyGmail(lead), sendMetaCapi(lead), generateFirstContactDraft(lead), )) await logAutomation(lead, /* status by tool */) } Enter fullscreen mode Exit fullscreen mode Promise.allSettled rather than Promise.all because if Slack is down, I still want to send the email. Each result feeds an automation_logs table which is the only thing I look at in the morning: how many leads arrived, which tools succeeded, which failed, over what time window. The schedule as it really happened Week What I did Zaps cut S1 Central pipeline + Slack client + automation_logs table 0 S2 Great direct in double write 0 S3 Cut of ten Zaps Great + webhook Meta in duplicate 10 S4 Cut of eight Zaps Meta + webhook Stripe 18 S5 Scenarios Make (PDFs, crons) and cleanup 21 S6 Kill Zapier Pro, planned downgrade 21/21 The day of the final cut, I didn’t sleep the night before, and the next day I opened my automation_logs dashboard every hour. Thirteen days later, nothing had broken. Today I still maintain a dead route, sync-gsheets-leads, which I never call but which serves as a reactivable net until the end of the month. What we gain that we never suspected The economic gain is obvious – around a hundred euros per month in consolidated subscriptions. But what surprised me was a gain in understanding. The first week after the cut, I found that I understood my system for the first time in eighteen months. I could open a file, reread a routing rule, modify it, test it, deploy it in twenty minutes. Before, even a trivial modification – changing the recipient address of a notification email – went through five Zapier tabs and a dull fear of breaking one by moving another. Two short scenes come to mind. The first, I had to call Gaspard, our IT service provider, to retrieve the password for the Zapier account. He had it, he gave it to me, he didn’t ask why I wanted to go. The second, earlier in the morning, Françoise came out of her office with her cup in her hand and stood in front of mine: “Good. How long do you plan to keep your Meta duplicates? Because Hélène receives two emails for the same lead, she is starting to get annoyed. » It was the third week, I told her “Two more days”, she agreed, put down her cup, and the cup was made the next evening. I learned that double writing has a cost in team patience that should neither be minimized nor stretched beyond what is necessary. There is a particular hygiene to having a system held in one place. We underestimate it until it is there, because no-code tools sell precisely the promise that it is everywhere, that it no longer has to be thought about. The truth is that if it’s not thought of in one place, it’s just buried. It costs less to write, and much more expensive to live. What you can copy into your project Reusable patterns extracted from this migration, independent of my stack: The golden rule — double writing three to five days before cutting. Not negotiable. A duplicate lead is better than a lost lead. The additional time is paid once and is reimbursed for each incident avoided A unique event pipeline — a runPipeline(event) function called after each insert, which executes the outgoing integrations in parallel (Promise.allSettled) and traces the result of each in a dedicated table An automation_logs table — one row per event, one column per outgoing tool with its status. It’s the only dashboard we look at in the morning, and it replaces all the separate dashboards for no-code tools. A reactivable post-cut net — keeps the road dead for two more weeks. The day a bug surprises you, it takes fifteen seconds of vercel.json to put the net back together. Afterwards, you delete for good And a broader discipline: any tool that houses your business logic outside your database makes you pay three debts — distributed, without monitoring, unreadable. Zapier and Make are useful for prototyping. They become dangerous as soon as serious activity depends on them. How many no-code automations are running on your system right now, and when was the last time someone reread them all? I read the comments. Companion code: rembrandt-samples/lead-pipeline/ — runLeadPipeline with Promise.allSettled, automation_logs schema, hub-and-spoke diagram, MIT, ready to copy.



Source link

Join the Gemma 4 Challenge: $3,000 prize pool for TEN winners!



Local AI is having a moment, and we want you to be part of it!

Running through May 24, the Gemma 4 Challenge invites you to explore open models. With the release of Gemma 4, Google’s most capable open model family yet, we now have access to native multimodal capabilities, advanced reasoning, a 128K context window, and models that range from running on a Raspberry Pi, to phones, to powering large-scale deployments.

Whether you love to build or love to write, there’s a prompt for you and a $3,000 prize pool up for grabs!

Read on to learn more.

Our Prompts

Build With Gemma 4

Your mandate is to build something useful or creative with any Gemma 4 model. The scope is wide open — you can build anything from an IoT integration to a multimodal tool to a long-context reasoning app. What matters is that Gemma 4 is doing real work at the heart of your project. 

Build With Gemma 4 Submission Template

 

The most compelling submissions will make a clear case for why you chose the model you did and what that model unlocked.

Write About Gemma 4

Your mandate is to publish a post about Gemma 4 that educates, inspires, or sparks curiosity. There’s no single right format — what matters is that your post offers something genuine and useful to the community.

Not sure what to write about? Here are some ideas:

How-to guide: Walk through setting up and running a Gemma 4 model locally, fine-tuning it for a specific task, or integrating it into a real project

Comparison piece: Break down the three Gemma 4 model variants and help readers decide which one is right for their use case

Personal essay or opinion piece: Share your experience building with Gemma 4, or make a case for something — what does a model this capable running locally mean for the future of AI?

Deep technical breakdown: Explore a specific capability like multimodal input, the 128K context window, or reasoning mode

 

Write About Gemma 4 Submission Template

 

Need inspiration? Check out how Google’s own team fine-tuned Gemma 4 with Cloud Run Jobs. That’s the kind of hands-on, shareable knowledge is exactly what we’re looking for.

Note: If you are primarily showing off a project, please submit to the Build with Gemma 4 prompt instead! Each submission is only allowed to be eligible for one of the two categories.

Which Model Is Right for You? 🤔

Gemma 4 model family spans three distinct architectures tailored for specific hardware requirements:

Small Sizes: 2B and 4B effective parameter models built for ultra-mobile, edge, and browser deployment (e.g., Pixel).

Dense: A powerful 31B parameter dense model that bridges the gap between server-grade performance and local execution.

Mixture-of-Experts: A highly efficient 26B MoE model designed for high-throughput, advanced reasoning.

No matter which you choose, judges will be looking for intentional model selection — show us why your model was the right tool for the job.

Prizes 🏆

Five winners from the “Build with Gemma 4” prompt will receive:

$500 USD cash prize

DEV++ Membership
Exclusive DEV Badge

Five winners from the “Write About Gemma 4” prompt will receive:

$100 USD cash prize

DEV++ Membership
Exclusive DEV Badge

All participants with a valid submission will receive a completion badge on their DEV profile.

Judging Criteria

Build With Gemma 4 submissions will be evaluated for:

Intentional and effective use of the chosen Gemma 4 model
Technical implementation and code quality
Creativity and originality
Usability and user experience

Write About Gemma 4 submissions will be evaluated for:

Clarity and depth of explanation
Originality of perspective or insight
Practical value to the community
Quality of writing

Getting Started With Gemma 4 🚀

Gemma 4 is open — you have several ways to get started, including completely free options:

Gemini API via Google AI Studio: Access Gemma 4 through the Gemini API.

Run locally (free, no credit card required): Download any Gemma 4 model directly from Hugging Face or Kaggle. The E2B model runs on high-end phones — or even a Raspberry Pi 5.

OpenRouter (free tier available): Access Gemma 4 31B via OpenRouter’s free tier — no credit card required.

Important Dates

May 6: Gemma 4 Challenge begins!

May 24: Submissions due at 11:59 PM PDT

June 4: Winners Announced

We can’t wait to see what you build and write! Questions about the challenge? Drop them in the comments below.

Good luck and happy coding!



Source link

Stop Letting AI Write Your Database Migrations



The era of “just ask the LLM” has made us remarkably productive, but it has also made us dangerously comfortable. We are currently witnessing a shift where developers are offloading critical infrastructure decisions to generative models. While having an AI suggest a React component or a regex pattern is relatively low-stakes, letting it dictate your database schema transitions is playing with fire.

The problem isn’t that AI is “bad” at SQL; it’s that AI lacks context. It doesn’t know your traffic patterns, it doesn’t understand your locking mechanisms, and it certainly doesn’t care if your production environment goes dark at 3:00 AM because of a table lock that lasted ten minutes too long.

The Illusion of “It Works”

When you ask an AI to generate a migration — say, adding a non-nullable column with a default value to a table with five million rows — the code it gives you will likely be syntactically perfect. You run it in your local environment with fifty rows of seed data, and it finishes in milliseconds.

The issue arises when that same script hits a production environment.

The Before (AI-Generated Standard):

–Generated by AI: Simple, clean, and potentially catastrophic
ALTER TABLE orders ADD COLUMN status_code VARCHAR(255) NOT NULL DEFAULT ‘pending’;

Enter fullscreen mode

Exit fullscreen mode

On a massive table, this operation can trigger a full table rewrite. In PostgreSQL, for instance, versions prior to 11 would lock the entire table while writing that default value to every single row. If your application is high-traffic, your API starts throwing 504 Gateway Timeouts because every connection is waiting for that lock to release.

The After (Human-Engineered Safe Migration):

— Step 1: Add the column as nullable first (instant operation)
ALTER TABLE orders ADD COLUMN status_code VARCHAR(255);

— Step 2: Set the default for future rows
ALTER TABLE orders ALTER COLUMN status_code SET DEFAULT ‘pending’;

— Step 3: Update existing rows in small batches to avoid long-held locks
— (This would typically be handled via a background job or scripted loop)

— Step 4: Add the NOT NULL constraint after data is populated
ALTER TABLE orders ALTER COLUMN status_code SET NOT NULL;

Enter fullscreen mode

Exit fullscreen mode

When “Convenience” Costs Millions

We don’t have to look far to see where automated or poorly planned migrations caused genuine wreckage. One of the most famous examples of migration-related downtime was the 2017 GitLab outage. While that was a human error during a manual intervention, it highlights the fragility of database state.

More recently, several tech startups have reported “silent” data corruption when AI-generated migrations suggested changing column types (like INT to BIGINT) without account for how the underlying ORM would handle the transition during a rolling deployment. If your AI-written migration drops a column before the new version of your application code is fully deployed across all nodes, your “After” state is a series of 500 errors.

The Context Gap

AI models operate on patterns, not performance profiles. They don’t know:

The Lock Hierarchy: Will this ALTER TABLE block SELECT queries?
Replication Lag: Will this massive update stall your read replicas?
Deployment Strategy: Is this a blue-green deployment or a rolling restart?

A migration is not just a script; it is a bridge between two states of a living system.

Moving Forward: Use AI as a Drafter, Not an Architect

I am not suggesting we go back to the Stone Age. AI is a phenomenal tool for boilerplate. If you need to scaffold a complex set of join tables, let the AI write the initial DDL.

But the moment that code touches a migration file, the “AI” portion of the task ends. You must take over as the engineer. You need to verify the locks, check the execution plan, and most importantly, simulate the migration against a production-sized data set.

If you’re interested in seeing how I’ve handled high-performance, SEO-optimized database architectures without relying on “magic” scripts, you can check out my project documentation on my GitHub or follow my updates on LinkedIn.

The database is the heart of your application. Don’t let a probabilistic model perform open-heart surgery on it.

You can find me across the web here:



Source link