github.com/revectores/poi-manager · TypeScript · Next.js
poi-manager is a personal place-tracking tool built around a map interface. The idea is simple: keep a private library of places you've been — or want to go — searchable and browsable on a full-screen map, with per-place visit logs (date + notes) and visual distinction between visited and not-yet-visited markers.
poi-manager 是一个以地图为核心入口的个人地点记录工具。 设计思路简单:维护一个私有的地点库,记录你去过或想去的地方,支持在全屏地图上搜索和浏览, 为每个地点记录多次到访(时间 + 备注),并用视觉区分"已去过"和"未去过"的标记。
poi-manager は地図インターフェースを中心に据えた個人スポット管理ツールです。 コンセプトはシンプルです。訪れた場所や行きたい場所のプライベートライブラリを持ち、 フルスクリーンの地図で検索・ブラウズでき、スポットごとに複数回の訪問ログ(日時+メモ)を記録し、 訪問済みと未訪問のマーカーを視覚的に区別します。
The stack is deliberately minimal for a personal tool — local SQLite means no server to run or database to host:
作为个人工具,技术栈有意保持精简——本地 SQLite 意味着无需运行额外服务,也无需托管数据库:
個人ツールとしてスタックは意図的にミニマルに設計されています。ローカル SQLite を使うため、サーバーもデータベースのホスティングも不要です:
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router) + TypeScript |
| Styling | Tailwind CSS + shadcn/ui |
| Map | Amap (高德地图) JS API v2 |
| ORM | Drizzle ORM |
| Database | SQLite (better-sqlite3) |
| Data fetching | TanStack Query |
| 层次 | 技术 |
|---|---|
| 框架 | Next.js 16 (App Router) + TypeScript |
| 样式 | Tailwind CSS + shadcn/ui |
| 地图 | 高德地图 JS API v2 |
| ORM | Drizzle ORM |
| 数据库 | SQLite (better-sqlite3) |
| 数据获取 | TanStack Query |
| レイヤー | 技術 |
|---|---|
| フレームワーク | Next.js 16 (App Router) + TypeScript |
| スタイリング | Tailwind CSS + shadcn/ui |
| 地図 | 高德地図(Amap)JS API v2 |
| ORM | Drizzle ORM |
| データベース | SQLite (better-sqlite3) |
| データ取得 | TanStack Query |
The REST API lives under src/app/api/pois/ as Next.js route handlers.
The SQLite file is at data/poi.db (gitignored), managed through Drizzle's schema-push workflow.
REST API 位于 src/app/api/pois/,以 Next.js 路由处理器实现。
SQLite 文件存放在 data/poi.db(已加入 .gitignore),通过 Drizzle 的 schema-push 工作流管理。
REST API は src/app/api/pois/ に Next.js ルートハンドラとして実装されています。
SQLite ファイルは data/poi.db(gitignore 済み)に置かれ、Drizzle の schema-push ワークフローで管理します。
You need an Amap JS API key from the Amap developer console. Then:
你需要在高德开放平台申请 JS API Key,然后:
Amap デベロッパーコンソールから JS API キーを取得してから:
cp .env.local.example .env.local
# fill in NEXT_PUBLIC_AMAP_KEY and NEXT_PUBLIC_AMAP_SECURITY_CODE
npm install
npm run db:push # sync schema to SQLite
npm run dev # http://localhost:3000
To inspect the database visually:
可视化查看数据库:
データベースをビジュアルで確認するには:
npm run db:studio