Custom themes for Ghost, designed and built by Salaheddin AbuEin.
Every theme is plain HTML5, CSS3 and ES6+ JavaScript with Handlebars templates. There are no front-end frameworks. They aim to be simple, responsive and accessible, and most are installable as progressive web apps (PWAs).
These are my independent projects, built outside my full-time role. For freelance enquiries, visit abuein.dev.
| Theme | Description | Live site | Version |
|---|---|---|---|
| 247lep | Plumbing and heating services | 247lep.co.uk | 1.1.0 |
| 2n1 | UK-based holding company | 2n1.co.uk | 1.0.1 |
| abuein-dev | Personal site with RTL support | abuein.dev | 0.1.0 |
| auntysuzy | Sole traders, with a Snipcart shop | auntysuzy.co.uk | 0.1.0 |
| bdde-zawake | Arabic/RTL e-commerce for Zawake | zawake.com | 1.0.0 |
| dar-abuein | Publishing with RTL (Arabic) support | abuein.com | 1.0.0 |
| elite-drivers-hertfordshire | Airport transfers and ground transport | servex.business | 0.5.0 |
| grace-gs | Grace Governance Solutions | gracegs.com | 1.0.0 |
| greenrock | "Under construction" PWA | greenrockps.com | 1.0.0 |
| lor-beauty | Premium skincare brand | lor.beauty | 1.0.0 |
| palestine-riders | Exploring Occupied Palestine on two wheels | palestineriders.com | 1.0.0 |
| rapid-is | Rapid Information Systems | rapid-is.co.uk | 1.0.0 |
| starter-kit | Boilerplate for new themes | — | 1.0.0 |
| swifton-databases | Swifton Databases Limited | swifton.co.uk | 1.0.0 |
| tufan | Indie publishing and community media PWA | tufan.uk | 1.0.0 |
| z23 | Art galleries | zawyeh.dev | 0.1.0 |
Versions below 1.0.0 are still in development.
- Node.js 22.17+ or 24 (see
.nvmrc) - Ghost-CLI —
npm install -g ghost-cli@latest - A local Ghost install —
ghost install local
The same commands work on Ubuntu and Windows (cmd, PowerShell or Git Bash).
git clone https://github.com/sabuein/ghost-themes.git
cd ghost-themes
npm installnpm install runs once at the repo root. The repo uses
npm workspaces, so every
theme shares one node_modules.
Next, tell the tooling where your local Ghost lives. Copy
ghost.local.example.json to ghost.local.json and edit it. Git ignores this
file, so each machine keeps its own paths:
{
"ghostDir": "~/my/instances/ghost-25",
"zipDir": "~/Desktop",
"themes": {
"elite-drivers-hertfordshire": { "ghostDir": "~/my/instances/ghost-servex" }
}
}On Windows, use forward slashes, for example "C:/Users/you/my/ghost-cms".
The GHOST_DIR and THEME_ZIP_DIR environment variables override the file.
Every theme has the same scripts. Run them from the repo root with -w <theme>,
or from inside the theme folder without it.
| Command | What it does |
|---|---|
npm run link -w 2n1 |
Link the theme into your Ghost content/themes (a junction on Windows, so no admin rights are needed) |
npm run unlink -w 2n1 |
Remove that link |
npm start -w 2n1 |
ghost start |
npm stop -w 2n1 |
ghost stop |
npm restart -w 2n1 |
ghost restart |
npm run debug -w 2n1 |
ghost run -D (foreground, development mode) |
npm run log -w 2n1 |
ghost log |
npm run update -w 2n1 |
ghost update |
npm run scan -w 2n1 |
Validate the theme folder with gscan |
npm run zip -w 2n1 |
Build (if the theme has a build step) and write <zipDir>/2n1.zip |
npm run scan:zip -w 2n1 |
Zip, then validate the zip exactly as Ghost will receive it |
npm test -w 2n1 |
Same as scan |
Root-level shortcuts run across every theme: npm run scan, npm run build,
npm run zip.
All of this runs through one script, tools/theme.mjs. Some
files never go in a zip: node_modules, .git, assets/labs, *.zip, logs
and lock files. To exclude more files for one theme, list them in that theme's
package.json:
"themeZip": { "exclude": ["assets/videos/**", "server/**"] }npm run scan:zip -w <theme>- In Ghost Admin, open Settings → Design & branding → Change theme → Upload theme.
- Pick
<theme>.zipfrom yourzipDirand activate it.
ghost-themes/
├── tools/
│ ├── theme.mjs # shared, cross-platform theme tooling
│ └── templates/ # README and LICENSE templates for new themes
├── ghost.local.example.json # copy to ghost.local.json (git-ignored)
├── package.json # workspaces + shared dev dependencies
├── <theme>/
│ ├── package.json # Ghost theme config + the standard scripts
│ ├── README.md
│ ├── LICENSE
│ └── … # .hbs templates, partials/, assets/, locales/
└── …
Ghost
Progressive web apps
Issues and pull requests are welcome. Please run npm run scan -w <theme>
before opening a PR, and use Conventional Commits
scoped to the theme, for example fix(2n1): ….
Salaheddin AbuEin — abuein.dev · GitHub · LinkedIn
MIT © Salaheddin AbuEin, unless a theme's own LICENSE says otherwise.