← → arrows · space · home/end · F fullscreen

Fully Booked's product catalog is currently maintained by manual entry.

This project ingests ONIX — the international standard for book metadata — from all six trade publishers Fully Booked sources from, parses each feed, merges it into a single Azure-resident catalog database, and serves it to every downstream system that needs it: the public website (direct TLS reads), in-store POS, the on-prem inventory management system, and any future ERP, analytics, or partner integration (via scheduled snapshots).

The catalog is the system of record. The website reads it over a managed TLS connection with Entra ID identity; other systems consume scheduled file snapshots — so the schema or compute tier can evolve without breaking external integrations.

Philippines'
Fastest-Growing
Bookstore

Founded by Jaime Daez in 1997, Fully Booked opened its first Rockwell branch in 2003. What started as distributing a single architecture magazine grew into the Philippines' premier bookstore chain — selling 100,000+ titles, stationery, vinyl records, and collectibles.

1997
Founded
49+
Branches (2025)
100k+
Titles
#1
PH Bookstore
THE CHALLENGE

Why change how the catalog works?

01

Manual Catalog Entry

Every book title is entered by hand — slow, error-prone, and unscalable across 100,000+ titles.

02

Fragmented Publisher Feeds

6 publishers (Ingram, PRH, HarperCollins, Hachette, S&S, Macmillan) send separate ONIX files with no unified intake.

03

Legacy On-Prem SQL Server

The catalog depends on an aging Windows host + MS SQL Server on-prem — costly, brittle, and a bottleneck for the website.

04

E-commerce Scaling Pressure

fullybookedonline.com has grown rapidly since 2021. The catalog backend must match the pace of online demand.

FULLY BOOKED
WHAT IS ONIX?

ONIX for Books

ONIX (Online Information eXchange) is the global XML standard maintained by EDItEUR for communicating rich book metadata — titles, contributors, prices, subjects, cover images — between publishers, distributors, and retailers. Every major publisher worldwide uses it.
ONIX DATA FIELDS
ISBN-13
Title / Subtitle
Author(s)
Publisher
Description
Cover Image
Price
Subjects / Genres
Availability

PUBLISHER FEEDS

  • Ingram CoreSource / iPage
  • Penguin Random House
  • HarperCollins
  • Hachette
  • Simon & Schuster
  • Macmillan
FULLY BOOKED
THE SOLUTION

Azure-DB Variant

Cloud-managed catalog database — the entire pipeline runs on Azure. fullybookedonline.com reads directly from a managed Azure Database for PostgreSQL Flexible Server. On-prem footprint shrinks to the existing FTP server + one small Storage Mover agent VM.
CATALOG + READ
CLOUD (NEW)
  • Azure Database for PostgreSQL — Flexible Server (B1ms)
  • products / prices / media / audit
  • fullybookedonline.com reads via TLS + Entra ID
AZURE PIPELINE
CLOUD (NEW)
  • Storage Mover agent VM (on-prem, new)
  • Raw Archive — Blob (versioned)
  • Parser Function (Flex Consumption)
  • Merge Function (Flex Consumption)
SOURCE TIER
ON-PREM (EXISTING)
  • 6 publishers push ONIX via SFTP / FTPS
  • Managed FTP Server (existing)
  • Per-publisher incoming/ folders
Key change vs. original: Catalog DB moves to Azure. On-prem MS SQL Server and Windows host can be retired.
FULLY BOOKED
DATA FLOW

How data moves from publisher to consumer

Publishers

6 ONIX sources
Ingram · PRH · HC
Hachette · S&S
Macmillan

SFTP / FTPS

On-Prem FTP

Existing managed FTP server, per-publisher /incoming folders.

Storage Mover (hourly)
AZURE · SOUTHEAST ASIA
Blob raw
onix-raw/
Parser Function
XML → NDJSON
Blob processed
onix-processed/
Merge Function
COPY + MERGE
Event Grid
Event Grid
PostgreSQL · Catalog DB
Azure Database for PostgreSQL Flexible Server (B1ms) · TLS-required · Entra ID
TLS / scheduled exports

Consumers

  • Website
  • Inventory
  • Point of Sale
  • ERP / Analytics
01

Ingest

Publisher pushes ONIX 3.0 XML to the on-prem managed FTP server. Azure Storage Mover replicates each incoming/ folder to onix-raw hourly.

02

Parse

Blob arrival fires a BlobCreated Event Grid event → the Parser Function writes 5 NDJSON files (products, contributors, prices, subjects, media) to onix-processed.

03

Merge

A second Event Grid subscription triggers the Merge Function on each NDJSON. It bulk-loads via COPY into staging and runs an idempotent MERGE (ISBN-13 keyed) into the catalog DB.

04

Serve

fullybookedonline.com and other consumers read the catalog over TLS — directly from PostgreSQL (Entra ID managed identity) or from scheduled per-format snapshots in Blob.

FULLY BOOKED
THE UPDATED SETUP
One hub. Every channel served.
All essential product information is processed in Azure — ingest, parse, merge, serve. Reduces manual operations and matches online demand.
FULLY BOOKED

System Components

FULLY BOOKED

Managed FTP Server

ON-PREM · EXISTING

Already in production at Fully Booked. Operated by client IT. Accepts ONIX pushes from all 6 publishers into per-publisher landing folders. Zero new cost from this project.

Storage Mover Uplink

ON-PREM · NEW VM

Azure-provided agent runs on a small Linux VM. Mounts each publisher's incoming/ folder via SMB (read-only) and replicates new files to the Azure raw archive hourly. Change-detection skips already-transferred files.

Raw Archive

AZURE · BLOB STORAGE

Versioned, encrypted archive of every original ONIX file. Lifecycle policy tiers data Hot → Cool → Archive and expires at 1 year for replay.

Parser Function

AZURE · SERVERLESS

Reads each new ONIX 3.0 XML file and emits 5 normalized entity files: products, contributors, prices, subjects, media. Stateless, on-demand — no servers to keep running.

Merge Function

AZURE · SERVERLESS

Bulk-loads each entity file into staging, then runs an idempotent MERGE into the catalog database. Per-field source-priority rules resolve conflicts between publishers. Tunable by config, no code deploy.

Catalog Database

AZURE · POSTGRESQL

Cloud-managed Azure Database for PostgreSQL — Flexible Server (B1ms). Holds products, contributors, prices, subjects, media, plus an audit log. Encrypted at rest (Key Vault CMK), daily automated backups, point-in-time recovery, TLS-only connections.

MONTHLY COST ESTIMATE
~$28
per month, all-in (Azure)
Southeast Asia — Singapore
BREAKDOWN
Catalog DB (PostgreSQL Flexible Server B1ms, 32 GB)~$23
Azure Monitor, Logs, Alerts, Data Transfer~$3
Blob Storage — raw + processed~$1
Event Grid + Key Vault (keys + secrets)~$1
Parser & Merge Functions (Flex Consumption)<$1
Storage Mover Uplink (~2–5 GB)$0
Total~$28
SE Asia list prices, June 2026. On-prem: Storage Mover agent VM negligible (existing hypervisor). Managed FTP server already in production — no new cost.
ONIX CATALOG INGESTION PROJECT

Comparison

Dimension Azure Version On-Prem Version
Project Cost₱1,655,808.00₱1,552,320.00
Project Cost (Year 1) MIN₱1,672,608.00₱1,770,720.00
Project Cost (Year 1) MAX₱1,673,952.00₱2,487,520.00
Recurring monthly cost~$28 / month (Azure SE Asia)$0
Annualised cloud spend~$336 / year$0
One-time infrastructure~$500 (Terraform / IAM setup)~$3,500–$12,800+ (VM + Windows Server + MS SQL + VMware licences; $0 if reusing existing kit)
Data sovereigntyData resides in Azure Southeast AsiaAll data on customer-owned hardware
Backup & monitoringAzure managed (Flexible Server backup, Log Analytics, Alerts)Customer's existing IT processes
Resilience to host outageAzure absorbs publisher delivery; buffers catch upManaged FTP server incoming/ buffers catch up
Operational complexityTwo stacks to debug (Azure + on-prem)One host stack — Windows / Python / SQL
TCO in 3 years (MIN)₱568,944.00₱590,240.00
TCO in 3 years (MAX)₱570,288.00₱756,373.33
TCO in 5 years (MIN)₱331,193.60₱354,144.00
TCO in 5 years (MAX)₱334,790.40₱510,720.00
ONIX CATALOG INGESTION PROJECT

Technical summary

Objective
Replace manual product-catalog entry with automated ONIX ingestion. Titles, contributors, prices, covers, and subjects flow directly from publishers / distributors — eliminating re-keying, improving data quality, and unlocking faceted search and richer product pages.
Publishers in scope (v1)
Ingram CoreSource / iPage · Penguin Random House · HarperCollins · Hachette · Simon & Schuster · Macmillan (6 sources).
Architecture shape
3-tier: (1) Source tier — Azure Storage Mover agent VM (on-prem) replicates publisher ONIX XML from the managed FTP server's incoming/ folders to the Azure raw blob archive. (2) Cloud pipeline — Event Grid triggers a Parser Function that converts ONIX XML to NDJSON in Blob Storage; a Merge Function then bulk-loads via COPY + MERGE. (3) Catalog DB — Azure Database for PostgreSQL Flexible Server (B1ms).
Key design rationale
On-prem MS SQL is a single point of failure — Azure absorbs that risk. With the catalog database moved to Azure, the on-prem footprint shrinks to the existing managed FTP server plus a small Storage Mover agent VM: no Python, no XML libraries, no Windows catalog host to maintain.
Azure region
southeastasia (Singapore) — closest to the Philippines.
Estimated Azure run cost
~USD $28 / month at v1 volumes (<5 GB/month traffic across 6 publishers), SE Asia list prices as of June 2026. On-prem incremental cost is negligible — reuses existing managed FTP server, hypervisor, and Windows catalog host.
Out of scope (v1)
Local PH publishers without ONIX; FTP server operations (owned by client IT); Nielsen BookData / Bowker paid subscriptions.
Included
2-week onboarding and training including Azure. Creation of operating manual and runbook.
PHASED DELIVERY

4 + 10 weeks delivery plan

4 weeks (Discovery and Design) + 10 weeks (Development and Deployment) | Target start: 1st week of June 2026
01
Weeks 1–4

Discovery + Design

  • Assessment of current workflow and systems
  • Design, evaluation, preparation
02
Week 5

Infrastructure

  • Azure infra as code (Terraform azurerm)
  • Storage Mover agent VM
  • Catalog DB online
03
Weeks 6–7

Parser + Schema

  • Ingram parser built
  • DB schema defined
  • End-to-end smoke test
04
Weeks 8–9

Site Cutover

  • fullybookedonline.com cutover
  • Reads from Azure catalog
  • Manual entry retired
05
Weeks 10–11

All Publishers

  • 5 remaining publishers
  • Multi-source merge
  • Priority rules live
06
Weeks 12–14

On-Prem Retire

  • MS SQL ONIX tables retired
  • Windows host off
  • On-prem = FTP + VM only
RISKS & MITIGATIONS

Catalog DB single-zone outage

LOW

v1 single-zone (~$23/mo). Upgrade to Zone-redundant HA is a portal toggle → ~$47/mo with hot failover.

App-to-DB connection exposure

MED

DB reachable only from merge Function + website egress. TLS enforced at require_secure_transport=on. Read/write credentials separated; Entra ID managed identity for the Function.

Storage Mover agent VM down

LOW

Files accumulate on FTP server. On recovery, next hourly job transfers everything pending. No data loss.

Publisher sends malformed ONIX

LOW

Event Grid retries with exponential backoff then dead-letters to a blob container; alert rule pages ops. No partial corruption reaches the merger.

Source-of-record conflicts

MED

Source-priority config on merger. Direct publisher overrides Ingram. Tunable by config update — no code deploy needed.

Large initial backfill

LOW

Documented playbook: temporarily resize DB one tier up (B2s), run backfill, resize back down to B1ms. ~5-minute managed operation.

FULLY BOOKED

Let's build the future
of Fully Booked's catalog.

~$28/month · 4 + 10-week delivery · Fully Azure-managed · Zero on-prem app logic
FULLY BOOKED
NEXT STEPS · OPEN ARCHITECTURE

Beyond launch — a catalog every future system plugs into.

A hub, not a silo · standards-based · event-driven · identity-aware
01

Standards, not lock-in

Ingestion speaks ONIX 3.0 — the global publisher feed standard. Onboarding the next publisher is a config change, not new code or a new contract.

02

PostgreSQL at the core

Plain SQL. Any BI tool, ERP, mobile backend, or AI/ML pipeline reads the catalog directly — no proprietary connector, no middleware tax.

03

Event-driven by default

Every ingestion publishes to Event Grid. Search re-index, Slack alerts, recommendation engines, POS sync — each is a new subscriber, not a rebuild.

04

Infrastructure as code

Terraform end to end. Audit it, migrate regions, or hand it to another team in a day. No black box, no lock-in to us.

05

Identity-aware from day one

Entra ID + managed identities throughout. Future apps inherit the same SSO and authz model — no bolt-on auth later.

06

Ready for what comes next

SAP catalog sync, mobile commerce, marketplace feeds, AI-driven merchandising — each is one more consumer of the same hub. No re-platform.

FULLY BOOKED
DECISIONS NEEDED

Stakeholder confirmations required before Phase 1 begins

01

Confirm Azure subscription to use (existing or net-new), billing owner, and resource group naming convention.

06

Confirm DBA ownership of catalog database credentials and quarterly rotation approvals.

02

Confirm hypervisor capacity for the Storage Mover agent VM (small Linux; SMB to FTP server, outbound 443 to Azure).

07

Confirm: single-zone Flexible Server for v1 (~$23/mo) or Zone-redundant HA from day one (~$47/mo)?

03

Confirm managed FTP server can expose each publisher's incoming/ folder via SMB to a service account.

08

Confirm cutover plan: start fresh from ONIX backfills, one-shot migration, or dual-write window?

04

Confirm which publishers to onboard first beyond Ingram.

09

Confirm: public-endpoint + firewall allow-list + TLS acceptable for v1, or add Private Endpoint from day one (+$8/mo)?

05

Confirm the website's egress IP / network range for the PostgreSQL firewall allow-list.

10

Confirm v1 scope: international titles only, or include manual-entry fallback for local PH publishers?