Back to blog
Build In Public

From a 773-page PDF to an online store: the Loom Genie case

How we turned a US family rug business's PDF catalog into an e-commerce store with 789 products, filters, Stripe checkout and its own admin panel.

Loom Genie store homepage on desktop, featuring pet-friendly rugs and collection navigation

TL;DR. Loom Genie is the online store of a family that has cleaned, restored and sold rugs in the United States since 1972. The vendor catalog only existed as PDF: a price sheet and a 773-page catalog. Instead of entering products one by one, we wrote scripts that read those PDFs by page coordinates and build the catalog on their own. The result: 75 collections and 789 products with photos, filters by size, room, color and material, Stripe checkout and an admin panel the family runs themselves.

Who Loom Genie is

Loom Genie is the digital storefront of Aref's Rugs, a family business in Bel Air, Maryland, serving customers since 1972. That is more than 50 years of cleaning, restoring and selling rugs. The client came to us through a referral with one clear goal: sell online without losing the feel of a family shop.

The online store has a sharp focus: rugs for pet owners. Dense, low-pile synthetic fiber, stain resistant and easy to clean with soap and water. It is a niche with a concrete pain, and the whole store is designed around it, from the homepage to the filters.

The problem: the catalog existed, but on paper

The vendor delivered everything in two files: a price sheet and a 773-page catalog with collections, colors, sizes and photos. For a physical store that works, a salesperson flips through it and answers the customer. For an e-commerce store, it is the worst possible format.

Entering everything by hand was off the table. We are talking about hundreds of products, each with several size and price combinations. Manual typing at that volume produces exactly the kind of error that hurts an online store: the price of the 8x10 showing up on the 5x8, a photo filed under the wrong collection. And the error only surfaces when a customer complains.

How we solved it: reading the PDF by coordinates

The fix was to treat the PDF as data, not as a document. We wrote scripts that open the price sheet and the catalog and extract, product by product, price, collection, size, color and photo.

The detail that made the difference: extraction uses the coordinates of each element on the page, not the running text. When you pull only the text out of a PDF table, the columns get shuffled and a price slips into the row below without anyone noticing. By looking at each block's position, the script knows that price sits at the same height as that size, so the row stays whole.

With that, the entire catalog was built with zero typing: 75 sellable collections and 789 products with photos. Human work became reviewing samples, not filling in forms. And when the vendor sends a new catalog, the same process can run again.

Collection browsing in the Loom Genie store, with the starting price of each of the 75 collections.
Each collection shows its starting price, computed from the size variations imported from the PDF.

What we built

With the catalog solved, the store itself follows what a rug buyer needs to decide from home:

  • Browsing by collection, with each collection's starting price visible up front.
  • Filters that speak the product's language: size (from 2'x3' to 12'x15'), room, need, color and material. You choose a rug by the space it will fill, not by a generic category.
  • Product pages with size variations, each with its own price, straight from the vendor's price sheet.
  • Stripe checkout, with free shipping across the US and a 30-day return policy stated before purchase.
  • Its own admin panel, so the family can update products, prices and orders without depending on us or paying for an app per feature.
  • Journal, the store's content section, to answer questions from shoppers researching before they buy.

Under the hood the stack is standard: Next.js on the front end and back end, Drizzle ORM over Postgres for catalog and orders, Stripe for payments and Vercel Blob serving images. With a large catalog, poorly served images are what make a store slow, so that got attention from day one.

Loom Genie store on a phone, showing the homepage and access to collections.
On mobile, the same collection and filter navigation, built for people who shop from their phone.

Why custom instead of an off-the-shelf platform

A platform like Shopify is the right choice for many stores, and we say so to people who reach out. At Loom Genie, three factors pushed toward custom:

  1. The import was the project. Any platform would have required the same work of turning PDF into structured data. Once that was done, loading it into our own database was the shortest path.
  2. The filters are product-specific. Size in feet, room, material and need (such as pet-friendly) are the core of navigation, not an add-on.
  3. Control without a per-feature subscription. Admin, variations and pricing rules live in the system itself, with no stack of paid apps.

For more on when a custom build beats a template, see our take on Next.js for production systems.

The takeaway

The bottleneck in an e-commerce project is rarely the store's code. It is the data. Loom Genie had a rich catalog, good photos and decades of product knowledge, all locked in PDF. Solving the import first turned a project about "entering hundreds of products" into a project about "building the right store".

The store is live at loomgenie.com, and the full case, with more images, is at projects/loom-genie.

If your catalog also lives in a PDF, a spreadsheet or an old system, and that is what is holding back online sales, get in touch. Impulse Works builds e-commerce in Next.js and solves the hard part first: getting the data into the store right.

Frequently asked questions

Can you build an e-commerce store from a PDF catalog without entering products by hand?

Yes, as long as the PDF has a reasonably consistent structure. For Loom Genie, scripts read the vendor's price sheet and 773-page catalog using the coordinates of each element on the page, and assembled 789 products with photos across 75 collections. Human work shifts to spot-checking samples, not typing.

Why parse the PDF by coordinates instead of just extracting the text?

Because plain text extraction scrambles tables: a price from one row drops into the next, a size gets separated from its color. Using each block's position on the page, the script knows that price sits at the same height as that size, so the row stays intact. In a rug catalog, where one design comes in many sizes and prices, that is the difference between a reliable catalog and one with silent errors.

When does custom e-commerce make more sense than Shopify or another platform?

A platform is the right call for a small catalog and a standard operation. Custom starts to pay off when the catalog has to be imported from a hard source, when navigation filters are specific to the product (size, room, material), or when the client wants to run the admin without paying for an app per feature. At Loom Genie, all three applied.

What technology powers the Loom Genie store?

Next.js on the front end and back end, Drizzle ORM over Postgres for the catalog and orders, Stripe for checkout and Vercel Blob for images. It is a standard stack; what set the project apart was the catalog import and modeling products with size variations.

How long does it take to launch an e-commerce store with a large catalog?

It depends less on the number of products and more on how the data arrives. With an automated import, 789 products take almost the same effort as 80. The time goes into modeling variations, reviewing catalog samples and settling checkout, shipping and return policy with the client.

ShareLinkedInXEmailWebsites for law firmsWebsites for dentistsA top clinician gained an indexable PT/EN structure to be found by patients, expats, and AI answers.

Want a 20 minute audit of where your site stands?

I run a free diagnosis: structured data, AI overview citations, and a one-page action list. No pitch deck.

Book a free diagnosis