Aurora DTC
Black Friday invoicing at 2,400 per second.
DTC e-commerce · $20M ARR · 18 engineers
The build
Peak-season invoice pipeline for a DTC brand. Moved from Puppeteer-on-Lambda (capped at 300 req/s) to SnapPDF Pro (absorbed 2,400 req/s peak).
Stack
- · Next.js
- · Stripe
- · Shopify
- · AWS Lambda
- · SnapPDF Pro
Architecture
Ops used: /fill-form → /merge → /compress
How they use SnapPDF
Aurora DTC sells premium home goods. Black Friday 2024 nearly broke them: 180k orders in four hours, and the invoice generation pipeline (Puppeteer on Lambda) topped out around 300 req/s before Lambda concurrency limits started throttling. 11% of orders got delayed invoice emails. The support team took a week to work through the complaints.
For 2025, they wanted headroom. Custom Puppeteer scaling required a full rearchitecture — stateful containers, warm-pool management, cold-start mitigation. Estimate: 8 engineering weeks.
Alternative: SnapPDF Pro. Migration took 11 days. The peak-hour architecture: SQS queue → Lambda consumer → SnapPDF (fill-form + merge + compress) → SendGrid. On Black Friday 2025, SnapPDF absorbed 2,400 req/s for a 23-minute peak without any throttle errors.
The numbers that matter: 99.99% of invoices delivered within 30 seconds of order confirmation (up from 89.3% the prior year). Zero support tickets about delayed invoices during the Black Friday window. Total cost for the peak: one-month Pro plan ($79) plus the overage (settled at $310 — they exceeded their 50k ops budget for that one burst).
Aurora's head of engineering summarized it in a company all-hands: "We spent 11 days migrating and saved 8 weeks of custom infra work. The ROI wasn't the SaaS bill — it was the two sprints we got back."
Outcomes
Integration pattern
A simplified excerpt showing the core SnapPDF calls.
// apps/aurora-billing/src/lambdas/issue-invoice.ts
import { SnapPDF } from '@snappdf/sdk';
import { SQSEvent } from 'aws-lambda';
const snap = new SnapPDF({ apiKey: process.env.SNAPPDF_KEY! });
export async function handler(event: SQSEvent) {
await Promise.all(event.Records.map(async (record) => {
const order = JSON.parse(record.body) as ShopifyOrder;
const { pdf: filled } = await snap.pdf.fillForm({
file: INVOICE_TEMPLATE,
values: {
order_number: order.name,
customer_name: order.customer.first_name + ' ' + order.customer.last_name,
line_items: order.line_items.map(li => `${li.quantity}× ${li.title} — ${li.price}`).join('\n'),
subtotal: order.subtotal_price,
tax: order.total_tax,
total: order.total_price,
order_date: order.created_at,
},
flatten: true,
});
const { pdf: merged } = await snap.pdf.merge({
files: [filled, TERMS_PDF_URL, RETURN_POLICY_URL],
});
const { pdf: small } = await snap.pdf.compress({
file: merged, level: 'high', stripMetadata: true,
});
await sendgrid.send({
to: order.customer.email,
from: 'orders@aurora-dtc.example',
subject: `Thanks for your order — ${order.name}`,
attachments: [{ content: small.toString('base64'), filename: `${order.name}.pdf`, type: 'application/pdf' }],
});
}));
}Start building like this
Free tier gives you 100 ops/month — enough to prototype any of the flows on this page. No card required.