Webird was created to merge the latest PHP and Node.js innovations into a single application stack.

Overview

Webird full application stack

Webird was created to merge the latest PHP and Node.js innovations into a single application stack, issues

The PHP foundation is comprised of Phalcon and Composer, which are used to create a HMVC foundation that offers everything that is expected of a modern PHP server side framework. The Javascript foundation is built with Webpack 4, Vue 2 and NPM, which when used together are able to produce highly efficient single page applications. Node.js is required for development only and is not required once a project has been built.

Key technologies of Webird:

Notable aspects of Webird:

  • PHP CLI utilities for many tasks
  • Manage all third party dependencies with Composer and NPM
  • Bash provisioning and local installation scripts for configuring system (based on setupify)
  • A single PHP command that starts development processes across PHP and Nodejs
  • Live reloading ES6 module front end environment
  • Google OAuth2 login
  • Integrate gettext .po environment for both PHP and Webpack
  • Vue 2 example integration
  • Includes Dockerfile skeleton

Install Requirements:

  • PHP >= 7.2
  • Phalcon >= 3.4.0
  • MariaDB >= 10.4
  • Node.js >= 10.2

Installation Instructions:

# Ubuntu 18.04 Bionic

# System provisioning
sudo ./setup/install ubuntu1804

# mariadb setup
sudo mysqladmin --protocol=socket create webird
sudo mysql --protocol=socket webird < ./etc/schema.sql

# Create a Webird user. You can use this user to create more users via the web interface.
./dev/run useradd --activate --password 'openopen' 'Your Name' '[email protected]' Administrators

Poedit Localization editor:

In order to modify the localization messages you will need to configure the Poedit GNU gettext frontend since it does not come with the tools necessary to parse Volt and Vue templates. The provision script will have installed a node script called xgettext-template.

Poedit Configuration Instructions:

Go to File - Preferences... in Poedit and add a new parser in the Parsers tab:

  • Volt
    • Language: Volt
    • List of extensions...: *.volt
    • Parser Command: xgettext-template -L Volt --force-po -o %o %C %K %F
    • An item in keywords list: -k %k
    • An item in input files list: %f
    • Source code charset: --from-code=%c
  • Vue
    • TODO

Development Usage:

  1. Run server processes: ./dev/run [server] and wait until webpack-dev-server has finished building
  2. Visit http://dev.webird.io

If you see the local host file not configured page then add 127.0.0.1 dev.webird.io to your /etc/hosts file.

Production Usage:

Create prod (production) environment:

  1. Configure ./etc/prod.json to override settings from ./etc/prod_defaults.json. These two files will be merged to form ./build/etc/config.json.
  2. Create the prod environment: ./dev/run build
  3. Enter into prod directory cd ./prod
  4. ./run nginx | sudo tee /etc/nginx/sites-available/prod.webird.io 1> /dev/null
  5. sudo ln -fs /etc/nginx/sites-available/prod.webird.io /etc/nginx/sites-enabled/prod.webird.io

Run final prod environment:

Attention: At this point it will be assumed that you are inside of the portable prod directory wherever it is now located (or named).

  1. Import database schema located at ./etc/schema.sql
  2. Run server processes: ./run (for websockets, beanstalkd loop, etc)
  3. Visit https://prod.webird.io

The nginx configuration must be rebuilt if the production environment directory is moved or renamed. It is recommended to use the ./run nginx command to rebuild the configuration instead of manually editing the generated nginx configuration. If more advanced custom settings are required it is recommended to first modify the source ./app/phalcon/common/views/simple/nginx/prod.volt file and then rebuild the prod environment.

Note: Node.js is no longer a dependency at this point since it is only used to build the browser facing content into static bundles.

Project Structure:

./setup
├── install (takes a parameter $osName to provision system)
└── menu (provides a lightbar menu interface to installation)
./app
├── locale/ (contains the gettext locale .po files uses by Phalcon and Webpack)
├── theme/ (theme files to be read as-is and also processed by Webpack)
├── phalcon
│   ├── bootstrap_cli.php
│   ├── bootstrap_web.php
│   ├── common/
│   ├── config/
│   └── modules/
└── webpack
    ├── config.json (you can make this .json or .js)
    ├── entries (code entry points)
    └── modules (application ES6 modules)
        └── commons (common code to be run by multiple entry points)
./dev
├── run (CLI entry for dev environment)
├── public/
│   └── index.php (Web entry for dev environment)
├── cmd_overrides/ (dev specific command overrides for CLI interface)
└── webpack.js (Webpack script)
./prod
├── run (CLI entry for built system)
├── public/
│   ├── index.php (Web entry for built system)
│   └── static resources copied from app directory
├── etc/
├── cache-static/
│   ├── locale/ (localization files in machine readable .mo format)
│   └── volt/ (compiled Volt templates)
├── phalcon/
└── vendor/ (Composer packages)

Compare the ./app directory to a built ./prod directory to notice the differences between the app code and dev environment and the built system.

You may also view the build system routine at app/phalcon/modules/cli/tasks/DevTask.php

Note: The ./prod directory contains only optimized and uglified JS resources and if Ion Cube has been enabled then the build process will use it to protect the PHP code.

Note: A Vue template and single file component gettext extractor does not current exist as it has yet to be made.

Comments
  • Fix error with incorrect password

    Fix error with incorrect password

    When the incorrect password is entered the error message "PHP message: Exception: SQLSTATE[22003]: Numeric value out of range: 1264 Out of range value for column 'attempted' at row 1" is logged.

    opened by dschissler 2
  • Properly set process.env.NODE_ENV

    Properly set process.env.NODE_ENV

    The node ecosystem has settled on using process.env.NODE_ENV to determine the environment. So this needs to be properly exported throughout the system and the build system needs to set this to production.

    opened by dschissler 2
  • Implement HappyPack for Webpack

    Implement HappyPack for Webpack

    HappyPack Webpack plugin will allow the build time to be significantly decreased for both the development and production build by using parallel execution. However, since I'm currently having difficulties upgrading to Webpack 2 then this should be delayed until that can be achieved in order to prevent a situation in which a niche product is not compatible in some way.

    opened by dschissler 2
  • Fix email related code

    Fix email related code

    Fix app/phalcon/common/models/ResetPasswords.php, app/phalcon/common/models/EmailConfirmations.php and app/phalcon/modules/cli/tasks/UserTask.php. I needed to break email related features due to the mailparse extension being crap.

    opened by dschissler 1
  • Replace Session adapter with newer version in Incubator package

    Replace Session adapter with newer version in Incubator package

    Currently the Session Database adapter is an old version from the Incubator back when the Composer package really sucked. Now that it no longer sucks this code should be dropped and the initialization should be updated.

    opened by dschissler 1
  • Upgrade Ratchet to 0.4 development branch

    Upgrade Ratchet to 0.4 development branch

    Current Ratchet 0.3 is very old and uses a very old Guzzle package. This can be fixed by upgrading the Ratchet Composer package to the 0.4 branch. The code will need go be changed as the way of accessing the cookies has changed to use Symfony tech.

    opened by dschissler 1
  • [Build] Route admin/permissions has a Volt layout issue

    [Build] Route admin/permissions has a Volt layout issue

    Route path admin/permissions works on the development environment but the built system has a Volt layout issue where only the following is displayed:

    <div class="container">
      <div class="row">
        <div class="col-md-6 col-md-offset-3">
          <h2>Role Permissions</h2>
          <div class="text-warning">
                  </div>
        </div>
      </div>
    
      <form class="form-horizontal" autocomplete="off" role="form" method="post">
        <div class="form-group">
          <div class="col-md-6 col-md-offset-3">
            <select id="roleId" name="roleId" class="form-control">
        <option value="">...</option>
        <option value="1">Administrators</option>
        <option value="2">Users</option>
        <option value="3">Read-Only</option>
    </select>      </div>
        </div>
    
        <div class="form-group">
          <div class="col-md-6 col-md-offset-3">
            <input type="submit" name="search" value="Search" class="btn btn-primary" />      </div>
        </div>
    
    opened by dschissler 1
  • Implement 2-3 testing frameworks for both Webpack and PHP

    Implement 2-3 testing frameworks for both Webpack and PHP

    Currently Webird has no integrated testing environment. These should be explored and a variety of example tests should be provided along with ./dev/webird.php CLI support. It should be possible to test PHP (server side), Webpack (JS side) or both at the same time from a single command.

    opened by dschissler 1
  • Improve OAuth2 support

    Improve OAuth2 support

    The Webird OAuth2 integration is not super great because the Composer package is out of date and the OAuth authentication is instantiated directly in the auth service and it should be defined normally as a service that can be injected within the auth (Auth class) service. The OAuth2 client should be The League - oauth2-client.

    opened by dschissler 1
  • Upgrade postcss to 5 and cssnext

    Upgrade postcss to 5 and cssnext

    Currently npm package postcss is stuck on version 4 because cssnext is figuring out how to redesign their structure to work as a preset (like Babel 6 now does) and they have not released a new compatible version.

    opened by dschissler 1
  • Nest template include doesn't work with latest nunjucks and nunjucks-loader

    Nest template include doesn't work with latest nunjucks and nunjucks-loader

    Possibly related to nunjucks-loader issue #10. Possible solutions are to wait until it is fixed or downgrade to the nunjucks and nunjucks-loader 1.x series.

    bug 
    opened by dschissler 1
  • Bump lodash from 4.17.13 to 4.17.19

    Bump lodash from 4.17.13 to 4.17.19

    Bumps lodash from 4.17.13 to 4.17.19.

    Release notes

    Sourced from lodash's releases.

    4.17.16

    Commits
    Maintainer changes

    This version was pushed to npm by mathias, a new releaser for lodash since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump jquery from 3.4.0 to 3.5.0

    Bump jquery from 3.4.0 to 3.5.0

    Bumps jquery from 3.4.0 to 3.5.0.

    Commits
    • 7a0a850 3.5.0
    • 8570a08 Release: Update AUTHORS.txt
    • da3dd85 Ajax: Do not execute scripts for unsuccessful HTTP responses
    • 065143c Ajax: Overwrite s.contentType with content-type header value, if any
    • 1a4f10d Tests: Blacklist one focusin test in IE
    • 9e15d6b Event: Use only one focusin/out handler per matching window & document
    • 966a709 Manipulation: Skip the select wrapper for <option> outside of IE 9
    • 1d61fd9 Manipulation: Make jQuery.htmlPrefilter an identity function
    • 04bf577 Selector: Update Sizzle from 2.3.4 to 2.3.5
    • 7506c9c Build: Resolve Travis config warnings
    • Additional commits viewable in compare view
    Maintainer changes

    This version was pushed to npm by mgol, a new releaser for jquery since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Define babel corejs version for useBuiltIns

    Define babel corejs version for useBuiltIns

    For example:

    WARNING: We noticed you're using the `useBuiltIns` option without declaring a core-js version. Currently, we assume version 2.x when no version is passed. Since this default version will likely change in future versions of Babel, we recommend explicitly setting the core-js version you are using via the `corejs` option.
    
    You should also be sure that the version you pass to the `corejs` option matches the version specified in your `package.json`'s `dependencies` section. If it doesn't, you need to run one of the following commands:
    
      npm install --save core-js@2    npm install --save core-js@3
      yarn add core-js@2              yarn add core-js@3
    
    opened by dschissler 1
  • After installation $HOME/.config is owned by root

    After installation $HOME/.config is owned by root

    After provisioning for the first time the paths $HOME/.config and $HOME/.rnd are owned by root. The init.d scripts need to be reviewed for a way to prevent this.

    opened by dschissler 0
  • Refactor convoluted dev/cmd_overrides.php

    Refactor convoluted dev/cmd_overrides.php

    The dev/cmd_overrides.php creates a convoluted design.

    <?php
    return [
        'build'  => 'build',
        'nginx'  => 'dev::nginx',
        'server' => 'dev::server',
    ];
    

    Its not worth it. If a task/command should differ depending on the environment then just check in the task itself.

    To remedy this the environment specific tasks should be refactored to the task at hand.

    opened by dschissler 0
  • Upgrade league oauth2 composer packages

    Upgrade league oauth2 composer packages

    The packages league/oauth2-client and league/oauth2-google need to be updated to version 2 and this will require manual testing since some methods changed in version 2.

    opened by dschissler 0
Releases(0.9.1)
  • 0.9.1(Sep 20, 2016)

  • 0.9.0(Jul 30, 2016)

    • Many bug fixes
    • Upgraded to Ubuntu 16.04
    • Upgraded to PHP 7
    • Upgraded to Phalcon 3
    • Implemented many Phalcon 3 features
    • Refactored provision system
    • Upgraded to PostCSS 5
    • Upgraded to jQuery 3
    • Using Gulp 4 github devel branch
    • Removed Coffeescript support
    • Refactored ACL system
    • Changed OAuth library to The League
    • Now http/2 capable

    This is the largest release yet with 96 commits over a six month period. This took longer than normal due to upgrading to Ubuntu 16.04, dealing with PHP 7 issues and waiting for Phalcon 3.0 (previously 2.1) to be released. Alas it has become impossible to wait any longer and so here it is.

    Source code(tar.gz)
    Source code(zip)
  • 0.8.1(Nov 13, 2015)

    • Many bug fixes
    • Enabled Javascript 2016 features with Babel
    • Enabled Babel caching
    • Bumped Node.js requirement to 5.0
    • Updated nunjucks to version 2.1
    • Implemented fully working Volt gettext message extractor
    • Added Javascript Async/Await example using polyfill

    This version represents a point of significant maturity in the Node.js stack. I bumped Node.js requirement to 5 because it introduces a new flat module structure that dramatically reduces the chance of a Javascript instanceof failing due to the same module being included twice.

    Currently the current version of Babel and PostCSS are being held back because there are many issues with them due to their recently redesigned plugin systems. When all of the technology is ready around these stacks I will release the next version of Webird.

    Currently the PHP composer packages are getting very out of date and I also need to replace the OAuth library and to refactor it to work as a service. That will then likely be the following release. If Phalcon 2.1 has been released then I will migrate all validation to the new method as well.

    Source code(tar.gz)
    Source code(zip)
  • 0.7.0(Jul 7, 2015)

    • Bumped Phalcon requirement to 2.0.4 (due to bug fixes)
    • Disabled phql literals by default for improved security
    • Removed Coffeescript dependency for installation and configuration
    • Added Babel ES2015 Javascript to ES5 Webpack integration
    • Added PostCSS integration (in addition to existing SASS, LESS and Stylus)
    • Added PostCSS example at features/postcss
    • Improved webpack entries and commons output destination
    • Updated dependencies
    • Updated documentation
    Source code(tar.gz)
    Source code(zip)
  • v0.6.0(Jun 7, 2015)

    • Updated documentation
    • Phalcon 2 interface fixes
    • Updated Phalcon view setup with common view folder across all modules
    • Updated Marionette example that adheres to upcoming 3.0 conventions
    • Updated npm, bower and composer dependencies
    • Fixes for upcoming npm 3.0 by explicitly defining peerDependencies
    Source code(tar.gz)
    Source code(zip)
  • v0.5.0-alpha4(Jan 9, 2015)

  • v0.5.0-alpha3(Dec 1, 2014)

  • v0.5.0-alpha2(Nov 16, 2014)

  • v0.5-alpha1(Nov 10, 2014)

Owner
Perch Labs
Full Stack Technology
Perch Labs
project with laravel 9 and php 8 and vuejs 3(modular) in both multi page and single page application

About Project Since Laravel 9 was recently released, it supports PHP 8 and above. So I decided to implement a prototype project using Laravel 9 + PHP

ali ahmadi 10 Sep 7, 2022
TweetNow is a Twitter clone created with Vue.js and Laravel. It is a social media platform that allows users to post short messages, follow other users, and engage in conversations through comments and likes.

TweetNow TweetNow is a opensource social media created with Vue.js+Inertia SSR and Laravel. It is a social media platform that allows users to post sh

I.E.U. Juboraj Naofel 12 Jun 16, 2023
A boilerplate single php file for all your needs, no frameworks, no libraries.

SINGLE PHP FILE A boilerplate single php file for all your needs, no frameworks, no libraries. Avoid repetitive work It is a well known architecture d

null 15 Dec 30, 2022
Very simple CRUD project, written in pure php. Designed as framework-agnostic as possible, and with basically no stack overflow if you can believe that

briefly simple CRUD pure php project for self improvement I try to make it purely in github - not only code, but any documentation (wiki), tasks (issu

Michał Jędrasiak 1 Jan 23, 2022
FacEssential is a Core for PMMP, it gathers all kind of plugins needed to create a faction server. It was created from scratch by Clouds#0667.

FacEssential FacEssential is a Core for PMMP, it gathers all kind of plugins needed to create a faction server. It was created from scratch by Clouds#

Zoumi 10 Jun 13, 2022
This is a simple example project demonstrating the Lupus Nuxt.js Drupal Stack.

Lupus Nuxt.js Drupal Stack - Example project This is a simple example project demonstrating the Lupus Nuxt.js Drupal Stack. Introduction Please refer

drunomics 11 Dec 28, 2022
A lightweight full-stack component layer that doesn't dictate your front-end framework

Airwire A lightweight full-stack component layer that doesn't dictate your front-end framework Demo Introduction Airwire is a thin layer between your

ARCHTECH 199 Nov 23, 2022
Use this skeleton application to quickly setup and start working on a new Slim Framework 4 application

Slim Framework 4 Skeleton Application Use this skeleton application to quickly setup and start working on a new Slim Framework 4 application. This app

Slim Framework 1.5k Dec 25, 2022
Integration of Adminator into Laravel 6.x/7.x/8.x with RTL support

Laradminator Laravel PHP Framework with Adminator as admin dash Setup: All you need is to run these commands: git clone https://github.com/kossa/larad

Kouceyla 213 Dec 15, 2022
A PHP notebook application build with PHP Symfony as back-end API and VueJS/Vuetify front-end.

PHPersonal Notes ?? - BETA RELEASE PHPersonal notes is an application to store your personal notes! PHPersonalnotes is build with Symfony/VueJS/Vuetif

Robert van Lienden 3 Feb 22, 2022
Laravel and AngularJS Starter Application Boilerplate featuring Laravel 5.3 and AngularJS 1.5.8

?? Zemke/starter-laravel-angular has been upgraded to AngularJS 1.5.8. ?? Zemke/starter-laravel-angular has been upgraded to Laravel 5.3. You can pull

Florian Zemke 372 Nov 21, 2022
Demo and practice application with Laravel 8 and InertiaJS. (From laracasts course)

InertiaJS playground ⚽️ Started with the Laracasts: Build Modern Laravel Apps Using Inertia.js course and decided to share all my code here, I'll be a

Kasper Ligthart 1 Dec 2, 2021
Registry manager for Laravel 5. An alternative for managing application configurations and settings.

Registry manager for Laravel 5. An alternative for managing application configurations and settings. Now with the magic of caching, so no more database calls to simply get site setting.

Daniel Stainback 22 Sep 28, 2020
Quick new application creation with Laravel and Valet

Super-powered laravel new for Laravel and Valet Lambo is a command-line tool that replaces the Laravel installer and wraps up the most common tasks yo

Tighten 593 Dec 30, 2022
Laravel CRUD Generator, Make a Web Application Just In Minutes, Even With Less Code and fewer Steps !

?? CRUDBOOSTER - Laravel CRUD Generator Laravel CRUD Generator, Make a Web Application Just In Minutes, Even With Less Code and fewer Steps ! About CR

Crocodic Studio 1.7k Jan 8, 2023
Laravel Framework 5 Bootstrap 3 Starter Site is a basic application with news, photo and video galeries.

Laravel Framework 5.1 Bootstrap 3 Starter Site Starter Site based on on Laravel 5.1 and Boostrap 3 Features Requirements How to install Application St

null 900 Dec 22, 2022
Laravel Quick-Start - a boilerplate for Laravel Application with typical packages preinstalled and configured

Laravel Quickstart is a boilerplate for Laravel Application with typical packages preinstalled and configured to extend a full-fledged application. We tried to make it as minimal as possible.

Vijay Goswami 18 Sep 8, 2022
This application was build with the purpose of learning PHP.

Chat-App ?? About this file The purpose of this file is to provide overview, setup instructions and background information of the project. ▶️ Demo Her

Luis Monzon 5 Dec 14, 2021
This template repository is a boilerplate setup for a PHP application

PHP_Docker Repository Template What is this ? This template repository is a boilerplate setup for a PHP application. Its current version ships with PH

Kevin Richard 0 Jul 16, 2022