Skip to main content

We'd like to use analytics cookies to understand how this site is used. They are optional — the site works exactly the same either way. Privacy Policy

Plugin

Kesso Quick Initialization

One-click setup wizard that installs plugins, applies global settings, and runs optimizations. It basically prepares a fresh site within seconds.

Tech Stack

WORDPRESSPHPJSCSSAPI

About This Project

Kesso Initialization adds one admin screen to a fresh WordPress install: a single form for the opening chores, covering site title, tagline, language, timezone, date and time formats, week start and favicon, a page builder choice of Elementor or Bricks, and a checklist of wordpress.org plugins alongside our own. Everything runs server-side through the plugin's own REST namespace, each route behind a manage_options check and a wp_rest nonce. Settings and theme go in one batch call; plugins are then installed one at a time, each as its own request, so one slow download cannot take down the whole run. A progress modal names the current step and lists what was installed, activated, skipped or failed. It is a studio tool rather than a client engagement: plain PHP with vanilla browser JavaScript and hand-written CSS, no framework and no build step, published free under GPL v2 or later.

Challenges & Solutions

WordPress core's plugin and theme installers are written for admin-page requests: they print progress HTML and fire admin notices, which is fatal to a response that has to be JSON. We run them behind a silent upgrader skin whose feedback, header and footer methods do nothing, and the batch endpoint tears down every existing output buffer, opens its own with a discard callback, turns off display_errors, strips the admin_notices hooks and blocks redirects, then logs and throws away whatever was captured. Long installs were the other risk. Download timeouts are filtered per request and removed again in a finally block, and the browser drives the run step by step rather than in one call. The client parses defensively too: if a batch response still fails to parse, it retries on the slice between the first and last brace.