awcms-news-portal
Provides architectural specifications for porting the AWCMS news portal module, including R2 storage and media registry.
Install
mkdir -p .claude/skills/awcms-news-portal && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/19084" && unzip -o skill.zip -d .claude/skills/awcms-news-portal && rm skill.zipInstalls to .claude/skills/awcms-news-portal
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
BACAAN SAJA — modul news_portal BELUM di-port ke repo ini (ada di awcms-mini; `ls src/modules` tidak memuatnya, tidak ada migration-nya di `sql/`; bergantung pada blog_content/tenant_domain yang juga belum di-port). Rujukan modul/tabel/`sql/NNN` di dalamnya adalah artefak awcms-mini, penomoran mini. Pakai sebagai spesifikasi target saat MEM-PORT (via `awcms-port-from-mini`), bukan panduan implementasi kode yang bisa dipanggil — verifikasi `ls src/modules` dulu. Konteks port (Issue #631-#642, #649). Gunakan saat menambah/mengubah preset full-online R2-only, media object registry, presigned upload flow, R2 readiness checks, homepage composer, ad/video/quality-checklist berbasis media R2, tag linking, atau SEO/social preview `/news`. Merangkum keputusan arsitektur yang sudah dibuat (docs/awcms/news-portal/) supaya issue lanjutan tidak mengulang/kontradiksi.Key capabilities
- →Port news portal modules from awcms-mini
- →Configure full-online R2-only media presets
- →Implement presigned R2 upload flows
- →Validate R2 readiness and security checks
- →Compose editorial homepage sections
- →Link internal tags for news content
How it works
This skill acts as a specification reference for porting news portal features from the awcms-mini repository to the current architecture. It provides architectural constraints and status tracking for R2-only media integration.
Inputs & outputs
When to use awcms-news-portal
- →Porting news portal modules
- →Implementing R2 media features
- →Reviewing architectural decisions for media registry
About this skill
AWCMS — News Portal (full-online R2-only media)
<!-- sql-refs: awcms-mini — nomor `sql/NNN` di badan skill ini memakai penomoran awcms-mini; modul SUDAH di-port ke awcms sebagai `sql/041`–`sql/045` (lihat README modul + `sql/` nyata untuk nomor sebenarnya) -->STATUS — SUDAH di-port ke repo ini (PR #214).
news_portalkini nyata di sini:src/modules/news-portal, migrasisql/041_awcms_news_media_object_registry_schema.sql–sql/045_awcms_news_portal_ad_placements_schema.sql, 4 tabelawcms_news_*(semuaFORCE ROW LEVEL SECURITY). Skill ini kini panduan mengubah/menambah kode nyata. Bacasrc/modules/news-portal/README.md
sql/untuk nomor/tabel akurat.⚠ INVERSI ADR-0036 (WAJIB BACA — mengubah kepemilikan media): media BUKAN LAGI milik news_portal. Migrasi
052/053/054mengekstrak SELURUH registry media (awcms_news_media_objects), presigned upload/finalize/cancel, MIME sniffer, R2 config/client/verification, categorization, dan jobnews-media:reconcileKELUAR darinews-portal/ke modul barusrc/modules/media-library/(filenews-media-*→media-*, symbol internalfetchNewsMediaObjectById/NewsMediaObjectViewDIPERTAHANKAN). Port_shared/ports/news-media-port.tsDIHAPUS →media-library-port.ts(MediaLibraryPort,isManagedMediaEnforcementActiveForTenant). Permissionnews_portal.media.*→media_library.media.*(repoint destruktifsql/052). Untuk apa pun tentang media (upload, registry, reconcile, R2 config, enforcement) pakai skillawcms-media-library, BUKAN skill ini. news_portal di sini tinggal homepage sections + ad placements; ia CONSUMESmedia_library. Sebagian besar badan skill di bawah masih men-spesifikasi bentuk PRA-inversi (mini) — perlakukan bagian media-nya sebagai sejarah, bukan lokasi kode kini.DELTA PORT AWCMS (WAJIB — sebagian besar badan skill di bawah men-spesifikasi bentuk mini; ini yang BEDA di sini):
- DI-DROP: keluarga rute publik host-resolved
/news/**(index, detail, kategori, tag, search, feed, sitemap) beserta helper render-nya (homepage-section-composer,homepage-section-rendering,news-share-config). Butuhlib/tenant/public-host-tenant-resolver.ts+ envPUBLIC_TENANT_RESOLUTION_MODEdari modultenant_domain. UPDATE 2026-07-25:tenant_domainSUDAH di-port (#219,sql/046–048), jadi blocker fondasinya hilang — tapi rute/news/**itu sendiri tetap belum diadopsi. Jangan bangun/rujuk/news/**sebagai ada; mengadopsinya sekarang adalah pekerjaan tersendiri, bukan konsekuensi otomatis daritenant_domain. (Rute publik yang ADA =/blog/{tenantCode}milikblog_content, path-based ADR-0009.)- DI-DROP: aktivasi preset
news_portal_full_online_r2(apply-news-portal-preset.ts) — butuh preset subsystemmodule_managementyang belum di-port. Tabelawcms_news_portal_tenant_state+ readerisFullOnlineR2ModeAppliedForTenanttetap ada (forward-compatible) tapi tanpa writer (inert). Pasca ADR-0036, enforcement managed-media digerakkanmedia_librarylewatisManagedMediaEnforcementActiveForTenant(readiness + flag per-tenantsql/053), dinyalakan viaPOST /api/v1/media/ enforcement— BUKAN lagiisFullOnlineR2ModeActiveForTenantport lama.- Yang NYATA di-port & aktif DI news_portal: homepage section composer + ad placements (
sql/044/045). Registry media + presigned upload/finalize + MIME sniff/SHA-256 + jobnews-media:reconcilesudah PINDAH kemedia_library(ADR-0036) — lihat skillawcms-media-library. Capabilitynews_mediadipensiunkan; news_portal kini CONSUMESmedia_library.- Env pre-validasi
NEWS_MEDIA_R2_*(validate-env + 3 security-readiness check) ditunda saat port — modul fail-safe tanpa itu di runtime.- Nomor
sql/NNNdi badan skill = penomoran awcms-mini; nyata di awcmssql/041–sql/045.
Epic news_portal (#631-#642, #649) menambah lapisan editorial +
media di atas blog_content (base module, sudah active) dan online
public routing (tenant_domain, ADR-0009/ADR-0010), khusus untuk
deployment full-online yang mengaktifkan mode R2-only untuk
gambar berita. Epic lanjutan social-publishing (#643-#647) bergantung
pada fondasi arsitektur epic ini (khususnya media registry #633 untuk
gambar yang dibagikan ke platform sosial) tapi bukan bagian tabel
status di bawah — lihat skill/dokumentasi terpisah begitu epic itu
mulai dikerjakan.
Kapan pakai skill ini vs skill generik
Skill ini melengkapi (bukan menggantikan) awcms-new-endpoint,
awcms-new-migration, awcms-integration (pola outbox/
circuit breaker untuk R2, ADR-0006), awcms-idempotency (mutation
confirm upload), awcms-sensitive-data (foto berpotensi PII),
awcms-abac-guard, dan awcms-blog-content (model konten
post/page/gallery/ads yang jadi konsumen media registry). Skill ini
menyediakan konteks cross-cutting epic spesifik — terutama
keputusan "R2-only, bucket terpisah dari sync-storage" yang wajib
dipertahankan setiap issue.
Baca dulu docs/awcms/news-portal/full-online-r2-architecture.md
sebelum mengerjakan issue mana pun di epic ini — dokumen itu (bukan
skill ini) adalah sumber kebenaran arsitektur; skill ini merangkum
status + pointer, bukan menduplikasi isinya.
Status per issue (jangan bangun ulang yang sudah ada)
| Issue | Scope | Status |
|---|---|---|
| #631 | Dokumentasi arsitektur full-online R2-only + SOP + security + IR + backup + user guide | Selesai — lihat §Dokumen yang sudah ada di bawah |
| #632 | Preset news_portal_full_online_r2 (module descriptor/config gate) | Selesai — lihat §632 di bawah |
| #633 | Tenant-scoped R2-only media object registry (schema + migration) | Selesai — lihat §633 di bawah |
| #634 | Direct-to-R2 presigned upload flow (endpoint upload/confirm) | Selesai — lihat §634 di bawah |
| #635 | Config validation + readiness checks (config:validate/security:readiness/production:preflight) untuk R2 image delivery | Selesai — lihat §635 di bawah |
| #636 | blog_content wajib referensi R2 media object untuk gambar berita saat mode aktif | Selesai — lihat §636 di bawah |
| #637 | Editorial homepage section composer /news dengan render R2-only | Selesai — lihat §637 di bawah |
| #638 | Preset placement iklan news portal dengan validasi gambar R2-only | Selesai — lihat §638 di bawah |
| #639 | Content block video_news dengan thumbnail R2 wajib | Selesai — lihat §639 di bawah |
| #640 | Content quality checklist publishing dengan syarat gambar R2 | Selesai — lihat §640 di bawah |
| #641 | Automatic internal tag linking untuk konten post/news | Selesai — lihat §641 di bawah |
| #642 | Public social share buttons di halaman artikel /news | Selesai — lihat §642 di bawah |
| #649 | SEO + social preview metadata lengkap di halaman artikel /news | Selesai — lihat §649 di bawah |
Urutan dependency yang disarankan (dari objective masing-masing issue):
631 → 632 → 633 → 634 → 635 (readiness butuh #632-#634 ada untuk
divalidasi) → 636 (butuh #633 registry) → 637/638/639/640 (butuh #636,
bisa paralel satu sama lain) → 641 (independen, hanya butuh
blog_content taxonomies yang sudah ada) → 642/649 (butuh #636 untuk
gambar R2 yang valid dipakai preview sosial, bisa paralel).
Yang sudah ada — pakai ulang, jangan re-derive
Dokumen arsitektur (Issue #631, docs/awcms/news-portal/)
Enam dokumen, semua docs-only (tidak ada kode/migration/endpoint di issue ini):
full-online-r2-architecture.md— dokumen utama. Berisi: ruang lingkup full-online-only (§1), keputusan bucket R2 terpisah darisync-storage(§2 — lihat §Keputusan kunci di bawah), lima prinsip inti tidak bisa dinegosiasi (§3), konvensi env varNEWS_MEDIA_R2_*(§4 — diimplementasikan Issue #632: sudah ada di.env.example/doc 18/scripts/validate-env.ts), model data konseptual media registry (§5), konvensi object key (§6), dua diagram alur upload (§7), lifecycle presigned URL (§8), urutan validasi MIME/ekstensi/checksum (§9), CORS (§10), custom domain (§11), Cache-Control (§12), rotasi kredensial (§13), diagram trust boundary (§14), dan pemetaan kepatuhan penuh ke ISO/IEC 27001/27002/27005/27017/27018/27701/27034, ISO 22301, OWASP ASVS, OWASP API Security Top 10 (§15).r2-upload-sop.md— SOP operasional Jalur A (direct-to-R2, disarankan) dan Jalur B (server-streaming tanpa temp file lokal), urutan validasi, penanganan error, troubleshooting operator.r2-security-checklist.md— checklist si
Content truncated.
When not to use it
- →Offline or LAN-only deployments
- →Projects requiring local filesystem fallback
- →Deployment profiles without explicit R2 preset activation
Prerequisites
Limitations
- →Modul news_portal is not yet ported to the current repository
- →SQL migration numbering follows awcms-mini, not the current repo
- →SVG files are prohibited by default
How it compares
Unlike a standard implementation guide, this skill serves as a target specification for porting existing modules while enforcing strict architectural boundaries like R2-only storage.
Compared to similar skills
awcms-news-portal side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| awcms-news-portal (this skill) | 0 | 10d | Caution | Advanced |
| architecture-patterns | 55 | 2mo | No flags | Advanced |
| kotlin-multiplatform | 32 | 3mo | Review | Advanced |
| nodejs-best-practices | 28 | 6mo | No flags | Advanced |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
architecture-patterns
wshobson
Implement proven backend architecture patterns including Clean Architecture, Hexagonal Architecture, and Domain-Driven Design. Use when architecting complex backend systems or refactoring existing applications for better maintainability.
kotlin-multiplatform
vitorpamplona
Platform abstraction decision-making for Amethyst KMP project. Guides when to abstract vs keep platform-specific, source set placement (commonMain, jvmAndroid, platform-specific), expect/actual patterns. Covers primary targets (Android, JVM/Desktop, iOS) with web/wasm future considerations. Integrates with gradle-expert for dependency issues. Triggers on: abstraction decisions ("should I share this?"), source set placement questions, expect/actual creation, build.gradle.kts work, incorrect placement detection, KMP dependency suggestions.
nodejs-best-practices
davila7
Node.js development principles and decision-making. Framework selection, async patterns, security, and architecture. Teaches thinking, not copying.
workflow-orchestration-patterns
wshobson
Design durable workflows with Temporal for distributed systems. Covers workflow vs activity separation, saga patterns, state management, and determinism constraints. Use when building long-running processes, distributed transactions, or microservice orchestration.
java-pro
sickn33
Master Java 21+ with modern features like virtual threads, pattern matching, and Spring Boot 3.x. Expert in the latest Java ecosystem including GraalVM, Project Loom, and cloud-native patterns. Use PROACTIVELY for Java development, microservices architecture, or performance optimization.
arm-cortex-expert
sickn33
Senior embedded software engineer specializing in firmware and driver development for ARM Cortex-M microcontrollers (Teensy, STM32, nRF52, SAMD). Decades of experience writing reliable, optimized, and maintainable embedded code with deep expertise in memory barriers, DMA/cache coherency, interrupt-driven I/O, and peripheral drivers.