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.
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 platformA 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 noneNo toolchain
A bundler is the default for React. A short PHP script avoids a second ecosystem to maintain.
Launch on placeholder copy, or waitWait 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.
2024TalksFirst conversation. It does not go ahead.
Mid 2025TalksTalks resume and the brief sharpens. The groundwork begins.
Jun 2026BuildThe platform is finished and live behind a coming-soon page, with a plain-English admin guide. The team starts writing.
Summer 2026WritingThe team writes its own content into the real system. Twice, an update overwrites images they had chosen.Lesson
7 Sep 2026WritingContent moves into checked documents with drafts, revisions and rollback. The same day, Publish republishes an old page; it is fixed the same day.Lesson
8 Sep 2026LaunchPublic launch with the client's own content. The homepage goes from 480 KB to 250 KB the same day.
9 Sep 2026RunningAn enquiry goes unheard. From that day every enquiry records whether the team was told.Lesson
28 Sep 2026RunningSearch titles and descriptions are served from the fields the team edits.
6 Oct 2026RunningPageSpeed Insights on mobile: 95, first content in 1.3 s.
TodayRunningHosted 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.
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.
Public since 8 September 2026, and run here since.
Measured, with the method beside each figure.
95PageSpeed Insights on mobile, first content in 1.3 slampstandeduconsult.org, 6 October 2026
250 KBHomepage weight, down from 480 KB the day it launchedlampstandeduconsult.org, September 2026
ZeroPlugins, page builders or themes to keep currentThe platform, October 2026
Visual proof
See it in production.
The five services, each one a typed entryA service: what is included, what is not, and how long it takesDestinations, filtered by regionStudent stories, each with a course, an institution and an outcome
Going deeper
Guides from this engagement.
The technical detail behind this work, written up in full.
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.