# Update 6 report

Checked against the real PHP API on a temporary PHP 8.4 + MariaDB 11.4 server, with a copy of the shop connected to it
(not the design preview), at 390px and 1280px. **Not yet run on your cPanel host** (the live API address did not answer from
the test environment, so the live site was not touched).

Automated checks at the end of this update: 79 storefront/dashboard unit tests (12 files) pass; PHP suites pass on a fresh
install: `admin_smoke.py` 79, `update4_smoke.py` 113, `update5_smoke.py` 51, new `update6_smoke.py` 28 checks, no failures;
typecheck clean; setup wizard run end to end twice (new install and upgrade).

## 1. Items

| Item | Status | What changed | How it was verified | Limitation |
|---|---|---|---|---|
| U1 Order vs payment status | Done | Delivery status is a chip with a truck/progress icon; payment is a separate wallet pill. Used in orders list, order page, dashboard and customer page | Browser on real orders | — |
| U2 Order tracking | Done | Root cause: without a server the preview had no real orders. Tracking now reads the real order (number + phone), shows status, courier, delivery code and every step; wrong details and an unreachable server get different messages with a call button. Preview results are labelled as sample | PHP suite (status change → tracking shows Shipped, Steadfast, SF-123, Pending → Confirmed → Shipped) and browser at 390/1280 | Live orders can be checked only once the cPanel API is connected |
| U3 Storage overview | Done | Space used vs limit, files, average size, unused files, usage bar by page type, file types (SVG/JPG named correctly), largest and unused file tabs | Browser at 390/1280 on real media, no overflow | — |
| U4 Bulk edit books | Done | "Bulk edit…" on Books for picked books or all books matching the search and filters: any field (price, sale, stock, author, series, categories, tags, status, SEO, attributes, images alt text, FAQ, product details), methods set / increase / decrease (taka or %) / percent off / find and replace / append / prepend / add / remove / clear. Preview with before → after, confirmation, saving in groups of 100 with progress, per-book problems listed, Activity log, history, one-click undo that skips books edited since | 14 unit tests, 28 PHP checks, browser: 3 books +10% → preview 140 → 154 → apply → undo restored | — |
| U5 Cost popup | Done | Picking a category or pressing Escape in a dropdown no longer closes the popup; summary (revenue, costs, profit), inline errors, loading/empty/error with Retry, fits phones | Browser at 390/1280 (choose + Escape keep popup open) | — |
| U6 No customer uploads | Done | Removed from checkout (payment screenshot), custom print, contact/quote and reviews; the server ignores any file sent. Staff Media uploads unchanged | PHP suite (file sent with order and contact → nothing stored), browser | Old screenshots already in Media are kept |
| U7 SEO / GEO / AEO | Done | New book fields: subtitle, short description, attributes, focus keyword, related keywords, search intent, social title/description (internal cost and keywords never public). Book pages show subtitle, short summary and attributes; JSON-LD adds alternateName and additionalProperty; social overrides on share tags. SEO Center health check adds thin descriptions, long titles, duplicate meta descriptions, focus keyword missing. Existing sitemaps, robots, llms.txt, FAQ schema and canonical tags kept | Unit tests, browser (JSON-LD and og:title on a real book; purchase cost absent from page) | Google/Bing ranking data needs your Search Console / Bing accounts |
| U8 PHP package | Done | `shopno-books-house-server.zip` with `api/` (everything the server needs; no config.php, and upload/backup folders hold only their protective .htaccess, so upgrades never overwrite your data) and `documentation/` | Contents listed and checked | — |
| U9 Setup wizard + health | Done | `api/setup.php`: one-time code, hosting check, database test with clear reasons, writes config.php (600, keys generated, kept on upgrade), installs/updates tables, owner account, health report, locks itself. Dashboard → System shows the same report with Connected / Disconnected / Working / Warning / Error / Not configured and how to fix | Wizard run on an empty database and as an upgrade; health report with connected shop (website reads from server, sitemap, structured data, private files, cron heartbeat) | Apache `.htaccess` rules are checked by the report on your host; the test server is not Apache |
| U10 Connect and deploy guide | Done | `INSTALL.md`: architecture (shop is not PHP; it calls this API), upload, wizard, connecting the shop, safe testing, cron, security, updates, troubleshooting | Reviewed against the code | — |
| U11 States and speed | Done | Loading skeletons, empty states and errors with Retry on the new screens; health checks run in parallel; new database indexes for book lists, orders and SEO checks | Browser | No new Lighthouse run in this update |
| U12 Tests + report | Done | `src/test/update6-health-seo.test.ts`, `php-api/tests/update6_smoke.py`, this report | — | — |

## 2. What you need to do

1. Upload the ZIP to `public_html` and run `https://api.shopnobookshouse.com/api/setup.php` (see `INSTALL.md`).
2. Add the four cron jobs shown on the wizard's last page.
3. In the shop settings keep `VITE_API_BASE_URL=https://api.shopnobookshouse.com/api`, turn demo data off once real books are in, and publish.
4. Still waiting for you: real print prices, and confirmation of the bKash/Nagad numbers and the 3-day return window.
