作為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: [
"類型安全的開發體驗",
"優秀的開發者工具支援",
"豐富的社群資源",
"適合快速迭代"
]
}
選擇這個技術棧的關鍵考量:
開發效率:Django Admin 快速建立管理介面
維護成本:成熟框架降低長期維護負擔
擴展性:支援微服務架構演進
團隊協作:標準化的開發模式便於協作
🌟 Blake Lab的技術×文化方法論
這次開發實驗驗證了我們的核心假設:
技術民主化:AI工具讓原型開發從數週縮短到數天
文化優先:深度理解使用情境比功能堆疊重要
政策意義:小工具背後反映原民數位權益問題
第一天的實際成果
✅ 完成需求訪談與分析文檔
✅ 建立技術架構與資料庫設計
✅ 初始化 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,一起探索技術與文化的無限可能!