A simple runtime for real frontends
The Web Engine helps teams that want the simplicity of “drop-in hosting” without giving up control over layout. You build the frontend. MemehCMS stays the content hub behind it.
Download, run, customize, connect
The starter kit is intentionally explicit. A developer can run it from local content first, then connect it to MemehCMS APIs when the tenant content is ready.
# 1. Unzip the package
# 2. Open a terminal inside the starter folder
php -S localhost:8083 -t public_html public_html/router.php
# 3. Open the site
http://localhost:8083
content/site.php, content/home.php, content/services.php, resources/views/*.html, and public_html/assets/css/app.css.
MEMEH_API_BASE, MEMEH_TENANT_ID, MEMEH_PRIMARY_MENU_LOCATION, and MEMEH_FOOTER_MENU_LOCATION.
require_tenant_id enabled so public websites cannot accidentally render another tenant's content.
public_html, keep security headers on, and never expose config, local content files, or stack traces publicly.
public_html/wp-content/uploads only as a temporary bridge when old media URLs must remain live.
Because production hosting realities vary
Regulated institutions often have different hosting constraints, approval processes, and support capacity. The Web Engine gives teams a production-capable PHP delivery path today, while keeping the option to evolve the frontend or consume MemehCMS APIs directly.
Shared hosting, simple VPS deployments, quick rollouts, and teams who want clean HTML output with a stable rendering flow.
Controller → ViewModel → HTML View
Keep controllers thin. Make ViewModels explicit. Render clean, commented HTML views. That’s the whole philosophy.
GET /services
routes/web.php
→ ServiceController@index
ServiceController
→ $vm = ServiceIndexViewModel::make(...)
→ View::render('service-index', $vm)
resources/views/layout.html
→ {{> partials/header }}
→ {{{ content }}}
→ {{> partials/footer }}
A predictable layout teams can learn fast
Keep the runtime boring and stable. Put your creativity in the frontend templates and assets.
app/
Controllers/
ViewModels/
Services/
resources/
views/
layouts/
pages/
partials/
public/
assets/
content/
pages.php
news.php
services.php
routes/
web.php
public/
index.php
Layouts, pages, partials — clean and reusable
Use a base layout for your header/footer and shared UI. Use pages for route-level templates. Use partials for reusable components (cards, lists, navigation).
ViewModels are your contract
Don’t push raw API responses straight into templates. ViewModels reshape data into a stable, template-friendly structure. This keeps themes maintainable and avoids accidental coupling.
// Example ViewModel output (plain array)
[
"pageTitle" => "Services",
"items" => [
[
"title" => "Permit Application",
"detailUrl" => "/services/permit-application",
"ctaLabel" => "Pay fee",
"ctaUrl" => "https://payments.example.gov.sl/permit-application",
],
[
"title" => "Digital Service Package",
"detailUrl" => "/services/digital-service-package",
"ctaLabel" => "Buy package",
"ctaUrl" => "/pages/contact",
],
],
]
Fetch content from MemehCMS, then render your UI
The Web Engine is headless-first: your ViewModels fetch content from MemehCMS endpoints and map it into your templates.
GET /api/articles?tenant_id={tenant_uuid}&per_page=10&include=feature
GET /api/services?tenant_id={tenant_uuid}
GET /api/pages/{slug}?tenant_id={tenant_uuid}
GET /api/sliders?tenant_id={tenant_uuid}&placement=home
GET /api/menus/by-location/primary?tenant_id={tenant_uuid}
Articles, pages, services, sliders, emergency alerts, departments, locations, library items, FAQs, leadership, publications, menus, media, and accessibility settings.
Implementation requests, complaints, FOI requests, support messages, request cases, audit logs, and admin notes stay inside MemehCMS.
Choose what’s practical
MemehCMS doesn’t force one deployment path. Pick what your team can support.
Verification first, public selling second
Developer Pool is the private verification pipeline. Marketplace is the public Fiverr-style platform for approved sellers and gigs.
Developer Pool:
Apply -> Super admin review -> Verified provider -> Eligible for marketplace
Marketplace:
Approved seller -> Published gig -> Starter/Standard/Premium packages -> Buyer enquiry
What to do next
Want us to implement your first portal?
Bring your design. We’ll ship the first implementation and set your team up to scale across institutions, branches, and brands.