personal project WordPress Framework

A WordPress framework built project by project.

One core theme. One core plugin. A growing collection of business addons. And a scaffolder that makes spinning up a new one feel like cheating.

The big idea

Code structured clearly enough that an AI can jump in, understand the whole thing, and actually be useful without explaining the project from scratch every time.

Lubinik is my private WordPress framework. Not a product, not a public starter kit, not a shiny promise. More like a working notebook turned into code: the place where I keep the foundations I do not want to rebuild by hand every time.

It started from a pretty ordinary frustration. I did not like the way I was building WordPress sites. I wanted to understand WordPress properly, keep control of the code, and stop depending on visual builders for things I could make cleaner myself.

The first version was just a theme for a B&B site, with everything mixed together. Then the project grew, the files got too long, and the pattern became obvious: some parts belonged to every site, and some parts only belonged to that specific project.

So Lubinik became a parent theme, a core plugin, child themes, and small domain addons. Not because I planned a framework from day one, but because every real project forced one more separation, one more rule, one more reusable piece.

BnB, shelter, freelance portfolio, comics, showcase. Each addon came from an actual need. Each refactor is basically a note to future me: “next time, don’t rebuild this from scratch.”

Not for sale. Just the system I use to build my own sites.

Every addon started as a real project problem.

Messy history first, cleaner architecture later.

“I did not set out to build a framework. I just got tired of rebuilding the same WordPress foundations.”

— The boring little thought that became Lubinik

Journal

Lubinik is split into layers because every project taught me the same lesson: the reusable parts, the domain parts, and the visual identity should not live in the same messy pile.

01

Parent Theme

The shared site foundation. It handles the things a normal website almost always needs: headers, footers, menus, heroes, blog layouts, custom sections, testimonials, FAQs, breadcrumbs, tabs, maps, separators, and the theme-side shortcode manager.

Generic pagesHeadersFootersCustom sectionsTheme shortcode manager
02

Core Plugin

The shared backend layer for addons. It keeps the reusable plugin-side tools in one place: shortcode registry, plugin shortcode manager, template resolver, asset conventions, gallery and calendar components, filters, pagination, tabs, CTA and share buttons.

Shortcode registryEntity templatesGalleryCalendarFilters
03

Addons

Addons are where a project gets its real content model. A B&B does not need the same entities as a shelter, a portfolio, a comic archive, or this showcase site. So each addon brings only the CPTs, taxonomies, metaboxes, shortcodes, templates, and admin logic that belong to that domain.

CPTsTaxonomiesEntity shortcodesSingle templatesArchive lists
04

Child Themes

The child theme is the site-specific layer. It owns the visual language, the design packs, template metadata, CSS choices, header and footer overrides, and the final composition of the site. It can reshape the presentation without forcing the parent theme or addon to become site-specific.

Design packsTemplate metaCSS loadingHeader/footer overridesSite identity
05

Scaffolder

The scaffolder exists because copying an addon by hand is boring, fragile, and exactly the kind of work that should become rules once the pattern is stable. It can generate CPTs, taxonomies, meta files, shortcodes, CSS, JS, templates, and loader files from configuration.

Data modelMappingTemplatesGenerated filesConsistent structure
typical addon shape same skeleton, different domain →
lubinik-example-addon/
  ├── plugin.json                         ← addon metadata
  ├── lubinik-example-addon.php            ← entry point
  ├── includes/
  │   ├── custom-posts/
  │   │   ├── post-types/                  ← CPT definitions + meta
  │   │   └── taxonomies/                  ← project taxonomies
  │   ├── shortcodes/                      ← focused entity sections
  │   ├── loader-shortcodes.php
  │   └── helpers.php
  ├── templates/
  │   └── lubinik-example/                 ← selectable page/entity templates
  ├── assets/
  │   ├── css/
  │   └── js/
  └── config/
      ├── translation/
      ├── seo/
      └── structured-data/

Our Case Studies

One framework, many verticals. Each addon was built for a real project, that's why they actually work.

Lubinik grew during the first years where coding with AI started to feel genuinely useful. I used it a lot, but the project also taught me where AI gets fragile: huge files, vague structure, repeated copy-paste work, and too many decisions hidden in one place.

So part of the architecture became a way to collaborate better with AI without letting it drive the whole system. Clear folders, repeated conventions, small focused files, explicit config, and generated scaffolding all make the codebase easier to explain, inspect, and change.

The goal is not to make AI replace the architecture. It is the opposite: the architecture gives the AI less chaos to improvise around.

Make the repeatable parts boring

If an addon always needs CPTs, taxonomies, meta files, shortcodes, assets, and loaders, that should become scaffolder config instead of a long prompt.

Keep the structure familiar

Once I understand one addon, the next one should not feel like a brand new codebase. That helps me, and it helps the AI stay oriented too.

Use AI for judgment, not boilerplate forever

AI is useful for exploring designs, debugging, writing focused code, and comparing options. But predictable setup work belongs in templates and generators.

Design for future maintenance

AI was cheap and exciting when this started. I still wanted a system that would make sense later, even if prompts became expensive, slower, or less available.

lubinik-scaffolder
$ define data-model.json
✓ CPTs described
✓ Taxonomies mapped
✓ Meta fields planned
✓ Shortcodes selected
✓ Files generated from templates
$ open new-addon/
→ Now the real project-specific work can start.
$ _
The story

Where this came from

Lubinik did not start as a framework. It started with me being annoyed at WordPress, wanting to understand it properly anyway, and building a first B&B theme while experimenting with AI coding tools.

The first version had everything inside it: templates, CPTs, galleries, calendars, admin fields, project logic, reusable logic. It worked, but it also became obvious that I was mixing too many responsibilities in one place.

So the project slowly split itself apart. The reusable site foundation became the parent theme. Shared plugin-side tools became the core plugin. Project-specific models became addons. Site-specific design stayed in child themes.

This site is here to document that evolution: the useful parts, the messy parts, the refactors, and the decisions that only made sense after building real sites with the system.

FAQ

Core Project

Architecture

Shortcodes And Templates

Scaffolder And AI

Support Plugins

Tools And Experiments

Future Directions

Say hello

Curious about
the framework?

Questions, ideas, feedback — or just want to talk WordPress and AI. Always happy to exchange.

Send a message →