Skip to content

CharlieAlex/Shopping-Adventure-App

Repository files navigation

🛩️ 日本購物大冒險

一個冒險主題的日本購物清單管理應用,專為「村民A」和「村民B」設計,讓購物變成一場冒險遊戲!

📸 畫面預覽

入口頁

選擇你的冒險身份 —「村民A」或「村民B」

入口頁畫面

任務頁

瀏覽所有待購商品,依分類或店舖篩選

任務頁畫面

冒險頁

旅遊攻略據點一覽,規劃你的冒險路線

冒險頁畫面

新增物件

即時新增或編輯商品資訊

新增物件畫面

任務完成

所有商品收集完畢,冒險成功!

任務完成畫面

✨ 功能特色

購物清單(任務頁籤)

  • 📋 商品管理 - 60+ 種精選日本必買商品,含化妝品、保養品、藥品、生活用品、小物等
  • 新增 / 編輯商品 - 可即時新增或修改商品資訊(品名、分類、店舖、描述、圖片連結)
  • 🔍 智能搜尋 - 快速找到想要的商品
  • 🏷️ 雙模式篩選 - 依「分類」或「店舖」篩選商品,附已完成篩選
  • 👥 雙人進度追蹤 - 村民A 與村民B 分別標記已購買商品,進度條呈現各自貢獻
  • 📸 商品圖片 - 透過 Google Drive 連結顯示商品照片
  • 🔎 Google 搜圖 - 一鍵開啟 Google 圖片搜尋

�️ 旅遊攻略(冒險頁籤)

  • 📍 據點管理 - 購物、動漫、遊玩、餐廳、伴手禮等分類的旅遊攻略
  • 新增 / 編輯據點 - 即時新增或修改攻略據點(地點、描述、分類、行動、連結)
  • 完成追蹤 - 標記已造訪的據點
  • 🔗 外部連結 - 支援附加相關連結(Instagram、Google Maps 等)

🎨 冒險主題 UI

  • 🌿 沉浸式冒險主題設計,深綠色調搭配金色漸層
  • 🐾 背景腳印、樹葉等裝飾元素
  • ✨ 動態進度條與動畫效果
  • 📱 行動裝置優先的響應式設計

🔄 資料同步

  • 🔥 Firebase Firestore - 即時雲端同步,多裝置即時更新
  • 📊 Google Sheets 雙向同步 - 從 Google Sheets 匯入 / 匯出資料

🛠️ 技術棧

技術 用途
React 18 UI 框架
TypeScript 類型安全
Vite 開發建置工具
TailwindCSS 樣式框架
Lucide React 圖示庫
Firebase Firestore 即時雲端資料庫
Google Sheets API 資料匯入匯出

📁 專案結構

japan-shiba-rb/
├── docs/
│   └── screenshots/               # 應用程式畫面截圖
├── src/
│   ├── App.tsx                    # 主應用程式(含用戶選擇、頁籤管理)
│   ├── main.tsx                   # 入口點
│   ├── index.css                  # 全域樣式
│   ├── firebase.ts                # Firebase 初始化設定
│   ├── components/
│   │   ├── Header.tsx             # 頂部導航(搜尋、篩選、雙人進度條)
│   │   ├── ItemList.tsx           # 商品列表容器
│   │   ├── ItemCard.tsx           # 商品卡片(含完成者標記)
│   │   ├── ItemModal.tsx          # 商品詳情彈窗
│   │   ├── ItemFormModal.tsx      # 商品新增/編輯表單
│   │   ├── TravelTips.tsx         # 旅遊攻略列表
│   │   ├── TipFormModal.tsx       # 攻略新增/編輯表單
│   │   ├── BottomNav.tsx          # 底部導航(任務/冒險頁籤)
│   │   ├── FilterChips.tsx        # 篩選器標籤
│   │   └── AdventureDecor.tsx     # 冒險主題背景裝飾
│   ├── data/
│   │   ├── items.ts               # 商品初始資料(60 項)
│   │   ├── travelTips.ts          # 攻略據點初始資料
│   │   └── imageMap.ts            # 圖片 ID 映射
│   ├── hooks/
│   │   ├── useItems.ts            # 商品狀態管理(含 Firestore 同步)
│   │   └── useTravelTips.ts       # 攻略狀態管理(含 Firestore 同步)
│   ├── services/
│   │   └── itemsService.ts        # Firestore CRUD 服務模組
│   ├── utils/
│   │   └── imageUtils.ts          # 圖片工具函式
│   └── types/
│       └── index.ts               # TypeScript 類型定義
├── scripts/
│   ├── syncFromSheet.js           # Google Sheets → Firestore 同步
│   ├── syncToSheet.js             # Firestore → Google Sheets 同步
│   └── verify-firebase.js         # Firebase 連線驗證工具
├── sa/                            # Google Service Account 金鑰(不含入版控)
├── .env.example                   # 環境變數範本
├── index.html
├── package.json
├── tsconfig.json
├── vite.config.ts
├── tailwind.config.js
└── postcss.config.js

🔥 Firebase 設定

Step 1: 建立 Firebase 專案

  1. 前往 Firebase Console
  2. 點擊「新增專案」,輸入專案名稱
  3. 可停用 Google Analytics(簡化設定)
  4. 點擊「建立專案」

Step 2: 新增網頁應用程式

  1. 在專案首頁點擊「網頁」圖示 (</>)
  2. 輸入應用程式暱稱,點擊「註冊應用程式」
  3. 📋 複製顯示的 firebaseConfig 設定值

Step 3: 啟用 Cloud Firestore

  1. 左側選單:「Build」→「Firestore Database」
  2. 點擊「建立資料庫」
  3. 選擇「正式模式」
  4. 選擇位置(建議:asia-east1 台灣)

Step 4: 設定安全規則

在 Firestore → 「規則」頁籤,暫時使用:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /items/{itemId} {
      allow read, write: if true;
    }
    match /travel_tips/{tipId} {
      allow read, write: if true;
    }
  }
}

⚠️ 注意:上述規則允許任何人讀寫,上線前請加入適當的驗證規則。

Step 5: 設定環境變數

複製 .env.example.env,填入 Firebase 設定值:

VITE_FIREBASE_API_KEY=AIzaSy...
VITE_FIREBASE_AUTH_DOMAIN=your-project.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your-project-id
VITE_FIREBASE_STORAGE_BUCKET=your-project.appspot.com
VITE_FIREBASE_MESSAGING_SENDER_ID=123456789
VITE_FIREBASE_APP_ID=1:123456789:web:abc123

📊 Google Sheets 同步設定(選用)

如需使用 Google Sheets 雙向同步功能:

  1. 建立 Google Cloud Service Account,取得 JSON 金鑰檔案
  2. 將金鑰檔案放至 sa/sa.json
  3. .env 中加入 Google Sheets URL:
    G_SHEET_URL=https://docs.google.com/spreadsheets/d/YOUR_SHEET_ID/edit
  4. 確保 Google Sheet 中有以下工作表:
    • Shopping_List - 匯入商品資料用
    • Travel_Tips - 匯入攻略資料用
    • Shopping_List_Pull - 匯出商品資料用
    • Travel_Tips_Pull - 匯出攻略資料用

同步指令

# Google Sheets → Firestore(匯入)
npm run syncFromSheet

# Firestore → Google Sheets(匯出)
npm run syncToSheet

🚀 本地開發

前置需求

  • Node.js 18+
  • npm

安裝步驟

  1. Clone 專案

    git clone <repository-url>
    cd japan-shiba-rb
  2. 安裝依賴

    npm install
  3. 設定環境變數(參考上方 Firebase 設定章節)

  4. 啟動開發伺服器

    npm run dev

    開發伺服器會自動開啟 http://localhost:5173

其他指令

# 建置生產版本
npm run build

# 預覽生產版本
npm run preview

📱 使用說明

  1. 選擇身份 - 開啟應用後選擇「村民A」或「村民B」
  2. 瀏覽商品 - 在「任務」頁籤瀏覽所有待購商品
  3. 篩選商品 - 點擊頂部標籤依分類篩選,或切換至店舖模式
  4. 搜尋商品 - 使用搜尋欄快速找到特定商品
  5. 查看詳情 - 點擊商品卡片開啟詳情視窗
  6. 標記已買 - 點擊打勾按鈕標記為已收集,系統會記錄是誰完成的
  7. 搜尋圖片 - 在詳情視窗點擊「在 Google 搜尋圖片」
  8. 新增商品 - 點擊「+」按鈕新增自訂商品
  9. 編輯商品 - 點擊編輯圖示修改商品資訊
  10. 旅遊攻略 - 切換至「冒險」頁籤查看、新增、編輯攻略據點

祝購物愉快!🛍️✨

About

一個冒險主題的日本購物清單管理應用,專為「村民A」和「村民B」設計,讓購物變成一場冒險遊戲!

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors