Our Tech Stack
hb.js, Prebid.js v11.4.0, GPT, Google Ad Manager, AdX dynamic allocation, Bunny edge ingest, and a Node.js real-time server — every layer of the Advlume stack explained.
Advlume is built on a stack of well-proven open-source components combined with purpose-built infrastructure for edge-first ad delivery. This page documents every layer so you know exactly what's running on your pages and why.
Client-side wrapper (hb.js)
The browser-side code is a TypeScript application compiled to a single minified file and served from Bunny CDN:
| File | Size | Purpose |
|---|---|---|
hb.js | ~74 KB | Core wrapper — slot discovery, Prebid orchestration, GAM integration, lazy loading, smart refresh, real-time ingest |
prebid.js | ~311 KB | Prebid.js v11.4.0 — built with only the adapters active on your account |
hb-video.js | ~10 KB | Video extension — loaded on-demand only on pages with outstream or instream slots |
All three files are served from cdn.advlume.com (Bunny CDN) with long-lived cache headers. The Prebid bundle is rebuilt when adapters are added or removed; a cache-buster query string is appended automatically so publishers don't need to change their script tag.
Prebid.js
Prebid.js is the industry-standard open-source header bidding library maintained by Prebid.org with contributions from hundreds of ad-tech companies. Advlume runs version 11.4.0 with a custom build that includes:
- Only the bidder adapters enabled for your account (13 active at launch)
- The
priceFloorsmodule for floor enforcement - User ID modules for identity resolution (see User ID Modules)
- The
consentManagementmodule for GDPR/CCPA compliance
Google Publisher Tags (GPT)
GPT is Google's ad slot library, loaded from securepubads.g.doubleclick.net. Advlume's wrapper initialises GPT in disableInitialLoad + singleRequest mode — slots are defined but not fetched until Prebid has finished its auction. This ensures GAM always receives Prebid's price key-values before making its own auction decision.
Kueez RTB
Kueez is loaded as a separate script alongside Prebid, providing an additional real-time bidding layer particularly strong on certain traffic segments. It runs independently of the Prebid auction and adds incremental fill.
Site configuration (edge cache)
When you create or update an ad unit in the Advlume dashboard, the backend immediately publishes a JSON config file to Bunny CDN at:
https://cdn.advlume.com/configs/{your-site-uuid}.json
This file contains your slot keys, size sets, active bidder configs, GAM network code, and block rules. The wrapper fetches it on every page load (CDN-cached, typically sub-10ms). If the CDN returns a miss, the wrapper falls back to the live API at advlume.com/api/v1/sites/{uuid}/config — so config changes are never dependent on a cache purge.
Ad serving infrastructure
Google Ad Manager
Advlume uses Google Ad Manager (GAM 360) as the primary ad server. Every site that joins Advlume gets:
- A dedicated ad unit hierarchy in GAM (
/NETWORK_CODE/domain.com/slot-key) - Price-priority line items at every CPM granularity tier ($0.01 increments up to $20, $0.50 increments above)
- An Ad Exchange (AdX) line item per domain for dynamic allocation backfill
- A
webPropertyCodelinking the domain to the AdX publisher account for revenue attribution
All GAM objects are created and maintained automatically via the GAM API when you add a site or change ad units — no manual GAM work is required.
Google Ad Exchange (AdX)
AdX operates via GAM's dynamic allocation: it gets a real-time look at every impression and competes directly against Prebid's winning bid. AdX is provisioned with a dedicated web property code per publisher account, ensuring revenue is attributed correctly in Google reporting.
Edge bid ingest
Every bid event (win, viewable, no-bid) is captured client-side and sent to Advlume's edge ingest endpoint in real time. The ingest layer runs on Bunny DB — a globally-distributed libSQL database deployed at the CDN edge — so write latency is typically under 5ms regardless of where your visitors are located.
A background sync job aggregates the raw edge data into the MySQL reporting tables every 30 minutes, producing the daily and hourly breakdowns you see in the reporting UI.
Real-time server
Live visitor counts and bid events on the dashboard are powered by a Node.js v20 / Socket.IO v4.8 server running under PM2. The server:
- Authenticates dashboard clients via signed JWT tokens issued by the Laravel backend
- Scopes event delivery per publisher — each user only sees events from their own sites
- Emits
stats:update(visitor counts per site),events:history(last N events on connect), andevent:new(live stream) to authorised clients
Backend platform
The Advlume management platform is a Laravel application running on PHP 8.3:
- Laravel — routing, authentication, Eloquent ORM, scheduled jobs, queue workers
- MySQL — publisher and site data, aggregated reporting tables, ad unit definitions
- Bunny CDN — static asset delivery (hb.js, prebid.js, site configs)
- Bunny DB (libSQL) — edge-local bid ingest, replicated globally
- Google Ad Manager API (SOAP v202602) — automated provisioning of ad units and line items
Privacy & consent
The wrapper includes Prebid's consentManagement module, which reads the IAB TCF 2.x consent string from the page's CMP before dispatching bid requests. Bidders that require consent receive the full TC string; Prebid's allowAuctionWithoutConsent config controls whether the auction proceeds on a consent failure.
See Consent Management (CMP) for integration details.
Supply chain transparency
Advlume participates in IAB's sellers.json and SupplyChain (schain) standards. Every bid request includes a complete, accurate schain object so buyers can verify the path from publisher to exchange. See Supply Chain Transparency for details.
Last updated 2 months ago