PHPackages                             viloveul/cms-consumer - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. viloveul/cms-consumer

ActiveProject

viloveul/cms-consumer
=====================

Viloveul CMS (UI)

v1.0.0(6y ago)12[1 PRs](https://github.com/viloveul/cms-consumer/pulls)MITJavaScript

Since Mar 28Pushed 1y ago1 watchersCompare

[ Source](https://github.com/viloveul/cms-consumer)[ Packagist](https://packagist.org/packages/viloveul/cms-consumer)[ RSS](/packages/viloveul-cms-consumer/feed)WikiDiscussions master Synced 2mo ago

READMEChangelog (1)DependenciesVersions (6)Used By (0)

Viloveul CMS (Consumer UI)
==========================

[](#viloveul-cms-consumer-ui)

[![SS](screenshot.png)](screenshot.png)

clone this repository

```
git clone https://github.com/viloveul/cms-consumer.git
```

lakukan proses instalasi

```
cd cms-consumer
npm install
```

buat file bernama .env di root folder yang berisi minimal:

```
VILOVEUL_API_URL=http://your-viloveul-cms-restapi
VILOVEUL_DASHBOARD_URL=http://your-viloveul-cms-dashboard
```

jalankan:

```
npm run dev
## buka http://localhost:19913
```

@see

@see

PRERENDER
---------

[](#prerender)

you can use a simple script like:

create new file on your root directory called `fake.php`

```
error_reporting(0);
ini_set('display_errors', 'Off');

$api = 'http://YOUR.DOMAIN.TLD';
$path = trim(isset($_SERVER['PATH_INFO']) ? $_SERVER['PATH_INFO'] : '/', '/');
$template = __DIR__ . '/index.html';

try {
    $doc = new DOMDocument();
    $doc->loadHTMLFile($template);
    $xpath = new DOMXpath($doc);
    $title = $doc->getElementsByTagName("title");
    $meta = $xpath->query("*/meta[@viloveul-controlled-description]");

    // year month day
    if (preg_match('#^([0-9]+)/([0-9]{1,2})/([0-9]{1,2})$#', $path, $match)) {
        for ($a = 0; $a < $title->length; $a++) {
            $title->item($a)->nodeValue = 'Archive ' . date('j F Y', strtotime("{$match[1]}-{$match[2]}-{$match[3]}"));
        }
    } elseif (preg_match('#^([0-9]+)/([0-9]{1,2})$#', $path, $match)) {
        for ($a = 0; $a < $title->length; $a++) {
            $title->item($a)->nodeValue = 'Archive ' . date('F Y', strtotime("{$match[1]}-{$match[2]}-01"));
        }
    } elseif (preg_match('#^([0-9]+)$#', $path, $match)) {
        for ($a = 0; $a < $title->length; $a++) {
            $title->item($a)->nodeValue = 'Archive ' . $match[1];
        }
    } elseif (preg_match('#^[^/]+/([^/]+)\.html$#', $path, $match)) {
        for ($a = 0; $a < $title->length; $a++) {
            $title->item($a)->nodeValue = 'Archive ' . ucwords(str_replace('-', ' ', $match[1]));
        }
    } elseif (preg_match('#^@([^/]+)$#', $path, $match)) {
        for ($a = 0; $a < $title->length; $a++) {
            $title->item($a)->nodeValue = 'Author: ' . $match[1];
        }
    } elseif (!empty($path)) {
        $paths = preg_split('/\//', $path, -1, PREG_SPLIT_NO_EMPTY);
        $handler = curl_init($api . '/blog/detail/' . end($paths));
        curl_setopt($handler, CURLOPT_RETURNTRANSFER, 1);
        $response = curl_exec($handler);
        curl_close($handler);
        $result = json_decode($response, false);

        for ($a = 0; $a < $title->length; $a++) {
            $title->item($a)->nodeValue = $result->data->title;
        }

        for ($b = 0; $b < $meta->length; $b++) {
            $meta->item($b)->setAttribute('content', $result->data->description);
        }
    }
} catch (Exception $e) {
    // do nothing
}

echo $doc->saveHTML();
```

and .htaccess

```

    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.html$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^.*$ fake.php/$0 [L]

```

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance28

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~39 days

Total

2

Last Release

2480d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/609a03f1a38d80aa5cf333dd556cb748371dbcbc880f3c580ecea72ff0fb228b?d=identicon)[zafex](/maintainers/zafex)

---

Top Contributors

[![zafex](https://avatars.githubusercontent.com/u/12587685?v=4)](https://github.com/zafex "zafex (76 commits)")

---

Tags

cmsfrontendjavascriptreact-reduxreactjsthemeuiviloveulviloveul-cms

### Embed Badge

![Health badge](/badges/viloveul-cms-consumer/health.svg)

```
[![Health](https://phpackages.com/badges/viloveul-cms-consumer/health.svg)](https://phpackages.com/packages/viloveul-cms-consumer)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
