LiveSince 2025
Web · CMS
Architecture, Go backend, CMS and site
Solovit CMS
The brand's official site and the visual builder behind it: the owner edits pages from blocks, presses Publish, and a fast static site rebuilds itself in about a minute.
Block types, each with variants
Go tests
Container: site, API and admin
From Publish to live

01/Problem
The site started as static pages with a small PHP and MySQL API for prices. Each product page was added in code, so changing a sentence meant a code change and a redeploy.
The goal: the owner builds and edits product pages directly, in Arabic and English, without making the site slower or breaking any link that already works.
02/Constraints
- 01Keep the speed of a static site; visitors never wait on a database.
- 02Old /api/*.php URLs keep answering after the move off PHP.
- 03Every block works in RTL and LTR, light and dark, with long or empty content.
- 04Runs as one small service on a shared server.
03/Architecture
Visitors
- Static site · Next.js 14 export
- ar / en · light / dark
Owner
- Visual builder
- pages · media · analytics
- Publish
Go service
- static server
- API + legacy .php aliases
- rebuild queue
- sessions · CSRF
Data
- SQLite
- uploads volume
- built site
04/Decisions
Rebuild on publish, serve static
Content lives in SQLite, but visitors get prebuilt HTML. The admin shows Building, then Your changes are now live, and HTML is served no-cache so nobody needs a hard refresh.
Trade-off: A change takes about a minute to appear, not a second. Turning a page off is instant: it returns 404 without a rebuild.
Replace PHP without breaking a link
The PHP + MySQL API was rewritten in Go on SQLite endpoint by endpoint, and the Go service still answers the old .php paths. A migrate command loads the old MySQL dump, so prices, content and admin users moved over intact.
One block system, many products
Twenty-one block types (hero, benefits, supplement facts, FAQ...) with variants, entrance motion and per-product accent colours. A product page is data, so a new product is built in the admin, not in code.
05/Screens


06/Stack
GoSQLiteNext.js 14ReactTypeScriptTailwind CSSDockerCaddyCloudflare