Case study

A consultancy that rewrites its offer every year, and a website that keeps up

Lampstand Edu Consult has placed over 500 students in more than 15 countries since 2021, and its offer moves every year. The website had to move with it, in the hands of the team that knows what changed, without waiting on a developer.

ClientLampstand Edu Consult
SectorEducation consultancy · study abroad
EngagementBuild and run
Running sinceSeptember 2026
StatusLive since September 2026
DisciplinesWeb presenceDataInfrastructure
lampstandeduconsult.org
Homepage
What they brought

It is late in Abuja, and a student has three tabs open.

One tab for each consultancy they are weighing, and tomorrow the parents will ask which one. The site that is clearest about what it will and will not do, and answers first, has the better chance.

Lampstand Edu Consult was founded in Abuja in 2021 on a simple idea: Nigerian students deserve honest, hands-on guidance when they chase an education abroad. Its founder, Splendor Dara Etuk, puts it plainly on the About page: “We are not here to sell a country.” Five years on, Lampstand has placed over 500 students in more than 15 countries.

The problem

The offer does not stand still. Destinations are added and dropped, services are reworked, and the copy is rewritten, often more than once a year. On a conventional build every one of those changes waits for a developer, and the people who know what changed are not the people who can change it.

The brief

The first conversation was in 2024, and it did not go ahead then. When it picked up again in mid 2025, the brief had sharpened: a site the team could run themselves, that would not need rebuilding the first time the offer changed.

This is for you if your offer changes faster than your website can.

What we built, and why

Built small on purpose, and run by the team that knows what changed.

The platform was built small on purpose

A website’s weight rarely sits in its content. It sits in everything installed around the content, each piece on its own update schedule. Lampstand’s content model is small and fixed, so we left WordPress out entirely.

The public site and the admin are React, written as plain JSX and compiled by a short PHP script, the language the backend already speaks. There is no JavaScript toolchain to keep current. The backend is a flat PHP API behind one front controller, one module per concern, with SQLite for storage. It runs as two containers, PHP-FPM and nginx, with the database and the uploaded media on a persistent volume that a rebuild cannot touch. The public site runs on Preact through React’s compatibility layer, at a fraction of the weight.

The team edits typed records, never a blank page

Every repeatable part of the site is a typed record. A destination carries a region, the services offered there and the universities. A service carries what is included, what is not, and how long it takes. A student story carries a course, an institution, a quote and an outcome. When the team adds a destination, they fill in a destination, and the page that results looks like every other destination page because it cannot look like anything else.

Testimonials are written once and shown on both the homepage and the success stories page. Access is permission based, with publishing a post kept separate from editing one. Titles and descriptions carry length meters and a live search preview, and images are compressed to WebP on upload, so the four-megabyte hero photo cannot happen.

The server hands every reader a finished page

A PHP renderer writes each page’s title, description, canonical address, social tags and structured data into the HTML before any JavaScript runs, from the fields the team edits, and inlines the published content so the first paint never waits on a second request. Each route receives only the script it can render. The homepage weighs about 250 KB. How it got there, pass by pass, is in the performance guide.

The site stayed behind a coming-soon page for months, on purpose

The build was finished and live by June 2026. It stayed private. A visibility switch in the admin put the public site behind a coming-soon page while signed-in admins saw the real thing, and the team spent the summer writing their own destinations, services and student stories into the real system.

That is the right order. A site that launches on placeholder copy is rewritten in public. This one opened on 8 September 2026 with every word the client’s own, and the team has been changing it themselves ever since.

Why this, and not that

WordPress, or a bespoke platform A bespoke platform

WordPress would have been quicker to start and would have brought a plugin estate to keep current. With a small, fixed content model, the bespoke system is the smaller thing to run.

A JavaScript toolchain, or none No toolchain

A bundler is the default for React. A short PHP script avoids a second ecosystem to maintain.

Launch on placeholder copy, or wait Wait for the team's own

Waiting cost three months of a finished site sitting private. Launching early would have meant rewriting it in public.

Deliberately not done

  • No page builder, theme or plugins.
  • No blank-canvas editor: every repeatable item is a typed record.
  • No public launch before the content was the client’s own.
How it went

From a first conversation in 2024 to a site the team runs.

Dated, in the order it happened, the parts that went wrong included.

  1. 2024 Talks First conversation. It does not go ahead.
  2. Mid 2025 Talks Talks resume and the brief sharpens. The groundwork begins.
  3. Jun 2026 Build The platform is finished and live behind a coming-soon page, with a plain-English admin guide. The team starts writing.
  4. Summer 2026 Writing The team writes its own content into the real system. Twice, an update overwrites images they had chosen. Lesson
  5. 7 Sep 2026 Writing Content moves into checked documents with drafts, revisions and rollback. The same day, Publish republishes an old page; it is fixed the same day. Lesson
  6. 8 Sep 2026 Launch Public launch with the client's own content. The homepage goes from 480 KB to 250 KB the same day.
  7. 9 Sep 2026 Running An enquiry goes unheard. From that day every enquiry records whether the team was told. Lesson
  8. 28 Sep 2026 Running Search titles and descriptions are served from the fields the team edits.
  9. 6 Oct 2026 Running PageSpeed Insights on mobile: 95, first content in 1.3 s.
  10. Today Running Hosted and run here, and changed by the team themselves.
What we learned

Three things went wrong around the launch. Each one changed the platform.

Told as it happened, with what it taught and what the team has because of it.

Summer 2026

The team's work was lost twice.

What happened

Content first lived as plain files, with no drafts, no history and no check on what was saved. Twice, an update overwrote images the team had already chosen, and getting one back meant reading the server's access logs.

What it taught

A system whose only undo is a log file has no undo. Content needs the same care as the code that shows it.

What they have now

Every page is a checked document. A save changes only the fields it sends, a draft sits beside the published copy, every publish is kept, and any version can be put back. Two people saving one page get a conflict to resolve, never a silent overwrite.

7 Sep 2026

Publish said it had worked, and published the old page.

What happened

With drafts in place, a new portrait was picked for the About page and Publish pressed. No draft had been saved, so the system republished the copy that was already live, reported success, and stored nothing. BespokeForge caught it as Lampstand's team, editing at the same moment, saw it too and got in touch; the fix was already under way.

What it taught

To the person pressing it, Publish means putting what is on the screen live. A button that publishes anything else will one day publish something nobody wrote, and say nothing.

What they have now

Publish saves what is on the screen, then publishes it. If the save fails, nothing goes live and the screen says why. Fixed the same day.

9 Sep 2026

An enquiry arrived, and nobody heard.

What happened

The enquirer got their confirmation. The alert went to one address, chosen once and never read, and the system recorded it as sent. It looked exactly like an enquiry that had worked.

What it taught

The mail service accepting a message is not the team receiving it. If nothing records who was told, a missed enquiry looks exactly like one that worked.

What they have now

Alerts go to the whole team, and every enquiry records when the team was told, where, or why not, with a badge in the admin and a button to send it again.

Where it stands now

Public since 8 September 2026, and run here since.

Measured, with the method beside each figure.

95 PageSpeed Insights on mobile, first content in 1.3 s lampstandeduconsult.org, 6 October 2026
250 KB Homepage weight, down from 480 KB the day it launched lampstandeduconsult.org, September 2026
Zero Plugins, page builders or themes to keep current The platform, October 2026
Visual proof

See it in production.

The first step

Start with a conversation.

A short conversation first, to work out which of the two routes you are on and whether this is a problem BespokeForge can solve. The audit is the paid step that follows, and what it produces is yours whether or not anything comes after it.

Book the free 25-minute call

First, twenty-five minutes to confirm this is a problem BespokeForge can solve. If it is, the audit follows: €450, fixed, and the written record is yours whatever you decide. What the audit covers

October 2026

25 minutes, Google Meet Times in Africa/Lagos.