변경 로그

v2.5.18

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)

v2.5.17

Temporarily Hide Bepower (Kwai Fong)

Changes

  • Hidden: Bepower (Shop B78, 1/F, Kwai Chung Plaza, Kwai Fong)
  • May be restored later

v2.5.16

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

v2.5.15

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

v2.5.14

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)

v2.5.13

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)

v2.5.12

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)

v2.5.11

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)

v2.5.10

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

v2.5.9

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

v2.5.8

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"

v2.5.7

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

v2.5.6

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)

v2.5.5

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)

v2.5.4

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)

v2.5.3

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

v2.5.2

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)

v2.5.1

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

v2.5.0

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

v2.4.0

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)

v2.3.1

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

v2.3.0

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)

v2.2.2

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

v2.2.1

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)

v2.2.0

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

v2.1.0

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)

v2.0.0

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

v1.6.3

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

v1.6.2

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)

v1.6.1

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

v1.6.0

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

v1.5.x

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)

v1.4.x

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

v1.0.0

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