Back to Blog
PAPA開發實錄 [Day 1/7] - 從部落需求到產品定義
📋 Case Study

PAPA開發實錄 [Day 1/7] - 從部落需求到產品定義

B
Blake
Aug 25, 2025 By Blake 9 min read
- 🎯 起源:阿美族家族聚會後,看到表姊花2週處理50人財務結算的痛點 - 🔍 調研:訪談5位活動組織者,發現技術層面(預算失控、收據散亂)與文化層面(集體決策、跨世代參與)需求 - 💡 產品定義:PAPA分帳系統 - 無需註冊、即開即用、資訊透明 - ⚡ 技術架構:Django 5.0 + PostgreSQL 後端,React 18 + TypeScript 前端 - 📊 實際成果:完成需求分析、技術選型、核心資料模型設計(Event, Group, Expense) 定位:Blake Lab「文化×技術」方法論的首次實踐,展現AI時代文化科技雙領先者戰略

作為Blake Lab的首個文化科技融合實驗,PAPA不只是技術展示,更是原住民數位化的實際行動。

🎯 專案起源:真實的部落痛點

上個月阿美族家族聚會後,看到表姊花了整整兩週處理50多人的財務結算。Excel 表格來回傳了十幾個版本,LINE 群組裡各種截圖和疑問此起彼落。作為具備20年政府專案經驗13年部落浸潤背景的技術人員,我想:能否用現代技術解決這個傳統問題?

這不是我第一次觀察到這個痛點。從台東長光部落的豐年祭,到家族的各種聚餐活動,每次都看到主辦人為了金錢處理焦頭爛額。更重要的是,這影響了活動的本質 - 原本應該是增進感情的聚會,卻因為金錢問題產生了隔閡。

🔍 深度需求探索(文化敏感調研)

與5位常組織家族活動的親戚深度訪談,發現關鍵痛點:

技術層面

  • 人數變動導致預算失控(臨時加人、臨時取消)

  • 多重身份讓收費規則複雜(大人、小孩、幼兒不同價)

  • 收據管理散亂,事後對帳困難

  • 缺乏即時的財務透明度

文化層面

  • 阿美族重視集體決策資源共享

  • 傳統互助精神需要透明的財務機制

  • 跨世代參與需要低學習門檻的工具

  • 長輩偏好簡單直覺的操作界面

💡 產品願景定義

PAPA (Pangcah Accounting for Party Activities) 的核心理念:

  • Pangcah - 阿美族自稱,代表文化根源

  • Accounting - 會計系統,確保財務透明

  • Party - 聚會活動,促進社群連結

  • Activities - 多元應用,不限於單一場景

目標是打造一個無需註冊、即開即用、資訊透明的分帳工具,讓每個人都能輕鬆組織活動,專注在人與人的連結上。

⚡ 基於實戰經驗的技術選型

基於「穩定可靠、高效開發、擴展彈性」三大原則,選擇經過實戰驗證的技術棧:

# 後端架構 - Django 生態系統
backend_stack = {
    "framework": "Django 5.0 + Django REST Framework 3.14",
    "database": "PostgreSQL (Railway Cloud)",
    "realtime": "Django Channels + Redis",
    "deployment": "Railway.app",
    "api_design": "RESTful API with JWT Authentication",
    "advantages": [
        "成熟穩定的 ORM 系統",
        "豐富的第三方套件生態",
        "優秀的安全性內建功能",
        "支援複雜的業務邏輯"
    ]
}
// 前端架構 - React 現代化技術
const frontend_stack = {
  framework: "React 18 + TypeScript 5.0",
  build_tool: "Vite 4.0",                    // 快速建構
  ui_framework: "TailwindCSS + 自定義組件",   // 文化友善設計
  state_management: "React Query + Context API",
  http_client: "Axios with interceptors",
  deployment: "Vercel",
  advantages: [
    "類型安全的開發體驗",
    "優秀的開發者工具支援",
    "豐富的社群資源",
    "適合快速迭代"
  ]
}

選擇這個技術棧的關鍵考量:

  1. 開發效率:Django Admin 快速建立管理介面

  2. 維護成本:成熟框架降低長期維護負擔

  3. 擴展性:支援微服務架構演進

  4. 團隊協作:標準化的開發模式便於協作

🌟 Blake Lab的技術×文化方法論

這次開發實驗驗證了我們的核心假設:

  1. 技術民主化:AI工具讓原型開發從數週縮短到數天

  2. 文化優先:深度理解使用情境比功能堆疊重要

  3. 政策意義:小工具背後反映原民數位權益問題

第一天的實際成果

  • ✅ 完成需求訪談與分析文檔

  • ✅ 建立技術架構與資料庫設計

  • ✅ 初始化 Django 專案與基礎配置

  • ✅ 設計核心資料模型(Event, Group, Expense, User)

# Django 核心資料模型設計
from django.db import models
from django.contrib.auth import get_user_model

class Event(models.Model):
    """活動模型 - 對應阿美族各種聚會活動"""
    
    class EventStatus(models.TextChoices):
        ACTIVE = 'ACTIVE', '進行中'
        COMPLETED = 'COMPLETED', '已完成' 
        CANCELLED = 'CANCELLED', '已取消'
    
    name = models.CharField("活動名稱", max_length=200)
    description = models.TextField("活動描述", blank=True)
    start_date = models.DateTimeField("開始時間")
    end_date = models.DateTimeField("結束時間")
    budget = models.DecimalField(
        "預算", max_digits=10, decimal_places=2, 
        null=True, blank=True
    )
    status = models.CharField(
        "狀態", max_length=10, 
        choices=EventStatus.choices, 
        default=EventStatus.ACTIVE
    )
    
    # 文化相關欄位
    allow_split = models.BooleanField(
        "允許分帳", default=True,
        help_text="考慮長輩可能不習慣複雜分帳"
    )
    
    # 關聯
    group = models.ForeignKey(
        'Group', on_delete=models.CASCADE,
        related_name='events', verbose_name="群組"
    )
    creator = models.ForeignKey(
        get_user_model(), on_delete=models.CASCADE,
        verbose_name="創建者"
    )
    
    class Meta:
        ordering = ['-start_date']
        verbose_name = "活動"
        verbose_name_plural = "活動"

class Expense(models.Model):
    """支出記錄模型"""
    
    class ExpenseType(models.TextChoices):
        EXPENSE = 'EXPENSE', '支出'
        INCOME = 'INCOME', '收入'
    
    amount = models.DecimalField("金額", max_digits=10, decimal_places=2)
    type = models.CharField(
        "類型", max_length=10, 
        choices=ExpenseType.choices, 
        default=ExpenseType.EXPENSE
    )
    date = models.DateTimeField("發生日期")
    description = models.TextField("描述", blank=True)
    
    # 關聯
    category = models.ForeignKey(
        'Category', on_delete=models.PROTECT,
        related_name='expenses', verbose_name="分類"
    )
    event = models.ForeignKey(
        Event, on_delete=models.CASCADE,
        related_name='expenses', verbose_name="活動"
    )
    user = models.ForeignKey(
        get_user_model(), on_delete=models.CASCADE,
        related_name='expenses', verbose_name="記錄者"
    )
    
    class Meta:
        ordering = ['-date']
        verbose_name = "支出記錄"
        verbose_name_plural = "支出記錄"

🚀 下一步預告

明天將分享 UX 設計過程,展示如何運用 AI 工具快速產出文化敏感的使用者介面,包括:

  • 跨世代友善的操作流程

  • 視覺化的金額顯示方式

  • 一鍵分享的社群整合功能

這個專案不只是寫程式,更是在建立文化與科技的橋樑,讓傳統智慧在數位時代得以延續和發展。


🚀 Blake Lab - AI時代文化科技雙領先者
💡 20年政府專案 | 🤖 AI原住民應用 | 🎯 族語NLP開發 | 📈 文化敏感設計
🌐 wchung.tw | 📧 [email protected]

關注 Blake Lab,一起探索技術與文化的無限可能!

Enjoyed this article? Show some love!

0
Clap

Enjoyed this article?

Subscribe for engineering notes and AI development insights

We respect your privacy. No spam, unsubscribe anytime.

Share this article

Comments