Skip to Content
← Home

Projects

Home Page Redesign

Led the technical implementation of ABCmouse.com's home page redesign, developing an optimized image service that reduced load times by 40%. Built a touch-enabled carousel with accessibility features, and architected a JSON configuration system using JSDoc Types. The project showcases effective AI collaboration through strategic prompt engineering and systematic development practices.

  • Svelte
  • SvelteKit
  • Tailwind CSS
  • JSDoc Types

Optimized Image Service

Implemented a sophisticated image handling system that automatically converts and serves WebP formats when supported, with fallbacks. The system includes responsive image loading, lazy loading, and automatic format detection, resulting in a 40% reduction in image load times.

  • WebP Conversion
  • Lazy Loading
  • Responsive Sources
// Here are a few selections from the codebase that demonstrate the image optimization service:

// Example of the WebP conversion function	
/**
	 * Creates WebP variants of image sources
	 * @param {ImageSource[]} sources
	 * @returns {ImageSource[]}
	 */
	static createWebPSources(sources) {
		return sources.flatMap((source) => {
			if (this.isSvgImage(source.srcset)) return [source];

			return [
				{
					...source,
					srcset: source.srcset.replace(this.FORMAT_REGEX, '.webp'),
					type: 'image/webp'
				},
				source
			];
		});
	}

// Basic usage with responsive sources
  <ComponentImage
    sources={content.image.sources}
    imgConfig={{
      alt: content.image.alt,
      class:
        'mb-2 w-full',
      loading: 'lazy'
    }}
  />

// In the component
<picture {...pictureConfig}>
	{#each sources as source}
		<source {...source} />
	{/each}
	<img {...imgConfig} src={sources[sources.length - 1].srcset} />
</picture>

// In the config
  image: {
    sources: [{ srcset: '/example.png' }],
    alt: 'Example'
  }

Smooth Interactive Carousel

Built a touch-enabled, accessible carousel with smooth transitions and automatic content scaling. Features include swipe gestures, keyboard navigation, and responsive design that adapts to any screen size.

  • Touch Events
  • A11y Support
  • Responsive Design
  • Tailwind CSS Animations

JSON Config-Driven Architecture

Engineered a robust configuration system using JSDoc Types that drives the entire page layout and content. This approach enables rapid A/B testing, easy content updates, and maintains strict type safety across all components.

  • JSDoc Types
  • A/B Testing Ready
  • Component Config
            
// Example of the JSON config
const config = {
	header: {
		logoImg: {
			sources: [{ srcset: '/logo.png' }],
			alt: 'ABCmouse logo'
		},
	}
};
                
// Type definition for the configuration object
/**
 * @typedef {object} HomePageConfiguration
 * @property {object} header - The header section of the page.
 * @property {ComponentImage} header.logoImg - The logo image for the header.
 *
 * @typedef {Object} ComponentImage
 * @property {Array<{srcset: string}>} sources - Array of image sources with srcset
 * @property {string} alt - Alt text for the image
 */
 

Productive AI Collaboration

Demonstrated expertise in crafting precise, context-rich prompts that leveraged AI capabilities effectively. Here are some tips I've learned from other developers and my own experience:

Plan + Execute:

Instead of asking AI to implement your feature immediately, break it into a planning and execution step.

Give it a role:

Give the AI a persona like “system architect” or “principal engineer,” particularly at the planning stage, to pack in the right context with minimal effort.

Questions:

When working on ambiguous problems, have it ask you questions to uncover all your hidden requirements and have it implement the feature specific to your needs.

Multiple approaches:

When faced with a bug or feature with an ambiguous solution, ask for multiple approaches. This ensures it doesn’t go down an invalid rabbit hole and lets you be the decision maker of which route to explore more.

Examples:

Rather than listing out all your requirements, give it an example it can follow. It saves you time from writing prompts and forces the AI to follow existing conventions.