Inicio / Registro de Cambios Registro de Cambios Remove 2000FUN Kowloon Bay (Amoy Plaza) Removed 2000FUN (Shop S106, 2/F, Amoy Plaza Phase 2, Kowloon Bay) Kowloon Bay district (only store in district, section removed) Temporarily Hide Bepower (Kwai Fong) Changes Hidden: Bepower (Shop B78, 1/F, Kwai Chung Plaza, Kwai Fong) May be restored later Temporarily Hide 2 Wan Chai PhoneStore Locations Changes Hidden: PhoneStore (Shop 260, 2/F, Wan Chai Computer Centre) Hidden: PhoneStore (Shop 126A, 1/F, Wan Chai Computer Centre) May be restored later Added X Telecom (Tai Wai) as Star Partner Added ⭐ X Telecom (Tai Wai) — Shop 134, Kam Hei Shopping Centre, 55-56 Tai Wai Road New district: Tai Wai Meta Tags SEO Optimization: OG Image, Title, Description Added 1200×630 OG Image for social sharing (replaces old 512×512 icon) meta robots tag twitter:site tag (@b4travelsim) Independent homepage title/description translations for all 11 languages Changes Homepage title changed to Q&A format for better AI citability Homepage description updated store count (20+ → 30+) with stronger CTA H1 changed from "#TrustedChoice" to "Authorized Stores in HK" for title alignment og:image dimensions changed from 512×512 to 1200×630 (optimal for social sharing) Unify PhoneStore Display Name + Remove Tai Po 2000FUN Changes All 7 PhoneStore stores now display as "PhoneStore" (district suffix removed) Removed Tai Po 2000FUN store Data Changes Star Partners: 29 → 28 (-1) Star Districts: 16 → 15 (Tai Po removed) Total pages: -11 (tai-po-2000fun × 11 languages) Added 7 PhoneStore (豐達) Star Partner Stores Added ⭐ PhoneStore (Wan Chai 260) — Shop 260, 2/F, Wan Chai Computer Centre ⭐ PhoneStore (Wan Chai 126A) — Shop 126A, 1/F, Wan Chai Computer Centre ⭐ PhoneStore (Yuen Long) — Shop 1B, G/F, 1 Sau Fu Street ⭐ PhoneStore (San Po Kong Office) — Room 1208, Kenning Industrial Building (Mon-Fri 10:00-19:00) ⭐ PhoneStore (Tuen Mun) — Shop S123, Oi Tin Plaza ⭐ PhoneStore (Kwun Tong) — Shop M30, Kwun Tong Plaza ⭐ PhoneStore (Diamond Hill) — Shop G02, Hai Jin Plaza 7 stores share the same logo `/logos/phonestore.webp` 3 new districts added: San Po Kong, Tuen Mun, Diamond Hill Data Changes Star Partners: 22 → 29 (+7) Star Districts: 13 → 16 (+3) Total pages: +77 (7 slugs × 11 languages) Restore Tak Tsai & BenBen Display Address (Map Location Only) Changes Tak Tsai display address restored to "Stall 336, Apliu Street, Sham Shui Po" BenBen display address restored to "Stall in front of 125 Kweilin Street, Sham Shui Po..." Map marker positions retained from v2.5.10 (Tak Tsai → 127 Kweilin A1; BenBen → 121 Kweilin) Fix Tak Tsai & BenBen Address and Map Location Fixes Tak Tsai: address now includes "127 Kweilin Street Shop A1"; Google Maps URL uses text address search BenBen: address changed to "121 Kweilin Street"; coordinates adjusted to 22.33115, 114.16220 Fix 4 Stalls Coordinates (Apliu × Kweilin Intersection) Fixes 4 stalls coordinates updated to Apliu Street × Kweilin Street intersection (22.33125, 114.16215) Fixes map marker position drift Fix 4 Stalls Google Maps URL (Invalid Dynamic Link) Fixes 4 stalls (Tak Tsai, Kanang, BenBen, Leng Leng) Google Maps URL changed from maps.app.goo.gl (Firebase Dynamic Links) to standard Google Maps Search API URL Fixes "Invalid Dynamic Link" error when clicking "View Map" Apliu/Kweilin Stall Logos Changed to Circular Changes 4 stall logos (Tak Tsai, Kanang, BenBen, Leng Leng) changed from square to circular shape (black bg + white number retained) Service Worker cache bumped to v2.5.7 to force reload of new logos Add Leng Leng SIM Star Partner (Stall 206, Apliu Street) New Store Added "Leng Leng" as Star Partner (Stall 206, Apliu Street, Sham Shui Po) Hours: Mon-Sun 11:00 AM - 8:00 PM Logo: Black background with bold white "206" Star Partners: 21 → 22 (+1) Total pages: 429 → 440 (+11) Add BenBen SIM Star Partner (125 Kweilin Street) New Store Added "BenBen" as Star Partner (Stall in front of 125 Kweilin Street, Sham Shui Po) Location: 10 seconds walk from MTR Sham Shui Po Exit C2 Hours: Mon-Sun 11:00 AM - 8:00 PM Logo: Black background with bold white "125" Star Partners: 20 → 21 (+1) Total pages: 418 → 429 (+11, 1 slug × 11 languages) Add 2 Apliu Street SIM Star Partners New Stores Added "Tak Tsai" as Star Partner (Stall 336, Apliu Street, Sham Shui Po) Added "Kanang" as Star Partner (Stall 278, Apliu Street, Sham Shui Po) Hours: Mon-Sun 11:00 AM - 8:00 PM Logos are black background with bold white numbers (336 / 278) Star Partners: 18 → 20 (+2) Total pages: 396 → 418 (+22, 2 slugs × 11 languages) Teledom Moved to Partner + Map Fix + Remove Partner Desc Changes Teledom (Lai Chi Kok) downgraded from Star Partner to Partner Store; no longer shown on map Removed Partner Stores category description text Star Partners: 19 → 18 (-1); Partner Stores: 5 → 6 (+1) Fixes Fixed map display: Leaflet assets now self-hosted under /leaflet/ to avoid CSP and third-party CDN load issues CSP tightened: removed unpkg.com, self-only Add Ho Man Tin Man Fung Store New Store Added Ho Man Tin "Man Fung" as Star Partner Address: 73A Waterloo Road, Ho Man Tin Hours: Everyday 9:00 AM - 9:00 PM Shares same logo and Facebook page as Hung Hom Man Fung Star Partners increased from 18 to 19 (14 districts) Fix Map Display + Man Fung District Changed to Jordan Fixes Fixed CSP (Content-Security-Policy) blocking Leaflet map loading by adding unpkg.com to script-src and style-src Man Fung new store district changed from "Yau Ma Tei" to "Jordan", slug changed from yau-ma-tei-manfung to jordan-manfung Add Jordan Man Fung Store + Remove Partner Stores from Map New Store Added Jordan "Man Fung" as Star Partner (Ocean Building, 80 Shanghai Street) Hours: Everyday 9:00 AM - 9:00 PM Star Partners increased from 17 to 18 stores (13 districts) Uses same logo and Facebook page as Hung Hom Man Fung branch Map Improvement Removed Partner Stores (blue markers) from map view, showing only Star Partners (red markers) Simplified map legend by removing Partner Store indicator GEO Round 2: WebSite Schema, Speed Comparison Table, Methodology, Footer Legal Links Schema Structured Data Added WebSite JSON-LD + SearchAction schema to all pages (search speed test pages) Enhanced Person schema: added jobTitle, worksFor, sameAs (speed test country pages) Content + E-E-A-T Added 8-country speed comparison table to speed test Hub (country, top speed, avg speed, network, locations) Added testing methodology section to speed test Hub (device, app, conditions, sources) Changed country card titles to question-style (e.g., "How fast is Japan 5G?") Added 16 translation keys × 11 languages (comparison table, methodology, question titles, legal links) Brand + Trust Added LinkedIn link and icon to SocialBar Created Footer component replacing inline footer Added Privacy Policy and Terms of Service links to footer (linking to b4travel.shop) Add 4 Taiwan 5G Speed Test Locations New Data Added 4 Taiwan speed test locations — Zhongshan Station (180Mbps), Zhongyuan Park (178Mbps), Taipei Dome (174Mbps), Dihua Street (168Mbps) Taiwan test locations increased from 9 to 13 Source: manhung.tech March 2026 Taiwan 5G SIM card test report 3 duplicate locations (Taipei Station, Songshan Cultural, Taoyuan Airport) kept existing higher speed data GEO Optimization: AI Crawler Directives, Speed Test Dates, Article Schema, Security Headers Technical GEO Added 9 AI crawler explicit Allow directives to robots.txt (GPTBot, ClaudeBot, PerplexityBot, ChatGPT-User, Google-Extended, CCBot, OAI-SearchBot, anthropic-ai, cohere-ai) Added security headers to firebase.json: X-Content-Type-Options, X-Frame-Options, Content-Security-Policy Added LinkedIn company URL to llms.txt Content E-E-A-T Added test date labels to all speed test data (testDate field) Each country page displays "Data last updated" date Speed table shows test date per row Schema Structured Data Added Article schema to speed test pages (datePublished, dateModified, author Person, publisher Organization) Added speakable property (SpeakableSpecification) to speed test pages Added LinkedIn company page to Organization sameAs Added image (store logo URL) and url (store detail page) to Store schema Upgraded non-zh Organization schema from minimal to full version (with sameAs, contactPoint, description) Add Switzerland 5G Speed Test Data New Data Added Switzerland 5G speed test data — Swisscom 5G network Covers 6 test locations: Zurich Airport, Zurich Train Station, Bern, Bern Hotel, Zermatt Ski Resort Top speed 184Mbps (Zurich Airport), all 6 locations on 5G Source: manhung.tech field test report (B4travel Europe 30-day 10GB unlimited SIM, iPhone 15 Pro) Page Changes Speed test countries increased from 8 to 9 (added Switzerland) Added /speedtest/switzerland page (× 11 languages = 11 pages) Speed test hub page now includes Switzerland country card Fix Missing Store Data: Add Bepower + Upgrade Teledom to Star Partner Background cleanup-v1.7.0-backup branch previously contained Bepower and Teledom upgrade changes (commits ec8fcd3, 9174f26) When main branch was rebuilt with 608b423 Initial commit from Astro, links.ts was rewritten from scratch, losing backup branch store data Bepower was completely missing from main branch; Teledom was placed back in cooperative partners (should be star partner) This version restores both missing changes from the backup branch New Store Added Bepower to Star Partners — Shop B78, 1/F, Kwai Chung Plaza, Kwai Fong Address: Shop B78, 1/F, Kwai Chung Plaza | Phone: 9345 1473 Hours: Mon-Sat 12:00-20:00 Social: Instagram @bepower_b78 | WhatsApp 852-9345-1473 Added bepower.webp logo (converted from backup branch PNG to WebP, 8.25 KB) Product tags: eSIM + Physical SIM (full range) Store Upgrade Upgraded Teledom from Partner Store to Star Partner (Lai Chi Kok) Teledom product tags upgraded from "Physical SIM" to "eSIM + Physical SIM" (full range) Added Lai Chi Kok district to Star Partners Removed Lai Chi Kok district from Partner Stores (Teledom was the only store) Data Changes Star Partners: 15 → 17 stores (+2) Partner Stores: 6 → 5 stores (-1, Teledom upgraded) Total stores: 21 → 22 (+1, Bepower added) Star districts: 10 → 12 (+2: Bepower in Kwai Fong, new Lai Chi Kok district) Total pages: 352 → 363 (+11, new kwai-fong-bepower page × 11 languages) Remove Cloud Run Deployment, Unified Firebase Hosting Removed Completely removed Cloud Run deployment system Deleted deploy.sh — Cloud Run deployment script Deleted Dockerfile — Docker container configuration Deleted nginx.conf — Nginx server configuration Deleted .dockerignore — Docker ignore rules Decommissioned GCP Cloud Run service Cleaned up 40+ old container images (kept last 3 versions for backup) Improvements Unified deployment workflow — Firebase Hosting only Simplified deployment: just run ./deploy-firebase.sh Removed Docker and containerization complexity Deployment time reduced from 2 minutes to 30 seconds Built-in global CDN and automatic SSL certificates Backup Git tag v1.6.4-with-cloud-run preserves pre-cleanup code Git branch backup/cloud-run-deployment-system available for emergency recovery Cloud Run configuration backed up (recoverable within 15 minutes) Rationale Static websites don't require containerization Firebase Hosting provides simpler, faster deployment experience Reduced maintenance complexity Lower operational costs 11-Language i18n + Comprehensive SEO Upgrade Internationalization (i18n) Expanded from 2 languages (zh/en) to 11 languages — Chinese (HK), English, French, Dutch, German, Japanese, Korean, Traditional Chinese (TW), Simplified Chinese, Spanish, Portuguese Adopted subpath routing architecture — each language has independent URLs (e.g., /en/, /fr/, /ja/), Google's recommended best practice for SEO Expanded from 32 pages to 352 pages (32 × 11 languages), all pre-rendered as static HTML by Astro SSG Added centralized translation system (translations.ts) — 80+ translation keys × 11 languages covering UI labels, country names, FAQ content Added i18n utility module (i18n.ts) — localePath(), isChinese(), stripLocale(), getNonDefaultLocales() helpers Added language selector component (LangSelector.astro) — replaces old zh/en toggle, supports 11 languages Removed old CSS language toggle mechanism — no more lang-zh/lang-en CSS classes or data-lang attributes Removed localStorage language preference — each URL represents one language, no JavaScript switching needed Refactored all components to accept locale prop — ProfileHeader, LinkButton, LinkSection, SpeedtestSection, MapView, Breadcrumb Multilingual map component — all popup text, button labels, distance display, geolocation alerts translated per language Smart Chinese address detection — zh (HK), tw (TW), sc (CN) show Chinese addresses, others show English SEO Improvements Every page includes 11 hreflang tags + x-default in HTML head — tells Google about all language versions Dynamic sitemap.xml generation — upgraded from static 31 URLs to dynamic 352 URLs, each with xhtml:link hreflang annotations (dual hreflang signal) og:site_name translated per language — Chinese shows "B4travel 電話卡", English "B4travel SIM Cards", Japanese "B4travel SIMカード", etc. og:image:alt translated per language — improves accessibility for social media sharing apple-mobile-web-app-title translated per language — localized PWA install name Simplified meta keywords — removed overly long Chinese keyword list, using concise universal keywords Dynamic og:locale — each language page sets correct Open Graph locale (e.g., zh_HK, en, ja) Per-language canonical URL — ensures Google correctly indexes each language version Page Routing Architecture Chinese (HK) as default language — keeps root path / (no prefix), other languages use /{lang}/ prefix Added [lang]/ dynamic route directory — includes index, speedtest/index, speedtest/[country], store/[slug], changelog/index Each [lang] page uses getStaticPaths() with getNonDefaultLocales() to auto-generate 10 language versions Root pages hardcode locale="zh" — ensures default language has no prefix Sitemap migrated from static public/sitemap.xml to dynamic Astro endpoint (src/pages/sitemap.xml.ts) Multi-page SEO Major Upgrade New Features Expanded site from 1 page to 31 pages using Astro SSG dynamic routes (getStaticPaths) Added speed test hub page (/speedtest) with country overview cards showing top/avg speed and location count Added 8 country speed test pages (/speedtest/japan, /speedtest/korea, etc.) with full city speed tables, stats bar, FAQ, cross-country linking Added 21 store detail pages (/store/kwai-fong-anlander, etc.) with address, phone, hours, Google Maps, social buttons, same-district linking Added breadcrumb navigation component for all subpages Added version number in footer (linked to /changelog) Added changelog page (/changelog) with detailed version history SEO Improvements Independent Dataset JSON-LD for each country page (country-specific speed test keywords) Independent FAQPage JSON-LD for each country page (3 FAQs) Independent LocalBusiness JSON-LD for each store page (better for local SEO than Store) BreadcrumbList JSON-LD for all subpages Per-page canonical URL and OG URL (BaseLayout url prop) Sitemap expanded from 1 URL to 31 real URLs Internal linking section on homepage linking to all country speed test pages Homepage JSON-LD Dataset URLs changed from fragment (#) to real page paths Hub-and-spoke internal linking architecture with cross-linking between pages Data Architecture Extracted speed test data to shared file (src/data/speedtest.ts) used by homepage and country pages Added per-country slug, description (zh/en), networkOperator fields Added speedNum numeric field for stats calculation (max/avg speed) Added getCountryStats() helper function Added getAllStores() helper function to links.ts WebP Image Compression + Security Headers Performance Converted all 28 store logos from PNG/JPEG to WebP (PIL quality=80) Image size reduced from 436KB to 88KB (80% reduction) Security Added Referrer-Policy: strict-origin-when-cross-origin to Firebase deploy config Added Permissions-Policy header to Firebase deploy config Deep Optimization — Critical Bug Fix + Performance + Accessibility Critical Fix Fixed astro.config.mjs site URL missing "s" (location → locations) — affected all canonical/OG URLs Removed invalid fragment (#) URLs from sitemap.xml — Google ignores fragment URLs Performance Deferred Leaflet map loading — dynamic script injection instead of static (saves ~320KB initial load) Added GA4 preconnect hint SEO Added OG image dimensions (width/height) and alt attribute Changed Twitter card from summary to summary_large_image Added hreflang en language tag Accessibility Added aria-labels to social media buttons (Facebook/Instagram/WhatsApp) Added aria-label to share button Improved text contrast (opacity 0.5→0.7 / 0.75→0.8) Enhanced manifest.json (scope, orientation, lang, categories, maskable icons) GA4 Analytics + Enhanced SEO Structured Data New Features Added Google Analytics GA4 (G-NVWBJCR5XY) tracking Added 8 per-country Dataset JSON-LD schemas with city speed data Added BreadcrumbList JSON-LD structured data Added country anchor IDs to speed test section Security Fixes + SEO Foundation Security Added XSS protection to MapView.astro (escapeHtml + safeUrl functions) Added regex whitelist for hash validation in index.astro (prevents injection) SEO Added Organization + WebPage JSON-LD structured data Added Store JSON-LD for all stores (address, phone, hours, coordinates) Added FAQPage JSON-LD (4 FAQs) Updated title and description with 5G keywords and speed figures Expanded meta keywords Firebase Hosting Migration + Custom Domain Infrastructure Migrated from Google Cloud Run + nginx to Firebase Hosting Configured custom domain locations.b4travel.shop (auto SSL) Created deploy-firebase.sh deployment script (Firebase REST API, no firebase login needed) Created GitHub repo (git@github.com:Stoneip/locations.b4travel.shop.git) Store Data Enhancement + Logo Compression Content Added social media buttons for stores (Facebook / Instagram / WhatsApp) Added store details (address, phone, hours) Added online retailer information Compressed store logos (4.3MB → 480KB) Updated multiple store addresses and links Initial Release Features Astro v5 static site generator Store information display (Star Partners + Partner Stores) Interactive map (Leaflet.js) Speed test data display (8 countries, 70+ locations) Chinese/English bilingual toggle PWA support (Service Worker + manifest.json) District filter functionality