You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This document outlines the development plan for building the FlyBirmingham.com website using modern web technologies. The project migrates the existing WordPress site to a new platform with enhanced functionality, improved performance, and easier content management.
What We're Building
Core Airport Features
Flight Search & Schedules - Real-time arrivals and departures with search functionality
Parking Information - Clear display of parking rates and options
Airlines & Destinations - Airline listings with route information and booking links
Interactive Terminal Map - Searchable map with dining, shopping, and gate locations
Milestone: All document and media pages functional
Effort Range: 16-26 hours
Phase 5: Complex Features & Enhancements
What gets done:
Interactive terminal map with search and filtering
Enhanced team/staff pages with LinkedIn and expandable bios
Improved news listing with featured articles and category filters
Contact forms with contact information sidebar
Image carousels for venue and content pages
Milestone: All features complete and polished
Effort Range: 14-22 hours
Note: Terminal map is ported from existing implementation.
Phase 6: Content Migration & Launch Prep
What gets done:
All WordPress content migrated to new system
Images and documents transferred
Content validation and cleanup
Final testing across all pages
Milestone: Site ready for launch with all content in place
Effort Range: 12-20 hours
Client involvement: Content review and approval of migrated content
Effort Summary
Phase
Description
Effort Range
1
Foundation
12-18h
2
Core Airport Functionality
20-32h
3
Content & Display Modules
18-28h
4
Supporting Modules
16-26h
5
Complex Features & Enhancements
14-22h
6
Content Migration & Launch Prep
12-20h
Base Total
92-146h
Buffer (15%)
14-22h
Project Total
106-168h
Realistic estimate: ~140 hours
The tighter range reflects leveraging existing implementations from the current Gatsby site for flight search, flight schedules, and the terminal map. These components are ported and adapted rather than built from scratch.
What We Need From You
Before Development Starts
WordPress API access (read-only credentials)
Flight data API provider identified
Flight API credentials and documentation
During Phase 2
Flight API access confirmed and working
During Phase 6
Content review and approval of migrated pages
Final sign-off before launch
Key Dependencies
Dependency
Impacts
When Needed
WordPress API access
Content migration
Before Phase 6
Asset files (logos, images)
Various pages
Throughout
Risk Factors
Items That Could Affect Timeline
Gatsby Porting Complexity - Some components may have deeper Gatsby/WordPress dependencies than expected. Mitigation: Most React code is portable; we'll isolate platform-specific logic early.
Content Volume - If content is more extensive than estimated, migration may take longer. Mitigation: Prioritize critical pages; AI-assisted migration accelerates the process.
WordPress API Access - If API access is problematic, manual content migration is possible but slower. Mitigation: Request credentials early in Phase 1.
Why the Estimate Range is Tighter
The 106-168 hour range (vs. a wider spread) reflects:
Existing flight search, schedule, and terminal map implementations being ported rather than built new
Proven component patterns from the current site
AI-assisted development and content migration tools
Technology Benefits
The new platform provides:
Faster Performance - Modern architecture for quick page loads
Easier Content Editing - Visual editing interface for content updates
Real-time Preview - See changes before publishing
Mobile Responsive - Optimized for all device sizes
Accessibility Compliant - Built with accessibility standards in mind
SEO Optimized - Structured for search engine visibility
This document outlines the technical implementation plan for building the FlyBirmingham.com website using the Alloy Catalyst framework (Next.js 16 + Sanity CMS + Tailwind 4). The project involves creating 15 new modules, enhancing 6 existing modules, defining 6 new document types, and migrating content from the existing WordPress headless CMS.
Estimated Effort: 106-168 hours (realistic: ~140 hours with buffer)
Key Success Factors:
AI-assisted development (Claude Code) for productivity gains
Existing Gatsby implementations for terminal map and flight API (port to Next.js)
Sanity MCP for streamlined content migration
Phased delivery with clear milestones
Prerequisites & Setup
Before starting development:
Environment Setup
Clone Alloy Catalyst repository
Configure .env.local with Sanity credentials
Verify npm run dev starts successfully
Run npm run generate-types to confirm type generation works
Note: Flight search, flight schedule, and related API integration are ported from existing Gatsby implementation. Work involves adapting React components to Next.js patterns and swapping WordPress data sources for Sanity.
Module Build Order
Build in this order to validate patterns with simpler modules first:
Phase 5: Complex Features & Remaining Enhancements
Milestone: Terminal map functional, all module enhancements complete
Effort Range: 14-22 hours
Complex Module: terminal-map (4-6h) — Ported from Gatsby
Note: Existing implementation in Gatsby site. Work involves porting React components to Next.js and replacing WordPress rich text blocks with Sanity Portable Text.
Schema:
// Fields:// - title (string)// - levels (array)// - name (string) - "Level 1", "Level 2"// - mapImage (image)// - locations (array)// - name (string)// - category (dining | shopping | services | gates)// - coordinates (object) - { x: number, y: number } as percentage// - venue (reference to venue) - optional link
Component:
Level switcher tabs/dropdown
Map image with positioned markers
Search/filter by category
Click marker for popup with venue info
"Get Directions" link (if SDK supports)
Module Enhancements
1. person-list (1.5-3h)
Schema Updates:
// Add to person document or module:defineField({name: 'linkedinUrl',title: 'LinkedIn URL',type: 'url',}),defineField({name: 'extendedBio',title: 'Extended Bio',type: 'richtext',// For modal display}),
HTML → Portable Text (use @portabletext/html-to-portable-text)
WordPress media URLs → Sanity asset references
ACF fields → Sanity object fields
Categories/tags → Sanity references
Step 3: Media Migration (2-6h)
// Download and upload workflowasyncfunctionmigrateMedia(wpMediaUrl: string): Promise<SanityAssetRef>{// 1. Download from WordPress// 2. Upload to Sanity// 3. Return asset reference// 4. Cache URL � ref mapping for content updates}
Considerations:
Batch uploads with rate limiting
Progress tracking
Skip already-migrated assets
Handle missing/broken media gracefully
Step 4: Content Migration (3-8h)
Migration Order:
Document types with no references (destinations, parking-rates)
Document types with simple references (airlines � destinations)
Venues
Pages (with module content)
Blog posts
Validation Per Type:
Required fields populated
References resolve
Rich text renders correctly
Media displays
Step 5: Validation & Cleanup (3-8h)
Automated Checks:
// Validation queriesconstvalidationChecks=[// All venues have hours`*[_type == "venue" && !defined(hours)]`,// All airlines have at least one destination`*[_type == "airline" && count(destinations) == 0]`,// All pages have title`*[_type == "page" && !defined(title)]`,// Orphaned references`*[references(*[_type == "venue"]._id)]`,]
Manual Review:
Spot-check 10% of migrated pages
Verify rich text formatting
Check image quality/sizing
Validate PDF links work
Integration Testing
End-to-End Tests:
Homepage renders all modules
Flight pages show (mock) data
Venue detail pages load
PDF downloads work
Forms submit correctly
Performance Checks:
Page load times < 3s
Image optimization working
No N+1 query issues
Risk Register
High Risk
Risk
Probability
Impact
Mitigation
Gatsby component porting issues
Low
Medium
Most React code is portable; isolate Gatsby-specific logic