AW

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.zip

Installs 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.
866 charsno explicit “when” triggerlonger than Claude Code's old 250-char listing cap (fine on current versions)
Advanced

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

You give it
Issue number from #631-#642 or #649
You get back
Ported module configuration or architectural specification

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_portal kini nyata di sini: src/modules/news-portal, migrasi sql/041_awcms_news_media_object_registry_schema.sqlsql/045_awcms_news_portal_ad_placements_schema.sql, 4 tabel awcms_news_* (semua FORCE ROW LEVEL SECURITY). Skill ini kini panduan mengubah/menambah kode nyata. Baca src/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/054 mengekstrak SELURUH registry media (awcms_news_media_objects), presigned upload/finalize/cancel, MIME sniffer, R2 config/client/verification, categorization, dan job news-media:reconcile KELUAR dari news-portal/ ke modul baru src/modules/media-library/ (file news-media-*media-*, symbol internal fetchNewsMediaObjectById/NewsMediaObjectView DIPERTAHANKAN). Port _shared/ports/news-media-port.ts DIHAPUS → media-library-port.ts (MediaLibraryPort, isManagedMediaEnforcementActiveForTenant). Permission news_portal.media.*media_library.media.* (repoint destruktif sql/052). Untuk apa pun tentang media (upload, registry, reconcile, R2 config, enforcement) pakai skill awcms-media-library, BUKAN skill ini. news_portal di sini tinggal homepage sections + ad placements; ia CONSUMES media_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). Butuh lib/tenant/public-host-tenant-resolver.ts + env PUBLIC_TENANT_RESOLUTION_MODE dari modul tenant_domain. UPDATE 2026-07-25: tenant_domain SUDAH di-port (#219, sql/046048), 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 dari tenant_domain. (Rute publik yang ADA = /blog/{tenantCode} milik blog_content, path-based ADR-0009.)
  • DI-DROP: aktivasi preset news_portal_full_online_r2 (apply-news-portal-preset.ts) — butuh preset subsystem module_management yang belum di-port. Tabel awcms_news_portal_tenant_state + reader isFullOnlineR2ModeAppliedForTenant tetap ada (forward-compatible) tapi tanpa writer (inert). Pasca ADR-0036, enforcement managed-media digerakkan media_library lewat isManagedMediaEnforcementActiveForTenant (readiness + flag per-tenant sql/053), dinyalakan via POST /api/v1/media/ enforcement — BUKAN lagi isFullOnlineR2ModeActiveForTenant port 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 + job news-media:reconcile sudah PINDAH ke media_library (ADR-0036) — lihat skill awcms-media-library. Capability news_media dipensiunkan; news_portal kini CONSUMES media_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/NNN di badan skill = penomoran awcms-mini; nyata di awcms sql/041sql/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)

IssueScopeStatus
#631Dokumentasi arsitektur full-online R2-only + SOP + security + IR + backup + user guideSelesai — lihat §Dokumen yang sudah ada di bawah
#632Preset news_portal_full_online_r2 (module descriptor/config gate)Selesai — lihat §632 di bawah
#633Tenant-scoped R2-only media object registry (schema + migration)Selesai — lihat §633 di bawah
#634Direct-to-R2 presigned upload flow (endpoint upload/confirm)Selesai — lihat §634 di bawah
#635Config validation + readiness checks (config:validate/security:readiness/production:preflight) untuk R2 image deliverySelesai — lihat §635 di bawah
#636blog_content wajib referensi R2 media object untuk gambar berita saat mode aktifSelesai — lihat §636 di bawah
#637Editorial homepage section composer /news dengan render R2-onlySelesai — lihat §637 di bawah
#638Preset placement iklan news portal dengan validasi gambar R2-onlySelesai — lihat §638 di bawah
#639Content block video_news dengan thumbnail R2 wajibSelesai — lihat §639 di bawah
#640Content quality checklist publishing dengan syarat gambar R2Selesai — lihat §640 di bawah
#641Automatic internal tag linking untuk konten post/newsSelesai — lihat §641 di bawah
#642Public social share buttons di halaman artikel /newsSelesai — lihat §642 di bawah
#649SEO + social preview metadata lengkap di halaman artikel /newsSelesai — 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 dari sync-storage (§2 — lihat §Keputusan kunci di bawah), lima prinsip inti tidak bisa dinegosiasi (§3), konvensi env var NEWS_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

awcms-mini source referenceActive blog_content moduleActive tenant_domain module

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.

SkillInstallsUpdatedSafetyDifficulty
awcms-news-portal (this skill)010dCautionAdvanced
architecture-patterns552moNo flagsAdvanced
kotlin-multiplatform323moReviewAdvanced
nodejs-best-practices286moNo flagsAdvanced

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.

55214

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.

32156

nodejs-best-practices

davila7

Node.js development principles and decision-making. Framework selection, async patterns, security, and architecture. Teaches thinking, not copying.

28120

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.

10117

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.

3492

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.

2975

Search skills

Search the agent skills registry