• Stars
    star
    303
  • Rank 137,247 (Top 3 %)
  • Language
    PHP
  • License
    MIT License
  • Created almost 8 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A Laravel model-based CMS

Decoy Build Status Coverage Status

Decoy is a PHP content management written for the Laravel framework that allows you to access your data using standard Laravel Eloquent models.

Screenshots

Screenshot of example projects listing Screenshot of example project edit view Screenshot of example category edit view Screenshot of elements editor

About

Since 2012 and Laravel 3, Bukwild has been maintaining our own content management system that we call Decoy. Decoy is meant to reduce the development effort for implementing content management while being highly flexible. And it helps you generate a great looking, easy to use admin interface; no manual required.

The driving philosophy behind Decoy is that a CMS should share models with your public facing app; your app interacts with data stored with Decoy only through standard Laravel models. This approach makes reading controller code simple (Article::ordered()->take(6)->get()), gives you access to Laravel mutators so you views are human readable ($article->full_date), and allows you to share business logic between admin and public sites. There is no additional templating or querying language to learn. After the CMS is setup, the developer interacts with the data using purely Laravel APIs.

Features

Besides itโ€™s model-centric paradigm, Decoy includes the following features:

  • Great looking, zero-training required design
  • Croppa integration for advanced image support including cropping, setting focal point, and storing alt text
  • Video encoding via Zencoder integration
  • WYSIWYG text editing via Redactor
  • Support for all Laravel relationship types
  • Easy creation of content editing forms using Former
  • Remote file storage (S3, etc) via Upchuck and Flysystem
  • Granular admin permissioning
  • Fully customizable edit views with Bootstrap support
  • Commands panel for executing artisan commands via web UI
  • Cloning of content, even across servers
  • Localization
  • Organized key-value pair type data as Elements
  • Drag and drop ordering of data in list views
  • Built in interface for creating 301 and 302 redirects
  • All configuration stored in the filesystem to keep your team in sync via Git (or whatever VCS)

Implementation

Decoy installs into your app as a composer package and integrates with your project rather than being a standalone install. Decoy shares the Eloquent models of your public site and stores data in regular Laravel migrated tables. Your controllers and views do not need to touch Decoy at all and while your models need to use Decoyโ€™s subclass of Eloquent\Model, there is very little behavior added at model instantiation. In other words, Decoy adds almost no overhead to your public site.

Implementing Decoy to manage model is done through a common MVC pattern that allows for overriding of default behavior at every step:

  • The admin nav, permission levels, localization options, and other settings are stored in Laravel-style php config arrays
  • For each manageable database table / Eloquent model, a Laravel-style controller is created that allows you to override defaults like how the title of the model appears, itโ€™s description, how it can be searched within the admin, and even override any CRUD method (create, update, destroy, etc).
  • You specify validation rules, ordering scopes, and features like which relationships to follow when cloning from the model, adding specifically named properties and methods.
  • Finally, you create a regular Laravel view containing the form that should be shown to the admin during creation and editing of content. This is easier than it sounds through support of Former and many Decoy-unqiue Former fields like our image uploader and wysiwyg types.

Next steps

Interested in giving Decoy a spin? Check out the quick start guide.

More Repositories

1

croppa

Image thumbnail creation through specially formatted URLs for Laravel.
PHP
492
star
2

cloner

A trait for Laravel Eloquent models that lets you clone a model and it's relationships, including files. Even to another database.
PHP
458
star
3

tram

Cross-browser CSS3 transitions in JavaScript.
JavaScript
183
star
4

laravel-pug

Pug view adapter for Laravel and Lumen
PHP
159
star
5

vue-ssr-carousel

A performance focused Vue carousel designed for SSR/SSG environments.
JavaScript
131
star
6

vue-in-viewport-directive

Vue 2 directive that adds css classes when the element is the viewport
JavaScript
120
star
7

vue-in-viewport-mixin

Vue 2 mixin to determine when a DOM element is visible in the client window
JavaScript
102
star
8

vue-visual

Vue 2 image and video loader supporting lazy loading, background videos, fixed aspect ratios, low rez poster images, transitions, loaders, slotted content and more.
JavaScript
59
star
9

laravel-haml

Wraps MtHaml for ease use in Laravel
PHP
45
star
10

reporter

Generate styled logs of Laravel requests that include application timing, memory usage, input data, and sql queries
PHP
30
star
11

nuxt-stylus-resources-loader

Stylus resources (e.g. variables, mixins etc.) module for NuxtJs
JavaScript
25
star
12

upchuck

A simple, automatic handler of file uploads for Laravel's Eloquent models using using Flysystem.
PHP
22
star
13

body-scroll-toggle

Enables / disables scroll on the body
JavaScript
19
star
14

vue-height-tween-transition

Tween the height of the parent of transitioning items for use in accordions or carousels.
JavaScript
16
star
15

nuxt-spa-store-init

A simple Nuxt module that will hydrate the VueX store when running in SPA mode (not SSR)
JavaScript
15
star
16

scrapey

Get info about a URL such as you get when sharing a link on Facebook.
PHP
11
star
17

shopify-gtm-instrumentor

Helpers for sending standardized dataLayer events from a Shopify site, inspired by GA Enhanced Ecommerce.
JavaScript
11
star
18

freezer

Using Laravel, creates cached versions of full pages that can be served directly by Apache
PHP
9
star
19

nuxt-coffeescript-module

Adds Coffeescript support to your Nuxt app
JavaScript
8
star
20

vue-balance-text

A Vue directive that implements the "balance-text" package to create line breaks to make each line of text in an element equal.
JavaScript
8
star
21

vue-hamburger

A hamburger icon that transitions to a close icon
JavaScript
7
star
22

data-layer-events

Push clean events onto Google Tag Manager's dataLayer
JavaScript
7
star
23

php-library

PHP utility classes
PHP
7
star
24

stylus-library

Stylus utility mixins
Stylus
7
star
25

vue-tween-number

A Vue component that tweens a number value.
JavaScript
6
star
26

bukwild-contentful-utils

Utilities for interacting with Contentful, designed with Vue and Nuxt in mind.
JavaScript
5
star
27

lightkeeper

Averages multiple successive Lighthouse tests to arrive at a more accurate PageSpeed score
JavaScript
5
star
28

nuxt-page-transition-and-anchor-handler

Scroll to top before page transition, handle anchor links, and cross-dissolve between pages
JavaScript
4
star
29

sass-to-stylus

Script to convert a project's sass files to stylus
CoffeeScript
4
star
30

codebasehq

Tools for integrating Laravel apps with CodebaseHQ features
PHP
4
star
31

cloak

Opinionated Nuxt + Craft boilerplate
CoffeeScript
4
star
32

contentful-color-selector

A UI Extension for Contentful that generate a dropdown for selecting a space-wide color
HTML
4
star
33

vue-embed

Parse html from the CMS for use with statically generated sites
JavaScript
3
star
34

vue-in-view

Vue component for triggering animations, adding classes, firing events, and syncing slot variables based on visibility in the viewport.
JavaScript
3
star
35

sass-library

Sass utility mixins
CSS
3
star
36

create-cloak-app

Sets up a new Cloak (Nuxt + Craft/Contentful) based project.
CoffeeScript
3
star
37

vue-routing-anchor-parser

A Vue directive that parses child elements for internally linking anchor tags and binds their click events to use Vue Router's push().
JavaScript
3
star
38

buk-builder

NodeJS-based asset versioning, RequireJS build tool.
JavaScript
2
star
39

following-circles

Generative art demo using Backbone
JavaScript
2
star
40

katamari

Convert distances into terms that are more easily visualized
JavaScript
2
star
41

auto-publish

Automatically publish all Laravel workbench assets on every request
PHP
2
star
42

vscode-config

For collaborating on shared VS Code configuration.
2
star
43

asana-gitlab-bridge

Opinionated, self-hosted tool that keeps GitLab in sync with Asana
CoffeeScript
2
star
44

craft-webhook-scheduler

A Craft plugin that triggers webhooks when scheduled posts become active.
PHP
2
star
45

benchpress

Wordpress boilerplate
PHP
2
star
46

vue-unorphan

A Vue directive that implements the "unorphan" package to prevent line breaks between the last two words of an element.
JavaScript
2
star
47

craft-netlify-deploy-status

A Craft plugin that shows Netlify deploy statuses.
PHP
2
star
48

vue-detachable-header

Vue component that wraps your header and renders at the top of the viewport when scrolling up.
JavaScript
2
star
49

vue-modal

A component that renders a modal window with slotted content. Includes trapped tabbing for ADA compliance
JavaScript
1
star
50

cloak-i18n

Localization conventions for Cloak + Craft.
JavaScript
1
star
51

cloak-boilerplate

Modules that setup standard Cloak conventions.
JavaScript
1
star
52

js-library

JS utility modules
JavaScript
1
star
53

jquery-backbone-views

jQuery plugin for instantiating Backbone views from selected elements
JavaScript
1
star
54

nuxt-remote-asset-cache

Store remote assets in the local build during Nuxt generation
CoffeeScript
1
star
55

photoshop-actions

Photoshop actions we use
1
star
56

window-event-mediator

Mediator pattern for window event handling
JavaScript
1
star
57

filestack-test

Testing connecting to Filestack
PHP
1
star
58

cloak-sandbox

A simplified Cloak app for demos and experiments.
Stylus
1
star
59

vue-cover-video-component

Vue component for dynamically loading single-page HTML 5 videos
Vue
1
star
60

light-or-dark

Return whether a hex or rgb color is light or dark
JavaScript
1
star
61

react-visual

Renders images and videos into a container.
TypeScript
1
star
62

sitemap-from-routes

Generate a sitemap directly from your Laravel routes/web.php.
PHP
1
star
63

cloak-algolia

Nuxt module for syncing records to Algolia and bootstrapping Instantsearch.js
JavaScript
1
star
64

vue-media-loader-directive

Vue Directive preloads media depending on pixel density and viewport size
CoffeeScript
1
star