phuket-map

Phuket Map

Domain: phuketmap.app (registered — standalone canonical, tier-1 SEO) Pattern: hybrid — neighborhood choropleth (status, recordKey area) + POI markers (coworking, gyms, beaches, nightlife, healthcare) Build tier: B Lineage: Locality Showcase program. Sister map to Floripa (Florianópolis). Shares the template; this is pilot #2.

Strategic role

A single beautifully-designed interactive map of Phuket with everything a traveler, digital nomad, or relocating expat needs, plus cross-layer intent filtering as the moat. Serves two audiences from one product:

  1. Path A — nomads/travelers/expats (discovery + affiliate revenue): people who currently stitch Phuket intel from Hipflat, Airbnb, Facebook groups, Reddit, and Google Maps. A single map with cross-layer filtering is a 10x improvement.
  2. Path B — government/tourism/real estate contracts (the real money): Tourism Authority of Thailand (TAT), Phuket Provincial Government, Phuket Real Estate Association. The map is a free public demonstration of Atlas’s locality intelligence capability. The methodology/about page does the B2B sales work.

The moat is the same as Floripa: intent filtering, not the layers themselves. Google Maps has the POIs. Nobody lets you query “areas under ฿30k/month with reliable fibre, walkable to a swimmable beach, a Muay Thai gym within a 10-min Grab, away from the Patong party noise.” That cross-layer query is the product.

Audience

Path A (free, affiliate):

Path B (contract showcase):

Scope

Areas (the choropleth records, ~13): Patong, Kata, Karon, Kamala, Surin, Bang Tao / Cherng Talay (Laguna), Rawai, Nai Harn, Chalong, Phuket Old Town, Mai Khao, Nai Yang, Thalang.

POI + data layers (the overlays + filters):

Property & cost:

Lifestyle:

Practical:

Context graphs:

Excluded from v1: restaurant-level reviews (Google owns this), individual property listings (portal territory — link out via affiliate instead), live booking.

Schema design

interface PhuketArea {
  id: string;              // recordKey, e.g. "patong"
  name: string;
  nameThai: string;
  coast: 'west' | 'south' | 'north' | 'east' | 'central';
  latitude: number;
  longitude: number;
  boundaryGeoJsonRef: string;   // R2 path to area polygon

  // Property & cost (numeric for filtering)
  rentLongTermThbMonth: { studio: number | null; oneBed: number | null; twoBed: number | null; villa: number | null };
  saleThbSqm: number | null;
  foreignOwnership: { condoQuotaAvailable: boolean | null; villaStructure: 'leasehold' | 'thai_company' | 'none' };
  airbnbThbNight: { low: number | null; high: number | null };       // seasonality
  costOfLivingIndex: number | null;   // relative to Phuket average = 100

  // Lifestyle scores (0-100, derived, for intent filtering)
  beachAccessScore: number | null;
  swimmabilityScore: number | null;   // factors monsoon safety
  nightlifeScore: number | null;
  fitnessScore: number | null;        // Muay Thai + gym density
  walkabilityScore: number | null;
  quietnessScore: number | null;

  // Practical
  internetMedianMbps: number | null;
  healthcareProximityMin: number | null;   // mins to nearest private hospital
  floodRisk: 'low' | 'medium' | 'high';
  roadSafetyNote: string | null;

  // Audience fit
  nomadDensity: 'low' | 'medium' | 'high';
  englishPrevalence: 'low' | 'medium' | 'high';
  bestFor: Array<'nomads' | 'families' | 'retirees' | 'party' | 'luxury' | 'budget' | 'fitness' | 'medical'>;

  sources: Array<{ url: string; type: string; fetchedAt: string }>;
}

// POIs are a separate collection, point geometry, tagged by area + category
interface PhuketPOI {
  id: string;
  areaId: string;
  category: 'coworking' | 'muay_thai' | 'gym' | 'yoga' | 'beach' | 'nightlife' | 'cafe' | 'hospital' | 'school' | 'viewpoint' | 'boat_departure';
  name: string;
  latitude: number;
  longitude: number;
  attributes: Record<string, string | number | boolean>;  // category-specific
  affiliateUrl: string | null;   // booking/affiliate link where applicable
  sources: Array<{ url: string; type: string; fetchedAt: string }>;
}

Route families

Per locale: ~220 pages. Locales: en primary; consider ru, zh, de (large Phuket visitor + expat populations). Across 4 locales: ~880 pages.

Cross-portfolio connections

Connected Atlas mapRelationship
visaThailand DTV digital nomad visa, Elite, retirement, education — “can I stay”
foreign-propertyThailand condo quota + leasehold + Thai company structures — “can I buy”
taxThailand tax residency + remittance rules — “what will I pay”
free-zonePhuket-adjacent investment zones
cost-of-living (planned)Phuket vs other nomad bases
healthcare-cost (planned)Medical tourism cost comparison

Every area + topic page cross-links into the relevant core Atlas maps. This is the coherent story for BOTH nomads (“here’s your visa/property/tax answer”) AND tourism authorities (“Atlas runs a serious global intelligence portfolio, not just a travel blog”).

SEO + AEO

SEO targets:

AEO: Heavy LLM-search audience (nomads ask ChatGPT “where should I live in Phuket”). QAPage schema on /q/. First-paragraph direct answers on area pages. llms.txt finalized at Phase 6.

Monetization

Path A (passive): affiliate — accommodation (Booking, Agoda, Airbnb), Muay Thai camps, coworking day passes, tours/island-hopping (GetYourGuide, Klook), eSIM (Airalo), insurance (SafetyWing). Subtle placement on POI cards — never pop-ups.

Path B (the real money): the /about + /methodology pages carry the demonstration framing:

“Phuket Map is a free public demonstration of Atlas Development’s locality intelligence platform, built with the same system we use to ship custom tourism, economic-development, and real-estate mapping platforms for clients. For an official version for your jurisdiction — branded design, proprietary data layers, investor/visitor portal, ongoing maintenance — contact us at [email].”

Contract range: $30K–$200K (TAT Phuket, Provincial Government, real estate association, developer white-label). In-person pitch viable — you’re in SE Asia regularly.

Build effort

~3 weeks. Long pole is data normalization across area + POI layers (same pipeline as Floripa). Discovery → Perplexity Deep Research prompts per layer → normalize to CSV/JSON → geocode → master area table as join key → gap-fill.

Launch sequencing

After Floripa proves the template. Phuket is pilot #2 of the Locality Showcase program. Validate the shared template on Floripa first, then Phuket inherits it cleanly.

Caveats

  1. Foreign property rules are legally sensitive. Present factually; link to foreign-property map; don’t give individualized legal advice.
  2. Monsoon safety is a real-fatality topic (drownings on west coast in low season). Beach safety data must be accurate and current; don’t downplay.
  3. Road safety — Phuket motorbike accident rate is high. Present honestly as a livability factor.
  4. Affiliate density must stay subtle — heavy affiliate placement kills the Path B (tourism authority) credibility.

Open questions

  1. Locales — confirm ru/zh/de worth the translation cost given Phuket’s Russian + Chinese + German visitor/expat populations. Recommend en + ru + zh for v1.
  2. Should /area/ pages show live Airbnb pricing (via affiliate/API) or seasonal averages only? Recommend seasonal averages for the map; affiliate deep-links for live.
  3. Shared template vs Phuket-specific: this brief assumes Phuket inherits the Floripa template. Confirm Floripa’s template is locked before scaffolding Phuket, or the two will diverge.

Success criteria

Scope cuts (deferred to v2)

Cage-bends from the boilerplate

Smoke-test checklist before declaring v1 shipped