PHPackages                             queencitycodefactory/app - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. queencitycodefactory/app

ActiveProject[Framework](/categories/framework)

queencitycodefactory/app
========================

Willetts Technology's Custom CakePHP skeleton app

5.3.1(3mo ago)0412[1 PRs](https://github.com/QueenCityCodeFactory/app/pulls)MITPHPPHP &gt;=8.2CI passing

Since Jun 24Pushed 1mo ago2 watchersCompare

[ Source](https://github.com/QueenCityCodeFactory/app)[ Packagist](https://packagist.org/packages/queencitycodefactory/app)[ Docs](https://cakephp.org)[ RSS](/packages/queencitycodefactory-app/feed)WikiDiscussions 5.x Synced 1w ago

READMEChangelogDependencies (18)Versions (90)Used By (0)

Willetts Technology CakePHP Application Skeleton
================================================

[](#willetts-technology-cakephp-application-skeleton)

[![Build Status](https://github.com/cakephp/app/actions/workflows/ci.yml/badge.svg?branch=5.x)](https://github.com/cakephp/app/actions/workflows/ci.yml/badge.svg?branch=5.x)[![PHPStan](https://camo.githubusercontent.com/fff00cebb924e124a7335e6bd8ca8f8cf38869463c1654eff45d0939f1f21c57/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048505374616e2d6c6576656c253230382d627269676874677265656e2e7376673f7374796c653d666c61742d737175617265)](https://github.com/phpstan/phpstan)

A custom application skeleton for creating applications with [CakePHP](https://cakephp.org) 5.x, enhanced with Willetts Technology's development tools and customizations.

This skeleton builds upon [cakephp/app](https://github.com/cakephp/app) with additional features for streamlined development and deployment.

Tech Stack
----------

[](#tech-stack)

LayerTechnology**Framework**[CakePHP 5.3](https://book.cakephp.org/5/en/index.html) (PHP 8.4+)**Database**MySQL 8.4+**Web Server**Nginx with PHP-FPM**Frontend**[Bootstrap 5.3](https://getbootstrap.com/docs/5.3/) via [ButterCream](https://github.com/QueenCityCodeFactory/butter-cream) plugin**Icons**[Font Awesome 7](https://fontawesome.com/) (CSS + webfonts)**JS Libraries**Vanilla JS (no jQuery), TomSelect, Inputmask**Build Tool**[Gulp 5](https://gulpjs.com/) (SCSS compilation, JS bundling, font installation)**Dev VM**[Multipass](https://multipass.run/) via [Innkeeper](https://git.willettstech.com/tools/innkeeper)**Provisioning**Ansible playbooks (`ansible/playbooks/development.yml`)**Dev Services**Memcached, Mailpit (email testing), Chrony, SSL (self-signed)Custom Features &amp; Enhancements
----------------------------------

[](#custom-features--enhancements)

### ButterCream Plugin

[](#buttercream-plugin)

This skeleton includes [QueenCityCodeFactory/butter-cream](https://github.com/QueenCityCodeFactory/butter-cream), a custom CakePHP plugin providing Bootstrap 5 integration and theme components.

### Development Environment

[](#development-environment)

- **Innkeeper / Ansible provisioning** - Complete playbooks and roles for automated development environment setup
- **Pre-configured services**: PHP 8.4+ with FPM, Nginx with SSL, MySQL, Memcached, Mailpit, Node.js (NVM), Chrony

### Frontend Asset Pipeline

[](#frontend-asset-pipeline)

- **Gulp 5 build system** - Automated SCSS compilation, JavaScript bundling, and asset optimization
- **Modern frontend stack**: Bootstrap 5.3+, Font Awesome 7, TomSelect, Inputmask
- **No jQuery** - All JavaScript is vanilla JS using native DOM APIs and Bootstrap 5 APIs

### Custom JavaScript Modules

[](#custom-javascript-modules)

Pre-built JavaScript utilities in `assets/app/js/`:

- `ajax-pagination.js` - AJAX pagination, search forms, clear buttons, page-limit selects
- `app-core.js` - Core initialization (tooltips, popovers, masks, TomSelect, FormatTime)
- `app-util.js` - Shared utilities (HTML/attribute escaping)
- `bulk-select.js` - Table row select-all / bulk action checkboxes
- `clipboard.js` - Clipboard API wrapper
- `dark-mode.js` - Bootstrap 5.3 light/dark/auto theme toggle
- `dependent-selects.js` - Cascading AJAX-powered dependent dropdowns
- `format-time.js` - UTC-to-local time conversion using `Intl.DateTimeFormat`
- `modal-confirm.js` - Bootstrap 5 confirmation modals for CakePHP helpers
- `poptart.js` - Bootstrap 5 toast notification system
- `session-monitor.js` - Session timeout monitoring with in-page re-login
- `tmp-file-upload.js` - Temporary file upload with progress bars

### Enums (`src/Enum/`)

[](#enums-srcenum)

PHP 8.4 native backed enums with a shared `LabeledEnum` interface and `HasLabeledOptionsTrait` trait:

- `Priority` - low, medium, high, critical (with Bootstrap badge colors)
- `Status` - draft, active, inactive, archived (with Bootstrap badge colors)
- `UsState` - All 50 US states + DC
- `CanadianProvince` - All 13 Canadian provinces and territories

Enums provide `options()` for Form select helpers, `values()` for `inList()` validation, and `label()`/`color()` for display.

### Custom SCSS Components

[](#custom-scss-components)

Organized styles in `assets/app/scss/`:

- Action dropdowns, button groups, custom buttons (xs sizes, square buttons)
- Callouts, cards, form enhancements, navigation
- Filter drawer, responsive layout, PDF-specific styles
- Template-specific styles

### Additional Configuration

[](#additional-configuration)

- Enhanced .gitignore for development environment
- Crontab management
- Development-specific SSL configuration

The framework source code can be found here: [cakephp/cakephp](https://github.com/cakephp/cakephp).

Quick Start
-----------

[](#quick-start)

See [docs/development-environment.md](docs/development-environment.md) for full setup instructions.

1. Clone this repository and configure: ```
    cp config/app_local.example.php config/app_local.php
    ```
2. Launch the development environment: ```
    innkeeper up
    ```
3. Install dependencies and build assets: ```
    innkeeper exec composer install
    innkeeper exec npm install
    innkeeper exec gulp
    ```

### Frontend Assets

[](#frontend-assets)

Build with Gulp:

```
innkeeper exec gulp            # Build all (lint, compile, fonts, cache-bust)
innkeeper exec gulp styles     # Rebuild CSS only
innkeeper exec gulp scripts    # Lint + rebuild JS only
innkeeper exec gulp fonts      # Reinstall font files
innkeeper exec gulp watch      # Build then watch for changes
```

Documentation
-------------

[](#documentation)

- [docs/development-environment.md](docs/development-environment.md) - Local setup walkthrough
- [docs/database.md](docs/database.md) - Database configuration (Docker / VM MySQL)
- [docs/frontend-assets.md](docs/frontend-assets.md) - Gulp pipeline, SCSS, JS, vendor libraries
- [docs/innkeeper.md](docs/innkeeper.md) - Innkeeper CLI reference
- [docs/migrations.md](docs/migrations.md) - Migration creation, consolidation, cleanup
- [CHANGELOG.md](CHANGELOG.md) - Version history and notable changes

Configuration
-------------

[](#configuration)

Read and edit the environment specific `config/app_local.php` and set up the `'Datasources'` and any other configuration relevant for your application. Other environment agnostic settings can be changed in `config/app.php`.

The layout includes:

- Responsive navigation
- Custom button styles and components
- Card and callout components
- Form enhancements
- PDF-optimized styles
- Mobile-responsive design

Maintenance
-----------

[](#maintenance)

### Updating

[](#updating)

Since this skeleton includes custom modifications on top of the upstream CakePHP/app, updates should be done carefully:

1. Fetch the latest upstream changes:

    ```
    git fetch upstream 5.x
    ```
2. Review the changes before merging:

    ```
    git log HEAD..upstream/5.x
    ```
3. Merge upstream changes:

    ```
    git merge upstream/5.x
    ```
4. Test thoroughly, particularly:

    - Custom controller and view modifications
    - ButterCream plugin compatibility
    - Asset compilation
    - Ansible playbooks

### Dependencies

[](#dependencies)

- **PHP**: 8.4 or higher
- **CakePHP**: 5.3+
- **Node.js**: 20+ (managed via NVM in the VM)
- **Composer**: Latest version

Credits
-------

[](#credits)

- Built on [CakePHP](https://cakephp.org)
- Customized by [Willetts Technology, Inc.](https://www.willettstech.com)
- Maintained by [QueenCityCodeFactory](https://github.com/QueenCityCodeFactory)

###  Health Score

55

—

FairBetter than 98% of packages

Maintenance88

Actively maintained with recent releases

Popularity9

Limited adoption so far

Community23

Small or concentrated contributor base

Maturity91

Battle-tested with a long release history

 Bus Factor2

2 contributors hold 50%+ of commits

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~50 days

Recently: every ~111 days

Total

86

Last Release

40d ago

Major Versions

3.8.0 → 4.0.0-RC12019-11-18

3.9.0 → 4.1.02020-07-05

3.10.1 → 4.3.02021-10-24

4.4.2 → 5.0.0-beta12022-12-19

4.x-dev → 5.0.22024-07-26

PHP version history (10 changes)3.0.0-alpha1PHP &gt;=5.4.19

3.0.0-beta2PHP &gt;=5.4.16

3.2.0PHP &gt;=5.5.9

3.4.0PHP &gt;=5.6

4.0.0-alpha1PHP &gt;=7.1

4.0.0-RC1PHP &gt;=7.2

4.4.1PHP &gt;=7.4

5.0.0-beta1PHP &gt;=8.1

5.3.0PHP &gt;=8.2

5.x-devPHP &gt;=8.4

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/840593?v=4)[Daren Sipes](/maintainers/darensipes)[@darensipes](https://github.com/darensipes)

---

Top Contributors

[![markstory](https://avatars.githubusercontent.com/u/24086?v=4)](https://github.com/markstory "markstory (1744 commits)")[![lorenzo](https://avatars.githubusercontent.com/u/37621?v=4)](https://github.com/lorenzo "lorenzo (595 commits)")[![ADmad](https://avatars.githubusercontent.com/u/142658?v=4)](https://github.com/ADmad "ADmad (516 commits)")[![dereuromark](https://avatars.githubusercontent.com/u/39854?v=4)](https://github.com/dereuromark "dereuromark (203 commits)")[![phpnut](https://avatars.githubusercontent.com/u/148097?v=4)](https://github.com/phpnut "phpnut (140 commits)")[![othercorey](https://avatars.githubusercontent.com/u/24221186?v=4)](https://github.com/othercorey "othercorey (75 commits)")[![inoas](https://avatars.githubusercontent.com/u/20972207?v=4)](https://github.com/inoas "inoas (73 commits)")[![ceeram](https://avatars.githubusercontent.com/u/111448?v=4)](https://github.com/ceeram "ceeram (72 commits)")[![jrbasso](https://avatars.githubusercontent.com/u/26548?v=4)](https://github.com/jrbasso "jrbasso (70 commits)")[![AD7six](https://avatars.githubusercontent.com/u/33387?v=4)](https://github.com/AD7six "AD7six (69 commits)")[![predominant](https://avatars.githubusercontent.com/u/24568?v=4)](https://github.com/predominant "predominant (68 commits)")[![LordSimal](https://avatars.githubusercontent.com/u/9105243?v=4)](https://github.com/LordSimal "LordSimal (59 commits)")[![renan](https://avatars.githubusercontent.com/u/28046?v=4)](https://github.com/renan "renan (56 commits)")[![bcrowe](https://avatars.githubusercontent.com/u/752603?v=4)](https://github.com/bcrowe "bcrowe (53 commits)")[![antograssiot](https://avatars.githubusercontent.com/u/4977112?v=4)](https://github.com/antograssiot "antograssiot (37 commits)")[![saeideng](https://avatars.githubusercontent.com/u/8215801?v=4)](https://github.com/saeideng "saeideng (31 commits)")[![nateabele](https://avatars.githubusercontent.com/u/18288?v=4)](https://github.com/nateabele "nateabele (30 commits)")[![ravage84](https://avatars.githubusercontent.com/u/625761?v=4)](https://github.com/ravage84 "ravage84 (23 commits)")[![ionas](https://avatars.githubusercontent.com/u/106845?v=4)](https://github.com/ionas "ionas (23 commits)")[![jippi](https://avatars.githubusercontent.com/u/22841?v=4)](https://github.com/jippi "jippi (22 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/queencitycodefactory-app/health.svg)

```
[![Health](https://phpackages.com/badges/queencitycodefactory-app/health.svg)](https://phpackages.com/packages/queencitycodefactory-app)
```

###  Alternatives

[cakephp/app

CakePHP skeleton app

3831.7M1](/packages/cakephp-app)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
