urWhats.com - Master Improvement Plan
Last Updated: 2026-02-19 Status: READY FOR EXECUTION Total: 5 Phases, 49 Tasks Estimated Effort: 76-112 hours
HOW TO USE: Any AI agent or developer should read this file to know what to work on next. Find the first task with Status: PENDING in the current phase and execute it. Mark tasks as IN_PROGRESS when starting and COMPLETED when done.
Progress Tracker
| Phase | Name | Tasks | Completed | Status |
|---|---|---|---|---|
| 1 | Emergency Fixes | 8 | 0 | PENDING |
| 2 | Legal, Compliance & Trust | 8 | 0 | PENDING |
| 3 | Content & Positioning Overhaul | 13 | 0 | PENDING |
| 4 | UI/UX & Accessibility | 10 | 0 | PENDING |
| 5 | Performance & Technical Debt | 14 | 0 | PENDING |
Important Notes
- Phone: Use +966 508 777 669 as the ONLY business number (replace all old numbers)
- Sales email: sales@urwave.com (urWave handles sales for all products)
- Company name: "urWave Company" (capital W) -- never "urwave Company"
- NEVER mention "WhatsaMark" on any public page -- internal reference only
- Pricing: SAR primary with SAR/USD toggle
- Salla/Zid: See @.context/SALLA-ZID-STRATEGY.md for marketplace app plans
PHASE 1: Emergency Fixes (CRITICAL -- Do First)
These bugs are actively hurting SEO, conversions, and user experience on the live site. Detailed fix instructions: @.specs/SEO-FIX-PLAN.md
Task 1.1: Fix Meta Description i18n Key Resolution
- Status: PENDING
- Priority: CRITICAL
- Files:
src/components/SEO.astro,src/config/page.config.ts - Issue: All meta descriptions on the live site show raw translation keys (e.g.,
meta.services.html.description) instead of actual text. The og:description, twitter:description, and schema WebPage.description are also broken. - Root Cause: Page slug extraction includes
.htmlsuffix. The translation key becomesmeta.services.html.descriptioninstead ofmeta.services.description. - Instructions:
- Open
src/components/SEO.astroand find where the meta description key is constructed - Open
src/config/page.config.tsand finduseLanguagePage()function - Trace how
Astro.url.pathnameis parsed to get the page name - Fix: Strip
.htmlsuffix from the extracted page slug - Handle special case: homepage (empty slug) should resolve to
meta.home.html.titleetc. - Run
npm run buildand verify all 22 pages have proper meta descriptions
- Open
- Acceptance Criteria:
-
npm run buildsucceeds with 0 errors - Every page's
<meta name="description">contains real descriptive text -
og:descriptionandtwitter:descriptioncontain real text - Arabic homepage resolves correctly (not
meta..html.description)
-
Task 1.2: Fix Arabic Language Switcher URL
- Status: PENDING
- Priority: CRITICAL
- Files:
src/config/page.config.ts - Issue: On
/ar(Arabic homepage), the EN switch links to/.html(404) - Root Cause:
getLanguageSwitchLink()doesn't handle homepage (empty slug) correctly - Instructions:
- Open
src/config/page.config.ts - Find
getLanguageSwitchLink(currentLang, currentPath)function - Add special handling: if slug is empty, return
/for EN or/arfor AR - Ensure no
.htmlsuffix is appended to any language switch URL - Test all 22 pages' language switcher links
- Open
- Acceptance Criteria:
-
/ar-> EN link goes to/ -
/-> AR link goes to/ar -
/ar/services-> EN link goes to/services -
/services-> AR link goes to/ar/services - No language switch URL contains
.html
-
Task 1.3: Fix Hreflang Alternate URLs
- Status: PENDING
- Priority: CRITICAL
- Files:
src/components/SEO.astro - Issue: Arabic pages have broken hreflang:
href="https://urwhats.com/ar/.html" - Instructions:
- In
SEO.astro, find where hreflang<link>tags are generated - Ensure URLs don't contain
.htmlsuffix - Ensure homepage URLs are
/and/ar(not/.htmlor/ar/.html) - Ensure no double slashes in URLs
- In
- Acceptance Criteria:
-
hreflang="en"->https://urwhats.com/{slug} -
hreflang="ar"->https://urwhats.com/ar/{slug} - No
.htmlin any hreflang URL
-
Task 1.4: Fix Canonical URL for Arabic Pages
- Status: PENDING
- Priority: HIGH
- Files:
src/components/SEO.astro - Issue: Arabic homepage canonical is
https://urwhats.com/ar.htmlinstead of/ar - Instructions:
- In
SEO.astro, find canonical URL generation - Strip
.htmlfrom generated canonical URLs - Handle homepage:
/for EN,/arfor AR
- In
- Acceptance Criteria:
- All canonical URLs have no
.htmlsuffix - English:
https://urwhats.com/{slug} - Arabic:
https://urwhats.com/ar/{slug}
- All canonical URLs have no
Task 1.5: Create OG Image
- Status: PENDING
- Priority: HIGH
- Files: New file at
public/assets/images/logos/urWhats-og-image.png - Issue: OG image is referenced in SEO.astro but file doesn't exist
- Instructions:
- Create a 1200x630px PNG image
- Design: Green background (#45b33d gradient), urWhats logo (white), tagline "WhatsApp Business API Platform", "Meta Technical Provider" badge
- Save to
public/assets/images/logos/urWhats-og-image.png - Alternative: Use a tool like Canva or generate programmatically
- Acceptance Criteria:
- File exists at correct path
- Image is 1200x630px
-
og:imageresolves to valid image in HTML output
Task 1.6: Make CTA Visible on Mobile
- Status: PENDING
- Priority: HIGH
- Files:
src/components/Navigation.astro - Issue: "Start Free Trial" button has
d-none d-md-block-- invisible on mobile (the most important conversion button) - Instructions:
- Open
Navigation.astro - Find the "Start Free Trial" / CTA button
- Remove
d-none d-md-blockclass - Either: Show in nav on all sizes, OR add a sticky bottom CTA bar for mobile
- Ensure the button links to
app.urwhats.com/register(not/contact) - Test on mobile viewport (375px width)
- Open
- Acceptance Criteria:
- CTA button visible on mobile (375px viewport)
- Links to
app.urwhats.com/register - Doesn't break nav layout on mobile
- Works in both EN and AR
Task 1.7: Create 404 Page
- Status: PENDING
- Priority: HIGH
- Files: New
src/pages/404.astro - Issue: No custom 404 page -- users hitting bad URLs see generic error
- Instructions:
- Create
src/pages/404.astro - Use the standard Layout component
- Show a friendly "Page not found" message in both English and Arabic
- Include a "Go Home" button and search/navigation links
- Match the site's design (green theme, brand imagery)
- Add to Cloudflare Pages config if needed (
public/_redirects)
- Create
- Acceptance Criteria:
-
src/pages/404.astroexists and builds successfully - Shows branded 404 page with navigation options
- Works in both languages (detect from URL prefix)
-
Task 1.8: Update Contact Info (Phone + Email)
- Status: PENDING
- Priority: HIGH
- Files:
src/config/variables.config.ts,public/assets/i18n/en.json,public/assets/i18n/ar.json,src/components/Footer.astro,public/llms.txt,public/llms-full.txt,public/.well-known/schema.json,public/.well-known/ai-plugin.json,public/security.txt - Instructions:
- Replace ALL phone numbers (+966547778955, +966544757057, +971509056326) with +966508777669
- Update display format: +966 508 777 669
- Update WhatsApp link: wa.me/966508777669
- Remove secondary phone entirely (contactPhones array in variables.config.ts)
- Update sales/contact email references to sales@urwave.com where appropriate
- Keep info@urwhats.com for general product inquiries
- Keep support@urwhats.com for customer support
- Update obfuscated phone in variables.config.ts
- Search entire codebase for old phone numbers and replace ALL instances
- Acceptance Criteria:
- Only one phone number appears: +966 508 777 669
- WhatsApp FAB links to wa.me/966508777669
- No old phone numbers remain anywhere in codebase
- Sales email is sales@urwave.com in footer and contact sections
PHASE 2: Legal, Compliance & Trust
Fix legal contradictions, add Saudi compliance info, build credibility. Reference: @.context/COMPANY-INFO.md for all legal details.
Task 2.1: Update Privacy Policy (Saudi PDPL)
- Status: PENDING
- Priority: HIGH
- Files:
public/assets/i18n/en.json(lines 55-80),public/assets/i18n/ar.json(lines 55-80) - Instructions:
- Replace UAE Federal Decree-Law No. 45 references with Saudi PDPL (Personal Data Protection Law)
- Change address from "Hor Al Anz | Dubai | UAE" to "Riyadh, Kingdom of Saudi Arabia"
- Add CR number: 7052775355
- Add VAT number: 300075277550003
- Add legal entity: "urwave Company (Commercial Registration No. 7052775355)"
- Standardize phone to +966 54 777 8955 in both languages
- Fix Arabic phone number (currently backwards:
971-509056326+) - Change governing references from UAE to Saudi Arabia
- Acceptance Criteria:
- No references to UAE/Dubai in privacy policy
- Saudi PDPL mentioned as governing privacy law
- CR and VAT numbers displayed
- Same phone number in both EN and AR versions
Task 2.2: Update Terms of Service
- Status: PENDING
- Priority: HIGH
- Files:
public/assets/i18n/en.json(lines ~530-575),public/assets/i18n/ar.json(lines ~530-575) - Instructions:
- Change governing law from "UAE" to "Kingdom of Saudi Arabia"
- Change courts from "Dubai courts" to "Riyadh courts"
- Change address from "Hor Al Anz, Saudi Arabia" to "Riyadh, Kingdom of Saudi Arabia"
- Add: "urwave Company (Commercial Registration No. 7052775355), a limited liability company registered in the Kingdom of Saudi Arabia, operating under the trade name 'urWhats'"
- Add CR and VAT numbers
- Acceptance Criteria:
- Governing law is Saudi Arabia
- Court jurisdiction is Riyadh
- Legal entity properly identified
- No references to Hor Al Anz or Dubai
Task 2.3: Add Meta Technical Provider Badge
- Status: PENDING
- Priority: HIGH
- Files:
src/pages/index.astro,src/pages/ar/index.astro,src/components/Footer.astro,public/assets/i18n/en.json,public/assets/i18n/ar.json - Instructions:
- Create a "Meta Technical Provider" visual badge/banner
- Add to homepage hero section (below main headline)
- Add to pricing section header
- Add to footer (alongside existing SSL/GDPR badges)
- Add translations: EN "Official Meta Technical Provider" / AR "شريك ميتا التقني الرسمي"
- Optional: Include Meta/WhatsApp logo if allowed
- Acceptance Criteria:
- Badge visible on homepage hero
- Badge visible on pricing section
- Badge in footer
- Works in both EN and AR
Task 2.4: Add CR & VAT to Footer
- Status: PENDING
- Priority: MEDIUM
- Files:
src/components/Footer.astro,public/assets/i18n/en.json,public/assets/i18n/ar.json - Instructions:
- Add to footer bottom bar: "CR: 7052775355 | VAT: 300075277550003"
- Add Arabic: "س.ت: 7052775355 | ضريبة: 300075277550003"
- Update copyright: "urwave Company" instead of just "urWhats"
- Reference
src/components/Footer.astroin urWave site for design pattern (line 127)
- Acceptance Criteria:
- CR and VAT visible in footer on all pages
- Correct in both EN and AR
Task 2.5: Remove Fake AggregateRating
- Status: PENDING
- Priority: HIGH
- Files:
src/components/SEO.astro,public/.well-known/schema.json,public/.well-known/ai-plugin.json - Instructions:
- Remove
aggregateRatingfrom SoftwareApplication schema in SEO.astro - Remove
aggregateRatingfrom schema.json - Remove
aggregateRatingfrom ai-plugin.json - Do NOT replace with fake data -- only add back when real reviews exist (e.g., Trustpilot, G2)
- Remove
- Acceptance Criteria:
- No AggregateRating in any structured data output
- Rich Results Test passes without warnings
Task 2.6: Add Client Logo Section
- Status: PENDING
- Priority: MEDIUM
- Files:
src/pages/index.astro,src/pages/ar/index.astro,public/assets/images/clients/(new) - Instructions:
- Copy client logo images from urWave repo (
D:\Work\Website-urWave.com\public\assets\img\clients\andphotos/client-*.webp) to urWhatspublic/assets/images/clients/ - Create a "Trusted By" / "Built by urWave, Trusted by Leading Saudi Organizations" section
- Display 6 logos in a row: SIDF, Ministry of Energy, Ministry of Tourism, General Authority for Statistics, Saudi Consulting Services, Naseej
- Place between hero and features sections on homepage
- Use grayscale filter with color on hover for professional look
- Copy client logo images from urWave repo (
- Acceptance Criteria:
- 6 client logos displayed on homepage
- Works in both EN and AR
- Responsive (stack on mobile)
Task 2.7: Add Stats-Based Social Proof Bar
- Status: PENDING
- Priority: MEDIUM
- Files:
src/pages/index.astro,src/pages/ar/index.astro,public/assets/i18n/en.json,public/assets/i18n/ar.json - Instructions:
- Add a stats bar section (usually above the fold or between sections)
- Stats: "500+ Businesses | 1M+ Messages Delivered | 10+ Countries | 99.9% Uptime"
- Arabic: "+500 شركة | +1 مليون رسالة | +10 دول | 99.9% وقت التشغيل"
- Use count-up animation on scroll (IntersectionObserver pattern already exists)
- Note: Ask owner for real numbers from app.urwhats.com -- use conservative estimates until confirmed
- Acceptance Criteria:
- Stats bar visible on homepage
- Numbers are reasonable and defensible
- Works in both EN and AR
Task 2.8: Fix Schema.org Structured Data
- Status: PENDING
- Priority: MEDIUM
- Files:
src/components/SEO.astro,public/.well-known/schema.json - Instructions:
- Update Organization schema: addressLocality "Riyadh", addressCountry "SA", taxID "7052775355"
- Add parentOrganization: "urwave Company"
- Update foundingDate to "2025-12-01"
- Remove AggregateRating (per Task 2.5)
- Update dateModified to use build timestamp (not hardcoded)
- Fix sameAs URLs (verify Twitter, Facebook, LinkedIn URLs actually exist)
- Acceptance Criteria:
- Organization address is Riyadh, SA
- taxID is CR number
- No fake review data
- dateModified updates on each build
PHASE 3: Content & Positioning Overhaul
Rewrite copy to compete with Unifonic/SleekFlow, leverage all WhatsaMark features. Reference: @.specs/CONTENT-STRATEGY.md for messaging framework. Reference: @.context/PLATFORM-FEATURES.md for feature inventory. Reference: @.context/COMPETITIVE-LANDSCAPE.md for positioning.
Task 3.1: Rewrite Hero Messaging
- Status: PENDING
- Priority: HIGH
- Files:
public/assets/i18n/en.json(hero section),public/assets/i18n/ar.json(hero section) - Instructions:
- Replace "The Smartest WhatsApp Business Platform" with messaging that includes "Meta Technical Provider" and "Saudi Arabia"
- Add sub-badge: "Official Meta Technical Provider | Trusted by Saudi Government Entities"
- Update CTA buttons: "Start Free Trial" ->
app.urwhats.com/register, "View Plans" ->/prices - Keep the hero stats (10x, 98%, 5x) but verify they're defensible
- See CONTENT-STRATEGY.md for headline options
Task 3.2: Expand Features Section
- Status: PENDING
- Priority: HIGH
- Files:
public/assets/i18n/en.json,public/assets/i18n/ar.json,src/pages/services.astro,src/pages/ar/services.astro - Instructions:
- Currently lists ~8 features in 4 sections
- Expand to 7 sections covering all WhatsaMark capabilities (see CONTENT-STRATEGY.md Section "Feature Expansion")
- Each section: title, description, 4-6 bullet points
- Use unique illustrations per section (not duplicate images)
- Add CTAs at bottom of each section and end of page
Task 3.3: Restructure Pricing to 3 Plans
- Status: PENDING
- Priority: HIGH
- Files:
src/config/static-plans.config.ts,src/components/DynamicPlans.astro,public/assets/i18n/en.json,public/assets/i18n/ar.json - Instructions:
- Update
static-plans.config.tswith 3 plans: Growth (299 SAR), Business (599 SAR), Enterprise (custom) - See @.specs/PRICING-STRATEGY.md for exact feature limits per plan
- Update DynamicPlans.astro to show all 3 plans (don't filter any)
- Enterprise plan: "Contact Sales" button ->
/contact - Growth/Business: "Start Free Trial" ->
app.urwhats.com/register?planid=X - Add "All plans include" section: Meta API, 14-day trial, Salla, Arabic support
- Add feature comparison table
- Update
Task 3.4: Rewrite FAQs
- Status: PENDING
- Priority: MEDIUM
- Files:
public/assets/i18n/en.json(FAQ sections),public/assets/i18n/ar.json - Instructions:
- Expand from 15 shallow questions to 25+ detailed answers
- See CONTENT-STRATEGY.md "FAQ Rewrite Guidelines" for full question list
- Remove duplicate questions between homepage and FAQs page
- Homepage: Show 5 highest-converting questions only
- FAQ page: Show all 25+ organized by category
- Include Saudi-specific questions (PDPL, SAR billing, Arabic support)
Task 3.5: Fix All Content Typos
- Status: PENDING
- Priority: MEDIUM
- Files:
public/assets/i18n/en.json,public/assets/i18n/ar.json - Instructions:
- Fix 30+ compound word errors (see CONTENT-STRATEGY.md "Compound Word Errors" table)
- Fix "7/24" -> "24/7" (3 instances: en.json lines 345, 352, 358)
- Fix "Whatsapp" -> "WhatsApp" (en.json line 140)
- Remove trailing spaces (en.json lines 98, 127, 130, 131, 136)
- Remove double period (en.json line 396)
- Fix Arabic brand: "urWave" -> "urWhats" (ar.json line 576)
- Fix Arabic phone:
971-509056326+->+966547778955(ar.json line 75) - Fix Arabic grammar: "20 مستخدم" -> "20 مستخدمًا" (ar.json line 207)
Task 3.6: Update Apps/Integrations Page
- Status: PENDING
- Priority: MEDIUM
- Files:
public/assets/i18n/en.json(apps section),public/assets/i18n/ar.json,src/pages/apps.astro,src/pages/ar/apps.astro - Instructions:
- Keep HighLevel and Salla sections (they're good)
- Remove false promises about Salesforce/HubSpot/Shopify from meta descriptions
- Add "API Integration" section: "Connect any platform via our REST API and Webhooks"
- Mention N8N compatibility
- Add install links (Salla App Store URL, GHL Marketplace URL)
- Add CTA at bottom of page
Task 3.7: Add CTAs to All Content Pages
- Status: PENDING
- Priority: MEDIUM
- Files:
src/pages/services.astro,src/pages/use-cases.astro,src/pages/faqs.astro,src/pages/by-industry.astro,src/pages/by-role.astro+ Arabic equivalents - Instructions:
- Add "Start Your Free Trial" CTA section at bottom of every content page
- Button links to
app.urwhats.com/register - Secondary button: "Contact Sales" ->
/contact - Use consistent CTA component (create if needed)
- See CONTENT-STRATEGY.md "Pages Needing CTAs" for per-page suggestions
Task 3.8: Add Competitor Positioning Section
- Status: PENDING
- Priority: LOW
- Files:
src/pages/index.astroorsrc/pages/services.astro,public/assets/i18n/en.json,public/assets/i18n/ar.json - Instructions:
- Add "Why Choose urWhats" section comparing to competitors
- Highlight: Meta Technical Provider, Saudi company, 84% cheaper than Unifonic, Salla native, Arabic-first
- Don't name competitors directly (say "other platforms" or "enterprise alternatives")
- Use checkmark/cross comparison format
Task 3.9: Fix Pricing Page Links
- Status: PENDING
- Priority: HIGH
- Files:
src/components/DynamicPlans.astro - Instructions:
- Find "Choose Plan" button links
- Change from
/contacttoapp.urwhats.com/register?planid=X - Ensure planid matches the plan (1 for Growth, 2 for Business)
- Enterprise button should go to
/contact
- Acceptance Criteria:
- Growth plan ->
app.urwhats.com/register?planid=1 - Business plan ->
app.urwhats.com/register?planid=2 - Enterprise ->
/contact
- Growth plan ->
Task 3.10: Fix Arabic Brand Name Error
- Status: PENDING
- Priority: MEDIUM
- Files:
public/assets/i18n/ar.json(line 576) - Instructions:
- Change apps page title from "التطبيقات | urWave" to "التطبيقات | urWhats"
- Search for any other instances of "urWave" in ar.json that should be "urWhats"
Task 3.11: Add SAR/USD Currency Toggle to Pricing
- Status: PENDING
- Priority: HIGH
- Files:
src/config/static-plans.config.ts,src/components/DynamicPlans.astro - Instructions:
- Add USD prices to
static-plans.config.tsalongside SAR: Growth $79, Business $159, Enterprise custom - Add currency toggle (SAR/USD) to DynamicPlans.astro using Alpine.js (pattern: same as monthly/yearly toggle)
- Default to SAR
- Update currency symbol display: "SAR" / "SR" for Saudi, "$" / "USD" for international
- See @.specs/PRICING-STRATEGY.md for exact USD prices
- Add USD prices to
- Acceptance Criteria:
- Currency toggle switches between SAR and USD
- Prices update correctly for both currencies
- Works alongside monthly/yearly toggle
- Works in both EN and AR
Task 3.12: Add AI & Ecommerce Features to Services Page
- Status: PENDING
- Priority: MEDIUM
- Files:
public/assets/i18n/en.json,public/assets/i18n/ar.json,src/pages/services.astro,src/pages/ar/services.astro - Instructions:
- Add "AI-Powered Features" section: AI Knowledge Bot, ChatGPT/Claude/Gemini chatbots, AI content generator, AI translation
- Add "Ecommerce Integration" section: Abandoned cart recovery, order notifications, COD confirmation, payment reminders
- Add "Facebook Leads" mention: Sync FB lead ads directly into WhatsApp conversations
- Present all as native urWhats features (never mention underlying platform)
- Reference @.context/PLATFORM-FEATURES.md for full feature descriptions
Task 3.13: Update Apps Page for Salla/Zid/API
- Status: PENDING
- Priority: MEDIUM
- Files:
public/assets/i18n/en.json,public/assets/i18n/ar.json,src/pages/apps.astro,src/pages/ar/apps.astro - Instructions:
- Keep Salla section (enhance with ecommerce plugin features: abandoned cart, COD, order notifications)
- Add "Zid Integration -- Coming Soon" section with placeholder
- Keep HighLevel section
- Add "Open API" section: "Connect any platform via our REST API and Webhooks. N8N compatible."
- Remove false meta description claims about Salesforce/HubSpot/Shopify
- Add install/action links for each integration
PHASE 4: UI/UX & Accessibility
Task 4.1: Fix Color Contrast (WCAG AA)
- Status: PENDING
- Priority: HIGH
- Files:
public/assets/css/custom-overrides.css,public/assets/css/colors/green.css - Instructions: Darken primary green from #45b33d to at least #2d7a27 for text on white backgrounds (need 4.5:1 ratio for WCAG AA)
Task 4.2: Add Skip Navigation Link
- Status: PENDING
- Priority: HIGH
- Files:
src/layouts/Layout.astro - Instructions: Add
<a class="skip-link" href="#main-content">Skip to content</a>as first element in body. CSS already exists in custom-overrides.css. Addid="main-content"to main content area.
Task 4.3: Add aria-live for Dynamic Pricing
- Status: PENDING
- Priority: MEDIUM
- Files:
src/components/DynamicPlans.astro - Instructions: Add
aria-live="polite"to the price display region so screen readers announce price changes when toggling monthly/yearly.
Task 4.4: Add Mobile Nav Backdrop
- Status: PENDING
- Priority: MEDIUM
- Files:
src/components/Navigation.astro,public/assets/css/custom-overrides.css - Instructions: Add a dark overlay behind the mobile drawer when open.
Task 4.5: Add Focus Trapping to Mobile Nav
- Status: PENDING
- Priority: MEDIUM
- Files:
src/components/Navigation.astro - Instructions: Trap tab focus within the mobile nav when it's open.
Task 4.6: Add Visual Breadcrumbs
- Status: PENDING
- Priority: LOW
- Files:
src/layouts/Layout.astroor per-page - Instructions: Schema breadcrumbs exist but no visible UI breadcrumbs. Add a simple breadcrumb bar.
Task 4.7: Normalize URL Casing
- Status: PENDING
- Priority: MEDIUM
- Files:
src/pages/Privacy.astro,src/pages/Terms.astro,src/pages/ar/Privacy.astro,src/pages/ar/Terms.astro,public/_redirects - Instructions: Rename to lowercase, add 301 redirects, update all internal links. See SEO-FIX-PLAN.md Fix 9.
Task 4.8: Use Unique Illustrations per Service
- Status: PENDING
- Priority: MEDIUM
- Files:
src/pages/services.astro,src/pages/ar/services.astro - Instructions: Replace duplicate
platform.pngandfeatures.pngwith unique illustrations per service section.
Task 4.9: Add Loading States for Pricing
- Status: PENDING
- Priority: LOW
- Files:
src/components/DynamicPlans.astro - Instructions: Add skeleton/placeholder loading state.
Task 4.10: Add Image Dimensions (Prevent CLS)
- Status: PENDING
- Priority: MEDIUM
- Files: All pages with
<img>tags - Instructions: Add explicit
widthandheightattributes to all images.
PHASE 5: Performance & Technical Debt
Task 5.1: PurgeCSS on Bootstrap/Theme
- Status: PENDING
- Priority: HIGH
- Files:
astro.config.mjs, build config - Instructions: Integrate PurgeCSS to remove unused CSS from
style.css(~200KB savings).
Task 5.2: Delete Dead Code
- Status: PENDING
- Priority: MEDIUM
- Files:
src/components/Plans.astro,public/assets/css/colors/(unused themes),public/assets/css/fonts/(unused font CSS) - Instructions: Remove Plans.astro (583 lines, fully commented out), unused color themes (red, sky, yellow), unused font CSS files.
Task 5.3: Remove Duplicate Sitemap
- Status: PENDING
- Priority: MEDIUM
- Files:
public/sitemap.xml - Instructions: Delete static sitemap, keep only dynamic
src/pages/sitemap-index.xml.ts.
Task 5.4: Pin Alpine.js Version
- Status: PENDING
- Priority: MEDIUM
- Files:
src/layouts/Layout.astro(line 30) - Instructions: Change
@3.x.xto specific version (e.g.,@3.14.3).
Task 5.5: Add .env.example
- Status: PENDING
- Priority: LOW
- Files: New
.env.example - Instructions: Document all environment variables: PUBLIC_GTM_ID, PUBLIC_FORMSPARK_FORM_ID, PUBLIC_TURNSTILE_SITE_KEY.
Task 5.6: Add ESLint + Prettier
- Status: PENDING
- Priority: LOW
- Files: New config files
- Instructions: Add eslint and prettier configs for Astro/TypeScript.
Task 5.7: Convert PNG to WebP
- Status: PENDING
- Priority: MEDIUM
- Files: Illustration PNGs in
public/assets/images/ - Instructions: Use Astro's
<Image>component for automatic WebP conversion, or batch convert PNGs.
Task 5.8: Conditionally Load Alpine.js
- Status: PENDING
- Priority: LOW
- Files:
src/layouts/Layout.astro - Instructions: Only load Alpine.js on pages that use it (prices, homepage pricing section).
Task 5.9: Improve CSP
- Status: PENDING
- Priority: MEDIUM
- Files:
public/_headers - Instructions: Remove
'unsafe-eval'from CSP (may require GTM adjustments).
Task 5.10: Add font-display swap
- Status: PENDING
- Priority: LOW
- Files:
src/layouts/Layout.astro(line 23) - Instructions: Ensure Google Fonts URL includes
&display=swapparameter (already has it -- verify).
Task 5.11: Update Service Worker Cache
- Status: PENDING
- Priority: LOW
- Files:
public/sw.js - Instructions: Implement build-hash-based cache versioning instead of static
v1.
Task 5.12: Remove Duplicate Robots Meta
- Status: PENDING
- Priority: LOW
- Files:
src/components/SEO.astro - Instructions: Find and remove duplicate
<meta name="robots">tag.
Task 5.13: Auto-Update dateModified
- Status: PENDING
- Priority: LOW
- Files:
src/components/SEO.astro - Instructions: Replace hardcoded
dateModified: "2026-01-14"withnew Date().toISOString().split('T')[0].
Task 5.14: Consolidate Arabic Pages (Optional)
- Status: PENDING
- Priority: LOW
- Files:
src/pages/restructure - Instructions: Replace 11 duplicate Arabic page files with a
[lang]dynamic route. High effort but eliminates maintenance burden.
Appendix: File Index
All files that need modification across all phases:
| File | Phases | Tasks |
|---|---|---|
src/components/SEO.astro |
1,2,5 | 1.1, 1.3, 1.4, 2.5, 2.8, 5.12, 5.13 |
src/config/page.config.ts |
1 | 1.1, 1.2 |
src/config/variables.config.ts |
1 | 1.8 (phone/email update) |
src/config/static-plans.config.ts |
3 | 3.3, 3.11 (add USD prices) |
public/assets/i18n/en.json |
1,2,3 | 1.8, 2.1, 2.2, 2.3, 2.4, 2.7, 3.1-3.13 |
public/assets/i18n/ar.json |
1,2,3 | 1.8, 2.1, 2.2, 2.3, 2.4, 2.7, 3.1-3.13 |
src/components/Navigation.astro |
1,4 | 1.6, 4.4, 4.5 |
src/components/Footer.astro |
1,2 | 1.8, 2.3, 2.4 |
src/components/DynamicPlans.astro |
3,4 | 3.3, 3.9, 3.11, 4.3 |
src/pages/index.astro |
2,3 | 2.6, 2.7, 3.1, 3.8 |
src/pages/ar/index.astro |
2,3 | 2.6, 2.7, 3.1, 3.8 |
src/pages/services.astro |
3 | 3.2, 3.12 |
src/pages/apps.astro |
3 | 3.6, 3.13 |
src/layouts/Layout.astro |
4,5 | 4.2, 5.4, 5.8, 5.10 |
public/assets/css/custom-overrides.css |
4 | 4.1, 4.4 |
public/_headers |
5 | 5.9 |
public/sw.js |
5 | 5.11 |