Full deployment history for this project.
⚡ Bolt: [performance improvement] Memoize global context providers Added `useMemo` and `useCallback` inside `CartProvider` and `I18nProvider` to properly memoize the context values. This prevents all components consuming the React contexts from re-rendering whenever the top-level parent re-renders unless the derived state explicitly changes. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🛡️ Sentinel: [CRITICAL] Fix missing authentication on supplier endpoint Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🛡️ Sentinel: [CRITICAL] Fix missing authentication on supplier API Adds a required check for the INTERNAL_API_SECRET in the Authorization header for the greens supplier POST endpoint to prevent unauthorized access. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: Optimize CartProvider with useMemo and useCallback Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Improve ProductCard accessibility by removing nested interactive elements - Converted ProductCard wrapper from `<Link>` to `<div>`. - Applied `<Link>` directly to the title and used `before:absolute before:inset-0 before:z-10` to stretch the link across the entire card area. - Added `z-20` to the nested button and badge to ensure they remain clickable and focusable above the stretched link. - Resolves an HTML spec violation and significantly improves keyboard and screen reader accessibility. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🛡️ Sentinel: [CRITICAL] Fix unauthenticated internal supplier API Added `INTERNAL_API_SECRET` authentication check to the `POST` handler in `app/api/v1/suppliers/greens/route.ts` to prevent unauthorized access and order creation. The endpoint relied on middleware CORS, which is globally permissive (`Origin: *`). Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Fix nested interactive elements in product card Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: Optimize CartProvider to prevent unnecessary re-renders Memoized action handlers and derived state in CartProvider using useCallback and useMemo to prevent unnecessary re-renders of consuming components. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
⚡ Bolt: Memoize CartProvider context value and actions - Wrap all CartContext action functions in `useCallback` - Wrap derived cart calculations (`totalItems`, `totalPrice`) in `useMemo` - Wrap the context provider value object in `useMemo` This prevents all consuming components from re-rendering unless the actual cart state changes, improving performance across the application. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Add aria-hidden to decorative icons Added `aria-hidden="true"` to purely decorative icon `<span>` elements in `components/header.tsx` and `components/product-card.tsx` to prevent redundant screen reader announcements. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Add visual indicator to empty cart drawer Added a muted ShoppingBag icon and improved the empty state text in the Cart Drawer to enhance user experience. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Merge pull request #7 from mbarbine/sentinel-add-security-headers-13911676102182493261 🛡️ Sentinel: [security improvement] Add security headers to responses
🛡️ Sentinel: Add security headers to responses Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🎨 Palette: Enhance Shop empty state and Language Switcher accessibility - Replaced dull empty text in Shop page with a proper empty state component featuring a visual icon and a clear call-to-action to clear filters. - Added `aria-label="Change language"` to Language Switcher and hid visual-only emojis from screen readers to provide clear accessibility context. Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
🛡️ Sentinel: [security improvement] Add standard security headers to middleware - Adds X-Frame-Options: DENY - Adds X-Content-Type-Options: nosniff - Adds X-XSS-Protection: 1; mode=block - Adds Strict-Transport-Security: max-age=31536000; includeSubDomains Co-authored-by: mbarbine <3211492+mbarbine@users.noreply.github.com>
Merge pull request #1 from mbarbine/v0/mbarbine-9f1c2578 Launch e-commerce platform with Stripe and multi-language support
Merge pull request #1 from mbarbine/v0/mbarbine-9f1c2578 Launch e-commerce platform with Stripe and multi-language support
feat: update API docs with new endpoints Enhance human-readable docs and update OpenAPI spec for v0.1.0. Co-authored-by: Michael Barbine <3211492+mbarbine@users.noreply.github.com>
feat: enhance About page for SEO and offline support Add SEO metadata, JSON-LD structured data, and local storage fallback Update version files and launch documentation for v0.1.0 Co-authored-by: Michael Barbine <3211492+mbarbine@users.noreply.github.com>
feat: redesign About/Story page for inspiring founder narrative Add ASCII art, timeline, principle cards, and partner spotlights. Co-authored-by: Michael Barbine <3211492+mbarbine@users.noreply.github.com>