Repository navigation
Releases: raouf-b-dev/ecommerce-admin-dashboard
Release list
v0.7.0
Admin dashboard 0.7.0 adds a production Docker image published to GHCR (runtime API_BASE_URL) and reuses formatOptionalText for consistent dash fallbacks on null customer, shipping, and SKU fields.
Works with ecommerce-store-api v0.10.0 or later. The generated client matches API v0.11.0.
Added
- Production Docker image (nginx unprivileged, port 8080) published to
ghcr.io/raouf-b-dev/ecommerce-admin-dashboardfor linux/amd64 and linux/arm64 on pushes to master andv*tags. The API origin is read at container start fromAPI_BASE_URLinstead of being compiled in (#118).
Changed
- Null customer/shipping/SKU display paths reuse
formatOptionalTextfor a consistent dash fallback (#117).
v0.6.0
Works with ecommerce-store-api v0.10.0 or later. The generated client matches v0.11.0.
Changed
- Breaking: production builds require
VITE_API_BASE_URLand fail at startup without it instead of calling localhost (#113). - Generated API client synced with API v0.11.0: order customer name/email, shipping address and item SKU may be null and render as
-(#113). npm run test:e2einstalls Playwright Chromium first through apretest:e2ehook; it downloads only when missing (#113).- Dependency updates: production deps (Radix UI dialog/dropdown/label/slot, TanStack Query and Table, lucide-react, react-hook-form, socket.io-client, zod), dev deps (Playwright 1.64, Vite 8.3, Vitest 5.0.4, ESLint 10.12 and others),
brace-expansionandsource-map-jslockfile bumps, GitHub Actionssetup-node7.1.0 (#95, #103, #105, #106, #107).
Fixed
npm installresolves theoxc-transform-reactpeer conflict (pinned to 0.152.x for@vitejs/plugin-react), MSW install scripts are allowed, andnpm run verifyfinds the npm CLI throughnpm_execpathon Windows and Unix (#110).
v0.5.0
Requires ecommerce-store-api v0.10.0 or later. Pair with API v0.10.0 (and storefront v0.4.0 when that ships).
Added
- Platform config integration: the display currency comes from
GET /v1/platform/config. Operator user menu in the header (#93). - Payment method labels (#94).
- Demo-data banner in mock mode, on the login page and in the app shell. Follow-up to #74, which 0.4.1 left out.
Changed
- Breaking: payment method
CARDreplacesSTRIPE. Requires ecommerce-store-api v0.10.0 (#94). - Product create and update always send
currency, matching the API v0.10.0 contract (#94). - Responsive admin shell below desktop widths (#90).
- Tests use the production compiler; mobile Playwright projects added (#91).
- Slimmer agent guidance (#88).
- Regenerated README showcase stills and walkthrough for the 0.5.0 shell (user menu, demo banner, payment labels).
Fixed
v0.4.1
v0.4.0
Release 0.4.0 (develop -> master).
Highlights
- Brand color tokens and typography foundation
- Product thumbnails and URL image preview
- Categories in the primary sidebar navigation
- Themed Recharts tooltips
- Mock product images synced with updated API contracts
- Roadmap updates and dependency bumps
Works with ecommerce-store-api v0.9.0 or later.
Full Changelog: v0.3.0...v0.4.0
Release v0.3.0
Release v0.3.0
Operator dashboard polish after v0.2.0: session persistence for refresh-token lifetime, architectural boundary hardening, OpenAPI client and MSW mock sync against API v0.8.0 contracts, regenerated visual showcase assets, and a guided first-time operator setup checklist on empty product/inventory tables.
Targets ecommerce-store-api v0.8.0. Payments on order detail remain read-only. Live Stripe ops UI and hosted staging are still out of scope.
Scope
| In this release | Not in this release |
|---|---|
| Persist admin session for refresh-token lifetime | Payment capture / refund UI |
| Auth / architecture boundary hardening | Command palette (Cmd+K) |
| OpenAPI client + MSW mock sync with API fields | Dashboard trend badges / extra analytics facts |
| Visual showcase and walkthrough asset refresh | Hosted staging |
| Guided operator setup checklist on true-empty products/inventory | |
| Filter-aware table empty copy for orders/users | |
| Actions SHA pins; CONTRIBUTING / CoC / SECURITY |
Auth and chrome
- Admin session persisted for the refresh-token lifetime so reloads do not drop operators mid-shift.
- Architectural boundary and auth-code hardening (lib/components stay free of feature imports).
Operator UX
- True-empty products and inventory show an actionable setup checklist (add product, adjust stock when unlocked, review roles) driven by permissions and product count.
- Filtered empties stay distinct from first-run empties.
- Regenerated visual showcase / walkthrough assets for README and portfolio demos.
Contract sync
- OpenAPI-typed client and MSW mock data aligned with API CQRS fields (including category product counts and related list shapes).
Repository hygiene
- GitHub Actions pinned to full commit SHAs with version comments.
- CONTRIBUTING, CODE_OF_CONDUCT, and SECURITY reporting aligned with the API contact pattern.
Stats
| Metric | Value |
|---|---|
| Since | v0.2.0 |
| Files changed | 111 |
| Insertions / deletions | +2,732 / -788 |
| Commits | 42 (35 excluding merges) |
Pull requests
| PR | Title |
|---|---|
| #50 | Operator setup checklist and table empty states |
| #49 | Regenerate visual showcase and walkthrough assets |
| #48 | Sync OpenAPI client, mock data, and docs |
| #47 | Harden architectural boundaries and auth codes |
| #42 | Persist admin session for refresh token lifetime |
| #39 | CODEOWNERS |
Full changelog: v0.2.0...v0.3.0
v0.2.0 Initial release
Release v0.2.0
First tagged release of the operator SPA. Operators can sign in, rotate a seeded password, and manage catalog, stock, orders, users, and roles against ecommerce-store-api v0.7.0.
Business rules stay in the API. The UI hides navigation or shows a forbidden page when a permission is missing. Payments on order detail are read-only. There is no hosted demo.
Package 0.1.0 was never tagged. This cut is the first public milestone of the dashboard.
Scope
| In this release | Not in this release |
|---|---|
| Login, forced password change, operator gate, silent refresh | Payment capture or refund UI |
| Dashboard, products, categories, inventory, orders, users, roles | Command palette and first-run checklists |
| List filters and sorts in the URL | Extra dashboard facts still missing from OpenAPI |
MSW preview (npm run dev:mock) |
Hosted staging |
| Theme, WebSocket toasts, live-API Playwright | Storefront (ecommerce-store-web) |
Auth and session
- Access token in memory. Refresh cookie is HttpOnly (
credentials: include). - First login for seeded operators lands on change-password. Other shell routes wait until
mustChangePasswordis cleared. - Sessions without
access_admincannot enter the SPA (login rejects them;OperatorRouteenforces the same gate). - Domain HTTP 401 triggers one in-flight refresh and a single retry. After a successful refresh, session permissions and
mustChangePasswordare updated so nav chrome stays accurate. - Limited operators land on the first permitted screen instead of looping on the dashboard or Forbidden "home".
- ADRs:
ADR-0001throughADR-0007.
Operator screens
- Dashboard: analytics reads from
/v1/admin/analytics/*(Recharts). Grafana/Prometheus are not a data source. - Products: list, create, edit, search, active/inactive filter, activate/deactivate.
- Categories: list and catalog association on product forms.
- Inventory: list, detail, stock adjust. HTTP 409 shows a conflict banner. The client does not invent a
versionfield. - Orders: list, detail, Process / Ship (and related transitions the API already exposes). Payments on the order are displayed, not mutated.
- Users: list, detail, activate/deactivate, address book (add, default, delete). Role change is shown only when the session has
manage_roles. - Roles: permission matrix editor.
List query params the API already accepts are wired in the UI and reflected in the URL.
Client contract
- Typed client from the API OpenAPI spec (
openapi-fetch+ generatedschema.d.ts). Regenerate withnpm run api:generatewhile the API is running. - TanStack Query for lists, detail, and mutations. Centralized API error mapping for forms and toasts.
- RBAC chrome is UX only. Authorization is enforced on the API.
Local preview and quality
npm run env:initthennpm run devon port 5174 against a live API (defaulthttp://localhost:3000).npm run dev:mockis an in-browser MSW replica. Demo 1-click login. Mock data resets on full reload. Playwright still needs a live API.- Theme: light, dark, and system, persisted in
localStorage. - Socket.IO toasts for new orders and low stock, with query invalidation.
- PR CI: lint, typecheck, unit tests, build,
npm audit. Playwright onmaster/mainandworkflow_dispatch. - Live operator checklist:
docs/RELEASE-GATE.md.
Stats
| Metric | Value |
|---|---|
| Since | untagged 0.1.0 (initial commit) |
| Files changed | 330 |
| Insertions | +41,594 |
| Commits | 352 (327 excluding merges) |
| Playwright specs | 12 |
| ADRs | 7 (ADR-0001 to ADR-0007) |
Pull requests
| PR | Title |
|---|---|
| #1 | Scaffold, toolchain, and governance |
| #2 | Responsive app shell and page structure |
| #3 | Authentication and RBAC navigation chrome |
| #4 | Forced password change routing and UI |
| #5 | env:init for local Vite config |
| #6 | Products list, create, and edit |
| #7 | Operator gate and silent token refresh |
| #8 | Inventory list, detail, and adjust |
| #9 | Orders list, detail, and transitions |
| #10 | Users list and detail |
| #11 | Analytics dashboard and null-safe detail reads |
| #12 | Quality, a11y, and journey tests |
| #13 | Local Swagger URL in documentation |
| #14 | List filters, column sort, URL parity |
| #15 | Product, user, and role management screens |
| #16 | Centralized error handling and strict API typing |
| #17 | Product catalog status and user role assignment |
| #18 | Customer address book on user detail |
| #19 | MSW standalone preview |
| #20 | Architecture cleanup, auth, mock routes, filters |
| #21 | Theme, real-time feed, and auth hardening |
| #22 | Release gate verification and auth hardening |
| #23 | Dashboard cockpit layout and status styling |
| #24 | Detail views and showcase assets |
| #25 | Category management views and product catalog integration |
README screenshot paths and the 0.2.0 version bump landed on release-v0-2-0 after #25.
Full changelog: initial commit through v0.2.0