- Add new libraries: ui-accessibility, ui-animations, ui-backgrounds, ui-code-display, ui-data-utils, ui-font-manager, hcl-studio - Add extensive layout components: gallery-grid, infinite-scroll-container, kanban-board, masonry, split-view, sticky-layout - Add comprehensive demo components for all new features - Update project configuration and dependencies - Expand component exports and routing structure - Add UI landing pages planning document 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
22 KiB
UI Landing Pages Library Implementation Plan
Executive Summary
This document outlines the implementation strategy for creating a comprehensive ui-landing-pages library within the SSuite Angular workspace. The library will provide production-ready components specifically designed for building modern websites and landing pages, integrating seamlessly with existing libraries: ui-design-system, ui-essentials, ui-animations, and shared-utils.
Architecture Overview
Library Structure
projects/ui-landing-pages/
├── src/
│ ├── lib/
│ │ ├── components/
│ │ │ ├── heroes/ # Hero section components
│ │ │ ├── features/ # Feature showcase components
│ │ │ ├── social-proof/ # Testimonials, logos, stats
│ │ │ ├── conversion/ # CTAs, pricing, forms
│ │ │ ├── navigation/ # Headers, menus, footers
│ │ │ ├── content/ # FAQ, team, timeline
│ │ │ └── templates/ # Complete page templates
│ │ ├── services/ # Landing page utilities
│ │ ├── interfaces/ # TypeScript interfaces
│ │ └── styles/ # Component-specific styles
│ ├── public-api.ts
│ └── test.ts
├── ng-package.json
├── package.json
├── tsconfig.lib.json
└── README.md
Design System Integration
Typography (Google Fonts)
- Primary Font: Inter (headings, UI elements)
- Secondary Font: Source Sans Pro (body text)
- Accent Font: Roboto Mono (code, technical content)
Design Token Usage
// Import design system tokens
@use 'ui-design-system/src/styles/tokens' as tokens;
.hero-section {
padding: tokens.$spacing-section-large tokens.$spacing-container;
background: tokens.$color-surface-primary;
.hero-title {
font-family: tokens.$font-family-heading;
font-size: tokens.$font-size-display-large;
color: tokens.$color-text-primary;
margin-bottom: tokens.$spacing-content-medium;
}
}
Spacing Hierarchy
- Section Padding:
$spacing-section-large(96px),$spacing-section-medium(64px) - Content Spacing:
$spacing-content-large(48px),$spacing-content-medium(32px) - Element Spacing:
$spacing-element-large(24px),$spacing-element-medium(16px)
Implementation Phases
Phase 1: Foundation & Hero Components
Objective
Establish library foundation and implement essential hero section components.
Timeline: 2-3 weeks
Components to Implement
1.1 HeroSection Component
interface HeroSectionConfig {
title: string;
subtitle?: string;
ctaPrimary?: CTAButton;
ctaSecondary?: CTAButton;
backgroundType?: 'solid' | 'gradient' | 'image' | 'video';
alignment?: 'left' | 'center' | 'right';
}
Features:
- Responsive typography scaling
- Multiple background options
- Flexible CTA button layout
- Integration with ui-animations for entrance effects
1.2 HeroWithImage Component
interface HeroWithImageConfig extends HeroSectionConfig {
image: {
src: string;
alt: string;
position: 'left' | 'right' | 'background';
};
layout: 'split' | 'overlay' | 'background';
}
Features:
- 50/50 split layouts
- Image overlay with opacity controls
- Lazy loading integration
- Responsive image handling
1.3 HeroSplitScreen Component
interface HeroSplitScreenConfig {
leftContent: HeroContent;
rightContent: HeroContent | MediaContent;
verticalAlignment?: 'top' | 'center' | 'bottom';
reverseOnMobile?: boolean;
}
Features:
- Equal split responsive layout
- Content/media combinations
- Mobile stacking options
- Vertical alignment controls
Integration Requirements
UI Essentials Integration
import { ButtonComponent } from 'ui-essentials';
import { ContainerComponent } from 'ui-essentials';
import { FlexComponent } from 'ui-essentials';
// Use existing button component for CTAs
@Component({
template: `
<ui-container [maxWidth]="'xl'" [padding]="'large'">
<ui-flex [direction]="'column'" [gap]="'large'">
<!-- Hero content -->
<ui-button
[variant]="ctaPrimary.variant"
[size]="'large'"
(click)="ctaPrimary.action()">
{{ ctaPrimary.text }}
</ui-button>
</ui-flex>
</ui-container>
`
})
Design System Integration
@use 'ui-design-system/src/styles/tokens' as tokens;
@use 'ui-design-system/src/styles/mixins' as mixins;
.hero-section {
@include mixins.section-padding();
background: linear-gradient(
135deg,
tokens.$color-primary-500,
tokens.$color-primary-700
);
&__title {
@include mixins.typography-display-large();
color: tokens.$color-text-on-primary;
margin-bottom: tokens.$spacing-content-medium;
}
&__subtitle {
@include mixins.typography-body-large();
color: tokens.$color-text-on-primary-muted;
}
}
Demo Implementation
- Create
hero-sections-democomponent - Showcase all hero variants
- Include interactive configuration panel
- Demonstrate responsive behavior
Deliverables
- Library project structure
- Three hero components with full functionality
- Comprehensive demo page
- Unit tests for all components
- Documentation with usage examples
Phase 2: Feature Sections & Social Proof
Objective
Build components for showcasing product features and establishing credibility.
Timeline: 3-4 weeks
Components to Implement
2.1 FeatureGrid Component
interface FeatureGridConfig {
features: FeatureItem[];
columns: 2 | 3 | 4;
iconStyle: 'outline' | 'filled' | 'duotone';
layout: 'card' | 'minimal' | 'centered';
}
interface FeatureItem {
icon: string; // FontAwesome icon name
title: string;
description: string;
link?: { text: string; url: string; };
}
Integration:
- Use
ui-essentialsCard component as base - Apply
ui-design-systemgrid system - Integrate FontAwesome icons
- Add hover animations from
ui-animations
2.2 FeatureShowcase Component
interface FeatureShowcaseConfig {
features: FeatureShowcaseItem[];
alternateLayout: boolean;
imageAspectRatio: '16:9' | '4:3' | '1:1';
}
interface FeatureShowcaseItem {
title: string;
description: string;
image: string;
benefits?: string[];
cta?: CTAButton;
}
Features:
- Alternating left/right layouts
- Image lazy loading
- Smooth scroll animations
- Responsive stacking
2.3 TestimonialCarousel Component
interface TestimonialCarouselConfig {
testimonials: Testimonial[];
autoplay: boolean;
showAvatars: boolean;
variant: 'card' | 'quote' | 'minimal';
}
interface Testimonial {
quote: string;
author: string;
title?: string;
company?: string;
avatar?: string;
rating?: number;
}
Integration:
- Extend existing carousel functionality
- Use
ui-essentialsAvatar component - Apply smooth transitions from
ui-animations - Implement touch/swipe gestures
2.4 LogoCloud Component
interface LogoCloudConfig {
logos: CompanyLogo[];
layout: 'grid' | 'marquee' | 'carousel';
grayscale: boolean;
hoverEffects: boolean;
}
interface CompanyLogo {
name: string;
logo: string;
url?: string;
width?: number;
}
2.5 StatisticsDisplay Component
interface StatisticsDisplayConfig {
stats: StatisticItem[];
layout: 'horizontal' | 'grid' | 'centered';
animateNumbers: boolean;
backgroundVariant: 'transparent' | 'subtle' | 'accent';
}
interface StatisticItem {
value: string | number;
label: string;
suffix?: string;
prefix?: string;
description?: string;
}
Styling Architecture
// Feature components base styles
.feature-grid {
@include mixins.responsive-grid(
$mobile: 1,
$tablet: 2,
$desktop: var(--columns, 3)
);
gap: tokens.$spacing-content-large;
&__item {
@include mixins.card-base();
padding: tokens.$spacing-content-medium;
border-radius: tokens.$border-radius-large;
&:hover {
@include mixins.elevation-hover();
transform: translateY(-2px);
transition: tokens.$transition-medium;
}
}
&__icon {
width: 48px;
height: 48px;
color: tokens.$color-primary-500;
margin-bottom: tokens.$spacing-element-medium;
}
&__title {
@include mixins.typography-heading-small();
margin-bottom: tokens.$spacing-element-small;
}
&__description {
@include mixins.typography-body-medium();
color: tokens.$color-text-secondary;
}
}
Demo Implementation
feature-sections-demowith grid and showcase variantssocial-proof-demowith testimonials and logos- Interactive configuration panels
- Performance optimization examples
Phase 3: Conversion & Call-to-Action
Objective
Implement high-converting components focused on user actions and conversions.
Timeline: 3-4 weeks
Components to Implement
3.1 CTASection Component
interface CTASectionConfig {
title: string;
description?: string;
ctaPrimary: CTAButton;
ctaSecondary?: CTAButton;
backgroundType: 'gradient' | 'pattern' | 'image' | 'solid';
urgency?: UrgencyConfig;
}
interface UrgencyConfig {
type: 'countdown' | 'limited-offer' | 'social-proof';
text: string;
endDate?: Date;
remaining?: number;
}
Features:
- Multiple background variants
- Urgency indicators
- A/B testing data attributes
- Conversion tracking hooks
3.2 PricingTable Component
interface PricingTableConfig {
plans: PricingPlan[];
billingToggle: BillingToggle;
featuresComparison: boolean;
highlightedPlan?: string;
}
interface PricingPlan {
id: string;
name: string;
price: PriceStructure;
features: PricingFeature[];
cta: CTAButton;
badge?: string;
popular?: boolean;
}
interface PriceStructure {
monthly: number;
yearly: number;
currency: string;
suffix?: string; // per user, per month, etc.
}
Integration:
- Use
ui-essentialsTable component for feature comparison - Implement smooth toggle animations
- Apply pricing card hover effects
- Include form validation for CTAs
3.3 NewsletterSignup Component
interface NewsletterSignupConfig {
title: string;
description?: string;
placeholder: string;
ctaText: string;
privacyText?: string;
successMessage: string;
variant: 'inline' | 'modal' | 'sidebar' | 'footer';
}
Features:
- Email validation
- GDPR compliance options
- Success/error states
- Integration with email services
3.4 ContactForm Component
interface ContactFormConfig {
fields: FormField[];
submitText: string;
successMessage: string;
layout: 'single-column' | 'two-column' | 'inline';
validation: ValidationRules;
}
interface FormField {
type: 'text' | 'email' | 'tel' | 'textarea' | 'select' | 'checkbox';
name: string;
label: string;
placeholder?: string;
required: boolean;
options?: SelectOption[];
}
Integration:
- Extend
ui-essentialsform components - Apply
shared-utilsvalidation - Include accessibility features
- Support for custom field types
Advanced Styling
// CTA Section with gradient backgrounds
.cta-section {
@include mixins.section-padding();
position: relative;
overflow: hidden;
&--gradient {
background: linear-gradient(
135deg,
tokens.$color-primary-500 0%,
tokens.$color-primary-700 50%,
tokens.$color-accent-500 100%
);
}
&--pattern {
background-color: tokens.$color-surface-secondary;
background-image: url('data:image/svg+xml,...'); // Pattern SVG
background-size: 60px 60px;
}
&__content {
position: relative;
z-index: 2;
max-width: 800px;
margin: 0 auto;
text-align: center;
}
&__title {
@include mixins.typography-display-medium();
color: tokens.$color-text-on-primary;
margin-bottom: tokens.$spacing-content-medium;
}
}
// Pricing table responsive design
.pricing-table {
@include mixins.responsive-grid(
$mobile: 1,
$tablet: 2,
$desktop: 3
);
gap: tokens.$spacing-content-medium;
&__plan {
@include mixins.card-elevated();
position: relative;
padding: tokens.$spacing-content-large;
border-radius: tokens.$border-radius-large;
&--popular {
border: 2px solid tokens.$color-primary-500;
transform: scale(1.05);
&::before {
content: 'Most Popular';
position: absolute;
top: -12px;
left: 50%;
transform: translateX(-50%);
background: tokens.$color-primary-500;
color: tokens.$color-text-on-primary;
padding: tokens.$spacing-element-small tokens.$spacing-element-medium;
border-radius: tokens.$border-radius-medium;
font-size: tokens.$font-size-small;
font-weight: tokens.$font-weight-semibold;
}
}
}
}
Phase 4: Navigation & Footer
Objective
Create comprehensive navigation and footer systems for complete website layouts.
Timeline: 2-3 weeks
Components to Implement
4.1 LandingHeader Component
interface LandingHeaderConfig {
logo: LogoConfig;
navigation: NavigationItem[];
cta?: CTAButton;
variant: 'transparent' | 'solid' | 'blur';
sticky: boolean;
mobileBreakpoint: number;
}
interface LogoConfig {
src?: string;
text?: string;
href: string;
width?: number;
height?: number;
}
interface NavigationItem {
label: string;
href?: string;
children?: NavigationItem[];
megaMenu?: MegaMenuConfig;
}
Features:
- Smooth scroll spy
- Mobile hamburger menu
- Transparent/solid transitions
- Mega menu support
4.2 MegaMenu Component
interface MegaMenuConfig {
columns: MegaMenuColumn[];
width: 'container' | 'full' | 'auto';
showOnHover: boolean;
}
interface MegaMenuColumn {
title?: string;
items: NavigationItem[];
featured?: FeaturedContent;
}
4.3 FooterSection Component
interface FooterSectionConfig {
columns: FooterColumn[];
newsletter?: NewsletterSignupConfig;
socialLinks?: SocialLink[];
copyright: string;
logo?: LogoConfig;
variant: 'simple' | 'comprehensive' | 'minimal';
}
interface FooterColumn {
title: string;
links: FooterLink[];
}
interface FooterLink {
text: string;
href: string;
external?: boolean;
}
4.4 StickyNavbar Component
interface StickyNavbarConfig extends LandingHeaderConfig {
hideOnScroll: boolean;
showAfter: number; // pixels
shrinkOnScroll: boolean;
}
Navigation Styling
.landing-header {
position: fixed;
top: 0;
left: 0;
right: 0;
z-index: 1000;
transition: tokens.$transition-medium;
&--transparent {
background: transparent;
backdrop-filter: blur(10px);
}
&--solid {
background: tokens.$color-surface-primary;
box-shadow: tokens.$shadow-small;
}
&__container {
@include mixins.container-max-width();
display: flex;
align-items: center;
justify-content: space-between;
padding: tokens.$spacing-element-medium tokens.$spacing-container;
}
&__nav {
display: flex;
align-items: center;
gap: tokens.$spacing-element-large;
@media (max-width: tokens.$breakpoint-tablet) {
display: none;
}
}
&__nav-item {
@include mixins.typography-body-medium();
color: tokens.$color-text-primary;
text-decoration: none;
position: relative;
padding: tokens.$spacing-element-small 0;
&:hover {
color: tokens.$color-primary-500;
}
&::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
width: 0;
height: 2px;
background: tokens.$color-primary-500;
transition: width tokens.$transition-fast;
}
&:hover::after {
width: 100%;
}
}
}
Phase 5: Content Sections & Templates
Objective
Complete the library with supplementary content components and ready-to-use page templates.
Timeline: 4-5 weeks
Components to Implement
5.1 Content Components
FAQSection Component
interface FAQSectionConfig {
title: string;
description?: string;
faqs: FAQItem[];
searchable: boolean;
categories?: string[];
}
interface FAQItem {
id: string;
question: string;
answer: string;
category?: string;
}
TeamGrid Component
interface TeamGridConfig {
title: string;
members: TeamMember[];
columns: 2 | 3 | 4;
showSocial: boolean;
}
interface TeamMember {
name: string;
role: string;
bio?: string;
avatar: string;
social?: SocialLinks;
}
TimelineSection Component
interface TimelineSectionConfig {
title: string;
events: TimelineEvent[];
orientation: 'vertical' | 'horizontal';
variant: 'minimal' | 'detailed' | 'milestone';
}
interface TimelineEvent {
date: string;
title: string;
description: string;
image?: string;
milestone?: boolean;
}
5.2 Page Templates
SaaSLandingPage Template
interface SaaSLandingPageConfig {
hero: HeroSectionConfig;
features: FeatureGridConfig;
socialProof: TestimonialCarouselConfig;
pricing: PricingTableConfig;
cta: CTASectionConfig;
footer: FooterSectionConfig;
}
Template Structure:
- Header with transparent navigation
- Hero section with product demo
- Feature showcase (3-column grid)
- Social proof (testimonials + logo cloud)
- Pricing section
- FAQ section
- Final CTA section
- Comprehensive footer
ProductLandingPage Template
interface ProductLandingPageConfig {
hero: HeroWithImageConfig;
features: FeatureShowcaseConfig;
gallery: ProductGallery;
reviews: ReviewSection;
purchase: PurchaseSection;
}
AgencyLandingPage Template
interface AgencyLandingPageConfig {
hero: HeroSectionConfig;
services: FeatureGridConfig;
portfolio: PortfolioSection;
team: TeamGridConfig;
testimonials: TestimonialCarouselConfig;
contact: ContactFormConfig;
}
Template Implementation
@Component({
selector: 'ui-saas-landing-page',
template: `
<ui-landing-header [config]="config.header"></ui-landing-header>
<main>
<ui-hero-section [config]="config.hero"></ui-hero-section>
<ui-page-section background="subtle">
<ui-feature-grid [config]="config.features"></ui-feature-grid>
</ui-page-section>
<ui-page-section>
<ui-testimonial-carousel [config]="config.testimonials"></ui-testimonial-carousel>
</ui-page-section>
<ui-page-section background="accent">
<ui-pricing-table [config]="config.pricing"></ui-pricing-table>
</ui-page-section>
<ui-page-section>
<ui-faq-section [config]="config.faq"></ui-faq-section>
</ui-page-section>
<ui-cta-section [config]="config.cta"></ui-cta-section>
</main>
<ui-footer-section [config]="config.footer"></ui-footer-section>
`,
styleUrls: ['./saas-landing-page.component.scss']
})
export class SaaSLandingPageComponent {
@Input() config!: SaaSLandingPageConfig;
}
Technical Specifications
Performance Requirements
- Lazy loading for all images
- Code splitting by component category
- Tree-shakeable exports
- Optimal bundle size (<50kb per component category)
- Lighthouse score >90 for demo pages
Accessibility Standards
- WCAG 2.1 AA compliance
- Proper ARIA labels and roles
- Keyboard navigation support
- Screen reader optimization
- Color contrast ratios >4.5:1
Browser Support
- Chrome/Edge 90+
- Firefox 88+
- Safari 14+
- Mobile browsers (iOS Safari, Chrome Mobile)
Testing Strategy
- Unit tests: >90% coverage
- Component integration tests
- Visual regression tests
- Performance benchmarks
- Accessibility automated testing
Documentation Requirements
- Storybook integration
- API documentation with examples
- Usage guidelines
- Design system integration guide
- Migration guides
Integration Checklist
Design System Integration
- Import design tokens correctly
- Use consistent spacing hierarchy
- Apply typography scale
- Implement color system
- Follow component naming conventions
UI Essentials Integration
- Extend existing components where applicable
- Reuse layout components (Container, Flex, Grid)
- Apply consistent button styles
- Use existing form components
- Maintain consistent component API patterns
Animation Integration
- Apply entrance animations
- Add hover/interaction effects
- Implement scroll-triggered animations
- Use consistent easing curves
- Optimize for performance
Utilities Integration
- Use shared validation logic
- Apply common helper functions
- Implement consistent error handling
- Use shared interfaces where applicable
Success Metrics
Development Metrics
- All components implement consistent APIs
- 100% TypeScript coverage
- Zero accessibility violations
- Performance budgets met
- Documentation completeness
Usage Metrics
- Component adoption rate
- Bundle size impact
- Build time impact
- Developer satisfaction scores
- Community contributions
Conclusion
This implementation plan provides a structured approach to building a comprehensive ui-landing-pages library that integrates seamlessly with the existing SSuite ecosystem. By following this phased approach, the team can deliver value incrementally while maintaining high quality standards and consistency across all components.
The resulting library will enable rapid development of professional landing pages and marketing websites while ensuring accessibility, performance, and maintainability standards are met.