# CodeSunrise Development Guidelines
This document serves as a comprehensive guide for front-end developers at CodeSunrise. As a living document, it is periodically updated to ensure all team members share the same understanding and knowledge. This guide aims to streamline development processes, enhance productivity, and foster knowledge sharing.
## Prerequisite Skills
- PHP
- Node JS
- SASS
----------------------
## Software Installation
### Required Software
- [**PHP**](https://www.php.net) - Interpreter and Programming Language
- [**MySQL**](https://www.mysql.com) - Database
- [**XAMPP**](https://www.apachefriends.org) - Server
- [**Node JS**](https://nodejs.org) - JavaScript Compiler
### Recommended Software
- [**Local WP by Flywheel**](https://localwp.com) - A versatile tool for creating and managing multiple WordPress instances without cumbersome configurations.
- [**Visual Studio Code**](https://code.visualstudio.com) - The premier IDE for WordPress development with a wide range of plugins and snippets.
----------------------
## BEM Naming Conventions
[Official Documentation](https://getbem.com/naming/)
BEM is an acronym for "**BLOCK, ELEMENT, and MODIFIER**," which are the three key components of our coding convention.
> ***Pro Tip: Any HTML element that accepts the "class" attribute can serve as a block or an element.***
BEM was developed to create a robust and scalable framework for developing reusable, maintainable code. Its benefits include easier debugging and testing, improved readability, and clear comprehension of the code structure.
### Block
A block is a standalone entity that carries independent significance. It symbolizes the highest level of abstraction. Examples of blocks include a *header, container, menu, checkbox, etc.*
### Element
Elements are components of a block and lack standalone meaning. They are **semantically tied to their respective block**. For instance, a 'menu item' would be an element within the 'menu' block.
### Modifier
A modifier is a property that alters the appearance or behavior of a block or an element. A modifier possesses a name and a value. For instance, a 'button' block may have a 'color' modifier with values such as 'red', 'green', etc.
An example of the BEM methodology:
```css
.block {}
.block__element {}
.block__element--modifier {}
```
This naming convention is highly adaptable and can be customized according to project specifications. However, maintaining **consistency across the project** is essential to leveraging BEM's benefits.
## Module Creation
Creating a new module involves dissecting a webpage section into smaller, reusable blocks using BEM principles. Here's how to create a module titled "Card":
#### 1. Identify the Block: The Block in this context would be the Card.
```css
.card {}
```
#### 2. Identify the Elements: These might include the card's image, title, and description.
```css
.card__image {}
.card__title {}
.card__description {}
```
#### 3. Identify any Modifiers: These could represent different card styles, such as a featured card or a card with a unique layout.
```css
.card--featured {}
.card__title--highlighted {}
.card--horizontal-layout {}
```
This example provides a basic illustration of how to create a module using BEM principles.
-------------
## Project Setup
### Step 1 - Clone __underscore_ template
[Link](https://github.com/Automattic/_s)
Setting up a new WordPress project can be tedious, which is why the **_underscore_** template was created. It allows for easy and rapid replication of basic configurations.
**
Clone the GitHub repository**
```bash
git clone https://github.com/Automattic/_s
```
**Install NPM packages**
```bash
npm install
```
**Execute SCSS compiler**
```bash
npm run watch
```
----------------------
## Creating a New Page
**1. Utilize this boilerplate code:**
```php
<?php
/**
* Template Name: Homepage
*
* @package iwn_website
*/
get_header();
?>
<div class="page-template--homepage">
<?
get_template_part('pages/homepage/hero');
?>
</div>
<?
get_footer();
```
----------------------
## Enhancing Productivity
### LocalWP Plugins
> ***IMPORTANT NOTICE: To utilize LocalWP plugins, ensure you have created an account and are logged in to the application***
>
> [Image Reference](https://hackmd.io/_uploads/ByjZ0JpI2.png)
**Live Links** - Share your local website globally with a single click, promoting team collaboration and showcasing your work.
**Instant Reload** - Refreshes your page automatically each time a CSS file is saved, eliminating the need to continually press F5.
### VSCode Extensions
**Live Share** by Microsoft - Enables real-time collaborative editing and sharing of local code on your computer.
**PHP** by Devsense - Assists in identifying PHP syntax errors.
**SCSS BEM Support** by Jolo Yonaha - Provides a suite of tools for using BEM.
**Color Highlight** by Sergii N - Facilitates color visualization and selection.
----------------------
## ChatGPT
**DISCLAIMER**
**1. It does not generate production-ready code.**
While it can assist with scripts and code snippets, it's important to understand the underlying technologies involved. Its solutions may not always be optimal.
**2. Your chats are not secure**
Never input sensitive data such as passwords into a ChatGPT chat as it poses significant security risks.
### Leveraging ChatGPT
Despite the caveats, ChatGPT can be a powerful productivity tool and can even automate repetitive tasks.
Consider this scenario: You're creating a new page for a website, and you need to create a navbar that is pixel-perfect from a Figma file, follows BEM naming conventions, uses SASS, and PHP with ACF.
Here's how ChatGPT can expedite the process:
1. First, interpret the navbar functional requirements and structure yourself. Create the PHP code implementation:
**Code PHP implementation (3 hours)**
2. Input the PHP code you created into ChatGPT with the prompt:
`This is my PHP component for a WordPress project that uses ACF. I need you to create all SCSS boilerplate following BEM naming conventions.`
3. Adapt the CSS code from Figma and insert it into the locations automated by GPT. This eliminates the worry about typing errors or forgotten implementations.
**SCSS (40 minutes)**
4. Finally, ask ChatGPT to create the ACF implementation:
`Now, you need to create a code implementation of the ACF fields listed in this code so I can place it the theme functions.php file`
This process minimizes time spent on debugging and initializing fields, significantly reducing the time spent on the task.
# GitHub