Replatforming a cigar retailer, solo
Moving Bonita Smoke Shop from BigCommerce to WordPress and WooCommerce — the catalog, the customers, three years of order history, and the entire information architecture — without the store ever going dark.
The problem
A working store you cannot turn off
Bonita Smoke Shop had years of business running on BigCommerce — thousands of SKUs across premium, machine-made, flavored and bundled cigars, plus humidors and accessories. It worked. It was also expensive, rigid, and hard to extend in exactly the directions the business wanted to grow.
Moving to WooCommerce meant rebuilding all of it: every product and variation, every customer account, every shipping zone, every order going back three years. And doing it against a live storefront that was still taking orders the whole time.
Migrating a store is mostly not code. It is knowing what has to land before what else.
By the numbers
Where it stands
Every piece of this ran through a Notion board with status, priority levels, and weekly stakeholder review.
end to end
so far
history imported
the project
How I ran it
Sequencing was the whole job
The technical work was the easy part. The hard part was ordering it so nothing broke in production and nobody downstream got surprised.
Get the data across first
Products, variations and pricing, synced brand by brand and category by category. Then customer records and user accounts. Then shipping zones — because orders cannot import correctly until the zones they reference exist. Then three separate bulk order imports for 2024, 2025 and 2026.
Rebuild the way people find things
A catalog this size lives or dies on navigation. I built a mega menu that cuts the same products by brand, category, strength, origin and shape, with responsive aside menus for the long lists — then walked every link in it by hand to make sure the mobile menu matched the desktop one exactly.
Satisfy the parts nobody sees
Cookie-backed age verification on entry. An accessibility widget. A hardened login URL and a review of DDoS exposure. And QuickBooks Enterprise integration verified in person with the shop accounting support team — before anyone went near a DNS record.
Wire up everything that talks to it
USPS and UPS shipping APIs, Omnisend for email, Google Analytics, and a customer account portal showing orders, invoices and wishlist. Plus a password-reset campaign staged for cutover day, so every migrated customer can actually get back into the account they already had.
Fill it with content
Storefront video shot and cut in CapCut, category imagery, gift-certificate and seasonal landing pages, and banners on a rolling schedule.
Scope
What was actually in it
Data
- Catalog & variations
- Pricing
- Customer records
- User accounts
- 2024–2026 orders
- Shipping zones
Build
- Mega-menu IA
- Responsive side menus
- Customer account portal
- Wishlist
- Category archives
- Landing page templates
Compliance & security
- Age verification
- Accessibility widget
- Hardened login URL
- DDoS review
- Shipping policy by location
Integrations
- QuickBooks Enterprise
- USPS & UPS APIs
- Omnisend
- Google Analytics
- Python price monitor
The build
What it looks like
A few pieces of the WooCommerce storefront. The mega menu is the one I would point at — that structure is the difference between a catalog this size being shoppable and being a search box.





The side quest
The price monitor
Partway through, a related problem surfaced: nobody actually knew, day to day, where our pricing sat against the competition. So I built a small Flask app that scrapes three retailers on demand — Bonita Smoke Shop, Neptune Cigar and Cigars International — and lines their prices up side by side behind an authenticated login.
It is deliberately small: no scheduler, no price history, just a fast answer when a buyer is deciding what to charge. SQLAlchemy models and Alembic migrations sit behind it, and the scrapers each handle a different site structure — product IDs, full URLs or plain product names.

What I would take from it
The part that transfers
I came into this having overseen e-commerce migrations for agency clients at Coalition Technologies — watching other people replatform, well or badly. Running one myself, on a business I am accountable to every day, was a different education entirely.
The lesson that stuck: the failure modes in a migration are almost never technical. They are a shipping zone that was not there when the orders imported, an accounting system nobody checked, a thousand customers who cannot log in on launch morning. Tracking the work honestly — including the parts that are not done — is what keeps those from happening.
Want the short version? ✨
Or come see the rest of what I have been building.
Get in touch← All projects