NDWS Nutrition Storefront Technical Assessment
FINDINGS
VERIFIED
2026
Storefront Technical Assessment

Your store is hand-coded.
Every bug is yours to own.

An independent review of the NDWS storefront — a fully custom NestJS + Next.js build — and a clear-eyed case for moving the business onto Shopify.

Scope
ndws-nutrition.com
Stack today
Custom code
Build status
Won't deploy
Recommendation
Move to Shopify
01

The short version

Your online store is bespoke software: a custom Next.js storefront talking to a custom NestJS backend, running on a single rented server. There is no platform underneath it — the shopping cart, the checkout, the payment logic, the security, the servers, and every future fix are all things you have to build, run, and protect.

It works, but our review found defects that put real money and customer trust at risk — and several are not edge cases. The store can oversell stock it doesn't have, accept orders for $0, and ship goods before any payment is taken. On top of that, the latest version of the code can no longer be deployed at all.

The recommendation

Stop maintaining a custom storefront. Move NDWS onto Shopify — a hosted platform that already solves payments, inventory, security, and uptime, so the business stops paying to rebuild and re-secure all of it by hand.

02

What you're running today

Four moving parts, all custom-built, all hosted on one server you rent. If it breaks at 2 a.m., there is no platform support line — only whoever still knows this codebase.

Storefront
Next.js
The pages customers see.
custom code
Backend / API
NestJS
Orders, checkout, admin, shipping.
custom code
Data
Postgres + Redis
Products, orders, queues.
self-managed
Server
1× DigitalOcean VPS
nginx, SSL, deploys, backups.
single point of failure
Everything above is maintained in-house. The platform, the security patches, the scaling and the on-call all sit with NDWS — not a vendor.
03

Problem areas we found

Each item below was confirmed against the actual source code. They are grouped by what they threaten — your revenue, your security, and your ability to keep the lights on.

Critical High Medium
Revenue & money

Latest version won't go live

Critical

The current code fails to build, so updates and fixes literally cannot be deployed. The live site is frozen on an older version.

verified · next build fails — scroll-to-top.tsx

Guaranteed overselling

Critical

Stock is never reduced after a sale. The store will keep selling items it doesn't have — leading to cancellations and refunds.

verified · order.service.ts — no stock decrement

Orders can be placed for $0

Critical

The price and order total are taken from the shopper's browser and trusted as-is. A technical buyer can change the total to zero — or negative.

verified · totalPrice taken from request body

Ships before payment

Critical

On order, the system buys a real, billed shipping label and emails the customer — with no payment step in between. Anyone can trigger spend.

verified · fulfillment queued, no payment gate

Unreliable discounts

High

Promo codes can be used beyond their limit and aren't reliably subtracted from the charged total. Margins leak quietly.

verified · promocode.service.ts — race + unused discount

Money stored as decimals-in-float

Medium

Prices are stored in a format prone to rounding errors — small, compounding discrepancies in reporting and payouts.

verified · Float money columns
Security & trust

Public file upload

Critical

Anyone on the internet can upload files to your server — no login required, and the safety check is incomplete. A classic doorway for abuse.

verified · /api/upload — no auth, no traversal guard

"Fail-open" shipping webhook

High

If a single secret is missing, the order-status webhook accepts anyone — letting outsiders move orders through their lifecycle.

verified · webhooks.service.ts — passes when token unset

Weak admin sessions

High

Admins are silently logged out after ~10 minutes (a unit bug), and login tokens become forgeable if one secret is mis-set.

verified · cookie maxAge in seconds · JWT secret falls back to ''

No bot protection at checkout

High

The anti-bot reCAPTCHA is installed but never switched on. Checkout and forms are open to spam and automated abuse.

verified · recaptcha provider mounted nowhere
Reliability & operations

Server won't start without email config

High

The backend crashed on our test simply because email settings were blank — one missing value takes the whole store offline.

verified · MailService throws on boot

A cleanup job can delete real orders

High

A nightly task removes "unpaid" orders — including ones whose fulfillment failed — so genuine records can vanish.

verified · cron deletes status:created > 1h

Rival deploy pipelines

Medium

Two deployment scripts overwrite each other's settings — one wipes the captcha keys the other just set. Config drifts on every release.

verified · .env.client clobbered across repos

Broken test suite & empty catalog

Medium

The automated tests no longer compile, so regressions slip through — and there is no product data on the live site or in the seed.

verified · spec files out of sync · /api/product → []
04

What is Shopify?

In one paragraph

The store, run for you.

Shopify is the world's leading hosted e-commerce platform, powering millions of stores. You don't run servers or write the shop's core code — Shopify provides the storefront, the secure checkout, payments, inventory, orders, shipping and taxes, all maintained and scaled for you. You customize the look with themes and extend it with apps. The hard, risky parts — security, payments, uptime, backups — are the platform's job, not yours.

Hosted & managedNo servers, patches, or deploy pipelines to babysit.
Secure checkout & paymentsPCI-DSS compliant, fraud & bot protection built in.
Inventory that just worksStock, orders and refunds handled correctly by default.
Apps & themesCustomize and grow without rebuilding the core.
05

Why migrating fixes this

Most of the problems above don't need to be fixed — on Shopify they simply don't exist, because the platform owns that layer. Side by side:

DimensionCustom site todayOn Shopify
Payments & PCIBuilt by hand; today orders can ship with no payment.Secure, certified checkout takes payment before fulfilment.
InventoryStock never decremented — guaranteed overselling.Inventory tracked and reserved automatically.
Price integrityTotals trusted from the browser — $0 orders possible.Prices computed server-side; cannot be tampered with.
Security & botsPublic upload, fail-open webhook, no bot protection.Hardened platform with fraud & bot defenses included.
Hosting & uptimeOne server; a blank email field took it offline.Globally hosted, 99.9%+ uptime, no servers to run.
Updates & deploysLatest code won't build; releases are fragile.No build or deploy step — changes are instant & safe.
Maintenance & riskEvery fix & patch is your cost and your "bus factor".Maintained by Shopify; your team focuses on selling.
Support when it breaksOnly whoever still knows the codebase.24/7 platform support and a huge partner ecosystem.
06

The honest trade-offs

Be fair Shopify isn't free or infinitely bendable

  • Ongoing fees. A monthly subscription plus payment-processing fees — predictable, and almost always less than hosting, securing and maintaining custom code.
  • Works within a model. Very unusual flows may need an app or Shopify Plus; 95% of a store like NDWS is covered out of the box.
  • One-time migration effort. Products, customers, branding and URL redirects (to protect SEO) need to be moved over once.
  • Less low-level control. You trade total control for not being responsible for payments, security and uptime — which, given the findings above, is the right trade.
07

What a move looks like

1

Set up & theme

Choose a plan, apply a theme, and recreate the NDWS brand and storefront design.

2

Migrate data

Import products, collections and any existing customers and orders.

3

Payments & shipping

Connect Shopify Payments, configure shipping rates and taxes.

4

Redirects & SEO

301-redirect old URLs so search rankings carry over cleanly.

5

Launch

Point the domain to Shopify, test checkout end-to-end, go live.

6

Decommission

Shut down the VPS, Postgres, Redis and pipelines — and the maintenance bill with them.