Skip to content

Repository files navigation

🗾 日本动漫店铺地图

License: MIT React TypeScript Vite TailwindCSS MapLibre

收录 176+ 个动漫店铺的交互式地图,内置 AI 旅行小助手,基于 MapLibre 矢量瓦片渲染,支持地区筛选、分类筛选、搜索与排序。

🐛 报告 Bug  |  ✨ 功能建议


简介

一张专为中国动漫迷打造的日本旅行地图。标注了全日本 176+ 个动漫店铺,内置 AI 旅行小助手(DeepSeek + Cloudflare Worker),全中文 UI 与地点描述,使用 MapLibre GL JS 矢量瓦片实现丝滑的地图交互体验。


截图

欢迎屏

欢迎屏

地图界面

地图界面

功能

功能 说明
🗺️ 矢量瓦片地图 MapLibre GL JS 渲染,OpenFreeMap 全球 CDN 瓦片源
📍 176+ 个地点 176+ 个动漫店铺,覆盖北海道到九州
🏷️ 7 类分色标记 Animate(粉色)/ Melonbooks(绿色)/ Mandarake(橙色)/ Suruga-ya(蓝色)/ GAMERS(黄色)/ Lashinbang(紫色)/ K-Books(深红)
🔍 搜索与筛选 全文搜索(名称/描述/标签/地址)、地区筛选(都道府県)、分类筛选
📊 排序 按评分、名称、更新时间、访问量排序
📱 响应式布局 桌面端侧边栏 + 移动端抽屉,全尺寸适配
🤖 AI 小助手 DeepSeek API + Cloudflare Worker 代理,内置 176+ 家店铺知识的旅行顾问,系统提示词服务端注入(防篡改)+ Origin 校验 + 限流
🛡️ 安全扫描 AutoSec-QC 提示词注入检测,40+ 条规则覆盖 10 个攻击类别
🖼️ 城市图片 弹窗城市风景图本地自托管 WebP(来源 Wikimedia Commons,署名见 public/cities/CREDITS.md
📲 Android APK WebView 全屏应用,GitHub Actions 自动构建,网站更新后自动同步
🎬 加载过渡页 动画加载过渡页,地图资源就绪后自动进入主界面
性能优化 Cloudflare Workers 瓦片代理加速、代码分割 3 chunk、CSS 变量驱动 marker、content-visibility 懒加载、Service Worker 瓦片缓存

技术栈

层级 技术
框架 React 19 + Hooks
语言 TypeScript — 严格模式
构建 Vite — 亚秒级 HMR
样式 TailwindCSS 4 — CSS 变量
地图引擎 MapLibre GL JS — 矢量瓦片渲染
瓦片源 OpenFreeMap — 免费、无 Key、全球 CDN
瓦片代理 Cloudflare Workers — 亚太加速 + 缓存优化
状态管理 Zustand — 轻量、持久化
图标 Lucide React
AI 模型 DeepSeek API — 旅行助手对话模型
AI 代理 Cloudflare Workers — 服务端代理转发 + 系统提示词注入 + 限流
字体 Microsoft YaHei / PingFang SC (系统字体)

快速开始

前置要求: Node.js >= 18, npm >= 9

# 克隆仓库
git clone git@github.com:9dk9jptv8h-hue/japan-otaku-map.git
# or
git clone https://github.com/9dk9jptv8h-hue/japan-otaku-map.git
cd japan-otaku-map

# 安装依赖
npm install

# 启动开发服务器
npm run dev

打开 http://localhost:5173 即可使用。

生产构建

npm run build
npm run preview

项目结构

src/
├── components/
│   ├── chat/            # AI小助手聊天面板
│   ├── layout/          # AppShell、DesktopLayout、MobileLayout
│   ├── map/             # MapContainer、MarkersLayer、MapControls
│   ├── sidebar/         # Sidebar、FilterPanel、SearchBar、CardList、LocationCard、SortControl、SidebarToggle
│   └── ui/              # Badge、EmptyState、ErrorBoundary、Input
├── constants/
│   ├── mockData.ts      # 176+ 个地点数据
│   ├── mapDefaults.ts   # 视口、瓦片样式配置
│   └── theme.ts         # 分类颜色与元数据
├── hooks/               # useDebounce、useFilteredLocations、useMediaQuery
├── services/            # AI助手API调用(Cloudflare Worker代理)
├── store/               # Zustand stores (UI / Filter / Map)
├── types/               # TypeScript 类型定义
├── utils/               # cn、city-photo
├── App.tsx              # 根组件 + 欢迎屏
├── main.tsx             # 入口
└── index.css            # 全局样式 + 动画
worker/                  # Cloudflare Worker 代理项目(独立部署)

更新日志

查看 CHANGELOG.md 了解各版本的详细变更记录。


License

MIT © 9dk9jptv8h-hue

About

🗾 日本动漫店铺地图 | 176个动漫店铺 · 7大连锁 · AI小助手 | MapLibre矢量瓦片 | React 19 + TypeScript

Topics

Resources

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages