# ALZAR FZE Website — Status & Handoff

This package is a self-hostable PostgreSQL full-stack app, de-Manus'd, SEO-optimized for
GCC search, with a verified passing build. Deploy instructions: see **DEPLOY.md**.

## ✅ DONE & VERIFIED (in prep)
1. **Manus build tooling removed** — vite plugins, debug collector, __manus__ dirs gone.
2. **All 44 images self-hosted** — no more manuscdn.com hotlinks (would have broken at
   cutover). 28 assets in client/public/images/, including the owner-provided ceramic-tiles
   photo replacing the one Manus failed to export. Zero manuscdn refs remain.
3. **MySQL → PostgreSQL conversion (complete)** — schema, drizzle config, and the entire
   db.ts data layer converted (node-postgres + pg Pool, onConflictDoUpdate upserts).
   `database/schema.sql` is standalone, idempotent, has updated_at triggers + an index,
   and is validated by libpg_query (the real Postgres parser).
4. **Self-hosted admin auth (complete)** — Manus OAuth replaced with email+password login
   (argon2-hashed) at /api/auth/login + /api/auth/logout. Seed via
   scripts/create-admin.ts. Generic JWT session machinery preserved.
5. **SEO keyword optimization** — all 6 product landing pages expanded with research-based
   GCC buyer terms (supplier/dealer/for-sale intent, product+application longtails).
   See SEO_STRATEGY_GCC.md for the full strategy + per-page map.
6. **Deploy tooling** — Dockerfile + docker-compose.yml (app + Postgres), .env.example,
   DEPLOY.md with Docker and manual paths, Nginx + systemd samples, backup command.
7. **Build verified** — `pnpm build` passes, `tsc --noEmit` clean (0 errors).

## ⚠️ REMAINING (needs live services / owner input)
1. **Email notifications** — server/_core/notification.ts still targets the old Manus
   forge endpoint. Drafted Nodemailer replacement is in this doc's git history / earlier
   handoff; wire SMTP_* env vars. NON-BLOCKING: submissions always persist to DB + show in
   admin dashboard regardless.
2. **Dead forge services** — server/_core/{llm,imageGeneration,voiceTranscription,map,
   dataApi}.ts still reference Manus forge APIs. Frontend doesn't call them. Safe to delete
   to reduce surface area (leaving them dormant also works — they only run if called).
3. **storage.ts** — dead Manus storage wrapper; confirm no callers and delete.
4. **Client cleanup** — remove the manus-runtime-user-info localStorage write in
   useAuth.ts; delete ManusDialog.tsx if orphaned. Wire the admin login UI to the new
   /api/auth/login endpoint.
5. **SPA SEO rendering (high value)** — per-page meta/JSON-LD is client-injected; add
   pre-rendering/SSR so crawlers see per-route tags. See SEO_STRATEGY_GCC.md.
6. **Admin CMS (next phase)** — the article/product/principal/job content workflow with
   owner approval. See CMS_BUILD_BRIEF.md.

## Owner inputs still open
- Loaders: the Schäffer **4670Z** is inbound to UAE (not yet stocked). Its landing page
  should say "coming soon / pre-order / enquire" — NOT "in stock / for sale" — to stay
  accurate and avoid SEO trust penalties. Specs researched: articulated compact wheel
  loader, Kubota Stage V diesel (51/66 HP), ~2,120 kg tip load, up to 3.4 m lift.
- Google Business Profile EXISTS (JAFZA, 273 interactions) but is mis-categorized as
  "Consultant" — recategorize to the machinery/industrial-supplier category and complete
  the profile. Biggest quick SEO win. (See SEO_STRATEGY_GCC.md.)
- Priority ranking order: loaders first, then by searchability/sellability.
