# ModernKit Project ModernKit is a versatile and performant project boilerplate built with Gulp, Twig, and SCSS. It provides a robust build system and a foundational UI kit to kickstart your web development. ## Features - **Build System:** - Gulp-powered task runner. - SCSS compilation with Autoprefixer and minification (for production). - JavaScript transpilation (Babel) and concatenation with separate development (unminified) and production (minified) builds. - Image optimization (including WebP generation for production). - Twig templating with dynamic data injection from JSON files (only top-level templates are processed into HTML files). - Asset copying (e.g., other static files). - Favicon copying. - Font copying. - SVG sprite generation and injection into HTML. - Resource versioning (cache busting) using content hashing (for production). - Source map generation for CSS and JavaScript (for development). - **Code Quality:** Biome integration for JavaScript linting and formatting. - Robust error handling with `gulp-plumber`. - **Performance Optimization:** Utilizes `gulp-cached` and `gulp-remember` to speed up recompilation of unchanged files. - Clean task to remove build artifacts. - **UI Kit:** - Basic styles and resets. - Comprehensive typography. - Responsive grid system. - Utility classes for spacing, text alignment, display, and colors. - Basic components (e.g., buttons). ## Getting Started ### Prerequisites Make sure you have Node.js and npm installed on your system. ### Installation 1. Clone the repository: ```bash git clone cd modernkit ``` 2. Install the dependencies: ```bash npm install ``` ## Available Commands - `npm start`: Runs the default Gulp task, which starts a development server with BrowserSync, watches for file changes, and recompiles assets automatically. This uses the development JavaScript build (unminified) and generates source maps. - `npm run build`: Performs a one-time development build. Cleans the `dist` directory, lints JavaScript, generates SVG sprites, compiles Twig templates, SCSS, JavaScript (development version), optimizes images, and copies assets, favicon, and fonts. - `npm run build:prod`: Performs a one-time production build. Similar to `npm run build`, but uses minified CSS and JavaScript (production version), optimizes images more aggressively, generates WebP versions of images, and applies content hashing for cache busting. - `npm run test`: Runs Jest tests. - `npm run lint`: Runs Biome check on JavaScript files. - `npm run format`: Runs Biome formatter on JavaScript files. ## Project Structure ``` modernkit/ ├───gulpfile.js ├───jest.config.js ├───package-lock.json ├───package.json ├───biome.json ├───dist/ # Compiled output (ignored by Git) ├───node_modules/ # Node.js dependencies (ignored by Git) └───src/ ├───images/ # Source images │ └───test.png ├───js/ # Source JavaScript files │ ├───main.js │ └───main.test.js ├───scss/ # Source SCSS files │ ├───main.scss │ ├───_variables.scss │ ├───_base.scss │ ├───_typography.scss │ ├───_grid.scss │ ├───_utilities.scss │ └───_components.scss ├───templates/ # Twig templates │ ├───index.twig │ ├───about.twig │ └───components/ # Twig components │ ├───button.twig │ ├───footer.twig │ └───header.twig ├───data/ # JSON data for Twig templates │ ├───global.json │ └───about.json ├───assets/ # Static assets (e.g., other files) │ └───test.txt ├───icons/ # SVG icons for sprite generation │ ├───clock.svg │ └───info.svg └───fonts/ # Font files └───test.ttf ``` ## UI Kit Usage ### Typography Use standard HTML heading tags (`

` to `

`) and paragraph tags (`

`). Utility classes like `.small` can be applied for smaller text. ### Grid System Utilize the `.container`, `.row`, and `.col-*` classes for responsive layouts. Breakpoints are defined in `src/scss/_variables.scss`. ```html

``` ### Buttons Apply the `.btn` base class along with contextual classes like `.btn-primary`, `.btn-secondary`, etc. ```html Success Link ``` ### Utility Classes Various utility classes are available for common styling needs: - **Spacing:** `m-1`, `pt-3`, `px-auto`, etc. (for margin and padding) - **Text Alignment:** `text-left`, `text-center`, `text-right` - **Display:** `d-block`, `d-inline-block`, `d-flex` - **Colors:** `text-primary`, `bg-dark`, etc. ### SVG Icons SVG icons from `src/icons` are compiled into a sprite and injected into your HTML. Use them with the `` pattern: ```html ``` ## Data Management Twig templates can access global data from `src/data/global.json` and page-specific data from `src/data/.json` (e.g., `src/data/about.json` for `about.twig`). Page-specific data will override global data if keys conflict. Example in Twig: ```twig

{{ global.welcomeMessage }}

{{ pageTitle }}

``` ## Testing Jest is configured to run unit tests for JavaScript files. The test environment is set to `jsdom` to simulate a browser environment. To run tests: ```bash npm test ``` ## Contributing Feel free to contribute to this project by submitting issues or pull requests.