The task
The @mawrolly channel makes edits of Gravity Falls, Phineas and Ferb, Star vs. the Forces of Evil and anime. At the start: 260.6 thousand followers and 22.1 million likes. The money comes from advertising tracks and videos, selling After Effects projects and editing on commission. But there was no address of his own online: an advertiser wrote in DMs and did not know the prices, a project buyer came from a video and waited for a live reply, sometimes until morning.
The channel is run by my son, so we wrote the brief for ourselves: a storefront site with an ad order form, a store with payment and file delivery without a seller, two language versions. And along the way, test on ourselves the full cycle of an online store for digital goods with no database of our own and no recurring costs.
A separate pain for buyers: a project from a newer After Effects does not open in an older version, and there are no refunds. So every card had to show the minimum version, and next to it there had to be a way to downgrade the file.
Why, and what the idea was
Three people, three problems. The advertiser picks a channel and an ad type, the price fills in by itself (a track ad on mawrolly from $50, on partner channels from $35), the request flies to Telegram. The buyer puts a project in the cart, pays in crypto and gets a link right after network confirmation. The owner of an old After Effects sees the version on the card and downgrades the file in a converter that runs entirely in the browser.
The store’s main argument was settled by a “council” of five AI advisors: warnings about plugins and versions must come before the purchase but must not hide the product. The answer: the warning and the purchase became one step, an “I understand the terms” checkbox right above the pay button. The height of the mobile store page dropped from 5,421 to 2,946 pixels.
The same council killed the underwater fish theme when dozens of CSS fixes were not saving the header. Background images were chosen by measurement, not by eye: title contrast by the pixels of the letters themselves, the match of the edge between two frames (final score 0.43 out of 255).
How it went
| When | What happened |
|---|---|
| Stage 1 | A reference in the Jinx/Arcane style. Versions v1-v4 drifted into a pirate theme, then into a corporate look, and were pulled back to the rule: structure from the reference, theme from the channel’s real content. The palette was sampled from the pixels of the banner and avatar |
| Next days | Underwater theme: header above the water, middle and bottom below it. Many rounds of fixes to the seam between zones, a margin-collapsing bug caught |
| 9 days later | The council killed the “fish” theme. The header replaced with one frame with a built-in waterline. Domain bought, the site on mawrolly.com, ad prices approved |
| Next day | A store with 3 items, the “M made of film strip” logo, security headers, robots and sitemap, GA4 and Clarity |
| A week later | Our own version converter instead of a third-party one, cart, NOWPayments crypto checkout, automatic file delivery |
| Two days later | A test purchase with real money went through the whole chain. Terms rewritten, three clauses of which were untrue. Council: the server builds the order number, the order is written as a snapshot of the deal, Telegram notifications, a limit on invoice creation |
| A day later | Chat assistant on Claude Haiku 4.5 in production |
| Three weeks later | A new hand-drawn logo through a CSS mask, promo codes, a sale with automatic expiry. Then an open-ended -50% sale and a free project with separate delivery without payment |
| Next month | A fourth channel on the home page, a community block, funnel event tracking in GA, the follower counter automatic again. Security check, a spending cap on chat, CSP without unsafe-inline |
Tools and method
The site is built from static HTML pages and Node.js serverless functions on Vercel, with no database of our own. Domain and DNS on Cloudflare, proxy off so Vercel can issue the certificate. Backgrounds and the logo were generated in Nano Banana Pro, fonts Russo One and Rubik. Images and icons were measured with Python scripts using PIL.
Payment: NOWPayments, the invoice is created by /api/checkout. Prices and discounts are calculated by the server from its own catalogue, not by the browser. The payment notification is verified by HMAC signature, without one the response is 401. The network fee is paid by the buyer.
File delivery: project archives sit in private Vercel Blob storage. The right to download is baked into the link itself: product id, order number, a 72-hour expiry and a signature. The server recalculates the signature, so no order database is needed for delivery. A Telegram bot tells the owner about every payment, underpayment and failed order write.
Chat: Claude Haiku 4.5 through the Anthropic API, a cached system prompt, the tools create_lead and check_ae_version. All numbers (version comparison, item counts, the price range) are computed by plain code, the model only relays them. Cap: 200 answers a day per site and 30 per person, so no more than about $15 a month.
Security: CSP with no inline scripts (14 inline blocks moved into files), HSTS, X-Frame-Options DENY, rate limits on payment, free delivery, promo codes, chat and order status. All keys only in Vercel environment variables. Analytics: GA4 with funnel events, Microsoft Clarity for heatmaps, Search Console. About 7,200 lines of code in total across pages, functions and store scripts.
Result
Home page: a full-screen header with an island and ships, the water runs down under the whole site. Channel counters, a “My channels” block for four accounts, three featured projects, community (Discord and Telegram), an ad order form. Two languages, the choice shared across all pages. The follower counter reads public TikTok profile pages with a 6-hour cache and shows hard-coded figures if that fails.
Store: 23 items, 21 edits, 1 color grading pack, 1 free project. Every card has a preview video, the After Effects version, a list of paid plugins without which effects open as missing. A product page with Product markup for search; the color grading pack has a gallery, one frame for each of 9 presets. A cart with one checkbox for all items, crypto payment, a fallback path through Telegram, and after payment the page polls the status itself and shows download buttons.
What we checked. End-to-end purchase: an invoice for $10, 10.147 USDT arrived on the BSC network, the notification passed the signature check, the file was delivered, the link returns a real .aep. Swapping the product id in the link gives “Link invalid”. Tampering attempts on production: we sent a price of $0.01, the server set its own $15; a promo code with a planted 99 percent gave an honest -10%; a paid item through free delivery got 403; a notification without a signature 401; a direct address of the file in storage 403. Converter: we built an artificial “AE 2026 project” from a real one and ran it back down, the result matched the original byte for byte, all 6,686,589 bytes. Chat: system prompt and tools 7,558 tokens, a run of 7 questions cost 1.76 cents.
Traffic over two months: 1,215 views, 331 users. In one week: 171 views (+40% on the previous week), 15 add-to-carts, 5 checkouts started, 4 free downloads and 0 payments. Five people reached the invoice and nobody paid: the only payment method right now is crypto. The next step is already decided, LiqPay for cards. What we do not know yet: whether a file opens in a live After Effects after the converter. The bytes match, the check in the application is up to the channel’s author.
Mistakes and what we took from them





