- Added optional disabled property to NavItem interface
- Disabled items show gray text and cursor-not-allowed
- Desktop: Tooltip on hover shows "Coming soon"
- Mobile: Inline "(Coming soon)" label after item text
- Uses aria-disabled for accessibility
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Created (landings) route group for home page with sticky header
- Created (apps) route group for docs/demo/admin with scrollable header
- Moved page components to respective route groups
- Updated root layout to be minimal (no header/footer)
- Each route group has its own layout with appropriate header style
- Updated Footer and layouts to use public folder logo path
This enables sticky header on landing pages while docs/demo pages
have a header that scrolls away with content.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Next.js usePathname() returns paths with trailing slashes during static
generation (e.g., /docs/) but navigation hrefs use paths without trailing
slashes (e.g., /docs). The strict equality comparison was always failing.
Added path normalization to strip trailing slashes before comparison.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Remove category from all storage methods
- Change filename to imageId (UUID) across all services
- Update StorageService interface: orgId→orgSlug, projectId→projectSlug
- Update MinioStorageService to use new path format
- Update all route handlers (cdn, images, upload, live, textToImage)
- Update GenerationService and ImageService for new storage keys
- CDN URL format: cdn.banatie.app/{org}/{proj}/img/{imageId}
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>