Overview
“AI за всеки” (“AI for Everyone”) is a Bulgarian online store for a book that teaches people with no technical background to use artificial intelligence in their daily life and work. We built the entire system behind the store — from the ad landing pages and the checkout to creating waybills, tracking shipments and sending the bonus materials after delivery. The goal was for a small team to process orders with almost no manual work, with every step of the customer journey happening automatically and on time.
The challenge
Selling a physical product in Bulgaria involves a lot of repetitive manual work. Every order has to be confirmed by phone, a waybill has to be created with Econt (a Bulgarian courier), the customer has to be notified when it ships, the parcel has to be followed until delivery, and then the bonus materials for the purchased package have to be sent. With more orders per day this process becomes slow and error-prone: forgotten emails, duplicate messages, or customers told their parcel is “on the way” while it is still sitting in the warehouse.
There were more requirements:
- the site had to sell to cold traffic from Meta ads;
- it had to measure which campaigns bring orders;
- customers who abandon checkout halfway must not be lost;
- everything had to run with minimal infrastructure costs.
The solution
1. A site that sells
The frontend is built with React 19 and Vite. It has two separate pages:
- a main sales page for visitors who already know the product;
- a cold-traffic page whose headline continues the message of the ad.
This way the two flows are measured separately and don’t interfere with each other.
To make the product feel tangible, we built an interactive 3D book that opens on click and turns its pages like a real one. The pages are generated from the book’s PDF with a custom pdf.js script, so the full book never reaches the browser. We also added an animated WebGL background, a demo of AI answering questions in real time, a stock counter and a timer for the limited offer.
The order form includes real-time selection of an Econt office. City search works in both Cyrillic and Latin, so “sofia”, “sof” and “соф” all find Sofia.
2. A secure serverless backend
The backend consists of Netlify serverless functions, with data stored in Netlify Blobs. On every order:
- prices are determined only on the server, so they can’t be changed from the browser;
- all fields are validated again on the server;
- bots are detected by a honeypot field and unnaturally fast form filling, but receive a normal response so they don’t know they are blocked;
- the customer receives a branded confirmation email via Resend;
- the owner gets an instant notification on their phone.
The Econt credentials are hidden behind a proxy function and never reach the browser.
3. Operations automation — the heart of the project
The business’s back office is a Google Sheets spreadsheet driven by Google Apps Script. The process:
- 1New order. It lands in the spreadsheet automatically with date, customer, address, package, amount and traffic source.
- 2Confirmation. A team member calls the customer and marks the order “Confirmed”. The system immediately creates an Econt waybill and writes it into the order row.
- 3Shipping. Every 30 minutes a script checks the status of every shipment in Econt. The “your parcel is on the way” email goes out only once the courier has actually scanned the parcel — not when the label is created. So the customer never gets false information.
- 4Delivery. When Econt reports the delivery, the customer automatically receives the bonus materials for their package: a document, prompt templates or access to the AI assistant. The status in the spreadsheet updates itself.
- 5Duplicate protection. Every sent email is marked in a separate column, so nothing is ever sent twice. Cancelled and returned orders are skipped.
The team can still step in manually: changing a status or entering a waybill triggers the same logic. The script finds columns by header rather than by position, so the spreadsheet can be rearranged without breaking anything.
4. Marketing automation
- Abandoned carts. When a visitor leaves the checkout page, the entered data is saved with
sendBeacon, even if the form is incomplete. The record goes to a separate tab in the spreadsheet. If the customer buys later, they are marked as purchased and drop off the list. For the rest, an email draft is created for the team to review and send. - Free lead magnet. Visitors who aren’t ready to buy yet can leave their email to get a free PDF. This way the business builds its own audience that doesn’t depend on the ad account.
- Campaign tracking. Every order carries information about which ad it came from. The Meta Pixel loads only after cookie consent (GDPR), and extra events measure how far visitors scroll and how many of them reach the price.
- Bulk emails. A script sends updates to all customers, automatically choosing the right email variant for the purchased package. There is a dry-run mode that only shows who would receive what.
5. Automated Instagram content
We built a separate process for social media that also runs on its own:
- 1Every Sunday a scheduled function triggers GitHub Actions, where AI generates a weekly batch of posts.
- 2The owner gets an email with “Approve” and “Reject” buttons for each post. The links are protected with an HMAC signature.
- 3Approved posts get free publishing slots in the order they were approved.
- 4Another function tracks Bulgarian time, including the daylight-saving switch, and publishes exactly at the scheduled hour.
The process is protected against double publishing.
6. AI features
- Prompt assistant (Gemini). The user describes a task in plain words and gets a ready-to-use prompt in Bulgarian. Free attempts are limited by IP address on the server, so they can’t be bypassed by reloading. The system picks an available model on its own when Google retires an old one.
- Error monitoring. Browser errors are grouped and counted, and the owner gets a summary email with an AI-generated, plain-Bulgarian explanation of what went wrong.
7. Store Kit — from a project to a product
To make the system reusable, we created a generator. From a single config file it builds a new branded store for another client: website, serverless functions, Apps Script automations, branded emails and a setup guide. The marketing copy is generated with the Claude API from just the product name. The generator deliberately does not create fake customer testimonials.
Interesting technical decisions
- GitHub schedules are unreliable. Cron jobs in GitHub Actions are often delayed by hours, so we trigger them from Netlify scheduled functions, which run on time.
- Netlify cron doesn’t know about time zones. The function runs at both UTC moments that match the desired Sofia time in summer and in winter. A check in the code skips one of them each day.
- Econt is the source of truth. Customer emails depend on real courier scans, not on manual checkmarks.
- Deployment. A custom esbuild script bundles each function on its own and assembles a ready-to-deploy folder for Netlify.
Results
- Processing an order comes down to one phone call and one checkbox. Everything else — waybill, tracking, emails and bonuses — happens automatically.
- Customers get timely, accurate information at every step, with no duplicate or wrong messages.
- No customer who left their details is lost: abandoned carts and lead-magnet subscribers land in the spreadsheet.
- The infrastructure runs on a serverless platform at almost no cost.
- The system is now a template that generates stores for new clients.
Lessons
The project showed that the biggest value of automation isn’t speed but reliability. The system does every step exactly once and at the right moment — unlike a person on an overloaded day. The most important decisions were business decisions turned into code: an email goes out only when the parcel has really left, and the free lead magnet sits below the offer, not above it.


