Changelog

A record of all notable changes to the Kittd platform.

v0.3.0

2026-04-08
Fixed
  • RLS policies across packages, products, clubs, teams, profiles, orders, and approvals updated to use `'role' = ANY(current_user_roles())` — fixes silent insert/update failures for multi-role users where admin was not the first role in the array

v0.2.9

2026-04-08
Added
  • Resend confirmation email button on the verify screen with 60-second cooldown

v0.2.8

2026-04-08
Changed
  • Registration flow now shows a "Check your email" confirmation screen after signup instead of redirecting to login
  • Login page shows a friendly message when sign-in is attempted before email is confirmed

v0.2.7

2026-04-07
Fixed
  • Notifications silently dropped when `notification_channel` is `null` — defaults to `email` in both `notifyRole` and `notifyUser`
  • Migration adds `DEFAULT 'email'` to `profiles.notification_channel` and back-fills existing `NULL` rows

v0.2.6

2026-04-07
Added
  • Help Centre page (`/help`) — 8 topic categories, 45 FAQ articles with animated accordion, popular articles grid, and support CTA
  • Contact page (`/contact`) — categorised contact form with Resend auto-reply, response-time panel, quick-link sidebar, and submission tips
  • `SUPPORT_EMAIL` env var for routing contact form submissions

v0.2.5

2026-04-07
Changed
  • Email delivery switched from AWS SES (via Lambda + API Gateway) to Resend
  • Production emails now sent via Resend SDK, gated on `RESEND_API_KEY` env var
  • Local dev Mailpit SMTP fallback unchanged

v0.2.4

2026-04-07

### Fixed - Full TypeScript audit —

Fixed
  • Full TypeScript audit — zero errors across the codebase
  • Supabase `setAll` cookie handlers typed explicitly in server and middleware clients
  • `ROLE_LABELS` record updated with all six roles (`club_approver`, `supplier`, `supplier_admin`)
  • Email template SMTP path used wrong prop name `notificationType` instead of `type`
  • Recharts `formatter` callbacks cast to avoid overly strict generic mismatch
  • Admin orders page `status !== 'all'` comparison removed now that `'all'` maps to `undefined`

v0.2.3

2026-04-07
Fixed
  • Next.js 15 async `params` type error in admin order status API route

v0.2.2

2026-04-07
Fixed
  • Next.js 15 async `searchParams` type error in admin orders page

v0.2.1

2026-04-07
Fixed
  • Next.js 15 async `params` type error in admin order detail and reorder pages — `params` must now be awaited as a `Promise`

v0.2.0

2026-04-07

### Added - Multi-role support — users can hold multiple roles simultaneously (e.g. coach and club approver) - `supplier_admin` role for supplier business administrators - Kittd Admin super-user bypass — admin role passes all role guards automatically - Nav badges showing outstanding My Orders and pending Approvals counts - Notification dismiss — individual X button per notification and Dismiss all - Club badge displayed on the My Club page - Version number and build date in the app sidebar and public footer - Changelog page (`/changelog`) parsing `CHANGELOG.md` with coloured section badges - Roadmap page (`/roadmap`) with four status tiers, per-item audience badges - Redesigned landing page with club and supplier value propositions, How it works, and CTAs - FreeAgent admin page shows per-club connection status with links to each club's settings - `supplier_admin` added to nav and role management UIs

Added
  • Multi-role support — users can hold multiple roles simultaneously (e.g. coach and club approver)
  • `supplier_admin` role for supplier business administrators
  • Kittd Admin super-user bypass — admin role passes all role guards automatically
  • Nav badges showing outstanding My Orders and pending Approvals counts
  • Notification dismiss — individual X button per notification and Dismiss all
  • Club badge displayed on the My Club page
  • Version number and build date in the app sidebar and public footer
  • Changelog page (`/changelog`) parsing `CHANGELOG.md` with coloured section badges
  • Roadmap page (`/roadmap`) with four status tiers, per-item audience badges
  • Redesigned landing page with club and supplier value propositions, How it works, and CTAs
  • FreeAgent admin page shows per-club connection status with links to each club's settings
  • `supplier_admin` added to nav and role management UIs
Fixed
  • `profile.roles` undefined crash — added `?? []` fallback in `guardRole`
  • Migration `20240104` split to avoid PostgreSQL error using new enum values in same transaction
  • Admin FreeAgent page was calling non-existent `isFreeAgentConnected()` / `disconnectFreeAgent()` — corrected to per-club functions
  • Dashboard supplier redirect now only fires when supplier/supplier_admin is the user's only role

v0.1.0

2026-04-07

Initial release of the Kittd platform — football kit ordering built for clubs.

Added
  • #### Platform & Auth
  • Email / password authentication with Supabase Auth
  • Role-based access control with multi-role support per user
  • Roles: Kittd Admin (super-user), Club Admin, Coach, Club Approver, Supplier, Supplier Admin
  • Kittd Admin bypasses all role guards as a global super-user
  • Profile management with notification channel preference (email, SMS, WhatsApp)
  • #### Club Management
  • Club creation and management by Kittd Admin
  • Club badge and sponsor logo upload (PNG, JPEG, WebP, SVG — max 2 MB)
  • Club primary and secondary colour pickers
  • FreeAgent accounting integration per club (OAuth connect/disconnect)
  • Team management within clubs (add, rename, delete)
  • Member management with multi-role checkboxes
  • Club Approver toggle for coaches on the My Club page
  • Club badge displayed on the My Club page
  • #### Kit Catalogue & Configurator
  • Product catalogue with active/inactive state
  • Kit packages (bundles) with configurable items and pricing
  • 2D kit configurator with colour customisation
  • Coaching attire mode: replaces squad number with initials
  • Spare kit option (hides player name/number fields)
  • Duplicate squad number validation within a basket
  • Add-on pricing: club badge, sponsor logo, number print, initials
  • Configurable add-on prices via admin pricing panel
  • #### Ordering & Basket
  • Basket with persistent local state per club
  • Checkout with team selection and order notes
  • Sponsor logo upload at checkout
  • Bundle items grouped in order summary (sub-items shown without individual prices)
  • Order submission with status history audit trail
  • #### Approval Workflow
  • Orders move through: draft → submitted → approved/rejected → confirmed → in production → shipped → delivered
  • Club Approvers review submitted orders for their club
  • Approval and rejection notifications to coaches
  • Supplier notification when an order is approved
  • Order status history with timestamps for time-based analytics
  • #### Notifications
  • In-app notification bell with unread badge count
  • Real-time updates via Supabase Realtime (insert, update, delete)
  • Notifications page with per-item dismiss (X) and Dismiss all
  • Email notifications via AWS SES (production) or Mailpit SMTP (local dev)
  • SMS notifications via Twilio
  • WhatsApp notifications via Twilio WhatsApp API
  • Notification templates: editable title, body, channel override per notification type
  • Template variable substitution (e.g. `{{order_reference}}`, `{{coach_name}}`)
  • #### Admin Dashboard
  • Revenue KPIs: total revenue, this month, average order value, outstanding value
  • Revenue bar chart (last 12 months) and order status donut chart
  • Time-based KPIs: average submit→approval, approval→complete, total duration
  • Outstanding orders section with longest open duration
  • Top clubs and top products leaderboards
  • Platform counts: clubs, users, products, packages
  • 5-minute ISR cache for performance
  • #### Supplier View
  • Suppliers see approved+ orders ready for production
  • Order items with player, garment, size, and add-on details
  • #### Navigation & UX
  • Responsive sidebar (desktop) and drawer (mobile)
  • Live nav badges: outstanding My Orders count, pending Approvals count
  • Favicon: 👕 shirt emoji via Next.js ImageResponse
  • Styled HTML emails with status badge, CTA button, and footer
  • #### Infrastructure
  • AWS CDK v2: Lambda + API Gateway + SES/SNS notification API
  • Supabase local dev stack with Mailpit for email preview
  • Row-level security policies throughout
  • Kittd is built and maintained by the Kittd team.*
Changelog | Kittd