Skip to content

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.


PhaseNameTasksCompletedStatus
1Emergency Fixes80PENDING
2Legal, Compliance & Trust80PENDING
3Content & Positioning Overhaul130PENDING
4UI/UX & Accessibility100PENDING
5Performance & Technical Debt140PENDING
  • 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)

Section titled “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

Section titled “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 .html suffix. The translation key becomes meta.services.html.description instead of meta.services.description.
  • Instructions:
    1. Open src/components/SEO.astro and find where the meta description key is constructed
    2. Open src/config/page.config.ts and find useLanguagePage() function
    3. Trace how Astro.url.pathname is parsed to get the page name
    4. Fix: Strip .html suffix from the extracted page slug
    5. Handle special case: homepage (empty slug) should resolve to meta.home.html.title etc.
    6. Run npm run build and verify all 22 pages have proper meta descriptions
  • Acceptance Criteria:
    • npm run build succeeds with 0 errors
    • Every page’s <meta name="description"> contains real descriptive text
    • og:description and twitter:description contain real text
    • Arabic homepage resolves correctly (not meta..html.description)

Task 1.2: Fix Arabic Language Switcher URL

Section titled “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:
    1. Open src/config/page.config.ts
    2. Find getLanguageSwitchLink(currentLang, currentPath) function
    3. Add special handling: if slug is empty, return / for EN or /ar for AR
    4. Ensure no .html suffix is appended to any language switch URL
    5. Test all 22 pages’ language switcher links
  • 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
  • Status: PENDING
  • Priority: CRITICAL
  • Files: src/components/SEO.astro
  • Issue: Arabic pages have broken hreflang: href="https://urwhats.com/ar/.html"
  • Instructions:
    1. In SEO.astro, find where hreflang <link> tags are generated
    2. Ensure URLs don’t contain .html suffix
    3. Ensure homepage URLs are / and /ar (not /.html or /ar/.html)
    4. Ensure no double slashes in URLs
  • Acceptance Criteria:
    • hreflang="en" -> https://urwhats.com/{slug}
    • hreflang="ar" -> https://urwhats.com/ar/{slug}
    • No .html in any hreflang URL

Task 1.4: Fix Canonical URL for Arabic Pages

Section titled “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.html instead of /ar
  • Instructions:
    1. In SEO.astro, find canonical URL generation
    2. Strip .html from generated canonical URLs
    3. Handle homepage: / for EN, /ar for AR
  • Acceptance Criteria:
    • All canonical URLs have no .html suffix
    • English: https://urwhats.com/{slug}
    • Arabic: https://urwhats.com/ar/{slug}
  • 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:
    1. Create a 1200x630px PNG image
    2. Design: Green background (#45b33d gradient), urWhats logo (white), tagline “WhatsApp Business API Platform”, “Meta Technical Provider” badge
    3. Save to public/assets/images/logos/urWhats-og-image.png
    4. Alternative: Use a tool like Canva or generate programmatically
  • Acceptance Criteria:
    • File exists at correct path
    • Image is 1200x630px
    • og:image resolves to valid image in HTML output
  • 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:
    1. Open Navigation.astro
    2. Find the “Start Free Trial” / CTA button
    3. Remove d-none d-md-block class
    4. Either: Show in nav on all sizes, OR add a sticky bottom CTA bar for mobile
    5. Ensure the button links to app.urwhats.com/register (not /contact)
    6. Test on mobile viewport (375px width)
  • 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
  • Status: PENDING
  • Priority: HIGH
  • Files: New src/pages/404.astro
  • Issue: No custom 404 page — users hitting bad URLs see generic error
  • Instructions:
    1. Create src/pages/404.astro
    2. Use the standard Layout component
    3. Show a friendly “Page not found” message in both English and Arabic
    4. Include a “Go Home” button and search/navigation links
    5. Match the site’s design (green theme, brand imagery)
    6. Add to Cloudflare Pages config if needed (public/_redirects)
  • Acceptance Criteria:
    • src/pages/404.astro exists 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)

Section titled “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:
    1. Replace ALL phone numbers (+966547778955, +966544757057, +971509056326) with +966508777669
    2. Update display format: +966 508 777 669
    3. Update WhatsApp link: wa.me/966508777669
    4. Remove secondary phone entirely (contactPhones array in variables.config.ts)
    5. Update sales/contact email references to sales@urwave.com where appropriate
    6. Keep info@urwhats.com for general product inquiries
    7. Keep support@urwhats.com for customer support
    8. Update obfuscated phone in variables.config.ts
    9. 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

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)

Section titled “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:
    1. Replace UAE Federal Decree-Law No. 45 references with Saudi PDPL (Personal Data Protection Law)
    2. Change address from “Hor Al Anz | Dubai | UAE” to “Riyadh, Kingdom of Saudi Arabia”
    3. Add CR number: 7052775355
    4. Add VAT number: 300075277550003
    5. Add legal entity: “urwave Company (Commercial Registration No. 7052775355)”
    6. Standardize phone to +966 54 777 8955 in both languages
    7. Fix Arabic phone number (currently backwards: 971-509056326+)
    8. 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
  • Status: PENDING
  • Priority: HIGH
  • Files: public/assets/i18n/en.json (lines ~530-575), public/assets/i18n/ar.json (lines ~530-575)
  • Instructions:
    1. Change governing law from “UAE” to “Kingdom of Saudi Arabia”
    2. Change courts from “Dubai courts” to “Riyadh courts”
    3. Change address from “Hor Al Anz, Saudi Arabia” to “Riyadh, Kingdom of Saudi Arabia”
    4. Add: “urwave Company (Commercial Registration No. 7052775355), a limited liability company registered in the Kingdom of Saudi Arabia, operating under the trade name ‘urWhats’”
    5. 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

Section titled “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:
    1. Create a “Meta Technical Provider” visual badge/banner
    2. Add to homepage hero section (below main headline)
    3. Add to pricing section header
    4. Add to footer (alongside existing SSL/GDPR badges)
    5. Add translations: EN “Official Meta Technical Provider” / AR “شريك ميتا التقني الرسمي”
    6. 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
  • Status: PENDING
  • Priority: MEDIUM
  • Files: src/components/Footer.astro, public/assets/i18n/en.json, public/assets/i18n/ar.json
  • Instructions:
    1. Add to footer bottom bar: “CR: 7052775355 | VAT: 300075277550003”
    2. Add Arabic: “س.ت: 7052775355 | ضريبة: 300075277550003”
    3. Update copyright: “urwave Company” instead of just “urWhats”
    4. Reference src/components/Footer.astro in urWave site for design pattern (line 127)
  • Acceptance Criteria:
    • CR and VAT visible in footer on all pages
    • Correct in both EN and AR
  • Status: PENDING
  • Priority: HIGH
  • Files: src/components/SEO.astro, public/.well-known/schema.json, public/.well-known/ai-plugin.json
  • Instructions:
    1. Remove aggregateRating from SoftwareApplication schema in SEO.astro
    2. Remove aggregateRating from schema.json
    3. Remove aggregateRating from ai-plugin.json
    4. Do NOT replace with fake data — only add back when real reviews exist (e.g., Trustpilot, G2)
  • Acceptance Criteria:
    • No AggregateRating in any structured data output
    • Rich Results Test passes without warnings
  • Status: PENDING
  • Priority: MEDIUM
  • Files: src/pages/index.astro, src/pages/ar/index.astro, public/assets/images/clients/ (new)
  • Instructions:
    1. Copy client logo images from urWave repo (D:\Work\Website-urWave.com\public\assets\img\clients\ and photos/client-*.webp) to urWhats public/assets/images/clients/
    2. Create a “Trusted By” / “Built by urWave, Trusted by Leading Saudi Organizations” section
    3. Display 6 logos in a row: SIDF, Ministry of Energy, Ministry of Tourism, General Authority for Statistics, Saudi Consulting Services, Naseej
    4. Place between hero and features sections on homepage
    5. Use grayscale filter with color on hover for professional look
  • 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

Section titled “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:
    1. Add a stats bar section (usually above the fold or between sections)
    2. Stats: “500+ Businesses | 1M+ Messages Delivered | 10+ Countries | 99.9% Uptime”
    3. Arabic: “+500 شركة | +1 مليون رسالة | +10 دول | 99.9% وقت التشغيل”
    4. Use count-up animation on scroll (IntersectionObserver pattern already exists)
    5. 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
  • Status: PENDING
  • Priority: MEDIUM
  • Files: src/components/SEO.astro, public/.well-known/schema.json
  • Instructions:
    1. Update Organization schema: addressLocality “Riyadh”, addressCountry “SA”, taxID “7052775355”
    2. Add parentOrganization: “urwave Company”
    3. Update foundingDate to “2025-12-01”
    4. Remove AggregateRating (per Task 2.5)
    5. Update dateModified to use build timestamp (not hardcoded)
    6. 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

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.

  • Status: PENDING
  • Priority: HIGH
  • Files: public/assets/i18n/en.json (hero section), public/assets/i18n/ar.json (hero section)
  • Instructions:
    1. Replace “The Smartest WhatsApp Business Platform” with messaging that includes “Meta Technical Provider” and “Saudi Arabia”
    2. Add sub-badge: “Official Meta Technical Provider | Trusted by Saudi Government Entities”
    3. Update CTA buttons: “Start Free Trial” -> app.urwhats.com/register, “View Plans” -> /prices
    4. Keep the hero stats (10x, 98%, 5x) but verify they’re defensible
    5. See CONTENT-STRATEGY.md for headline options
  • 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:
    1. Currently lists ~8 features in 4 sections
    2. Expand to 7 sections covering all WhatsaMark capabilities (see CONTENT-STRATEGY.md Section “Feature Expansion”)
    3. Each section: title, description, 4-6 bullet points
    4. Use unique illustrations per section (not duplicate images)
    5. Add CTAs at bottom of each section and end of page
  • 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:
    1. Update static-plans.config.ts with 3 plans: Growth (299 SAR), Business (599 SAR), Enterprise (custom)
    2. See @.specs/PRICING-STRATEGY.md for exact feature limits per plan
    3. Update DynamicPlans.astro to show all 3 plans (don’t filter any)
    4. Enterprise plan: “Contact Sales” button -> /contact
    5. Growth/Business: “Start Free Trial” -> app.urwhats.com/register?planid=X
    6. Add “All plans include” section: Meta API, 14-day trial, Salla, Arabic support
    7. Add feature comparison table
  • Status: PENDING
  • Priority: MEDIUM
  • Files: public/assets/i18n/en.json (FAQ sections), public/assets/i18n/ar.json
  • Instructions:
    1. Expand from 15 shallow questions to 25+ detailed answers
    2. See CONTENT-STRATEGY.md “FAQ Rewrite Guidelines” for full question list
    3. Remove duplicate questions between homepage and FAQs page
    4. Homepage: Show 5 highest-converting questions only
    5. FAQ page: Show all 25+ organized by category
    6. Include Saudi-specific questions (PDPL, SAR billing, Arabic support)
  • Status: PENDING
  • Priority: MEDIUM
  • Files: public/assets/i18n/en.json, public/assets/i18n/ar.json
  • Instructions:
    1. Fix 30+ compound word errors (see CONTENT-STRATEGY.md “Compound Word Errors” table)
    2. Fix “7/24” -> “24/7” (3 instances: en.json lines 345, 352, 358)
    3. Fix “Whatsapp” -> “WhatsApp” (en.json line 140)
    4. Remove trailing spaces (en.json lines 98, 127, 130, 131, 136)
    5. Remove double period (en.json line 396)
    6. Fix Arabic brand: “urWave” -> “urWhats” (ar.json line 576)
    7. Fix Arabic phone: 971-509056326+ -> +966547778955 (ar.json line 75)
    8. Fix Arabic grammar: “20 مستخدم” -> “20 مستخدمًا” (ar.json line 207)
  • 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:
    1. Keep HighLevel and Salla sections (they’re good)
    2. Remove false promises about Salesforce/HubSpot/Shopify from meta descriptions
    3. Add “API Integration” section: “Connect any platform via our REST API and Webhooks”
    4. Mention N8N compatibility
    5. Add install links (Salla App Store URL, GHL Marketplace URL)
    6. Add CTA at bottom of page
  • 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:
    1. Add “Start Your Free Trial” CTA section at bottom of every content page
    2. Button links to app.urwhats.com/register
    3. Secondary button: “Contact Sales” -> /contact
    4. Use consistent CTA component (create if needed)
    5. See CONTENT-STRATEGY.md “Pages Needing CTAs” for per-page suggestions

Task 3.8: Add Competitor Positioning Section

Section titled “Task 3.8: Add Competitor Positioning Section”
  • Status: PENDING
  • Priority: LOW
  • Files: src/pages/index.astro or src/pages/services.astro, public/assets/i18n/en.json, public/assets/i18n/ar.json
  • Instructions:
    1. Add “Why Choose urWhats” section comparing to competitors
    2. Highlight: Meta Technical Provider, Saudi company, 84% cheaper than Unifonic, Salla native, Arabic-first
    3. Don’t name competitors directly (say “other platforms” or “enterprise alternatives”)
    4. Use checkmark/cross comparison format
  • Status: PENDING
  • Priority: HIGH
  • Files: src/components/DynamicPlans.astro
  • Instructions:
    1. Find “Choose Plan” button links
    2. Change from /contact to app.urwhats.com/register?planid=X
    3. Ensure planid matches the plan (1 for Growth, 2 for Business)
    4. 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
  • Status: PENDING
  • Priority: MEDIUM
  • Files: public/assets/i18n/ar.json (line 576)
  • Instructions:
    1. Change apps page title from “التطبيقات | urWave” to “التطبيقات | urWhats”
    2. Search for any other instances of “urWave” in ar.json that should be “urWhats”

Task 3.11: Add SAR/USD Currency Toggle to Pricing

Section titled “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:
    1. Add USD prices to static-plans.config.ts alongside SAR: Growth $79, Business $159, Enterprise custom
    2. Add currency toggle (SAR/USD) to DynamicPlans.astro using Alpine.js (pattern: same as monthly/yearly toggle)
    3. Default to SAR
    4. Update currency symbol display: “SAR” / “SR” for Saudi, ”$” / “USD” for international
    5. See @.specs/PRICING-STRATEGY.md for exact USD prices
  • 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

Section titled “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:
    1. Add “AI-Powered Features” section: AI Knowledge Bot, ChatGPT/Claude/Gemini chatbots, AI content generator, AI translation
    2. Add “Ecommerce Integration” section: Abandoned cart recovery, order notifications, COD confirmation, payment reminders
    3. Add “Facebook Leads” mention: Sync FB lead ads directly into WhatsApp conversations
    4. Present all as native urWhats features (never mention underlying platform)
    5. Reference @.context/PLATFORM-FEATURES.md for full feature descriptions

Task 3.13: Update Apps Page for Salla/Zid/API

Section titled “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:
    1. Keep Salla section (enhance with ecommerce plugin features: abandoned cart, COD, order notifications)
    2. Add “Zid Integration — Coming Soon” section with placeholder
    3. Keep HighLevel section
    4. Add “Open API” section: “Connect any platform via our REST API and Webhooks. N8N compatible.”
    5. Remove false meta description claims about Salesforce/HubSpot/Shopify
    6. Add install/action links for each integration

  • 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)
  • 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. Add id="main-content" to main content area.

Task 4.3: Add aria-live for Dynamic Pricing

Section titled “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.
  • 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

Section titled “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.
  • Status: PENDING
  • Priority: LOW
  • Files: src/layouts/Layout.astro or per-page
  • Instructions: Schema breadcrumbs exist but no visible UI breadcrumbs. Add a simple breadcrumb bar.
  • 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

Section titled “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.png and features.png with unique illustrations per service section.
  • Status: PENDING
  • Priority: LOW
  • Files: src/components/DynamicPlans.astro
  • Instructions: Add skeleton/placeholder loading state.

Task 4.10: Add Image Dimensions (Prevent CLS)

Section titled “Task 4.10: Add Image Dimensions (Prevent CLS)”
  • Status: PENDING
  • Priority: MEDIUM
  • Files: All pages with <img> tags
  • Instructions: Add explicit width and height attributes to all images.

  • Status: PENDING
  • Priority: HIGH
  • Files: astro.config.mjs, build config
  • Instructions: Integrate PurgeCSS to remove unused CSS from style.css (~200KB savings).
  • 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.
  • Status: PENDING
  • Priority: MEDIUM
  • Files: public/sitemap.xml
  • Instructions: Delete static sitemap, keep only dynamic src/pages/sitemap-index.xml.ts.
  • Status: PENDING
  • Priority: MEDIUM
  • Files: src/layouts/Layout.astro (line 30)
  • Instructions: Change @3.x.x to specific version (e.g., @3.14.3).
  • Status: PENDING
  • Priority: LOW
  • Files: New .env.example
  • Instructions: Document all environment variables: PUBLIC_GTM_ID, PUBLIC_FORMSPARK_FORM_ID, PUBLIC_TURNSTILE_SITE_KEY.
  • Status: PENDING
  • Priority: LOW
  • Files: New config files
  • Instructions: Add eslint and prettier configs for Astro/TypeScript.
  • 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.
  • Status: PENDING
  • Priority: LOW
  • Files: src/layouts/Layout.astro
  • Instructions: Only load Alpine.js on pages that use it (prices, homepage pricing section).
  • Status: PENDING
  • Priority: MEDIUM
  • Files: public/_headers
  • Instructions: Remove 'unsafe-eval' from CSP (may require GTM adjustments).
  • Status: PENDING
  • Priority: LOW
  • Files: src/layouts/Layout.astro (line 23)
  • Instructions: Ensure Google Fonts URL includes &display=swap parameter (already has it — verify).
  • Status: PENDING
  • Priority: LOW
  • Files: public/sw.js
  • Instructions: Implement build-hash-based cache versioning instead of static v1.
  • Status: PENDING
  • Priority: LOW
  • Files: src/components/SEO.astro
  • Instructions: Find and remove duplicate <meta name="robots"> tag.
  • Status: PENDING
  • Priority: LOW
  • Files: src/components/SEO.astro
  • Instructions: Replace hardcoded dateModified: "2026-01-14" with new Date().toISOString().split('T')[0].

Task 5.14: Consolidate Arabic Pages (Optional)

Section titled “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.

All files that need modification across all phases:

FilePhasesTasks
src/components/SEO.astro1,2,51.1, 1.3, 1.4, 2.5, 2.8, 5.12, 5.13
src/config/page.config.ts11.1, 1.2
src/config/variables.config.ts11.8 (phone/email update)
src/config/static-plans.config.ts33.3, 3.11 (add USD prices)
public/assets/i18n/en.json1,2,31.8, 2.1, 2.2, 2.3, 2.4, 2.7, 3.1-3.13
public/assets/i18n/ar.json1,2,31.8, 2.1, 2.2, 2.3, 2.4, 2.7, 3.1-3.13
src/components/Navigation.astro1,41.6, 4.4, 4.5
src/components/Footer.astro1,21.8, 2.3, 2.4
src/components/DynamicPlans.astro3,43.3, 3.9, 3.11, 4.3
src/pages/index.astro2,32.6, 2.7, 3.1, 3.8
src/pages/ar/index.astro2,32.6, 2.7, 3.1, 3.8
src/pages/services.astro33.2, 3.12
src/pages/apps.astro33.6, 3.13
src/layouts/Layout.astro4,54.2, 5.4, 5.8, 5.10
public/assets/css/custom-overrides.css44.1, 4.4
public/_headers55.9
public/sw.js55.11