diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6abcaa2..f4db4a2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,15 @@ All notable changes to this project are documented here. The format follows
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project uses
[Semantic Versioning](https://semver.org/).
+## [0.2.2] - 2026-11-06
+
+Documentation only; no change to the code or to what the recipes do.
+
+### Changed
+- README follows the layout shared by the author's other open-source projects: a centred header with a project logo
+ (`brand/logo.svg`, rendered to PNG by `brand/jana-aset.py`), a Bahasa Melayu summary after the English text, and
+ absolute links and image URLs so the page also renders on PyPI.
+
## [0.2.1] - 2026-10-22
No change to what the recipes do; this release makes the package easier to trust and to install.
@@ -78,6 +87,7 @@ First version: one framework replacing four separate tools
### Removed
- apiforge's web dashboard and the illustrative token "stats"/daily estimates.
+[0.2.2]: https://github.com/aimanmalib/crewforge/compare/v0.2.1...v0.2.2
[0.2.1]: https://github.com/aimanmalib/crewforge/compare/v0.2.0...v0.2.1
[0.2.0]: https://github.com/aimanmalib/crewforge/compare/v0.1.0...v0.2.0
[0.1.0]: https://github.com/aimanmalib/crewforge/releases/tag/v0.1.0
diff --git a/CITATION.cff b/CITATION.cff
index 8f9dfc5..fd25fc0 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -5,7 +5,7 @@ type: software
authors:
- given-names: Muhammad
family-names: Aiman
-version: 0.2.1
+version: 0.2.2
license: MIT
repository-code: "https://github.com/aimanmalib/crewforge"
abstract: >-
diff --git a/README.md b/README.md
index 98230e3..28be7b8 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,18 @@
-# crewforge
+
-**One crew of LLM agents, five recipes: code review, document Q&A, API scaffolding, content and honest academic-writing help. It works with any OpenAI-compatible provider and fails loudly instead of pretending.**
+crewforge
-[](https://github.com/aimanmalib/crewforge/actions/workflows/ci.yml)
-[](https://pypi.org/project/crewforge/)
-[](https://scorecard.dev/viewer/?uri=github.com/aimanmalib/crewforge)
-
-
+
+
+One crew of LLM agents, five recipes, any OpenAI-compatible provider. · Satu kru ejen LLM, lima resipi, mana-mana penyedia serasi OpenAI.
+PyPI · changelog · porting notes · Built in Malaysia by Aiman Malib
+
+crewforge is a command-line tool and Python library that runs a crew of LLM agents through five recipes: code
+review, document Q&A, API scaffolding, content writing and honest academic-writing help. It works with any
+OpenAI-compatible provider, reads API keys only from the environment, and fails loudly instead of pretending: a run
+in which an agent produced nothing exits with code 1 and names that agent.
+
+[Bahasa Melayu ↓](#bahasa-melayu)
```bash
crewforge review src/ # six reviewers + a summary
@@ -377,13 +383,47 @@ Please report vulnerabilities privately through
See [SECURITY.md](https://github.com/aimanmalib/crewforge/blob/main/SECURITY.md) for scope notes (what is sent to your provider,
and what `validate` executes).
-## License
+## Bahasa Melayu
+
+crewforge ialah alat baris arahan dan pustaka Python yang menjalankan satu kru ejen LLM melalui lima resipi:
+semakan kod (`review`), soal jawab dokumen (`ask`, `summarize`), penjanaan projek API FastAPI (`scaffold`,
+`validate`), penulisan kandungan (`write`) dan bantuan penulisan akademik yang jujur (`academic`). Ia berfungsi
+dengan mana-mana penyedia serasi OpenAI, termasuk model tempatan melalui Ollama atau llama.cpp. Kunci API hanya
+dibaca dari pemboleh ubah persekitaran, tidak pernah ditulis ke fail.
+
+**Mengapa satu kru.** crewforge menggabungkan empat alat lama (codeguard, documind, apiforge, contentforge) yang
+masing-masing menyimpan salinan sendiri bagi rangka yang sama. Salinan itu sudah berbeza dan setiap satu
+menyembunyikan kegagalan dengan cara sendiri. Kini teras dikongsi: pembaikan dibuat sekali, dan setiap alat menjadi
+resipi di atas teras itu.
+
+**Gagal dengan jelas.** Larian yang ejennya memulangkan jawapan kosong atau tidak boleh dihurai, atau pengesah
+yang tidak menyemak apa-apa, keluar dengan kod 1 dan menamakan ejen itu. Kod keluar: `0` berjaya, `1` larian
+gagal, `2` ralat penggunaan atau konfigurasi. Bilangan token diambil daripada laporan penyedia sahaja, tidak
+dianggar.
+
+**Resipi `academic`.** Membantu pelajar dan penyelidik dengan kerja mereka **sendiri**: merancang dari taklimat
+tugasan, memberi ulasan atas draf tanpa menulis semula, memformat rujukan yang diberi pengguna (APA 7, IEEE,
+Harvard) tanpa menambah rujukan baharu, dan menulis pernyataan penggunaan AI daripada rekod langkah yang
+dijalankan. Output dalam bahasa Inggeris atau Bahasa Melayu (`--language ms`); output BM disemak untuk bentuk
+Indonesia seperti *karena* atau *kualitas*. Sumber yang dicadangkan model dilabel UNVERIFIED, atau LIKELY
+FABRICATED jika tiada DOI, URL atau ISBN. Tiada ciri "humanise" atau mengelak pengesan AI.
+
+**Pasang dan guna.**
+
+```bash
+pip install crewforge # Python 3.10 hingga 3.14
+pip install "crewforge[docs,api]" # pilihan: PDF/DOCX dan semakan aplikasi FastAPI
+export OPENAI_API_KEY=sk-... # atau penyedia lain, lihat `crewforge providers`
+crewforge review src/
+crewforge academic feedback draf.md --brief taklimat.md --language ms
+```
-[MIT](https://github.com/aimanmalib/crewforge/blob/main/LICENSE) © Muhammad Aiman
+Senarai penyedia, contoh setiap resipi dan seni bina ada dalam bahagian bahasa Inggeris di atas
+([Providers](https://github.com/aimanmalib/crewforge#providers), [Recipes](https://github.com/aimanmalib/crewforge#recipes)).
----
+## Licence
-Built by [Sasa Teguh](https://sasateguh.com) · Malaysia
+[MIT](https://github.com/aimanmalib/crewforge/blob/main/LICENSE) © Muhammad Aiman. Made by [Aiman Malib](https://aimanmalib.com), Malaysia.
## Work with Sasa Teguh
diff --git a/brand/jana-aset.py b/brand/jana-aset.py
new file mode 100644
index 0000000..b8553ca
--- /dev/null
+++ b/brand/jana-aset.py
@@ -0,0 +1,24 @@
+#!/usr/bin/env python3
+"""Render brand/logo.svg to brand/logo-512.png and brand/logo-64.png with Chromium (Playwright).
+
+ uv run --with playwright==1.58.0 python3 brand/jana-aset.py
+
+Same script as sasateguh/codr and sasateguh/mypii. The PNGs are committed because the README is also
+shown on PyPI, and not every renderer there draws an SVG with gradients reliably.
+"""
+
+import os
+
+from playwright.sync_api import sync_playwright
+
+HERE = os.path.dirname(os.path.abspath(__file__))
+with open(os.path.join(HERE, "logo.svg"), encoding="utf-8") as f:
+ svg = f.read()
+with sync_playwright() as p:
+ b = p.chromium.launch()
+ for size in (512, 64):
+ pg = b.new_page(viewport={"width": size, "height": size}, device_scale_factor=1)
+ inner = svg.replace('width="256" height="256"', f'width="{size}" height="{size}"')
+ pg.set_content(f'{inner}')
+ pg.screenshot(path=os.path.join(HERE, f"logo-{size}.png"), omit_background=True)
+ b.close()
diff --git a/brand/logo-512.png b/brand/logo-512.png
new file mode 100644
index 0000000..89f6328
Binary files /dev/null and b/brand/logo-512.png differ
diff --git a/brand/logo-64.png b/brand/logo-64.png
new file mode 100644
index 0000000..04bf5eb
Binary files /dev/null and b/brand/logo-64.png differ
diff --git a/brand/logo.svg b/brand/logo.svg
new file mode 100644
index 0000000..7282bba
--- /dev/null
+++ b/brand/logo.svg
@@ -0,0 +1,24 @@
+
+ crewforge
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pyproject.toml b/pyproject.toml
index f1f68ad..30ca010 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
[project]
name = "crewforge"
-version = "0.2.1"
+version = "0.2.2"
description = "One crew of LLM agents, five recipes: code review, document Q&A, API scaffolding, content and honest academic-writing help — on any OpenAI-compatible provider."
readme = "README.md"
license = "MIT"
diff --git a/src/crewforge/__init__.py b/src/crewforge/__init__.py
index 6119fb9..3560360 100644
--- a/src/crewforge/__init__.py
+++ b/src/crewforge/__init__.py
@@ -1,3 +1,3 @@
"""crewforge — one crew of LLM agents, five recipes, any OpenAI-compatible provider."""
-__version__ = "0.2.1"
+__version__ = "0.2.2"
diff --git a/uv.lock b/uv.lock
index 57aa7d1..a949222 100644
--- a/uv.lock
+++ b/uv.lock
@@ -275,7 +275,7 @@ toml = [
[[package]]
name = "crewforge"
-version = "0.2.1"
+version = "0.2.2"
source = { editable = "." }
dependencies = [
{ name = "click" },