Author Archives: ronaldpringadi

Profiling a Dockerized Moodle with Xdebug and QCachegrind on macOS

If you run Moodle under moodle-docker on a Mac and a page feels slow, eyeballing the code only gets you so far. The honest answer is a profiler. 🐳 Here’s how I wired up Xdebug for both step-debugging and on-demand … Continue reading

Posted in Moodle | Tagged , , , , | Leave a comment

Setting Up a Moodle REST API Webservice in Five Steps

Moodle ships with a full web-services layer, but the admin flow for handing out a single API token is spread across half a dozen settings pages. The first time you do it, you’ll click around for twenty minutes wondering why … Continue reading

Posted in Moodle | Tagged , | Leave a comment

Enabling Vite Hot Reload for Moodle SCSS

🐳 I spent an afternoon chasing a deceptively simple goal: edit a stylesheet in a custom Moodle theme, hit refresh, and see the change — without running a full production build every time. The tool that promises exactly this is … Continue reading

Posted in DevOps | Tagged , , | Leave a comment

A Quick Tour of Mustache Templating in PHP (and Everywhere Else)

If you’ve worked in a large PHP codebase like Moodle, you’ve bumped into files ending in .mustache and wondered what those double curly braces are doing. 🐘 The short version: Mustache is a logic-less templating language, and the syntax you … Continue reading

Posted in PHP, Web Development | Tagged , , | Comments Off on A Quick Tour of Mustache Templating in PHP (and Everywhere Else)

Adding a Moodle cron sidecar to moodle-docker via local.yml

The moodle-docker stack is designed primarily for automated testing — Behat, PHPUnit, and so on — which is why it doesn’t ship a cron container. A background scheduler would interfere with deterministic test runs, so the README’s only nod to … Continue reading

Posted in Moodle | Tagged , , | Comments Off on Adding a Moodle cron sidecar to moodle-docker via local.yml

Creating a new theme and changing font on Moodle 5

I wanted to swap the default font in a Moodle 5 install. Specifically: keep Boost, the stock Moodle theme, but use Inter from Google Fonts instead of the Bootstrap system stack. The official path is “make a child theme of … Continue reading

Posted in Moodle | Tagged , , , , | Comments Off on Creating a new theme and changing font on Moodle 5

Local HTTPS for dev sites with Caddy, mkcert, and a reverse-proxy gotcha

Running a local web app over plain HTTP is fine until something forces your hand — a third-party SDK that refuses to load on http://, a cookie that needs the Secure flag, or an app like Moodle that nags you … Continue reading

Posted in DevOps | Tagged , , , | Comments Off on Local HTTPS for dev sites with Caddy, mkcert, and a reverse-proxy gotcha

Running multiple Moodle instances side-by-side with moodle-docker

The moodle-docker project gives you a one-command Moodle dev stack — Apache, PHP, the database of your choice, mail catcher, the lot. What its README mentions only in passing is that you can run several Moodle instances on the same … Continue reading

Posted in DevOps, Moodle | Tagged , , | Comments Off on Running multiple Moodle instances side-by-side with moodle-docker

Multi tenancy in Laravel using stancl/tenancy

I spent a day inside stancl/tenancy (the database-per-tenant Laravel package) shipping a real change to a multi-tenant Software-as-a-Service (SaaS) application, and a few things finally clicked for me — none of which were obvious from the documentation alone. 💡 Here … Continue reading

Posted in Laravel, PHP | Tagged , , , , | Comments Off on Multi tenancy in Laravel using stancl/tenancy

Moodle Plugin Development: version.php, install.xml, upgrade.php, and tasks.php Explained

Moodle is one of the largest Learning Management System (LMS) platforms in the world, and one of its quietly excellent superpowers is its plugin architecture. Every feature you can add — a new activity, a block, a report, an authentication … Continue reading

Posted in PHP | Tagged , , , | Comments Off on Moodle Plugin Development: version.php, install.xml, upgrade.php, and tasks.php Explained