Files
gitlab-instance-0a899031_cn…/backend/seed_data.py
2026-06-07 23:18:53 +08:00

375 lines
29 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from __future__ import annotations
CITIES = [
{
"slug": "dali",
"idNumber": 1,
"name": "大理",
"nameEn": "Dali",
"country": "中国",
"countryEmoji": "🇨🇳",
"overallScore": 4.5,
"costPerMonth": 3000,
"internetSpeed": 50,
"safety": "很好",
"liked": "极好",
"temperature": 16,
"humidity": 60,
"nomadsNow": 520,
"description": "苍山洱海,文艺气息浓厚的慢生活之城",
"descriptionEn": "Cangshan and Erhai, a slow-living city with a strong creative vibe.",
"gradientFrom": "#2563eb",
"gradientTo": "#0891b2",
"icon": "🏯",
"tags": ["热门", "便宜", "宜居", "山城", "文化", "友好社区"],
"coverImage": "https://images.unsplash.com/photo-1590856029826-c7a73142bbf1?w=1200",
"reviewsCount": 2842,
"likedCount": 198,
"dislikedCount": 32,
"qualityOfLife": "Good",
"familyScore": "Okay",
"communityScore": "Great",
"nomadPercent": 2,
"funLabel": "Great",
"feelsLikeTemp": 18,
"acPercent": 65,
"lat": 25.7,
"lng": 100.2,
"region": "亚洲",
},
{
"slug": "chengdu",
"idNumber": 2,
"name": "成都",
"nameEn": "Chengdu",
"country": "中国",
"countryEmoji": "🇨🇳",
"overallScore": 4.4,
"costPerMonth": 4500,
"internetSpeed": 80,
"safety": "很好",
"liked": "极好",
"temperature": 17,
"humidity": 75,
"nomadsNow": 680,
"description": "天府之国,美食与慢节奏的完美融合",
"descriptionEn": "A laid-back food capital with strong community energy.",
"gradientFrom": "#059669",
"gradientTo": "#65a30d",
"icon": "🐼",
"tags": ["热门", "美食", "都市", "新一线", "文化", "友好社区"],
"coverImage": "https://images.unsplash.com/photo-1547981609-4b6bfe67ca0b?w=1200",
"reviewsCount": 3654,
"likedCount": 312,
"dislikedCount": 28,
"qualityOfLife": "Great",
"familyScore": "Good",
"communityScore": "Great",
"nomadPercent": 3,
"funLabel": "Great",
"feelsLikeTemp": 20,
"acPercent": 85,
"lat": 30.6,
"lng": 104.1,
"region": "亚洲",
},
{
"slug": "shenzhen",
"idNumber": 3,
"name": "深圳",
"nameEn": "Shenzhen",
"country": "中国",
"countryEmoji": "🇨🇳",
"overallScore": 4.1,
"costPerMonth": 8000,
"internetSpeed": 120,
"safety": "极好",
"liked": "很好",
"temperature": 23,
"humidity": 70,
"nomadsNow": 850,
"description": "科技创新之城,创业者的乐园",
"descriptionEn": "A fast-moving tech hub for builders and startup people.",
"gradientFrom": "#1d4ed8",
"gradientTo": "#0284c7",
"icon": "🌃",
"tags": ["热门", "高速网络", "都市", "一线城市", "安全"],
"coverImage": "https://images.unsplash.com/photo-1518837695005-2083093ee35b?w=1200",
"reviewsCount": 4242,
"likedCount": 355,
"dislikedCount": 24,
"qualityOfLife": "Good",
"familyScore": "Good",
"communityScore": "Great",
"nomadPercent": 4,
"funLabel": "Good",
"feelsLikeTemp": 28,
"acPercent": 95,
"lat": 22.5,
"lng": 114.1,
"region": "亚洲",
},
{"slug": "shanghai", "idNumber": 4, "name": "上海", "nameEn": "Shanghai", "country": "中国", "countryEmoji": "🇨🇳", "overallScore": 4.0, "costPerMonth": 10000, "internetSpeed": 110, "safety": "极好", "liked": "", "temperature": 17, "humidity": 65, "nomadsNow": 1200, "description": "国际大都市,东西方文化交汇的中心", "descriptionEn": "An international city for global teams and premium urban life.", "gradientFrom": "#b45309", "gradientTo": "#78716c", "icon": "🏙️", "tags": ["热门", "高速网络", "都市", "一线城市", "文化"], "lat": 31.2, "lng": 121.5, "region": "亚洲"},
{"slug": "hangzhou", "idNumber": 5, "name": "杭州", "nameEn": "Hangzhou", "country": "中国", "countryEmoji": "🇨🇳", "overallScore": 4.3, "costPerMonth": 6000, "internetSpeed": 100, "safety": "极好", "liked": "很好", "temperature": 17, "humidity": 70, "nomadsNow": 560, "description": "西湖之畔,互联网重镇与诗画江南", "descriptionEn": "West Lake, internet companies, and a polished lifestyle.", "gradientFrom": "#047857", "gradientTo": "#0d9488", "icon": "", "tags": ["热门", "高速网络", "都市", "新一线", "宜居", "文化"], "lat": 30.2, "lng": 120.2, "region": "亚洲"},
{"slug": "xiamen", "idNumber": 6, "name": "厦门", "nameEn": "Xiamen", "country": "中国", "countryEmoji": "🇨🇳", "overallScore": 4.1, "costPerMonth": 5500, "internetSpeed": 70, "safety": "很好", "liked": "很好", "temperature": 21, "humidity": 75, "nomadsNow": 320, "description": "海滨花园城市,鼓浪屿的浪漫与闽南风情", "descriptionEn": "A warm coastal city with island life and Fujian culture.", "gradientFrom": "#ea580c", "gradientTo": "#0284c7", "icon": "🌊", "tags": ["海滨", "温暖", "美食", "宜居", "文化"], "lat": 24.5, "lng": 118.1, "region": "亚洲"},
{"slug": "beijing", "idNumber": 7, "name": "北京", "nameEn": "Beijing", "country": "中国", "countryEmoji": "🇨🇳", "overallScore": 3.8, "costPerMonth": 9000, "internetSpeed": 100, "safety": "极好", "liked": "", "temperature": 14, "humidity": 50, "nomadsNow": 780, "description": "千年古都,政治文化中心的深厚底蕴", "descriptionEn": "A historic capital with deep culture and broad opportunities.", "gradientFrom": "#dc2626", "gradientTo": "#b91c1c", "icon": "🏛️", "tags": ["都市", "一线城市", "文化", "高速网络", "历史名城"], "lat": 39.9, "lng": 116.4, "region": "亚洲"},
{"slug": "guangzhou", "idNumber": 8, "name": "广州", "nameEn": "Guangzhou", "country": "中国", "countryEmoji": "🇨🇳", "overallScore": 3.9, "costPerMonth": 6500, "internetSpeed": 90, "safety": "很好", "liked": "", "temperature": 23, "humidity": 80, "nomadsNow": 480, "description": "食在广州,千年商都的烟火气", "descriptionEn": "A commercial southern city with excellent food and warm winters.", "gradientFrom": "#f97316", "gradientTo": "#ef4444", "icon": "🌺", "tags": ["热门", "美食", "都市", "一线城市", "温暖"], "lat": 23.1, "lng": 113.3, "region": "亚洲"},
{"slug": "chongqing", "idNumber": 9, "name": "重庆", "nameEn": "Chongqing", "country": "中国", "countryEmoji": "🇨🇳", "overallScore": 3.7, "costPerMonth": 4000, "internetSpeed": 75, "safety": "很好", "liked": "", "temperature": 18, "humidity": 80, "nomadsNow": 350, "description": "8D魔幻山城火锅与夜景的不夜城", "descriptionEn": "A dramatic mountain city with food, night views, and low cost.", "gradientFrom": "#ef4444", "gradientTo": "#c2410c", "icon": "🌶️", "tags": ["便宜", "美食", "山城", "都市", "文化"], "lat": 29.6, "lng": 106.6, "region": "亚洲"},
{"slug": "kunming", "idNumber": 10, "name": "昆明", "nameEn": "Kunming", "country": "中国", "countryEmoji": "🇨🇳", "overallScore": 4.2, "costPerMonth": 3500, "internetSpeed": 55, "safety": "", "liked": "很好", "temperature": 16, "humidity": 55, "nomadsNow": 380, "description": "四季如春的春城,通往东南亚的门户", "descriptionEn": "Spring-like weather year-round and a gateway to Southeast Asia.", "gradientFrom": "#d946ef", "gradientTo": "#059669", "icon": "🌸", "tags": ["便宜", "温暖", "宜居", "友好社区", "户外运动"], "lat": 25.0, "lng": 102.7, "region": "亚洲"},
{"slug": "sanya", "idNumber": 11, "name": "三亚", "nameEn": "Sanya", "country": "中国", "countryEmoji": "🇨🇳", "overallScore": 3.5, "costPerMonth": 5000, "internetSpeed": 60, "safety": "", "liked": "", "temperature": 26, "humidity": 85, "nomadsNow": 250, "description": "中国的热带天堂,椰风海韵的度假胜地", "descriptionEn": "A tropical beach city for winter sun and slower workdays.", "gradientFrom": "#0ea5e9", "gradientTo": "#06b6d4", "icon": "🏖️", "tags": ["海滨", "温暖", "户外运动"], "lat": 18.3, "lng": 109.5, "region": "亚洲"},
{"slug": "lijiang", "idNumber": 12, "name": "丽江", "nameEn": "Lijiang", "country": "中国", "countryEmoji": "🇨🇳", "overallScore": 4.0, "costPerMonth": 3200, "internetSpeed": 45, "safety": "", "liked": "", "temperature": 14, "humidity": 50, "nomadsNow": 280, "description": "玉龙雪山下的纳西古城,灵魂栖息地", "descriptionEn": "An old town below Jade Dragon Snow Mountain for reflective stays.", "gradientFrom": "#6366f1", "gradientTo": "#7c3aed", "icon": "🏔️", "tags": ["便宜", "文化", "山城", "宜居", "历史名城"], "lat": 26.9, "lng": 100.2, "region": "亚洲"},
{"slug": "xian", "idNumber": 13, "name": "西安", "nameEn": "Xi'an", "country": "中国", "countryEmoji": "🇨🇳", "overallScore": 3.8, "costPerMonth": 4200, "internetSpeed": 70, "safety": "很好", "liked": "", "temperature": 15, "humidity": 55, "nomadsNow": 230, "description": "十三朝古都,历史与美食交织的城市", "descriptionEn": "Ancient history, strong food culture, and reasonable costs.", "gradientFrom": "#78716c", "gradientTo": "#a16207", "icon": "🗿", "tags": ["便宜", "美食", "文化", "历史名城"], "lat": 34.3, "lng": 108.9, "region": "亚洲"},
{"slug": "nanjing", "idNumber": 14, "name": "南京", "nameEn": "Nanjing", "country": "中国", "countryEmoji": "🇨🇳", "overallScore": 3.9, "costPerMonth": 5500, "internetSpeed": 85, "safety": "很好", "liked": "", "temperature": 16, "humidity": 70, "nomadsNow": 400, "description": "六朝古都,紫金山下的文化名城", "descriptionEn": "A cultural city with universities, history, and steady infrastructure.", "gradientFrom": "#7c3aed", "gradientTo": "#059669", "icon": "🍃", "tags": ["文化", "都市", "新一线", "历史名城"], "lat": 32.1, "lng": 118.8, "region": "亚洲"},
{"slug": "changsha", "idNumber": 15, "name": "长沙", "nameEn": "Changsha", "country": "中国", "countryEmoji": "🇨🇳", "overallScore": 3.6, "costPerMonth": 4500, "internetSpeed": 75, "safety": "", "liked": "", "temperature": 17, "humidity": 75, "nomadsNow": 290, "description": "娱乐之都,夜生活与美食的不眠城", "descriptionEn": "A media and food city with active nightlife and young energy.", "gradientFrom": "#f59e0b", "gradientTo": "#16a34a", "icon": "🎪", "tags": ["美食", "都市", "新一线", "友好社区"], "lat": 28.2, "lng": 112.9, "region": "亚洲"},
{"slug": "qingdao", "idNumber": 16, "name": "青岛", "nameEn": "Qingdao", "country": "中国", "countryEmoji": "🇨🇳", "overallScore": 3.7, "costPerMonth": 4800, "internetSpeed": 65, "safety": "很好", "liked": "", "temperature": 13, "humidity": 65, "nomadsNow": 220, "description": "红瓦绿树碧海蓝天,啤酒飘香的海滨城市", "descriptionEn": "A northern coastal city with sea air, beer, and livable districts.", "gradientFrom": "#2563eb", "gradientTo": "#ca8a04", "icon": "🍺", "tags": ["海滨", "美食", "宜居", "户外运动"], "lat": 36.1, "lng": 120.4, "region": "亚洲"},
{"slug": "suzhou", "idNumber": 17, "name": "苏州", "nameEn": "Suzhou", "country": "中国", "countryEmoji": "🇨🇳", "overallScore": 4.0, "costPerMonth": 5000, "internetSpeed": 80, "safety": "极好", "liked": "很好", "temperature": 17, "humidity": 70, "nomadsNow": 260, "description": "上有天堂下有苏杭,古典园林与现代新城", "descriptionEn": "Classical gardens, modern industry, and a calm Jiangnan lifestyle.", "gradientFrom": "#0d9488", "gradientTo": "#64748b", "icon": "🏡", "tags": ["文化", "宜居", "安全", "历史名城"], "lat": 31.3, "lng": 120.6, "region": "亚洲"},
{"slug": "zhuhai", "idNumber": 18, "name": "珠海", "nameEn": "Zhuhai", "country": "中国", "countryEmoji": "🇨🇳", "overallScore": 3.9, "costPerMonth": 5200, "internetSpeed": 70, "safety": "很好", "liked": "", "temperature": 23, "humidity": 75, "nomadsNow": 180, "description": "浪漫之城,毗邻澳门的海滨花园", "descriptionEn": "A relaxed coastal city next to Macau with clean streets and sea views.", "gradientFrom": "#0891b2", "gradientTo": "#6366f1", "icon": "🎡", "tags": ["海滨", "温暖", "宜居", "安全"], "lat": 22.3, "lng": 113.6, "region": "亚洲"},
]
MEETUPS = [
{"city": "线上", "emoji": "💻", "date": "2026-07-09", "time": "20:00", "venue": "MiroTalk 多人视频房", "address": "线上活动", "description": "围绕远程工作的节奏、异地协作和旅居规划做一场开放圆桌。", "rsvpCount": 36, "gradientFrom": "#0f766e", "gradientTo": "#2563eb", "attendees": [{"name": "林晓", "photo": "https://i.pravatar.cc/150?img=1"}, {"name": "张明", "photo": "https://i.pravatar.cc/150?img=2"}], "isUpcoming": True, "mode": "online", "maxAttendees": 80, "organizer": "NomadCNA", "accessLevel": "members", "meetingProvider": "mirotalk", "mirotalkRoom": "nomadcna-remote-work-open-office", "meetingUrl": "", "replayUrl": "", "features": ["group_video", "screen_share", "whiteboard", "host_controls"]},
{"city": "大理", "emoji": "🏯", "date": "2026-07-15", "time": "14:00", "venue": "大理古城人民路咖啡馆", "address": "大理市大理古城人民路中段", "description": "苍山脚下,洱海边,与大理的慢生活游民们一起喝咖啡、晒太阳、聊人生。", "rsvpCount": 12, "gradientFrom": "#3b82f6", "gradientTo": "#4f46e5", "attendees": [{"name": "林晓", "photo": "https://i.pravatar.cc/150?img=3"}, {"name": "张明", "photo": "https://i.pravatar.cc/150?img=4"}], "isUpcoming": True, "mode": "hybrid", "maxAttendees": 32, "organizer": "大理城市主理人", "accessLevel": "vip", "meetingProvider": "mirotalk", "mirotalkRoom": "nomadcna-dali-slow-life-roundtable", "meetingUrl": "", "replayUrl": "", "features": ["group_video", "screen_share", "whiteboard", "recording", "host_controls"]},
{"city": "成都", "emoji": "🐼", "date": "2026-07-18", "time": "19:00", "venue": "方所书店", "address": "成都市锦江区中纱帽街8号远洋太古里", "description": "天府之国游民聚会,在文艺书店里品茶聊天,探讨成都的慢生活与远程工作可能性。", "rsvpCount": 9, "gradientFrom": "#22c55e", "gradientTo": "#10b981", "attendees": [{"name": "杨帆", "photo": "https://i.pravatar.cc/150?img=6"}], "isUpcoming": True, "mode": "offline", "maxAttendees": 20, "organizer": "成都游民小组", "accessLevel": "public", "meetingProvider": "", "mirotalkRoom": "", "meetingUrl": "", "replayUrl": "", "features": []},
{"city": "深圳", "emoji": "🌃", "date": "2026-07-20", "time": "19:30", "venue": "WeWork 卓越前海壹号", "address": "深圳市南山区前海深港合作区卓越前海壹号", "description": "深圳数字游民线下见面会,探讨创业、远程工作与湾区发展机遇。", "rsvpCount": 15, "gradientFrom": "#ff4d4f", "gradientTo": "#ff7a45", "attendees": [{"name": "李娜", "photo": "https://i.pravatar.cc/150?img=10"}], "isUpcoming": True, "mode": "hybrid", "maxAttendees": 48, "organizer": "深圳湾区主理人", "accessLevel": "members", "meetingProvider": "mirotalk", "mirotalkRoom": "nomadcna-shenzhen-maker-night", "meetingUrl": "", "replayUrl": "", "features": ["group_video", "screen_share", "breakout", "host_controls"]},
{"city": "杭州", "emoji": "", "date": "2026-05-25", "time": "18:00", "venue": "梦想小镇·良仓咖啡", "address": "杭州市余杭区梦想小镇互联网村", "description": "西湖畔数字游民聚会,交流产品与运营经验。", "rsvpCount": 11, "gradientFrom": "#06b6d4", "gradientTo": "#0d9488", "attendees": [], "isUpcoming": False, "mode": "offline", "maxAttendees": 24, "organizer": "杭州产品游民", "accessLevel": "public", "meetingProvider": "", "mirotalkRoom": "", "meetingUrl": "", "replayUrl": "", "features": []},
]
DISCUSSIONS = [
{"title": "大理最佳共享办公空间推荐 Top 10", "author": "林晓", "city": "大理", "tags": ["共享办公", "大理"], "replies": 24, "views": 2340, "excerpt": "整理了古城和洱海周边几家适合长期办公的地方。"},
{"title": "2026 年数字游民友好城市排名", "author": "NomadCNA", "city": "上海", "tags": ["城市", "报告"], "replies": 18, "views": 1890, "excerpt": "从成本、网络、社区和气候四个维度重新排名。"},
{"title": "远程工作者的税务规划指南", "author": "李老师", "city": "深圳", "tags": ["税务", "远程工作"], "replies": 12, "views": 1560, "excerpt": "基础概念、常见误区和需要咨询专业人士的节点。"},
]
GIGS = [
{"title": "整理大理共享办公空间清单", "category": "内容", "budget": 500, "location": "远程", "description": "收集 20 个空间的价格、地址、网络和照片。", "status": "open"},
{"title": "设计数字游民城市评分图标", "category": "设计", "budget": 800, "location": "远程", "description": "为成本、网速、安全、社区氛围设计一组图标。", "status": "open"},
{"title": "深圳线下聚会摄影", "category": "活动", "budget": 1200, "location": "深圳", "description": "拍摄 2 小时活动现场并交付精选照片。", "status": "open"},
]
PROFILES = [
{"name": "林晓雨", "age": 28, "location": "大理", "tags": ["本科学历", "远程工作者", "数字游民", "咖啡爱好者"], "bio": "数字游民三年,目前在云南大理远程做产品设计。喜欢爬山、摄影,周末常去洱海边发呆。", "photo": "https://i.pravatar.cc/150?img=1"},
{"name": "陈浩然", "age": 32, "location": "成都", "tags": ["硕士学历", "独立开发者", "自由职业者", "素食主义"], "bio": "在成都住了两年,做独立开发。喜欢冲浪和冥想,寻找志同道合的旅伴一起探索世界。", "photo": "https://i.pravatar.cc/150?img=3"},
{"name": "王思琪", "age": 26, "location": "深圳", "tags": ["本科学历", "内容创作者", "数字游民", "环保主义者"], "bio": "自由撰稿人,在深圳写写画画。热爱瑜伽和冥想,相信慢生活才是真正的奢侈。", "photo": "https://i.pravatar.cc/150?img=5"},
]
CONTENT_ITEMS = [
{
"slug": "nomad-china-playbook",
"type": "ebook",
"title": "《中国数字游民落地手册》",
"titleEn": "China Digital Nomad Playbook",
"subtitle": "从选城、预算、租房到社群融入的一本实操指南",
"subtitleEn": "A practical guide for choosing cities, budgeting, housing, and community.",
"description": "这本电子书把城市决策拆成 7 个步骤:预算、气候、网络、工作空间、社群、住宿和长期身份。每一章都关联本平台真实城市数据,后续可根据你的收藏城市自动生成个性化版本。",
"descriptionEn": "A seven-step playbook connected to live city data: budget, climate, internet, workspace, community, housing, and long-stay planning.",
"coverImage": "https://images.unsplash.com/photo-1519389950473-47ba0277781c?w=1200",
"mediaUrl": "/api/downloads/nomad-china-playbook.pdf",
"targetUrl": "/ebooks/nomad-china-playbook",
"ctaLabel": "查看电子书",
"ctaLabelEn": "View ebook",
"citySlugs": ["dali", "chengdu", "shenzhen", "hangzhou"],
"relatedProfiles": ["林晓雨", "陈浩然"],
"chapters": [
{"title": "如何判断一座城市是否适合远程工作", "minutes": 8},
{"title": "月预算拆解:房租、办公、交通、社交", "minutes": 10},
{"title": "30 天落地清单:从住宿到本地社群", "minutes": 12},
],
"durationMinutes": 42,
"sortOrder": 1,
"status": "published",
},
{
"slug": "lin-dali-documentary",
"type": "video",
"title": "林晓雨:在大理远程做产品设计的一天",
"titleEn": "Lin Xiaoyu: A remote product designer day in Dali",
"subtitle": "个人访谈 / 现实纪录片 · 大理",
"subtitleEn": "Interview documentary · Dali",
"description": "她把工作日切成晨间深度工作、午后咖啡馆协作和傍晚洱海散步。视频关联大理城市详情、共享办公和本地活动。",
"descriptionEn": "A day split into deep work, cafe collaboration, and an Erhai walk.",
"coverImage": "https://images.unsplash.com/photo-1500530855697-b586d89ba3ee?w=1200",
"mediaUrl": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
"targetUrl": "/videos/lin-dali-documentary",
"ctaLabel": "观看访谈",
"ctaLabelEn": "Watch",
"citySlugs": ["dali"],
"relatedProfiles": ["林晓雨"],
"chapters": [
{"title": "为什么离开一线城市", "time": "00:00"},
{"title": "远程团队如何协作", "time": "03:20"},
{"title": "大理生活成本复盘", "time": "07:45"},
],
"durationMinutes": 12,
"sortOrder": 2,
"status": "published",
},
{
"slug": "nomadcna-app",
"type": "app",
"title": "NomadCNA App",
"titleEn": "NomadCNA App",
"subtitle": "记录旅居路线、发现同城活动、保存城市清单",
"subtitleEn": "Track routes, discover local meetups, and save city lists.",
"description": "App 落地页提供 Windows/Android/iOS 下载入口。本地 MVP 先提供模拟下载和功能预览,后续可接真实安装包、版本更新和用户设备同步。",
"descriptionEn": "The app landing page provides downloads and feature previews.",
"coverImage": "https://images.unsplash.com/photo-1516321318423-f06f85e504b3?w=1200",
"mediaUrl": "/api/downloads/nomadcna-app-demo.zip",
"targetUrl": "/app",
"ctaLabel": "下载 App",
"ctaLabelEn": "Download app",
"citySlugs": ["dali", "chengdu", "shenzhen", "hangzhou", "xiamen"],
"relatedProfiles": ["林晓雨", "陈浩然", "王思琪"],
"chapters": [
{"title": "旅居路线追踪", "icon": "🧭"},
{"title": "同城活动提醒", "icon": "🍹"},
{"title": "城市收藏和对比", "icon": ""},
],
"durationMinutes": 0,
"sortOrder": 3,
"status": "published",
},
{
"slug": "digital-nomad-guide",
"type": "guide",
"title": "数字游民指南",
"titleEn": "Digital Nomad Guide",
"subtitle": "完整方法论、工具、案例和长期更新",
"subtitleEn": "Methods, tools, cases, and long-term updates.",
"description": "跳转到 digital.hackrobot.cn 的数字游民专题站。当前站内城市、访谈、App 与专题指南互相导流。",
"descriptionEn": "External guide site connected with city pages, interviews, and the app.",
"coverImage": "https://images.unsplash.com/photo-1499750310107-5fef28a66643?w=1200",
"mediaUrl": "",
"targetUrl": "https://digital.hackrobot.cn/zh",
"ctaLabel": "打开指南",
"ctaLabelEn": "Open guide",
"citySlugs": ["dali", "chengdu", "shenzhen"],
"relatedProfiles": [],
"chapters": [
{"title": "远程工作基础设施", "minutes": 6},
{"title": "如何设计你的第一条旅居路线", "minutes": 9},
{"title": "如何避免孤独和信息差", "minutes": 7},
],
"durationMinutes": 22,
"sortOrder": 4,
"status": "published",
},
]
def _city_detail(city: dict, index: int) -> dict:
slug = city["slug"]
name = city["name"]
cost = int(city["costPerMonth"])
cowork = max(600, round(cost * 0.18))
rent = max(1200, round(cost * 0.42))
food = max(900, round(cost * 0.26))
transport = max(200, round(cost * 0.08))
leisure = max(300, cost - rent - food - cowork - transport)
return {
"citySlug": slug,
"guide": {
"summary": f"{name}适合想把远程工作和生活质量同时拉高的人。建议先用 2-4 周短住验证网络、社群和生活节奏,再决定是否长期停留。",
"bestFor": city.get("tags", [])[:4],
"workSetup": f"建议选择靠近核心生活区的住处,搭配 1 个固定共享办公点和 2 个备用咖啡馆。当前网速参考值为 {city['internetSpeed']} Mbps。",
"arrivalChecklist": ["确认 4G/5G 覆盖", "预约第一周住宿", "加入本地社群", "收藏 2 个办公点", "报名一场线下活动"],
"linkedContent": ["nomad-china-playbook", "digital-nomad-guide"],
},
"pros": {
"pros": [
f"月均生活成本约 ¥{cost:,},适合控制预算。",
f"当前估算有 {city['nomadsNow']} 位游民活跃,容易找到同频伙伴。",
f"城市标签覆盖:{''.join(city.get('tags', [])[:5])}",
],
"cons": [
"热门区域旺季住宿价格波动较大。",
"长期停留前仍需实测具体住处网络。",
"社交圈集中,需要主动参加活动融入。",
],
},
"reviews": {
"rating": city["overallScore"],
"items": [
{"author": "林晓雨", "role": "产品设计师", "text": f"{name}最适合有稳定远程收入的人,白天专注工作,晚上参加小规模聚会。", "score": 5},
{"author": "陈浩然", "role": "独立开发者", "text": "如果你需要高强度商务会面,建议先看交通和航班;如果是深度工作,这里很舒服。", "score": 4},
{"author": "王思琪", "role": "内容创作者", "text": "生活素材很多,但要避免把旅行感当成生产力,最好保持固定作息。", "score": 4},
],
},
"cost": {
"monthlyTotal": cost,
"currency": "CNY",
"breakdown": [
{"label": "住宿", "amount": rent},
{"label": "餐饮", "amount": food},
{"label": "共享办公", "amount": cowork},
{"label": "交通", "amount": transport},
{"label": "社交/休闲", "amount": leisure},
],
"tip": "预算表与城市卡片成本字段关联,后续可根据用户消费记录自动校准。",
},
"people": {
"nomadsNow": city["nomadsNow"],
"personas": [
{"name": "远程全职", "percent": 36},
{"name": "自由职业", "percent": 28},
{"name": "独立开发者", "percent": 18},
{"name": "内容创作者", "percent": 18},
],
"featuredProfiles": ["林晓雨", "陈浩然", "王思琪"] if index < 6 else ["陈浩然", "王思琪"],
},
"chat": {
"channels": [
{"name": f"{name}落地互助群", "members": min(999, city["nomadsNow"]), "status": "open"},
{"name": f"{name}共享办公情报", "members": round(city["nomadsNow"] * 0.42), "status": "open"},
{"name": "周末活动约局", "members": round(city["nomadsNow"] * 0.28), "status": "members"},
],
"latestTopics": ["本周线下咖啡局", "哪里适合视频会议", "短租避坑清单"],
},
"photos": {
"items": [
city.get("coverImage") or "https://images.unsplash.com/photo-1500530855697-b586d89ba3ee?w=1200",
"https://images.unsplash.com/photo-1497366754035-f200968a6e72?w=1200",
"https://images.unsplash.com/photo-1500530855697-b586d89ba3ee?w=1200",
]
},
"weather": {
"temperature": city["temperature"],
"humidity": city["humidity"],
"bestMonths": ["3月", "4月", "10月", "11月"],
"note": f"当前气候估算适合中长期试住,体感温度需结合季节和住宿条件判断。",
},
"trends": {
"growth": [
{"month": "1月", "value": max(50, city["nomadsNow"] - 160)},
{"month": "2月", "value": max(70, city["nomadsNow"] - 120)},
{"month": "3月", "value": max(90, city["nomadsNow"] - 80)},
{"month": "4月", "value": max(120, city["nomadsNow"] - 40)},
{"month": "5月", "value": city["nomadsNow"]},
],
"insight": f"{name}的社群热度正在上升,新增用户主要来自远程全职和自由职业人群。",
},
"demographics": {
"age": [
{"label": "22-27", "value": 24},
{"label": "28-34", "value": 46},
{"label": "35-44", "value": 22},
{"label": "45+", "value": 8},
],
"work": [
{"label": "技术/产品", "value": 34},
{"label": "内容/设计", "value": 26},
{"label": "运营/市场", "value": 18},
{"label": "创业/自由职业", "value": 22},
],
},
"relatedContent": ["nomad-china-playbook", "lin-dali-documentary" if slug == "dali" else "digital-nomad-guide", "nomadcna-app"],
}
CITY_DETAILS = [_city_detail(city, idx) for idx, city in enumerate(CITIES)]