Kiến trúc Muonnoi.
Kiến trúc Muonnoi được thiết kế để bền, rõ, ít phụ thuộc, dễ audit. Mọi quyết định kiến trúc phải bảo vệ định hướng:
không tracking, không vòng lặp gây nghiện, link bền như tài sản số, và dữ liệu tối thiểu.
Triết lý kỹ thuật
Giảm bề mặt tấn công. Giảm dữ liệu. Giảm phụ thuộc. Tăng khả năng kiểm chứng.
Mô hình triển khai
Cloudflare Pages cho frontend. Cloudflare Worker + D1 cho backend tối thiểu khi cần.
Stable links
Asset
Link bền là tài sản
Đường dẫn không được sống nhờ thuật toán. Đường dẫn phải sống nhờ cấu trúc hệ thống.
Audit
Governance
Quản trị phải có dấu vết
Mọi hành động quản trị nhạy cảm đều phải có audit log. Không quyền lực mờ.
1) Domain map
Tách rõ “định vị” và “vận hành” để tránh làm loãng định hướng, và để bảo mật dễ kiểm soát hơn.
www.muonnoi.org
Landing
Định vị + SEO + Legal
Giải thích hệ thống, tuyên bố bảo mật, điều hướng sang app + docs, trang pháp lý. Không tracking.
app.muonnoi.org
SPA
Ứng dụng vận hành
History routing sạch. Link bền. Module hóa theo lõi vận hành. Không thư viện ngoài.
docs.muonnoi.org
Docs
Chuẩn vận hành + kỹ thuật
System docs, method, architecture, API plan, governance, legal. Dùng để khóa định hướng.
api.app.muonnoi.org
Worker
Backend tối thiểu khi cần
Chỉ mở endpoint phục vụ lõi vận hành. D1 lưu tối thiểu. Có rate-limit và audit.
Domains
- www.muonnoi.org : Landing + SEO + Legal (no tracking)
- app.muonnoi.org : SPA operating app (stable links)
- docs.muonnoi.org : System docs + API plan + Governance
- api.app.muonnoi.org : Worker + D1 (enabled by phases)
2) Routing
Routing phải “ít bất ngờ”, dễ nhớ, dễ chia sẻ, dễ lưu, dễ đối chiếu. Không dùng hash routing trong app.
Profile
/u/:handle
Hồ sơ theo handle
Handle là định danh hiển thị. Không phụ thuộc ID nội bộ khi chia sẻ.
Project
/p/:id
Dự án là đơn vị đóng góp
Reputation dựa dự án, kết quả và giao dịch, không dựa tương tác gây nghiện.
Listing
/m/:id
Commerce là tài sản link
Người bán sở hữu link. Không phụ thuộc reach. Trạng thái giao dịch rõ ràng.
Media
/v/:id
Learn/Media không có vòng lặp gây nghiện
Không autoplay câu kéo. Không feed vô hạn. Nội dung sống nhờ chất lượng và cấu trúc.
SPA rewrite (app.muonnoi.org)
Để refresh không 404 trên Pages, dùng _redirects (ở repo app).
/* /index.html 200
3) Frontend
Mục tiêu: nhanh, ít phụ thuộc, dễ audit, không CDN, không trackers. UI tối giản nhưng sang, không “ồn”.
No libs
Vanilla
Không thư viện ngoài
Giảm bề mặt tấn công, giảm rủi ro supply-chain, tăng khả năng kiểm chứng.
Bilingual
Files
Đa ngôn ngữ theo file riêng
Docs/landing mỗi ngôn ngữ là folder riêng. App dùng i18n file (khi triển khai) hoặc folder riêng tùy kiến trúc.
Nguyên tắc UI chống nghiện
- Không feed vô hạn
- Không autoplay
- Không nút kích thích tương tác bằng dopamine
- Không hệ thống “đề xuất” tối ưu outrage
- Ưu tiên công việc, dự án, kết quả, giao dịch
4) Backend
Backend chỉ mở khi có nhu cầu vận hành thật. Mọi endpoint phải có lý do, giới hạn dữ liệu, và chống lạm dụng.
Worker
API
Cloudflare Worker
Stateless, nhanh, gần người dùng. CORS chỉ cho origin hợp lệ. Rate limit bắt buộc.
D1
Minimal
D1 lưu dữ liệu tối thiểu
Không lưu hành vi. Không lưu analytics. Lưu dữ liệu vận hành và audit khi cần.
Auth tối giản (gợi ý)
Ưu tiên magic email hoặc passphrase cho giai đoạn đầu. Khi mở rộng mới tính khóa/rotation/2FA.
Auth phases
- Phase 1: Magic email OR owner bootstrap + session token
- Phase 2: Token rotation + device sessions + revoke
- Phase 3: Optional stronger auth (2FA), encrypted messaging key mgmt
5) Data model
Dữ liệu chia 3 lớp: Public tối thiểu, Private thuộc người dùng, Proof dùng hash/receipt để kiểm chứng mà không cần lộ nội dung.
Public
Minimal
Hiển thị đủ để hợp tác
Tên hiển thị, headline, mô tả ngắn, link dự án. Không bắt buộc thu thập quá mức.
Proof
Hash
Bằng chứng không cần lộ nội dung
Receipt hash dùng để verify. Nội dung chỉ public khi người dùng chọn.
Schema tham chiếu (giai đoạn 1–2)
users(
id TEXT PRIMARY KEY,
handle TEXT UNIQUE NOT NULL,
display_name TEXT NOT NULL,
headline TEXT,
bio TEXT,
created_at INTEGER NOT NULL
)
projects(
id TEXT PRIMARY KEY,
owner_id TEXT NOT NULL,
title TEXT NOT NULL,
body TEXT NOT NULL,
status TEXT NOT NULL, -- draft|active|archived
created_at INTEGER NOT NULL
)
listings(
id TEXT PRIMARY KEY,
owner_id TEXT NOT NULL,
title TEXT NOT NULL,
body TEXT NOT NULL,
status TEXT NOT NULL, -- pending|active|sold|archived
created_at INTEGER NOT NULL
)
media(
id TEXT PRIMARY KEY,
owner_id TEXT NOT NULL,
title TEXT NOT NULL,
body TEXT NOT NULL,
status TEXT NOT NULL, -- draft|published|archived
created_at INTEGER NOT NULL
)
6) Audit
Audit không phải để “kiểm soát con người”. Audit để ngăn quyền lực mờ, ngăn thao túng, và bảo vệ vận hành.
Admin
Actions
Mọi hành động nhạy cảm đều phải log
Approve/reject, ban/unban, change status, export… tất cả phải có dấu vết.
Export
Evidence
Audit phải export được
Minh bạch và đối chiếu được. Không audit “chỉ để đó”.
Schema audit
audit(
id TEXT PRIMARY KEY,
actor TEXT NOT NULL, -- admin_id or system
action TEXT NOT NULL, -- e.g. "listing.approve"
meta TEXT, -- JSON string (safe)
created_at INTEGER NOT NULL
)
Không lưu meta nhạy cảm
Meta chỉ đủ để đối chiếu, không chứa dữ liệu riêng tư. Nếu cần, dùng hash.
7) Security
Bảo mật là “mặc định”. Không phải tính năng bổ sung. Ưu tiên giảm bề mặt tấn công và giảm phụ thuộc.
CSP
Strict
Content Security Policy
Chặn script lạ, chặn frame, giới hạn connect. Không chạy code ngoài kiểm soát.
Headers
Default
Security headers
DENY frame, nosniff, no-referrer, permissions-policy. COOP/CORP khi phù hợp.
_headers mẫu (docs)
/*
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Referrer-Policy: no-referrer
Permissions-Policy: geolocation=(), microphone=(), camera=(), payment=()
Content-Security-Policy: default-src 'self'; base-uri 'self'; object-src 'none'; frame-ancestors 'none'; img-src 'self' data:; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline'; connect-src 'self'; form-action 'self';
Gợi ý siết CSP
Khi tách JS ra file riêng, bạn bỏ 'unsafe-inline' ở script-src và dùng script file hash/nonce nếu cần.
8) Anti-abuse
Nếu không chống lạm dụng từ đầu, hệ sẽ bị spam, thao túng, và cuối cùng sẽ buộc phải làm tracking. Muonnoi không đi con đường đó.
Rate limit
Mandatory
Giới hạn tạo mới
Throttle hành vi tạo dự án, listing, message. Cooldown. Validation độ dài và nội dung.
Spam
Defense
Chặn spam không cần tracking
Rule theo hành vi tức thời, không lưu lịch sử hành vi dài hạn. Có thể dùng challenge theo phiên.
Anti-abuse baseline
- Input validation + max length
- Rate limit (IP + token)
- Cooldown create operations
- Audit suspicious actions
- Avoid fingerprinting and long-term tracking
9) Deploy
Docs chạy Pages FREE, không build. App chạy Pages FREE, có SPA rewrite. API chạy Worker, D1 bind theo môi trường.
Pages
Docs
docs.muonnoi.org
Framework none. Output public/. _headers bật sẵn. Không tracking.
Pages
App
app.muonnoi.org
SPA rewrite /* → /index.html 200. CSP strict. No external libs.
Gợi ý cấu trúc repo docs
public/
system/
index.html
method.html
architecture.html
api.html
governance.html
legal/
privacy.html
terms.html
en/
system/
architecture.html
_headers
_redirects
10) Checklist
Trước khi merge/release, kiểm tra theo checklist này.
Privacy
Pass
Không tracking
Không pixel, không third party SDK, không analytics hành vi.
Anti-addiction
Pass
Không feed gây nghiện
Không autoplay, không infinite scroll, không tối ưu outrage.
Stable links
Pass
Link bền
Routing chuẩn, refresh không 404, cấu trúc không phá vỡ.
Security
Pass
CSP + headers
CSP đúng, frame denied, nosniff, referrer policy, permissions policy.
Nguyên tắc cuối
Nếu một thay đổi buộc bạn phải tăng tracking, tăng phụ thuộc, hoặc tăng vòng lặp gây nghiện để “tăng engagement”, thì thay đổi đó sai định hướng.