Research Knowledge Platform
Headless CMS-driven research publishing platform built with React, Vite, WordPress, and Advanced Custom Fields (ACF).
The repository is structured around decoupled frontend rendering, CMS-driven content modeling, REST API consumption, role-isolated editorial workflows, and production-oriented deployment separation.
research-knowledge-platform/
├── src/
│ ├── components/
│ ├── pages/
│ ├── services/
│ ├── routes/
│ ├── styles/
│ ├── assets/
│ └── utils/
│
├── public/
│
├── wordpress/
│ ├── custom-admin-plugin/
│ ├── acf-configuration/
│ └── cms-configuration/
│
├── docs/
│ ├── screenshots/
│ ├── architecture/
│ └── editorial-flow/
│
├── .env
├── package.json
└── README.md
React Frontend Runtime
↓
Frontend Service Layer
↓
WordPress REST API
↓
ACF Structured Content
↓
WordPress CMS Runtime
Layer
Responsibility
React Frontend
Rendering, routing, client-side interaction
Frontend Service Layer
API consumption and response normalization
WordPress CMS
Editorial content management
ACF Layer
Structured field modeling
REST API Layer
Content transport between CMS and frontend
Editorial Dashboard
Role-isolated content operations
Layer
Technology
Frontend Runtime
React.js
Build Tooling
Vite
Routing
React Router
CMS
WordPress
Structured Content
Advanced Custom Fields (ACF)
Content Modeling
CPT UI
API Layer
WordPress REST API
Styling
Custom CSS
Environment Management
dotenv
Deployment Target
Netlify-compatible frontend architecture
Frontend Responsibilities
Area
Responsibility
Rendering Pipeline
CMS-driven page rendering
Route Resolution
Client-side route handling
API Consumption
WordPress REST communication
Content Hydration
Dynamic research content rendering
State Ownership
Frontend interaction state
UI Composition
Component-driven layout structure
src/
├── components/
├── pages/
├── services/
├── routes/
├── styles/
├── assets/
└── utils/
Strategy
Implementation
Content Source
WordPress REST API
Rendering Model
Client-side rendering
Dynamic Pages
CMS-driven route rendering
Media Delivery
WordPress media endpoints
API Configuration
Environment-driven
Area
Responsibility
Research Publishing
Editorial content lifecycle
Content Modeling
Structured research fields
Editorial Operations
Admin/editor workflows
Media Management
Research asset handling
API Exposure
REST-driven frontend delivery
Role Isolation
Editorial permission separation
- research_category
- reading_time
- featured_statistic
- featured_image
- integrity_status
- downloadable_assets
Editorial Isolation Strategy
Capability
Admin
Editor
Research CRUD Operations
✓
✓
Media Operations
✓
✓
CMS Dashboard Access
✓
✓
Plugin Access
✓
✗
ACF Configuration
✓
✗
CPT Management
✓
✗
System Configuration
✓
✗
User Management
✓
✗
Frontend Route Request
↓
Service Layer Request
↓
REST API Consumption
↓
Structured CMS Payload
↓
Frontend Rendering Pipeline
Area
Responsibility
Content Retrieval
Fetch research content
Media Retrieval
Resolve CMS media assets
Structured Fields
Retrieve normalized ACF payloads
Dynamic Rendering
Populate research detail pages
Route Hydration
Support CMS-driven frontend routes
Editorial Workflow Runtime
Editor Authentication
↓
Research CMS Dashboard
↓
Structured Content Input
↓
ACF Field Population
↓
Content Publication
↓
REST API Exposure
↓
Frontend Revalidation
Layer
Responsibility
Custom CMS Dashboard
Simplified editorial interaction
Admin Workspace
Technical CMS operations
Editor Workspace
Content-focused publishing operations
Role Isolation
Permission boundary enforcement
Navigation Layer
Reduced CMS complexity
Runtime
Ownership
React Frontend
Rendering lifecycle
WordPress CMS
Editorial lifecycle
REST API Layer
Content transport
ACF Layer
Structured content contracts
Frontend Services
Payload normalization
Frontend Routes
Dynamic route resolution
Editorial Dashboard
CMS interaction boundary
Boundary
Responsibility
CMS
Content creation and persistence
Frontend
Presentation and rendering
REST Layer
Content serialization
Service Layer
Response transformation
Route Layer
URL-to-content resolution
State Domain
Owner
Route State
React Router
CMS Payload State
Frontend service layer
UI Interaction State
React component tree
Editorial State
WordPress CMS
Structured Metadata
ACF field groups
Research Detail Request Flow
Frontend Route Resolution
↓
Slug-based Route Match
↓
Service Layer Request
↓
REST API Consumption
↓
ACF Payload Retrieval
↓
Payload Normalization
↓
Frontend Rendering Contract
↓
Dynamic Page Hydration
Payload Normalization Strategy
The frontend does not directly bind raw WordPress payloads to rendering components.
All CMS responses pass through a normalization layer before entering the rendering pipeline.
Normalization Responsibilities
- resolve ACF field access
- flatten nested CMS structures
- normalize media URLs
- isolate rendering contracts
- reduce frontend coupling to CMS payload shape
The frontend is intentionally isolated from direct WordPress administration logic.
Layer
Isolation Purpose
WordPress Admin
Editorial operations only
Frontend Runtime
Presentation runtime only
ACF Structures
Content schema abstraction
Service Layer
CMS response isolation
Route Layer
Rendering boundary separation
Route Type
Hydration Source
Static Pages
Frontend-defined
Research Detail Pages
CMS-driven
Media Assets
WordPress media endpoints
Editorial Metadata
ACF payloads
Deployment Runtime Separation
React Dev Server
↓
Environment Variable API Resolution
↓
Local WordPress Runtime
Netlify Frontend Deployment
↓
Production API Resolution
↓
Headless WordPress CMS
Boundary
Protection Strategy
Editorial Access
Role isolation
CMS Exposure
REST surface reduction
WordPress Runtime
XML-RPC removal
Public Metadata
Version hiding
Upload Surface
MIME restrictions
Browser Security
Response headers
- frontend never owns editorial persistence
- frontend never mutates CMS schema
- rendering contracts remain CMS-agnostic
- environment configuration remains runtime-driven
- CMS never owns frontend rendering
- CMS only exposes structured content
- editorial workflows remain role-isolated
- technical configuration remains admin-scoped
Production Build Validation
- frontend bundle generation
- route compilation
- asset optimization
- production runtime compatibility
- environment resolution
Security Surface Reduction
Area
Implementation
WordPress Version Exposure
Removed
Asset Version Leakage
Disabled
XML-RPC
Disabled
REST User Enumeration
Restricted
Security Headers
Added
Login Error Exposure
Reduced
Upload MIME Restrictions
Enabled
Admin File Editing
Disabled
Role Separation
Enforced
Security Headers
X-Content-Type-Options
X-Frame-Options
Referrer-Policy
Area
Implementation
Cookie Consent Flow
Custom frontend implementation
Consent State
Frontend-managed
Editorial Transparency
Integrated into UI flow
Third-Party Overlay Dependency
Avoided
Area
Implementation
Image Loading
Lazy loading
Frontend Build
Optimized Vite production build
Rendering Structure
Component modularization
Environment Separation
API environment configuration
CMS Decoupling
Reduced frontend dependency surface
React Frontend
↓
Netlify Deployment Target
↓
Environment-based API Configuration
↓
WordPress CMS Runtime
Environment Configuration
Frontend Environment Variables
VITE_WORDPRESS_API_URL = http://localhost:8080/wp-json/wp/v2/research
CMS Content Modeling
↓
Frontend Route Composition
↓
REST API Consumption
↓
Dynamic Rendering Validation
↓
Production Build Verification
Local Docker-based WordPress runtime
- WordPress
- Advanced Custom Fields (ACF)
- CPT UI
- Custom Editorial Dashboard Plugin
MIT