Epic cộng đồng thôn/làng và memorial¶
Cập nhật gần nhất: 12/04/2026
1. Mục tiêu¶
Mở rộng BeFam từ nền tảng gia phả + vận hành dòng họ sang một lớp cộng đồng địa phương có tính kết nối cao hơn:
- trưởng thôn/làng tạo và quản lý cộng đồng thôn/làng
- hệ thống tự gom đúng thành viên theo nguyên quán
- trưởng thôn/làng tạo sự kiện và thông báo cho cộng đồng đó
- thành viên nhận thông báo về thời gian, địa điểm, nội dung
- mọi người có một không gian
memorialđể lưu lại sự kiện, hình ảnh, ghi chú, câu chuyện và xem lại về sau
2. Đánh giá nhanh trên codebase hiện tại¶
BeFam đã có nền tảng tốt để làm nhanh phần này:
members,clans,branches,genealogyđã ổn địnheventsđã có create/edit/reminder/notificationnotificationsđã có inbox + push + deep-linkgovernanceđã có role-based access
Nhưng hiện tại còn 3 khoảng trống lớn:
membersmới cóaddressText, chưa có cấu trúc riêng chonguyên quán.eventsvànotificationsmới scope theoclanhoặcbranch, chưa có scope theo cộng đồng thôn/làng.- Chưa có mô hình feed/archive cho nội dung ký ức, ảnh, ghi chú, recap.
3. Quyết định sản phẩm quan trọng¶
3.1 Không dùng branch để biểu diễn thôn/làng¶
branch trong BeFam đang mang nghĩa chi trong gia phả. Nếu dùng lại cho
thôn/làng, mô hình sẽ bị lệch nghĩa và rất khó bảo trì.
Quyết định:
- tạo lớp domain mới:
community communityType:hamlet,village, có thể mở rộngassociation,alumni,hometown-groupvề sau
3.2 Tách rõ địa chỉ hiện tại và nguyên quán¶
Không nên map nguyên quán vào addressText.
Quyết định:
- giữ
addressTextcho nơi ở hiện tại - thêm
originProfilecho nguyên quán originProfilenên có cấu trúc đủ để match tự động:provinceCodedistrictCodecommuneCodevillageNamehamletNamedisplayTextnormalizedKey
3.3 Memorial không chỉ là ngày giỗ¶
Hiện codebase đã có memorial theo nghĩa giỗ kỵ trong module events. Tính năng
mới nên mang nghĩa rộng hơn: không gian lưu ký ức cộng đồng và gia đình.
Quyết định:
- giữ
event memorialhiện tại cho giỗ/lễ - thêm
memorial spacenhư một timeline tri thức và kỷ niệm
4. Đề xuất mô hình dữ liệu¶
4.1 Mở rộng member¶
members/{memberId}
{
"addressText": "TP.HCM, Việt Nam",
"originProfile": {
"provinceCode": "31",
"districtCode": "299",
"communeCode": "10783",
"villageName": "Làng Đông",
"hamletName": "Thôn Đình",
"displayText": "Thôn Đình, Làng Đông, xã X, huyện Y, tỉnh Z",
"normalizedKey": "31|299|10783|lang-dong|thon-dinh"
}
}
4.2 Community¶
communities/{communityId}
{
"id": "community_...",
"clanId": "clan_...",
"communityType": "hamlet",
"name": "Thôn Đình",
"parentCommunityId": "community_lang_dong",
"originMatchKey": "31|299|10783|lang-dong|thon-dinh",
"status": "active",
"leaderMemberIds": ["member_a"],
"memberCount": 120,
"createdBy": "member_a"
}
4.3 Membership¶
communityMemberships/{membershipId}
{
"communityId": "community_...",
"memberId": "member_...",
"clanId": "clan_...",
"membershipSource": "auto_origin_match",
"status": "active",
"joinedAt": "serverTimestamp"
}
4.4 Event và thông báo cộng đồng¶
Không cần tạo module event mới. Nên mở rộng events hiện tại:
audienceScopeType:clan,branch,communityaudienceScopeIdannouncementCategory:meeting,distribution,festival,noticerequiresAck:true/falsecho thông báo quan trọng
4.5 Memorial space¶
Tối giản để ra được production sớm:
memorialEntries/{entryId}memorialComments/{commentId}memorialMedia/{mediaId}hoặc lưu file trong Storage + metadata trong entry
memorialEntries nên hỗ trợ:
scopeType:clan,communityscopeIdentryType:story,photo_album,event_recap,tribute,notetitle,bodyeventIdnullable để gắn với một sự kiệntaggedMemberIdsvisibility:scope_members,public_linkvề sau
5. Luồng nghiệp vụ đề xuất¶
5.1 Tạo cộng đồng thôn/làng¶
- Trưởng thôn/làng hoặc admin tạo
community. - Chọn loại cộng đồng:
thônhoặclàng. - Chọn địa danh chuẩn hoặc nhập tên chuẩn hóa.
- Hệ thống tạo
originMatchKey. - Hệ thống backfill toàn bộ member đang có
originProfile.normalizedKeykhớp. - Trigger tiếp tục tự sync cho member tạo mới hoặc member sửa nguyên quán.
5.2 Tạo event/thông báo¶
- Trưởng thôn/làng vào workspace cộng đồng.
- Chọn
Tạo sự kiệnhoặcĐăng thông báo. - Nếu là sự kiện:
- dùng lại form event hiện tại
- thêm audience
community - Nếu là thông báo:
- tạo bản ghi announcement nhẹ hơn event
- có thể kèm thời gian/địa điểm hoặc chỉ là thông báo
- Cloud Functions resolve audience qua
communityMemberships. - Thành viên nhận inbox + push notification.
5.3 Memorial¶
- Sau một buổi họp/gặp mặt/lễ chung, trưởng nhóm hoặc thành viên đăng recap.
- Thêm ảnh, ghi chú, danh sách người tham dự, bài học/kỷ niệm.
- Các thành viên khác vào xem, bình luận, bổ sung tư liệu.
- Sau này có thể lọc theo năm, sự kiện, làng/thôn, người được nhắc đến.
6. Backlog stories đề xuất¶
EPIC A - Cộng đồng thôn/làng¶
COMM-001 Thêm cấu trúc originProfile vào member¶
- As a member, tôi cập nhật nguyên quán theo cấu trúc chuẩn để hệ thống hiểu đúng quê quán của tôi.
COMM-002 Tạo community thôn/làng¶
- As a clan admin, tôi tạo được một cộng đồng thôn/làng với thông tin chuẩn hóa.
COMM-003 Gán vai trò trưởng thôn/làng¶
- As a clan admin, tôi chỉ định trưởng thôn/làng để người đó quản lý đúng cộng đồng.
COMM-004 Auto-match membership theo nguyên quán¶
- As the system, tôi tự thêm member vào community khi
originMatchKeykhớp.
COMM-005 Sync membership khi member đổi nguyên quán¶
- As the system, tôi cập nhật membership khi hồ sơ thành viên thay đổi nguyên quán.
COMM-006 Workspace cộng đồng¶
- As a village member, tôi mở được danh sách thành viên, sự kiện, thông báo của cộng đồng mình.
COMM-007 Event cộng đồng¶
- As a village leader, tôi tạo event cho community và chỉ thành viên đúng nhóm nhận được.
COMM-008 Announcement cộng đồng¶
- As a village leader, tôi đăng thông báo họp/phát quà/tổ chức lễ để mọi người nhận lịch và nội dung rõ ràng.
COMM-009 Deep-link từ notification vào community target¶
- As a member, tôi chạm vào thông báo và mở đúng event/thông báo trong community.
EPIC B - Memorial space¶
MEM-001 Tạo memorial entry¶
- As a member, tôi đăng bài memorial để lưu lại ký ức hoặc recap một sự kiện.
MEM-002 Đính kèm ảnh và ghi chú¶
- As a member, tôi thêm ảnh, mô tả và ghi chú để memorial có giá trị lưu trữ.
MEM-003 Gắn với event đã diễn ra¶
- As a leader, tôi tạo memorial recap từ một event để không bị đứt ngữ cảnh.
MEM-004 Bình luận và bổ sung tư liệu¶
- As a member, tôi bình luận và góp thêm thông tin cho memorial entry.
MEM-005 Xem lại theo năm/chủ đề/cộng đồng¶
- As a member, tôi lọc memorial để xem lại lịch sử gặp mặt của thôn/làng hoặc gia đình.
MEM-006 Quyền riêng tư memorial¶
- As a community member, tôi chỉ xem được memorial trong phạm vi được phép.
EPIC C - Growth loop¶
GROW-001 Mời thành viên chưa tham gia app từ event/thông báo¶
- As a leader, tôi chia sẻ link mời tham gia app trực tiếp từ community event.
GROW-002 Mời xem memorial recap¶
- As a member, tôi chia sẻ memorial recap cho người thân chưa dùng app để họ có động lực vào xem và gia nhập.
GROW-003 Đo chuyển đổi từ community activity sang join/claim¶
- As a product owner, tôi đo được event hoặc memorial nào kéo người dùng mới vào app.
7. Kế hoạch triển khai thực tế¶
Giai đoạn 1 - Foundation data + quyền¶
Mục tiêu:
- thêm
originProfilevào member model, rules, profile form - thêm
community,communityMemberships - thêm role
COMMUNITY_LEADERhoặcVILLAGE_LEADER
Phạm vi code chính:
- mobile:
features/profile- model member
- backend:
members/callables.tsgovernance/callables.ts- trigger sync membership mới
- security:
firebase/firestore.rules
Giai đoạn 2 - Community operations¶
Mục tiêu:
- community workspace
- create event cho audience
community - announcement + notification
Phạm vi code chính:
- mobile:
features/community/**mới- mở rộng
features/events/** - mở rộng notification target/deep-link
- backend:
- callable tạo/sửa community
- callable tạo announcement
- mở rộng
events/event-triggers.ts - mở rộng
notifications/push-delivery.ts
Giai đoạn 3 - Memorial MVP¶
Mục tiêu:
- post recap
- ảnh + note
- liên kết event -> memorial
- danh sách memorial theo scope
Phạm vi code chính:
- mobile:
features/memorial/**mới- backend:
- Firestore schema + rules
- upload Storage + metadata
- notification nhẹ khi có memorial nổi bật
Giai đoạn 4 - Growth và tối ưu¶
Mục tiêu:
- share link cho event/memorial
- invite flow từ community
- analytics funnel
- moderation/spam control
8. Rủi ro và cách giảm rủi ro¶
8.1 Sai dữ liệu nguyên quán¶
Rủi ro:
- thành viên nhập quê quán tự do, khó auto-match
Giải pháp:
- dùng selector địa danh chuẩn + normalize key
- membership auto-match nhưng cho phép leader review nếu confidence thấp
8.2 Spam thông báo¶
Rủi ro:
- trưởng nhóm gửi quá nhiều announcement
Giải pháp:
- rate limit theo ngày
- cho phép member mute community
- hỗ trợ
announcementPriority
8.3 Memorial bị loãng¶
Rủi ro:
- memorial thành news feed hỗn tạp, mất giá trị lưu trữ
Giải pháp:
- giới hạn
entryType - ưu tiên recap, ký ức, tư liệu, ảnh có ngữ cảnh
- dùng bộ lọc năm/sự kiện/người được nhắc đến
9. Đánh giá viral và kéo user¶
9.1 Tác động mạnh nhất¶
Tính năng này có tiềm năng kéo user tốt hơn quỹ hoặc khuyến học, vì nó chạm vào 2 động lực dùng app mạnh:
- nhu cầu biết thông tin họp/lễ/gặp mặt đúng lúc
- nhu cầu xem lại ảnh, ký ức, lịch sử cộng đồng
9.2 Điều gì thực sự tạo growth¶
Không phải bản thân community management, mà là các vòng lặp sau:
Event -> chia sẻ -> người thân cài app để xem chi tiếtThông báo quan trọng -> bật notification -> quay lại app thường xuyênMemorial recap -> tag người thân -> người chưa dùng app muốn vào xemOrigin auto-match -> vừa vào app đã thấy đúng cộng đồng của mình
9.3 Điều gì không viral¶
- dashboard quản trị thuần admin
- form tạo community dài và khó
- memorial chỉ là một thư viện ảnh không có ngữ cảnh
9.4 KPI nên đo¶
- số community được tạo / tuần
- tỷ lệ member có
originProfilehợp lệ - số member được auto-match vào community
- open rate của community notification
- attendance proxy: số người mở event detail sau khi nhận push
- số memorial entries / event hoàn thành
- số invite/join/claim phát sinh từ link community hoặc memorial
- D30 retention của member có tham gia community so với member không tham gia
10. Khuyến nghị chốt để triển khai¶
Thứ tự nên làm:
originProfile + community + auto-membershipcommunity event + announcement + notificationmemorial MVP dạng recap/storyshare/invite/analytics growth
Không nên làm ngay ở phase đầu:
- comment/reaction quá sâu
- public social feed rộng
- ranking/gamification
- moderation phức tạp nhiều tầng
11. Kết luận¶
Đây là hướng mở rộng rất hợp với BeFam vì nó tận dụng đúng 4 trục đã có:
- member identity
- governance role
- event workflow
- notification delivery
Nếu làm đúng thứ tự, đây không chỉ là feature mới mà còn là lớp tăng trưởng tự nhiên cho sản phẩm: người dùng có lý do quay lại, có thứ để chia sẻ, và có động lực mời thêm người trong họ/làng cùng tham gia.