Building fon.ai’s Website: My Journey
Inspiration
I’ve spent years fascinated by AI’s promise to reshape customer support. When I saw how fast-growing African startups struggled to scale with limited human agents and Bolt.new's recent elevations in the industry, I knew there was a gap: a sleek, lightweight site that not only explains AI automation but demonstrates it—complete with chatbots, scheduling, and transparent integrations. That mission drove every design and technical decision.
What I Learned and What it Does
- Prompt-driven development: Crafting Bolt prompts taught me how to translate UI/UX requirements into precise, atomic directives—everything from hero animations to embedded blog copy.
- CSS-only magic: I mastered namespace-scoped animations (opacity pulses, translateY loops) and fluid typography with
clamp(). - Progressive enhancement: Wrapping service-worker registration and mobile sidebar logic behind feature flags helped me safeguard functionality in unsupported environments (shout-out StackBlitz!).
- Content as code: Embedding our 80-word knowledge-base articles directly into the prompt showed me how to treat blog data as a first-class, version-controlled asset.
How I Built It
- Design & Prototype: Sketches → Figma mockups → Bolt prompt drafts
- Frontend Tech: HTML5, scoped CSS modules, vanilla JS for toggles & smooth scrolling
- Blog & Chatbot: JSON feeds for blog and services pages, indexed at chatbot init for on-demand answers
- Interactions:
- Hero section:
opacity: 0.6→0.8→0.6+translateY(0→5px→0)loops, purely CSS - “Read more” tabs: in-page expansion with focus traps and escape-key handlers
- Sidebar: iOS-style backdrop blur + slide-in, mobile fix via media queries and JS toggle
- Hero section:
- Deployment & QA: Feature-flagged merges, Lighthouse audits for performance & accessibility, rollback scripts for safety
Challenges Faced
- Service Worker support: StackBlitz’s WebContainer didn’t support PWA registration. I had to stub out the call locally and gate it behind an environment check.
- Mobile sidebar glitches: The slide-in menu initially blocked content and overflowed on small viewports—solved with a
backdrop-filterblur on<body>and stricttransformtransitions. - Content cleanup: Removing all stray “Nigerian format:” boilerplate and dropping the “.com” from our email required a global search-and-replace across templates, JSON schemas, and chat prompts.
- Responsive typography: Balancing readability and layout integrity across 320px–1920px widths meant endless iterations with
clamp()and viewport units.
This project sharpened my ability to turn user stories—hero animations, contact flows, dynamic blogs—into robust, maintainable code. I’m proud that fon.ai’s site not only showcases AI in action but also stands on the pillars of performance, accessibility, and transparent design. The aim now for AI Agency is to establish as a business in the real world and aid prompt business executions.
Code block:
fon.ai Design System
A comprehensive design system implementation for fon.ai web application following exact specifications for optimal performance and accessibility.
🎨 Design Specifications
Typography
- Font: Courier New (monospace)
- Heading Hierarchy: Proper semantic structure (h1-h6)
- Line Height: 1.6 for body text, 1.2 for headings
Color Palette
- Primary Background: #F7F1E1 (cream)
- Primary Text: #333333 (charcoal)
- Primary Accent: #2B7A0B (deep green)
Button Component
- Minimum Width: 180px (auto-adjusting)
- Padding: 12px 24px
- Border: 1px solid charcoal
- Transition: 0.3s smooth
- Hover State: Deep green background, cream text
- Touch Target: Minimum 48px for mobile accessibility
📱 Responsive Design
Breakpoints
- Mobile: 320px - 767px
- Tablet: 768px - 1023px
- Desktop: 1024px+
Layout Behavior
- Mobile: Single column, full-width buttons, stacked cards
- Tablet: 2-column grids where appropriate
- Desktop: 3-column grids, consistent button widths
🏗️ Component Architecture
Core Components
Button- Primary/secondary variants with consistent sizingCard- Reusable content containers with hover effectsGrid- Responsive grid system (1-4 columns)Container- Content width managementSection- Page section wrapper with paddingInput- Form inputs with accessibility featuresHeading- Semantic heading componentsText- Typography component with size/weight variantsProgressiveImage- Optimized image loading
Page Layouts
Homepage
- Full-width hero with cream background
- H1: "AI that works while you sleep..."
- H2: "24/7 AI workflows. No code. Immediate ROI."
- Two centered, equal-width CTAs
Pricing Page
- Charcoal hero section with cream text
- 3-column pricing grid
- Consistent button placement at card bottoms
Blog
- 3-column desktop grid (single column mobile)
- Featured post spans full width
- Cards with cream background and charcoal borders
⚡ Performance Optimizations
Load Time Requirements
- Target: Under 2 seconds
- Progressive Image Loading: Lazy loading with placeholders
- Minimal Animations: Fade-in on scroll only
- Optimized Assets: Compressed images and minified code
Technical Features
- Hardware-accelerated animations
- Intersection Observer for scroll effects
- Debounced scroll events
- Web Vitals tracking (LCP, FID, CLS)
♿ Accessibility Standards
WCAG Compliance
- Contrast Ratios: All combinations meet AA standards (4.5:1 minimum)
- Keyboard Navigation: Full keyboard accessibility
- Screen Reader Support: Proper ARIA labels and semantic HTML
- Focus Management: Visible focus indicators and logical tab order
Accessibility Features
- Skip links for keyboard users
- Proper heading hierarchy
- Touch-friendly targets (48px minimum)
- High contrast mode support
- Reduced motion support
- Screen reader announcements
🛠️ Development
Installation
npm install
Development Server
npm run dev
Build
npm run build
Linting
npm run lint
📁 Project Structure
src/
├── components/
│ ├── DesignSystem.tsx # Core component library
│ ├── Navbar.tsx # Navigation component
│ └── Footer.tsx # Footer component
├── pages/
│ ├── Homepage.tsx # Homepage layout
│ ├── Pricing.tsx # Pricing page layout
│ └── Blog.tsx # Blog page layout
├── utils/
│ ├── performance.ts # Performance utilities
│ └── accessibility.ts # Accessibility helpers
├── index.css # Global styles and design tokens
└── App.tsx # Main application component
🎯 Key Features
Design System Benefits
- Consistency: Unified visual language across all pages
- Maintainability: Centralized component library
- Scalability: Easy to extend and modify
- Performance: Optimized for speed and efficiency
- Accessibility: WCAG AA compliant
Component Features
- TypeScript support for type safety
- Responsive design built-in
- Accessibility features included
- Performance optimizations
- Consistent API across components
📊 Performance Metrics
Target Metrics
- LCP: < 2.5 seconds
- FID: < 100 milliseconds
- CLS: < 0.1
- Lighthouse Score: 90+ across all categories
Optimization Techniques
- Progressive image loading
- Code splitting
- Lazy loading
- Efficient animations
- Minimal JavaScript bundle
🔧 Customization
Design Tokens
All design values are centralized in src/index.css using CSS custom properties and Tailwind configuration.
Component Variants
Components support multiple variants and can be easily extended with new styles while maintaining consistency.
Responsive Behavior
Grid systems and components automatically adapt to different screen sizes using mobile-first responsive design principles.
📝 Usage Examples
Button Component
<Button variant="primary" size="large" href="#contact">
BOOK STRATEGY CALL
</Button>
Grid Layout
<Grid columns={3} gap="lg">
{items.map(item => (
<Card key={item.id}>
<Heading level={3}>{item.title}</Heading>
<Text>{item.description}</Text>
</Card>
))}
</Grid>
Responsive Section
<Section background="charcoal" border>
<Container size="lg">
<Heading level={2} className="text-cream">
Section Title
</Heading>
</Container>
</Section>
This design system provides a solid foundation for building consistent, accessible, and performant web applications while maintaining the unique aesthetic and functionality requirements of the fon.ai brand.
Log in or sign up for Devpost to join the conversation.