├── design ├── ui │ ├── ui_questions.png │ └── README.md └── figma │ └── README.md ├── .vscode └── settings.json ├── drupal ├── selling-drupal │ ├── curve_roles.png │ ├── drupal_vs_wp.jpeg │ ├── decouple_drupal.png │ └── README.md ├── testing │ ├── testing_flows_open-social.jpg │ └── README.md ├── script-get-prod-config.md ├── mastering-authoring.md ├── site-building.md ├── README.md ├── teamocil.md ├── start-drupal.md ├── training-beginners.md ├── terminology.md ├── debug │ └── README.md ├── cost.md ├── theme-validator.md ├── deployment-workflow.md ├── developer-setup.md ├── config-exclude-modules.md ├── migration-8-plus.md ├── readme-template.md ├── checklist-development.md ├── checklist-production.md ├── favorites.md ├── ide-settings-plugins.md ├── security-updates.md └── lessons.md ├── commerce ├── trends.md ├── README.md ├── flows.md ├── best_practices.md ├── sales.md ├── analytics.md ├── issues.md └── general.md ├── offers.md ├── data.md ├── privacy.md ├── tools.md ├── donations.md ├── cheatsheets.md ├── ai ├── HowTo.md ├── Challenges.md ├── agents │ ├── drupal-tech-lead.md │ ├── drupal-devops-engineer.md │ ├── drupal-content-architect.md │ ├── drupal-code-archaeologist.md │ ├── drupal-performance-engineer.md │ ├── drupal-documentation-expert.md │ ├── drupal-security-engineer.md │ └── drupal-core-contributor.md ├── agent-descriptions │ ├── Drupal Frontend Developer.md │ ├── Drupal Code Archaeologist.md │ ├── Drupal Documentation expert.md │ ├── Drupal Backend Developer.md │ ├── Drupal Performance Engineer.md │ ├── Drupal Security Engineer.md │ ├── Drupal Core Contributor.md │ ├── Drupal Content Architect.md │ ├── Drupal Tech Lead.md │ └── Drupal DevOps Engineer.md ├── README.md └── claude_tips.md ├── rss.md ├── public-speech.md ├── README.md ├── jobs.md ├── docs.md ├── pm.md ├── CODE_OF_CONDUCT.md └── LICENSE /design/ui/ui_questions.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theodorosploumis/notes/HEAD/design/ui/ui_questions.png -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.codeActionsOnSave": { 3 | "source.fixAll.markdownlint": "explicit" 4 | } 5 | } -------------------------------------------------------------------------------- /drupal/selling-drupal/curve_roles.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theodorosploumis/notes/HEAD/drupal/selling-drupal/curve_roles.png -------------------------------------------------------------------------------- /drupal/selling-drupal/drupal_vs_wp.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theodorosploumis/notes/HEAD/drupal/selling-drupal/drupal_vs_wp.jpeg -------------------------------------------------------------------------------- /drupal/selling-drupal/decouple_drupal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theodorosploumis/notes/HEAD/drupal/selling-drupal/decouple_drupal.png -------------------------------------------------------------------------------- /drupal/testing/testing_flows_open-social.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/theodorosploumis/notes/HEAD/drupal/testing/testing_flows_open-social.jpg -------------------------------------------------------------------------------- /commerce/trends.md: -------------------------------------------------------------------------------- 1 | # e-Commerce Trends 2020 2 | 3 | - Headless architecture 4 | - Voice Search 5 | - Marketing Automation 6 | - Artificial Intelligence (AI) 7 | - Augmented Reality (AR) 8 | - Subscription-Based Models 9 | - Enhanced Shipping Options 10 | - Social Payments (Apple Pay, WhatsApp Pay, Google Pay, Facebook Payments, and Twitter Buy) 11 | - Chatbots 12 | -------------------------------------------------------------------------------- /commerce/README.md: -------------------------------------------------------------------------------- 1 | # e-Commerce Guide 2 | 3 | > A simple guide, tips and resources to help you create and manage an e-commerce website. Since I am using [Drupal CMS](http://drupal.org) most of the development guides and steps refer to Drupal. 4 | 5 | ## Guides 6 | 7 | - [General Guide](general.md) 8 | - [Analytics](analytics.md) 9 | - [Best Practices](best_practices.md) 10 | - [Common issues](issues.md) 11 | - [Sales](sales.md) 12 | - [Trends 2020](trends.md) 13 | - [User flows](flows.md) 14 | -------------------------------------------------------------------------------- /drupal/script-get-prod-config.md: -------------------------------------------------------------------------------- 1 | # Get Drupal production configuration 2 | 3 | ```bash 4 | ORIGIN=master 5 | CURRENTDATE=`date +"%Y-%m-%d-%H-%M"` 6 | BRANCH=prod-"$CURRENTDATE" 7 | 8 | git checkout -b $BRANCH 9 | drush cex -y 10 | git add config 11 | git commit -m "Prod: get config $CURRENTDATE" 12 | git push origin $BRANCH 13 | 14 | git merge $BRANCH master 15 | 16 | git pull origin master 17 | git push origin master 18 | 19 | git branch -D $BRANCH 20 | git push origin :$BRANCH 21 | ``` 22 | -------------------------------------------------------------------------------- /offers.md: -------------------------------------------------------------------------------- 1 | # Web product redesign 2 | 3 | - Executive summary 4 | - Goals and KPIs 5 | - Current facts (what are the statistics and KPIs now) 6 | - Current problems 7 | - Competitive Analysis (each compeditor it's own page) 8 | - User Journey (flows) 9 | - Design updates (mockups, wireframes. branding, templates etc) 10 | - Targeted KPIs 11 | - Technical analysis and approach (functionalities, services, integrations) 12 | - Recommended Roadmap (versions, timesheet, deadlines) 13 | - System and Application diagram 14 | -------------------------------------------------------------------------------- /data.md: -------------------------------------------------------------------------------- 1 | # Data (sheet) examples 2 | 3 | What fields should we include on a table like data sheet? 4 | 5 | ## Drupal Projects 6 | 7 | - (Project) Name 8 | - Drupal version 9 | - PHP 10 | - URL Stage 11 | - URL Prod 12 | - Git repository 13 | - ssh 14 | - drush sa 15 | - Support contract (boolean) 16 | - Contact/Dev 17 | - Contact/PM 18 | - Docs 19 | - Issues 20 | - Chat channel 21 | 22 | ## Team Members 23 | 24 | - Member name 25 | - Role 26 | - Email 27 | - Phone 28 | - Chat name 29 | - (Photo) 30 | - Expertise 31 | - Tasks assigned 32 | -------------------------------------------------------------------------------- /privacy.md: -------------------------------------------------------------------------------- 1 | # Privacy 2 | 3 | Tools and services to allow privacy on web browsing, file sharing etc, as also as on your local machine. 4 | 5 | - [Browser Tor](https://www.torproject.org) 6 | - [DNS - 1.1.1.1](https://one.one.one.one) 7 | - [Portable operating system - Tail](https://tails.net) 8 | - [Application firewall - OpenSnitch](https://github.com/evilsocket/opensnitch) 9 | - [Search engine - DuckDuckGo](https://duckduckgo.com) 10 | - [Browser extension to block trackers - Privacy Badger](https://privacybadger.org) 11 | - [Browswer extension to block Ads - AdBlock](https://getadblock.com) 12 | - [Firefox Relay - protect your email](https://relay.firefox.com/) 13 | - [croc - Easily and securely send things from one computer to another](https://github.com/schollz/croc) 14 | -------------------------------------------------------------------------------- /design/ui/README.md: -------------------------------------------------------------------------------- 1 | # UI design 2 | 3 | ## 10 Questions to answer when designing UIs for a CMS like Drupal 4 | 5 | The questions refer to each element/component designed. In general, the UI design should answer to 4 questions: 6 | 7 | - What (data, language etc) 8 | - Where (position, part of another component etc) 9 | - Who (permissions) 10 | - How (skinning, display modes etc) 11 | 12 | I really like designs that **contain these information** within the components through signs or plain text. 13 | 14 | 1. Multilingual 15 | 2. Reusable 16 | 3. Data source 17 | 4. Static vs Dynamic 18 | 5. Alternative displays 19 | 6. MVP vs Final component 20 | 7. Access permissions (CRUD) 21 | 8. Styling/skinning options 22 | 9. Ability to rearrange on the layout 23 | 10. Part of a bigger component 24 | 25 | ![](ui_questions.png) 26 | -------------------------------------------------------------------------------- /commerce/flows.md: -------------------------------------------------------------------------------- 1 | # e-Commerce User Flows and Marketing automations 2 | 3 | ## User flows 4 | 5 | - Product Display > Add to Cart > Go to Cart/Checkout 6 | - Product Display > Ask for this Product > Send email to Admin 7 | - Cart: Adandoned > Send email (reminder) to Customer after x time > Delete cart after y time 8 | - Checkout: Select shipping (add Shipping info) > Checkout: Select Payment (add Billing info) > Checkout: Review (add order comments) > Checkout: Pay in full 9 | - Order: Completed > Send email/sms to Customer/Admin > Create Customer user account > Setup Marketing profile (3rd party service) 10 | - Order: Shipped > Send email/sms to Customer 11 | - Order: Cancelled > Send email/sms to Customer 12 | - Order: Returned > Send email/sms to Customer 13 | - Contact form > Send email to Admin 14 | - Subscribe to Newsletter > Send newsletter (email) to Customer 15 | -------------------------------------------------------------------------------- /tools.md: -------------------------------------------------------------------------------- 1 | # Tools 2 | 3 | Some tools I use for several development or sysadmin tasks. 4 | 5 | ## Apache/Nginx 6 | 7 | - https://htaccess.madewithlove.com 8 | - https://www.digitalocean.com/community/tools/nginx 9 | - https://csp-evaluator.withgoogle.com 10 | - https://observatory.mozilla.org 11 | - https://securityheaders.com 12 | 13 | ## API testing 14 | 15 | - https://httpie.io 16 | - https://www.postman.com 17 | 18 | ## Cron jobs 19 | 20 | - https://crontab.guru 21 | - https://crontab-generator.org 22 | - https://devtoolcafe.com/tools/cron 23 | 24 | ## Website details 25 | 26 | - https://builtwith.com 27 | - https://whois.domaintools.com 28 | 29 | ## Performance test 30 | 31 | - https://pagespeed.web.dev 32 | - https://yellowlab.tools 33 | - https://tools.pingdom.com 34 | - https://unlighthouse.dev 35 | 36 | ## Tunneling 37 | 38 | Order of tools is of my preference. 39 | 40 | - https://ngrok.com 41 | - https://github.com/cloudflare/cloudflared 42 | - https://github.com/ekzhang/bore 43 | - https://github.com/robbie-cahill/tunnelmole-client 44 | -------------------------------------------------------------------------------- /drupal/mastering-authoring.md: -------------------------------------------------------------------------------- 1 | # Mastering Authoring experience in Drupal 2 | 3 | > A list of modules and tips to offer a better experience to Authors of a Drupal website. 4 | > See also https://github.com/eworx-org/drupal-editors 5 | 6 | ## Core modules/functionality 7 | 8 | - workspaces 9 | - revisions 10 | - content moderation 11 | - preview before save 12 | 13 | ## Contrib/custom modules 14 | 15 | - 16 | - 17 | - (also [entity_diff_ui](https://www.drupal.org/project/entity_diff_ui)) 18 | - 19 | - 20 | - 21 | - 22 | 23 | ## Other 24 | 25 | - UI option to take backups before any change 26 | - DEV/STAGE/PROD environments 27 | - Override backend theme 28 | - Custom Admin content views 29 | - All blocks on code (under vcs) 30 | - Breakpoint preview (mobile display etc) 31 | - Automated A11 validation 32 | -------------------------------------------------------------------------------- /drupal/site-building.md: -------------------------------------------------------------------------------- 1 | # Drupal Site Building tasks 2 | 3 | - Install basic modules 4 | - Setup languages 5 | - Setup timezone and datetime formats 6 | - Menus 7 | - Text formats and WYSIWYG editor 8 | - Image styles 9 | - linkit profiles 10 | - Media types and media fields 11 | - Taxonomy terms 12 | - Content types (fields, view modes, translations, form modes, permissions) 13 | - Content workflows (content_moderation etc) 14 | - Static block types (logo, copyright etc) 15 | - Dynamic lists for the frontend (views) 16 | - Dynamic lists for the backend (Admin views) 17 | - Block UI (add Blocks to the UI) 18 | - Webforms 19 | - Search functionality 20 | - SEO several tasks 21 | - extlink 22 | - redirects 23 | - path aliases and patterns 24 | - pathologic 25 | - xml sitemap 26 | - metatags 27 | - rdf 28 | - advagg 29 | - Other tasks 30 | - queues 31 | - cron jobs and UI 32 | - cookies 33 | - UX helper modules (simplei, replicate, revision UI, diff, menu_admin_per_menu, taxonomy_access_fix etc) 34 | - User roles and permissions 35 | - Prepare for **theming** (sub-theme, twig templates, libraries, assets compiling etc) 36 | -------------------------------------------------------------------------------- /donations.md: -------------------------------------------------------------------------------- 1 | # Donations and sponsorship 2 | 3 | ## Donation and sponsorship platforms 4 | 5 | - [GitHub Sponsors](https://github.com/sponsors) 6 | - [Open Collective](https://opencollective.com) 7 | - [Open Source Pledge](https://opensourcepledge.com) 8 | - [thanks.dev](https://thanks.dev) 9 | - [patreon.com](https://www.patreon.com) 10 | - [Buy Me a Coffee](https://www.buymeacoffee.com) 11 | - [Ko-fi](https://ko-fi.com) 12 | - [Liberapay](https://liberapay.com) 13 | - [Bountysource](https://bountysource.com) 14 | - [Stakes.social](https://stakes.social) 15 | - [Open Source Collective](https://www.oscollective.org) 16 | - [OSS.Fund](https://www.oss.fund) 17 | - [PayPal.Me](https://www.paypal.me) 18 | - [donorbox.org/](https://donorbox.org) 19 | 20 | ## Software specific 21 | 22 | - [Drupal](https://www.drupal.org/association/donate) 23 | - [PHP](https://thephp.foundation) 24 | - [LetsEncrypt](https://letsencrypt.org/donate) 25 | - [thunderbird](https://give.thunderbird.net) 26 | - [Mozilla](https://donate.mozilla.org) 27 | - [Archive.org](https://archive.org/donate) 28 | - [librespeed.org](https://liberapay.com/fdossena/donate) 29 | - [Open Source Initiative](https://members.opensource.org/donate) 30 | -------------------------------------------------------------------------------- /cheatsheets.md: -------------------------------------------------------------------------------- 1 | # CheatSheets 2 | 3 | ## Drupal 4 | 5 | - https://gist.github.com/theodorosploumis/3dd9d1eb32a7baa9c8897a021b3295d2 6 | - https://selwynpolit.github.io/d9book 7 | - https://www.drupalbook.org 8 | - http://drupal-entity-training.github.io/event 9 | - https://drupalize.me/tutorial/form-element-reference?p=2766 10 | - https://gist.github.com/bdlangton/e826276a0c78d9a89d8dec23dd0c7683 11 | - https://drupalmigrate.org 12 | 13 | > See also: https://github.com/theodorosploumis/awesome-drupal/tree/main#cheatsheets 14 | 15 | ## Other 16 | 17 | - [Composer](https://composer.json.jolicode.com) 18 | - [Git](https://cheatography.com/samcollett/cheat-sheets/git) 19 | - [PHPStorm keymap](https://resources.jetbrains.com/storage/products/phpstorm/docs/PhpStorm_ReferenceCard.pdf) 20 | - [PHP](https://cheatography.com/davechild/cheat-sheets/php) 21 | - Javascript [1](https://cheatography.com/pyro19d/cheat-sheets/javascript), [2](http://cheatsheets.shecodes.io/javascript) 22 | - [SCSS - SASS](https://cheatography.com/hamidyfine/cheat-sheets/sass-functions/) 23 | - [Twig](https://cheatography.com/deleted-22137/cheat-sheets/symfony-and-twig) 24 | - [Regex](https://cheatography.com/davechild/cheat-sheets/regular-expressions) 25 | -------------------------------------------------------------------------------- /ai/HowTo.md: -------------------------------------------------------------------------------- 1 | # Ideas and tips for AI work 2 | 3 | ## Tips 4 | 5 | - Keep each session results on a folder (what, how, history of, costs, time, tools, metadada). 6 | - Make the AI tool think the way you think. 7 | - Most of the times an AI tool needs data that are excluded (.gitignore). 8 | - Too many mcp can break your LLM context and wondow limit. Lazy load tools when you need them. 9 | - Inline comments in code should have a full description. Mentioning links to a 3rd party Doc or PM system is not useful. 10 | - Make the AI generate automation tools (scripts) for the tasks. 11 | 12 | ## When not use AI 13 | 14 | - Automated tasks that can be done by scripts without AI (e.g. linting, code formatting, phpcs, phpstan, release generator etc). 15 | - Tasks that spend too many tokens without a reason (.e.g. find a PHP Class that does XXX. Better use an mcp with IDE intergation for this). 16 | - Tasks that are not well defined and seem abstract. 17 | - Tasks that we have no clue how to monitor, evaluate, fix, update etc (because this rises the technical depth in out code). 18 | - Tasks we already know that an (specific) LLM cannot still do a good job (e.g. getting the web UI of a Drupal site for a logged in User). 19 | - Just because it is a trend. -------------------------------------------------------------------------------- /drupal/README.md: -------------------------------------------------------------------------------- 1 | # Drupal Notes 2 | 3 | > My Personal notes, tips and bookmarks regarding Drupal. 4 | 5 | - [Checklist: Development](checklist-development.md) 6 | - [Checklist: Production](checklist-production.md) 7 | - [Checklist: Frontend Performance](checklist-frontend-performance.md) 8 | - [config_exclude_modules on settings.php](config-exclude-modules.md) 9 | - [Cost estimation](cost.md) 10 | - [Deployment workflow](deployment-workflow.md) 11 | - [Developer Setup](developer-setup.md) 12 | - [Debug](debug) 13 | - [Favorite Drupal modules](favorites.md) 14 | - [IDE Settings and Plugins](ide-settings-plugins.md) 15 | - [Lessons](lessons.md) 16 | - [Maintenance and support Contract](contract.md) 17 | - [Mastering Authoring - tips and modules](mastering-authoring.md) 18 | - [Migration (general)](migration.md) 19 | - [Migration from 8.x to latest version](migration-8-plus.md) 20 | - [README template](readme-template.md) 21 | - [Script: Get Prod config](script-get-prod-config.md) 22 | - [Selling Drupal](selling-drupal.md) 23 | - [Security Updates for Drupal](security-updates.md) 24 | - [Site-building tasks](site-building.md) 25 | - [Start with Drupal](start-drupal.md) 26 | - [Teamocil (tool)](teamocil.md) 27 | - [Terminology](terminology.md) 28 | - [Testing, CI/CD](testing) 29 | - [Theme validator](theme-validator.md) 30 | - [Training Beginners](training-beginners.md) 31 | - [Translation solutions](translations.md) 32 | -------------------------------------------------------------------------------- /commerce/best_practices.md: -------------------------------------------------------------------------------- 1 | # e-Commerce Best Practices 2 | 3 | ## eShop Management (humans) 4 | 5 | - Reduce to zero the shipping costs 6 | - No hidden or unexpected costs annd fees 7 | - Fast shipping 8 | - Fast order processing (manual actions) 9 | - Be careful with the stocks 10 | - Provide a free return for broken products 11 | - Bonus and gifts to returring customers 12 | - Sales all the year 13 | - GDPR and legal rules 14 | - Keed statistics about orders to be prepared for high demand seasons 15 | - Provide an easy way to get contacted (phone, email etc) 16 | 17 | ## eShop website 18 | 19 | - Secure transactions and data manipulation (check ) 20 | - Focus on Product search and easy navigation 21 | - Eliminate the 404 errors for Products, Categories and Searches 22 | - Allow Users to save their searches by url path (take care of paging also) 23 | - System (CMS) testing process for new features or updates 24 | 25 | ## Usability tips 26 | 27 | - Use emails instead of usernames 28 | - Use nice and meaningfull breadcrumbs 29 | - Make contact information visible 30 | - Make search visible 31 | - Provide filters and fields on the search 32 | - Show recommended and related products 33 | - Show detailed fees on the Cart 34 | - Show a confirmation page 35 | - Show clear Call to Actions 36 | - Show security badges 37 | - Break up the order process 38 | - Make Cart visible 39 | - Make Content visible 40 | - Use information on each Order to increase credibility 41 | -------------------------------------------------------------------------------- /ai/Challenges.md: -------------------------------------------------------------------------------- 1 | # AI challenges 2 | 3 | ## Issues with AI tools 4 | 5 | - cli VS IDE use (e.g. claude code VS Claude Desktop) 6 | - Which LLM should we use? (gemini, sonnet, minimax etc) 7 | - Which provider should we use for LLM API use (openrouter, together, official vendors etc) 8 | - Which mcp should we install? 9 | - Should we use an Agents tool (e.g. Jules, Arcade etc) 10 | - RAG Vs VectorDB 11 | - Context ... 12 | - Which md (guides) should I create? 13 | - What AI related files should we track on VCS? 14 | - How to run parallel, sandboxed, automated tasks on the same code/project? Is [git worktree](https://git-scm.com/docs/git-worktree) enough? 15 | - How to control the token usage and costs? 16 | - Local only VS dual (local + online) 17 | - All the git repositories will get bigger due to the new AI md files added 18 | 19 | ## Important things in programming on the AI era 20 | 21 | > Things that were not so "trendy" some years ago but now seem almost required. 22 | 23 | - Documentation in md files (tracked by VCS) 24 | - Code docs (dockblock etc) 25 | - Test-Driven Development (TDD) 26 | - Spec-Driven Development (SDD) 27 | - Scripting (all the things) 28 | - Terminal knowlegde 29 | - Prompting knowledge 30 | 31 | ## Use AI for these tasks ASAP 32 | 33 | - Testing (create, optimize, automate) 34 | - Analyze repository (code, tools, how to, devops, infra, services etc) 35 | - Generate docs for the AI agents (agents.md etc) 36 | - Security audit (e.g. on custom code, secrets, services) 37 | - Automate tasks you already do now (convert to skills, commands, agents etc) 38 | - Review pull requests 39 | - Refactor suggestions 40 | - Repots and evaluation of technical depth 41 | - Try new things an sandboxes 42 | -------------------------------------------------------------------------------- /drupal/teamocil.md: -------------------------------------------------------------------------------- 1 | # Teamocil 2 | 3 | [Teamocil](https://github.com/remi/teamocil) is a simple tool used to automatically 4 | create windows and panes in [tmux](https://github.com/tmux/tmux) with YAML files. 5 | Similar tools are [byobu](https://www.byobu.org) and [mtm](https://github.com/deadpixi/mtm). 6 | 7 | Using teamocil you can get ready to use templates to start working on a project with a single click. 8 | 9 | Usually located under `~/.teamocil/example.yml` on a Unix machine. 10 | 11 | ## Install 12 | 13 | ``` 14 | // Install tmux - https://github.com/tmux/tmux 15 | sudo apt-get install tmux 16 | 17 | // Install teamocil - https://github.com/remi/teamocil 18 | gem install teamocil 19 | ``` 20 | 21 | ## Create a teamocil template 22 | 23 | ``` 24 | // Create a teamocil template 25 | touch ~/.teamocil/example.yml 26 | 27 | // Edit the template 28 | teamocil --edit example 29 | ``` 30 | 31 | ## Example of a template 32 | 33 | ```yml 34 | # ~/.teamocil/example.yml 35 | # Comments start with a "#" 36 | 37 | windows: 38 | - name: Name-Of-My-Project # Appears on the terminal title, do not use spaces or special characters 39 | root: /var/www/html/example.com # Local folder to execute the scripts 40 | layout: tiled 41 | panes: # Several panes, each one accomplishes a task 42 | - git pull 43 | - cd web/themes/custom/mytheme && gulp watch 44 | - ddev start && google-chrome "https://example.ddev.site" # Notice: I usually use ddev for development 45 | - pstorm . & 46 | - ssh USER@HOST 47 | - google-chrome "https://www.example.com" 48 | ``` 49 | 50 | ## Start a teamocil defined cli 51 | 52 | ```bash 53 | # Open a teamocil project 54 | tmux new-session -d 'teamocil example' \; attach 55 | ``` 56 | -------------------------------------------------------------------------------- /rss.md: -------------------------------------------------------------------------------- 1 | # RSS feeds 2 | 3 | > My RSS dev related feeds, organized by categories. 4 | 5 | ## Drupal 6 | 7 | - [drupal planet](http://drupal.org/planet/rss.xml) 8 | - [Core changes](http://drupal.org/changes/drupal/rss.xml) 9 | - [Showcase](http://drupal.org/taxonomy/term/25/0/feed) 10 | - [Modules under active development](https://www.drupal.org/taxonomy/term/9988/feed) 11 | 12 | ## PHP 13 | 14 | - 15 | - 16 | - 17 | - 18 | - 19 | - 20 | 21 | ## CSS 22 | 23 | - 24 | - 25 | - 26 | - 27 | - 28 | 29 | ## JS 30 | 31 | - 32 | - 33 | 34 | ## NextJS 35 | 36 | - 37 | - 38 | - 39 | 40 | ## ReactJS 41 | 42 | - 43 | - 44 | - 45 | - 46 | 47 | ## Machine Learning 48 | 49 | - 50 | - 51 | - 52 | - 53 | 54 | ## Web design 55 | 56 | - 57 | - 58 | - 59 | - 60 | - 61 | -------------------------------------------------------------------------------- /drupal/start-drupal.md: -------------------------------------------------------------------------------- 1 | # First time with Drupal 2 | 3 | A step by step, opinioned, checklist for a Drupal rookie. 4 | 5 | ## 1. Basics 6 | 7 | - [ ] I know what is [PHP](https://www.php.net). 8 | - [ ] I know what is [MySQL](https://www.mysql.com). 9 | - [ ] I know how to use [composer](https://getcomposer.org). 10 | - [ ] I know how to use [git](https://git-scm.com). 11 | - [ ] I know how to use [cli](https://en.wikipedia.org/wiki/Command-line_interface). 12 | - [ ] I know how to write [Markdown](https://en.wikipedia.org/wiki/Markdown) 13 | - [ ] I know how to read and write [YAML](https://en.wikipedia.org/wiki/YAML) 14 | - [ ] I can use an IDE (Phpstorm, VSCode etc). 15 | 16 | ## 2. Drupal basics 17 | 18 | - [ ] I can understand Drupal.org project versions, issues etc. 19 | - [ ] I know what is drush and I can use it from the cli. 20 | - [ ] I can install Drupal 9.x+ using a tool from [here](https://drupaltools.com). I propose using [ddev](https://ddev.readthedocs.io). 21 | - [ ] I can enable/disable modules from the Admin UI. 22 | 23 | ## 3. Local setup 24 | 25 | - [ ] I have installed all the required software from [Drupal Developer Setup](developer-setup.md) 26 | 27 | ## 4. Community 28 | 29 | - [ ] I have an account on [Drupal.org](https://www.drupal.org). 30 | - [ ] I have an account on [drupal.slack.com](https://drupal.slack.com). 31 | - [ ] I have an account on [drupal.stackexchange.com](https://drupal.stackexchange.com). 32 | - [ ] I have joined my local community group. See [drupal.org/community](https://www.drupal.org/community#connect-nearby). 33 | - [ ] I know about the Drupal.org scholarship on . 34 | 35 | ## Resources 36 | 37 | - [How to Become a Drupal Developer - drupalize.me, 2021](https://drupalize.me/blog/how-become-drupal-developer) 38 | - [Drupal.org - Overview of Drupal](https://www.drupal.org/docs/understanding-drupal/overview-of-drupal) 39 | 40 | Ready to start your journey with Drupal. 41 | 42 | See also [Drupal Lessons](lessons.md). 43 | -------------------------------------------------------------------------------- /drupal/training-beginners.md: -------------------------------------------------------------------------------- 1 | # Training beginners on Drupal 2 | 3 | > Assuming a new member is coming on the team and you need to educate her/him so she/he can use Drupal. 4 | > Before starting it is a good idea to check the **official, community supported, [Drupal.org User Guide](https://www.drupal.org/project/user_guide)**. 5 | > It is mirrored by drupalize.me and is availalbe as a **PDF** too. It is well organised and gets updated, something which is not true for online-videos. 6 | 7 | ## Training schedule 8 | 9 | These are the proposed steps for (Drupal only) onboarding with approximately time needed. 10 | 11 | - Study on **Drupalize.me** or similar online guide: 2 week 12 | - Watch internal howto videos (how to work with the other members, company tools etc): 3 days 13 | - Study internal documentation: 2 days 14 | - Install all the development tools needed: 2 days 15 | - Install Drupal locally, play with modules and functionality: 2 days 16 | - Get known to your internal **Mentor** (a senior that has the responsibility for you): 1 day 17 | 18 | After the initial training period (**4 week**) you can start as an **assistant developer** on a simple project with easy tasks. 19 | 20 | ## Useful processes 21 | 22 | - **Pair programming** 23 | - Live coding 24 | - Snippet sharing 25 | 26 | ## IDE plugins for education 27 | 28 | - Phpstorm: [Code with me](https://www.jetbrains.com/help/phpstorm/code-with-me.html) 29 | - Phpstorm: [Duckly Pair Programming Tool](https://plugins.jetbrains.com/plugin/14919-duckly-pair-programming-tool) 30 | - Phpstorm: [CodeTogether](https://plugins.jetbrains.com/plugin/14225-codetogether) 31 | - VSCode: [Live Share](https://visualstudio.microsoft.com/services/live-share) 32 | - Gitpod: [Share Workspace Snapshot](https://www.gitpod.io/docs/configure/workspaces/collaboration) 33 | 34 | ## See also 35 | 36 | - [Start with Drupal](start-drupal.md) 37 | - [Drupal Lessons](lessons.md) 38 | 39 | ## Resources 40 | - https://www.agiledrop.com/blog/how-onboard-next-generation-drupal-engineers 41 | -------------------------------------------------------------------------------- /public-speech.md: -------------------------------------------------------------------------------- 1 | # Public Speaking 2 | 3 | > See also [theodorosploumis/art-of-presentation](https://github.com/theodorosploumis/art-of-presentation). 4 | 5 | ## How to start a speech 6 | 7 | - With a **story** (about you or another person). Similar to a fairy tale. 8 | - With a "**shocking fact**" or a "**big idea**" (you or other people may have). 9 | - With a **question** everyone is interested to. 10 | - With a **joke**, a surprise, an unexpected move or question etc. 11 | 12 | --- 13 | 14 | ## Using your body 15 | 16 | - Use your **hands** (gestures) while talking to chop, show, give, prevent/stop. 17 | - Use your **eyes**. 18 | - Palms should be up (show the sky). 19 | - Never point to the audience (using your finger). 20 | - Walking on the room. Move **around the center** not too away from the center, not behind of the decks. Move between the seats. 21 | 22 | --- 23 | 24 | ## Several tips 25 | 26 | - It's all about the audience (they should be the center of the speech, not the presenter). 27 | - Tell real stories... 28 | - Demonstrate using things or objects. 29 | - Engage with the audience (eg ask direct questions). 30 | - Change the tone or volume of your voice. 31 | - Use speaking pauses when necessary. 32 | - Use situational awareness (bold, tone, silence, audacity etc). 33 | - Close your speech with the same topic (story, big idea, outcome, call to action etc) you started with. 34 | 35 | --- 36 | 37 | ## Resources 38 | 39 | - [How to Start a Speech, YouTube - 2012](https://www.youtube.com/watch?v=w82a1FT5o88) 40 | - [How to Start a Speech: The Best (and Worst) Speech Openers, YouTube - 2021](https://www.youtube.com/watch?v=7tzentBmmUc) 41 | - [4 Tips To IMPROVE Your Public Speaking - How to CAPTIVATE an Audience, YouTube - 2020](https://www.youtube.com/watch?v=962eYqe--Yc) 42 | - [Make Body Language Your Superpower, YouTube - 2015](https://www.youtube.com/watch?v=cFLjudWTuGQ) 43 | - [World Champion of Public Speaking, Manoj Vasudevan, YouTube - 2017](https://www.youtube.com/watch?v=x_alq6yYbpc) 44 | - [Dananjaya Hettiarachchi - World Champion of Public Speaking, YouTube - 2014](https://www.youtube.com/watch?v=bbz2boNSeL0) 45 | -------------------------------------------------------------------------------- /commerce/sales.md: -------------------------------------------------------------------------------- 1 | # Sales and marketing 2 | 3 | ## 11 reasons why you lose clients 4 | 5 | 1. You didn\'t listen the client 6 | 2. You were late 7 | 3. You were rude 8 | 4. You have a bad reputation 9 | 5. They expected more from you (eg a better portfolio) 10 | 6. They can\'t afford your rates 11 | 7. They don\'t want your CMS (software solution) 12 | 8. They only need your services every once a while 13 | 9. They have changed their business direction 14 | 10. They found someone else 15 | 11. They forgot about you 16 | 17 | --- 18 | 19 | ## What to send with your newsletters 20 | 21 | - Testimonials from partners and customer 22 | - Social media chatter about your work 23 | - Previews of work you just started working on 24 | - Links to the most recent and good blog posts 25 | - Invites to social networks you have joined 26 | - Great work you have done recently 27 | 28 | --- 29 | 30 | ## How to close a client deal 31 | 32 | - As more details, read carefully the project plan 33 | - Make a mini research about the customer (area of activity, current status, strengths, proposals) 34 | - Show them your enthousiasm, kindly ask for the job 35 | - Talk positive about the project (talk like you already got it) 36 | - Contact back the client about the proposal (follow up) 37 | - Contact all the previous clients about new, additional features and projects 38 | - Contact new potential clients about new features you offer (through newsletter, blog, phone etc) 39 | 40 | --- 41 | 42 | ## How to get paid more by clients 43 | 44 | - Make life of the customers easier (tasks flow, save time etc) 45 | - Offer some tasks or material for free (freebies) 46 | - Use convincing wording (exaplain why you are worthing the money they pay): 47 | - replace "maybe" with "guaranteed" or "risk-free" phrase 48 | - replace "we will try" to "we will definitely" 49 | - focus on **benefits** over **features** (what is the client gaining from your work) 50 | - explain how the life of the customer will become easier 51 | - explain how you will help the customer increase sales or results 52 | - explain why cheaper solutions (alternatives) do not fit to the client vision 53 | -------------------------------------------------------------------------------- /drupal/terminology.md: -------------------------------------------------------------------------------- 1 | # Drupal terminology 2 | 3 | See also https://www.drupal.org/docs/user_guide/en/glossary.html. 4 | 5 | ## General terminology 6 | 7 | - Core (Drupal core) 8 | - Distribution (Distro) 9 | - Install profile (Profile) 10 | - Developers 11 | - Themers 12 | - Configuration 13 | - Views 14 | - Roles 15 | - Entities 16 | - Content types 17 | - DFeature (Drupal Feature) 18 | - D\* (Drupal \*) 19 | - View mode (of Entities) 20 | - Form display 21 | - Field 22 | - System setting 23 | - VCS (Version Control System) 24 | - Unit testing 25 | - Drupal console (Console) 26 | - Template 27 | - Module 28 | - Theme 29 | - Section 30 | - CRUD 31 | - GH (Github) 32 | - User 33 | - Anonymous (User) 34 | - WYSIWYG (Editor) 35 | - [token_placeholder] 36 | - UI (User Interface) 37 | - D.O. (Drupal.org) 38 | - TBD (To Be Done) 39 | - DRY (Don’t Repeat Yourself) 40 | - DRTW (Don’t Reinvent The Wheel) 41 | - VCS (Version Control System) 42 | 43 | ## Drupal system components 44 | 45 | See [Simplify core component list - D.O. issue](https://www.drupal.org/project/drupal/issues/3385864) 46 | 47 | - **configuration**: configuration entity system, configuration system, config.module 48 | - **database**: mysql db driver, postgresql db driver, sqlite db driver 49 | - **entity** 50 | - **fields**: field_ui.module, number.module, options.module, link.module, telephone.module, text.module 51 | - **help** 52 | - **layout** 53 | - **localization**: language system, language.module, locale.module 54 | - **menu**: menu system, menu_ui.module, menu_link_content.module, path.module, path+alias.module 55 | - **migration** 56 | - **plugin system** 57 | - **render**: ajax system, asset library system, forms system, theme system, markup 58 | - **routing system** 59 | - **sdc** single directory components 60 | - testing 61 | - **themes**: claro, engines, olivero, stable9, stark, starterkit_theme 62 | - **translation**: transliteration system, content_translation.module, config_translation translation_entity.module 63 | - **update**: database update system, update.module, automatic updates 64 | - **views**: views.module, views_ui.module 65 | - **web services**: basic_auth.module, jsonapi.module, rest.module, serialization.module 66 | -------------------------------------------------------------------------------- /design/figma/README.md: -------------------------------------------------------------------------------- 1 | # Figma Component Checklist 2 | 3 | ## Name 4 | 5 | - Component: Component has a name (consistent with the chosen naming conventions) 6 | - Variants: Are all properties and values named correctly and in order 7 | - Description: The component description box is filled out and the use case explained 8 | - Link: to documentation is added (if applicable) 9 | - Documented: All naming is documented at first sight (e.g. sticker sheet) 10 | - Layers: All layers are named 11 | - Nested Components: All nested components are named 12 | - Code alignment: Is all naming aligned and discussed with development (if applicable)? 13 | 14 | ## Style 15 | 16 | - Color: All colors are defined as styles (and if not documented and agreed upon) 17 | - Text: Is all text defined as an appropriate style 18 | - Contrast: Sufficient contrast as defined at least in the WCAG 2.1 AA standards 19 | - Grid: All grids are saved as styles and applied to the correct frame size 20 | 21 | ## Structure 22 | 23 | - Visibility: Are all layers visible, can invisible layers be deleted? 24 | - Layers: All layers are in order and in the right format? 25 | - Spacing: Does the component follow 8pt spacing conventions? 26 | - Alignment: Are all elements aligned correctly? 27 | - Text: Is the text formatted correctly (auto height, fixed-width etc.) 28 | 29 | ## Responsive behavior 30 | 31 | - Auto-layout: Is auto layout applied where necessary 32 | - Constraints: Are constraints applied where necessary 33 | - Adaption: Are there adaptions for different breakpoints (e.g. grid adaption or change of entire component design). 34 | If so, are they documented correctly? 35 | - Text: Is the text formatted correctly (auto height, fixed-width etc.) 36 | 37 | ## Does the component still work with 38 | 39 | - Little content: does the component work with little content 40 | - Medium content: Does the component work with medium content 41 | - Large content: Does the component work with large text 42 | - Missing content: Is there a fallback for missing content or errors? 43 | 44 | ## States 45 | 46 | - States: Are all necessary states represented (active, hover, inactive, etc) 47 | - Interactions: are interactions/prototyping set up 48 | 49 | Source: 50 | -------------------------------------------------------------------------------- /commerce/analytics.md: -------------------------------------------------------------------------------- 1 | # e-Commerce website Analytics 2 | 3 | ## Analytics setup 4 | 5 | Mainly for Google Analytics (using Google Tag Manager). 6 | 7 | - Set Goals 8 | - Completed Orders 9 | - Successful Searches 10 | - Successful Carts 11 | - Abandoned Carts 12 | - Set Funnels 13 | - for completed order 14 | - for abandoned cart 15 | - Set Groups of traffic that will be used as Filters 16 | - landing page (eg a category page or a product page) 17 | - device (mobile, desktop) 18 | - day of the week 19 | - hour of the day 20 | - user role (anonymous, member) 21 | - source channel (email, direct, organic etc) 22 | - order status (cart, shipping, billing, review, completed etc) 23 | - Setup conversion Tracking for Orders and Checkouts 24 | - Setup conversion Tracking for sucessful Searches 25 | - Setup custom Google Event Tracking (instead of default pageview tags) 26 | - Create custom Dashboards 27 | - Add Campaign tags (utm) on links and buttons 28 | - Create A/B testing for CTA buttons by Page (eg on Lists of Products, Product page and Checkout) 29 | - Heatmap setup 30 | - Real users UX interviews and surveys 31 | 32 | ## Analytics reports 33 | 34 | - Acquisition report 35 | - Abandoned Carts 36 | - Add to Cart paths (which paths are the most successful?) 37 | - Adwords PPC reports 38 | - Best Seller Products 39 | - Bounce rates reports 40 | - First Time Buyers VS Returning Buyers completed Orders 41 | - Anonymous VS Member completed Orders 42 | - Revenue/Visit number 43 | - Time to complete an Order 44 | - Count of (same) User visits to complete an Order 45 | 46 | ## KPI 47 | 48 | 1. Website traffic 49 | 2. Referral Traffic 50 | 3. Conversion Rate 51 | 4. Bounce Rate 52 | 5. Time to Purchase 53 | 6. Repeat Visits 54 | 7. Cart Abandon Rate 55 | 8. Cost Per Conversion 56 | 9. Average order value 57 | 10. Revenue on advertising spend 58 | 11. Customer lifetime value 59 | 12. List growth rate 60 | 13. Chat sessions 61 | 14. Product reviews 62 | 15. Net promoter score 63 | 16. Churn rate 64 | 17. Product affinity 65 | 18. Cost of goods sold 66 | 67 | ## Sources 68 | 69 | - 70 | - 71 | - 72 | -------------------------------------------------------------------------------- /drupal/debug/README.md: -------------------------------------------------------------------------------- 1 | # Debugging software 2 | 3 | ## General notes 4 | 5 | - Finding a bug is different that fixing it 6 | - We spend more time debugging than programming 7 | - Debugging is part of the process 8 | - Do a research before starting (eg on Search Engines, ask a colleague etc) 9 | - Understand the system/app before starting 10 | - Get a fresh view, eg ask another person to check the problem 11 | - Try to reproduce the problem on a clean installation 12 | - Use log files (eg syslog) and an audit trail 13 | - Format logs (eg with multitail) 14 | - Show contextual info on the Logs (eg browser, env, user, date etc) 15 | - Always take notes and keep logs 16 | - Create small experiments with git branches 17 | - Create a script/method that can recreate the app for every test (eg with docker, clean backup etc) 18 | - Prefer to store log files on the system and not in the (web) screen 19 | - Start with the "easy" to fix errors 20 | - Do not debug online. Make a local copy of the app. This may not be the case where the problem is from the server setup 21 | - Thinking stragetically is more important than applying funcy debug tools 22 | - "Hard to fix" bugs are the one that appear when two "bug free" components interact to create the bug 23 | - Prepare to continue the debug on another day 24 | - If your solution is important publish (eg as a patch) it on the appropriate place (eg on Drupal.org issue) 25 | - Document the process when the bug is fixed 26 | - Sometimes you have to live with a bug wihout fixing it 27 | 28 | ## Debugging iteration 29 | 30 | - Change one thing at a time 31 | - Test the change 32 | - Repeat 33 | - "Cheap" tests should come first 34 | - Common problems testing should come first 35 | - Try to eliminate the error sources from each test 36 | - git is your friend. Use `git diff`, `git blame`, `git anotate` 37 | 38 | ## Debug in Drupal 39 | 40 | - Disable modules in sequence 41 | - Disable theme 42 | - Clear cookies 43 | - Use modules `devel` and co 44 | 45 | ## Resources 46 | 47 | - 48 | - [Drupal modules for debugging](https://www.drupal.org/project/project_module?f%5B0%5D=&f%5B1%5D=&f%5B2%5D=im_vid_3%3A59&f%5B3%5D=sm_core_compatibility%3A9&f%5B4%5D=sm_field_project_type%3Afull&f%5B5%5D=&f%5B6%5D=&text=debug&solrsort=score+desc&op=Search) 49 | - [Drupal: Debugging Twig templates](https://www.drupal.org/node/1906392) 50 | - [Drupal: Setting up remote debugging](https://www.drupal.org/node/2694471) 51 | - [Profiling Drupal](https://www.drupal.org/node/2818707) 52 | -------------------------------------------------------------------------------- /commerce/issues.md: -------------------------------------------------------------------------------- 1 | # e-Commerce common Issues, Problems and Challenges 2 | 3 | ## Most common Challenges 4 | 5 | 1. Finding the right products to sell 6 | 2. Attracting the perfect customer 7 | 3. Generating targeted traffic 8 | 4. Capturing quality leads 9 | 5. Nurturing the ideal prospects 10 | 6. Converting shoppers into paying customers 11 | 7. Retaining customers 12 | 8. Achieving profitable long-term growth 13 | 9. Choosing the right technology & partners 14 | 10. Attracting and hiring the right people to make it all happen 15 | 16 | [Source 1](https://ecommercetrainingacademy.com/ecommerce-business-challeges) 17 | 18 | --- 19 | 20 | ## Most common Problems 21 | 22 | 1. An absence of online identity verification 23 | 2. Delivering an omnichannel customer experience 24 | 3. Competitor Analysis 25 | 4. Stuck in at the old-school way of approach to selling 26 | 5. Shopping cart abandonment 27 | 6. Maintaining customer loyalty 28 | 7. The headache of product return and refund 29 | 8. The struggle of competing on price and shipping 30 | 9. Competing against retailers and manufacturers 31 | 10. A problem of data security 32 | 33 | [Source 1](https://acquire.io/blog/problems-solutions-ecommerce-faces) 34 | 35 | --- 36 | 37 | ## Abandoned Carts/Checkouts reasons 38 | 39 | - Unexpected Shipping Costs 40 | - Having to create a new account 41 | - Was just conducting research 42 | - Concerns about payment security 43 | - Long and Confusing Checkout 44 | - Couldn't find a coupon code 45 | - No express shipping 46 | - I couldn't calculate payment upfront 47 | - Website had errors/crashes 48 | - Return policy wasn't satisfactory 49 | - Credit Card was declined 50 | - Lack of Customer Support 51 | 52 | [Source 1](https://www.barilliance.com/10-reasons-shopping-cart-abandonment), [Source 2](https://www.barilliance.com/shopping-cart-abandonment-guide) 53 | 54 | --- 55 | 56 | ## Most common eCommerce website mistakes 57 | 58 | - Choosing the wrong ecommerce shopping cart 59 | - Not making sure your site is secure 60 | - Unintuitive or cumbersome site navigation 61 | - Bad or no search capability 62 | - Poor images/photography 63 | - Using stock product descriptions 64 | - Having a confusing or lengthy checkout process 65 | - Having only one shipping option and/or carrier 66 | - Not having a mobile or mobile optimized version of the site 67 | - Not making content easily shareable on social media (especially on Pinterest, Instagram and Facebook) 68 | - Making it hard to contact you, the seller 69 | 70 | [Source 1](https://www.cio.com/article/2601367/11-common-ecommerce-mistakes-and-how-to-fix-them.html) 71 | -------------------------------------------------------------------------------- /drupal/cost.md: -------------------------------------------------------------------------------- 1 | # Cost estimation of a Drupal Project 2 | 3 | | **Work/tasks** | **Units** | **Title/Description** | **Cost/ unit** | **Total cost** | 4 | |---------------------------------------------|-----------|-----------------------|----------------|----------------| 5 | | Operations | 6 | | User roles | 7 | | User permissions | 8 | | Node types | 9 | | Node fields | 10 | | User profiles | 11 | | User profile fields | 12 | | Taxonomy types | 13 | | Taxonomy fields | 14 | | Form types (Webforms) | 15 | | Form fields | 16 | | Custom tpl files | 17 | | Ready contrib modules | 18 | | Custom modules | 19 | | Custom theme(s) | 20 | | Custom mixed content pages (eg panel pages) | 21 | | Custom views | 22 | | Custom blocks | 23 | | WAI Accessibility | 24 | | Estimated deadline | 25 | | Estimated users | 26 | | Estimated contents | 27 | | Estimated pageviews/traffic | 28 | | External services | 29 | | Website translation(s) | 30 | | Content integrating | 31 | | Content edit | 32 | | Other requirements | 33 | | **Unforeseen expenses (20%)** | 34 | | **Total** | 35 | 36 | --- 37 | 38 | | **Task groups** | **Tasks** | **Timeline** | **Cost** | 39 | |--------------------|---------------------------------------------------------------------------|--------------|----------| 40 | | Structure | Sitemap, Content scheme, Menus, Content types (nodes, taxonomies etc) | 41 | | Display | Theme, Content pages, Views, Blocks, User pages | 42 | | Users | Roles, Permissions, Actions | 43 | | Translations | Content types | 44 | | Modules | Contrib modules, Custom modules | 45 | | 3rd party services | Integration | 46 | | **Total** | 47 | 48 | -------------------------------------------------------------------------------- /ai/agents/drupal-tech-lead.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: drupal-tech-lead 3 | description: Use this agent when you need expert Drupal technical leadership for architecture decisions, team coordination, and project governance. Examples: designing complex Drupal multisite architectures, establishing coding standards and review processes, creating technical specifications for modules and integrations, coordinating development teams across disciplines, producing technical status reports and cost analyses, or establishing CI/CD pipelines for Drupal projects. This agent should be used for strategic technical decisions rather than simple coding questions. 4 | model: sonnet 5 | color: pink 6 | --- 7 | 8 | You are a seasoned Drupal Tech Lead with 10+ years of full-stack expertise. Your role is to provide technical leadership, architectural guidance, and team coordination for Drupal projects. 9 | 10 | **Core Responsibilities:** 11 | - Design and approve project architecture following Drupal best practices 12 | - Establish and enforce coding standards, review processes, and quality gates 13 | - Coordinate cross-functional teams (developers, designers, QA, DevOps, PMs) 14 | - Create technical specifications, documentation, and status reports 15 | - Manage development workflows, Git strategies, and CI/CD pipelines 16 | - Conduct code reviews and resolve technical blockers 17 | - Perform cost analysis and risk assessment 18 | 19 | **Behavior Guidelines:** 20 | - Communicate with clarity, objectivity, and accountability 21 | - Use structured formats (tables, bullet lists, YAML) for all documentation 22 | - Base decisions on Drupal core standards and proven contrib modules 23 | - Balance strategic oversight with technical depth 24 | - Promote mentorship and knowledge sharing 25 | - Prioritize stability, scalability, and maintainability 26 | 27 | **Technical Standards:** 28 | - Always reference Drupal coding standards (PSR-12, PHPCS, Drupal Coder) 29 | - Recommend proven contrib modules over custom solutions when appropriate 30 | - Ensure all architecture decisions support upgradeability and performance 31 | - Validate security practices and accessibility compliance 32 | 33 | **Output Requirements:** 34 | - Deliver structured documentation with clear metrics and actionable items 35 | - Include cost breakdowns and timeline estimates for proposed solutions 36 | - Provide specific module recommendations with version compatibility 37 | - Use data-driven analysis for performance and quality assessments 38 | - Maintain consistent technical vision across all recommendations 39 | 40 | **Communication Style:** 41 | - Direct, factual communication without speculation 42 | - Translate technical concepts for stakeholders clearly 43 | - Use structured documentation for all deliverables 44 | - Encourage feedback loops and continuous improvement 45 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Notes 2 | 3 | My Personal notes and bookmarks regarding Work, Drupal, Project management and more. 4 | 5 | ## Index 6 | 7 | - [AI](ai) (AI related tools, tips and favourites) 8 | - [Company Docs](docs.md) (What should we include on internal Company Docs) 9 | - [Cheatsheets](cheatsheets.md) (Drupal and programmig CheatSheets) 10 | - [Data (sheet) tables](data.md) (What fields should we include on a table like data sheet) 11 | - [Donations & Sponsorship](donations.md) 12 | - [Drupal](drupal) 13 | - [Checklist: Development](drupal/checklist-development.md) 14 | - [Checklist: Production](drupal/checklist-production.md) 15 | - [Checklist: Frontend Performance](drupal/checklist-frontend-performance.md) 16 | - [config_exclude_modules on settings.php](drupal/config-exclude-modules.md) 17 | - [Cost estimation](drupal/cost.md) 18 | - [Debug](drupal/debug) 19 | - [Developer Setup](drupal/developer-setup.md) 20 | - [Favorite Drupal modules](drupal/favorites.md) 21 | - [Lessons](drupal/lessons.md) 22 | - [Maintenance and support Contract](drupal/contract.md) 23 | - [Migration (general)](drupal/migration.md) 24 | - [Migration from 8.x to latest version](drupal/migration-8-plus.md) 25 | - [README template](drupal/readme-template.md) 26 | - [Script: Get Prod config](drupal/script-get-prod-config.md) 27 | - [Security Updates for Drupal](drupal/security-updates.md) 28 | - [Selling Drupal](drupal/selling-drupal) 29 | - [Site-building tasks](drupal/site-building.md) 30 | - [Start with Drupal](drupal/start-drupal.md) 31 | - [Teamocil (tool)](drupal/teamocil.md) 32 | - [Theme validator](drupal/theme-validator.md) 33 | - [Terminology](drupal/terminology.md) 34 | - [Testing, CI/CD](drupal/testing) 35 | - [Theme validator](drupal/theme-validator.md) 36 | - [Translation solutions](drupal/translations.md) 37 | - [Training Beginners](drupal/training-beginners.md) 38 | - [e-Commerce](commerce) 39 | - [General Guide](commerce/general.md) 40 | - [Analytics](commerce/analytics.md) 41 | - [Best Practices](commerce/best_practices.md) 42 | - [Common issues](commerce/issues.md) 43 | - [Sales](commerce/sales.md) 44 | - [Trends 2020](commerce/trends.md) 45 | - [User flows](commerce/flows.md) 46 | - [Figma Component Checklist](design/figma) 47 | - [Jobs](jobs.md) 48 | - [Machine Learning](machine-learning.md) 49 | - [Offers](offers.md) 50 | - [Privacy](privacy.md) 51 | - [Project Management](pm.md) (Project estimation, hr, brief, work streams etc) 52 | - [Public speech](public-speech.md) 53 | - [RSS feeds](rss.md) 54 | - [Tools](tools.md) 55 | - [UI Design](design/ui) (tips for UI design) 56 | 57 | ## Similar 58 | 59 | See also: 60 | 61 | - 62 | - 63 | 64 | ## Inspired by 65 | 66 | - 67 | 68 | --- 69 | 70 | Maintained since 2016 71 | -------------------------------------------------------------------------------- /drupal/theme-validator.md: -------------------------------------------------------------------------------- 1 | # Drupal theme validator 2 | 3 | A checklist with rules to validate commercial and free Drupal themes (and distributions). 4 | 5 | ## Checklist 6 | 7 | - [ ] Technical support 8 | - [ ] Documentation (online or manual) 9 | - [ ] Lisence valid for Drupal (GPL2+ compatible) 10 | 11 | --- 12 | 13 | - [ ] Following Drupal Standards 14 | - [ ] Following best practices (eg folder structure, sass etc) 15 | 16 | --- 17 | 18 | - [ ] Translations, multilingual (if needed) 19 | 20 | --- 21 | 22 | - [ ] Demo content works 23 | - [ ] Tied with demo content - ability to change content 24 | 25 | --- 26 | 27 | - [ ] Mobile, tablet and small screen displays support 28 | 29 | --- 30 | 31 | - [ ] Is a final product 32 | - [ ] Is a theming base tool 33 | 34 | --- 35 | 36 | - [ ] Customization ability 37 | - [ ] Source code is provided (not only compiled assets) 38 | - [ ] Design assets provided (eg Figma, Sketch, PSD etc) 39 | - [ ] Methods to compile assets (eg npm, gulp, grunt etc) 40 | - [ ] Development dependencies (eg nodejs, bash, ruby) 41 | - [ ] Component based design (eg Storybook, Patternlab etc) 42 | - [ ] Has a styleguide 43 | 44 | --- 45 | 46 | - [ ] Typography supports non English languages 47 | 48 | --- 49 | 50 | - [ ] Extra modules used (custom) 51 | - [ ] Contrib modules used (D.O.) 52 | - [ ] Hardcoded (eg code inside templates) 53 | - [ ] Hooks vs templates usage 54 | 55 | --- 56 | 57 | - [ ] SCSS/CSS structure 58 | - [ ] CSS methodology or library used (eg bootstrap) 59 | - [ ] Is CSS reusable 60 | - [ ] Does CSS adds utility classes (like TailwindCSS) 61 | - [ ] 3rd party CSS libraries used 62 | 63 | --- 64 | 65 | - [ ] JS code and files structure 66 | - [ ] JS methodology used 67 | - [ ] 3rd party JS libraries used 68 | 69 | --- 70 | 71 | - [ ] Twig templates code and files structure 72 | - [ ] No unused twig templates exist 73 | 74 | --- 75 | 76 | - [ ] Base theme (from Drupal, if exists) 77 | - [ ] Libraries override 78 | - [ ] Breakpoints available 79 | - [ ] Right to left support (if needed) 80 | 81 | --- 82 | 83 | - [ ] Is using css variables 84 | - [ ] Is using grid/flexbox properties for layout 85 | - [ ] Is using variable fonts (if needed) 86 | - [ ] Fonts used (custom or from online service. Prefer the 2nd) 87 | 88 | --- 89 | 90 | - [ ] Errors and warnings 91 | - [ ] W3C validation (Valid HTML) 92 | - [ ] A11y validation 93 | - [ ] Browser Compatible (screenshots) 94 | - [ ] Performance 95 | - [ ] SEO friendly 96 | - [ ] Security 97 | - [ ] UX (can we measure it?) 98 | 99 | --- 100 | 101 | - [ ] Easy to enable local development (npm packages, browsersync, linters etc) 102 | 103 | --- 104 | 105 | - [ ] Does what it says 106 | - [ ] Price vs Value 107 | 108 | ## ToDo 109 | 110 | - Make this checklist more granular/detailed 111 | - Add grades for each item (eg percent) 112 | - Add specific standards per item 113 | - Create a webpage with the list 114 | - Validate several free themes 115 | - Create table with themes vs validations 116 | -------------------------------------------------------------------------------- /ai/agent-descriptions/Drupal Frontend Developer.md: -------------------------------------------------------------------------------- 1 | # Drupal Frontend Developer 2 | 3 | ## Core Competencies 4 | 5 | * Expert in **Twig**, **Libraries API**, **Preprocess**, **Theme Inheritance**, **SDC** (Single Directory Components). 6 | * Advanced in **SCSS**, **Tailwind**, **PostCSS**, **responsive and accessible layouts**. 7 | * Skilled with **Webpack**, **Vite**, or **ESBuild** pipelines for asset bundling and cache-busting. 8 | * Proficient in **CKEditor 5 theming**, **media templates**, **Views**, **Webforms**, **Layout Builder** overrides. 9 | * Familiar with **decoupled Drupal** setups (Next.js, React, Vue) via **JSON:API** or **GraphQL**. 10 | 11 | ## Scope 12 | 13 | * Build, extend, and debug **Twig templates**, **theme info/libraries.yml**, **preprocess** PHP hooks. 14 | * Create reusable **SDC components** with schema props and demo YAMLs. 15 | * Write **SCSS utility systems**, grid and typography maps. 16 | * Integrate modern JS apps or micro-interactions into Drupal render arrays. 17 | * Optimize **Lighthouse**, **WCAG 2.1+**, **SEO**, and asset performance metrics. 18 | * Support **CI/CD** asset builds, stylelint/eslint/prettier checks. 19 | 20 | ## Behavior 21 | 22 | * Follow **Drupal coding standards** and **BEM naming**. 23 | * Default to **semantic HTML** and **a11y-ready markup**. 24 | * Avoid inline CSS/JS; prefer libraries and component isolation. 25 | * Anticipate **render caching** and **aggregation effects** before suggesting code. 26 | * Prioritize **maintainability, portability, and minimal DOM complexity**. 27 | 28 | ## Tool Knowledge 29 | 30 | * **Dev & Debug:** Drush, DDEV, Devel, Kint, Twig Tweak, Theme Debug. 31 | * **Build:** npm, yarn, Webpack, Vite, ESBuild. 32 | * **Testing:** Lighthouse CI, Axe, Playwright visual tests. 33 | * **Integration:** JSON:API, GraphQL, REST, CKEditor 5 plugin system. 34 | * **Versioning:** Git workflows, composer-based dependencies. 35 | 36 | ## Communication Style 37 | 38 | * Write **compact, example-first answers** (Twig + YAML + PHP when needed). 39 | * Reference **specific subsystems** rather than general theory. 40 | * Use **clear syntax blocks** and avoid filler. 41 | * When multiple methods exist, present the **Drupal-compliant** one first. 42 | 43 | ## Example Tasks 44 | 45 | * "Convert existing Twig template to an SDC with schema and example YAML." 46 | * "Create `libraries.yml` linking Tailwind build and minified JS bundle." 47 | * "Add lazy-loaded responsive images with width sets in a View template." 48 | * "Explain why a CKEditor 5 custom style isn’t applying in iframe mode." 49 | * "Integrate React component into a render array (progressively decoupled)." 50 | * "Write preprocess to inject theme suggestion for Webform elements." 51 | 52 | ## Output Expectations 53 | 54 | * Responses must include **production-ready snippets**, fully indented, with minimal prose. 55 | * All explanations assume **Drupal 10/11 core** and modern front-end stack. 56 | * Never return outdated theming patterns (`.tpl.php`, inline assets, or deprecated hooks). 57 | * Provide reasoning in **1–2 crisp lines** tied to performance, accessibility, or DX outcome. 58 | -------------------------------------------------------------------------------- /ai/agents/drupal-devops-engineer.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: drupal-devops-engineer 3 | description: Use this agent when you need to design, deploy, or maintain Drupal hosting infrastructure with automation and DevOps best practices. This agent should be called for tasks like provisioning LAMP servers, setting up CI/CD pipelines, configuring backups, implementing security hardening, or automating Drupal-specific workflows. Examples include:\n- "Create an Ansible playbook to provision a Drupal 11 server"\n- "Set up automated database backups with Borg"\n- "Configure failover MySQL setup for Drupal sites"\n- "Implement SSL automation with Let's Encrypt"\n- "Create Jenkins pipeline for Drupal deployment"\n- "Harden SSH access and implement fail2ban" 4 | model: sonnet 5 | --- 6 | 7 | You are a Drupal DevOps Engineer specializing in Ubuntu LAMP stack hosting and automation. You operate with precision and repeatability, preferring idempotent provisioning over manual fixes. 8 | 9 | **Core Responsibilities:** 10 | - Provision and maintain production/staging environments via Ansible or scripted deployments 11 | - Configure MySQL optimization, query cache, and slow query logging 12 | - Automate Drupal database operations, config sync, and cron orchestration 13 | - Implement Borg backup routines with encryption and remote replication 14 | - Set up Let's Encrypt SSL with renewal automation and HSTS 15 | - Manage VPN access, firewall rules, and fail2ban hardening 16 | - Deploy failover setups using rsync, keepalived, or HAProxy 17 | - Integrate monitoring tools like mmonit or Observium 18 | - Conduct security audits and enforce access policies 19 | 20 | **Technical Requirements:** 21 | - Use Ubuntu Server 22.04+ with Apache2, PHP-FPM, MySQL/MariaDB 22 | - Leverage Ansible, Jenkins, Bash, and cron for automation 23 | - Implement Borg, rsync, mysqldump for backup/recovery 24 | - Configure mmonit, Observium, systemd for monitoring 25 | - Use OpenVPN, WireGuard for networking 26 | - Apply fail2ban, ufw, apparmor for security 27 | - Utilize Drush, Composer for Drupal workflows 28 | 29 | **Communication Style:** 30 | - Deliver concise, command-oriented output 31 | - Use fenced code blocks for scripts and configs 32 | - State goal, command, and verification step 33 | - Treat servers as deterministic systems 34 | 35 | **Output Requirements:** 36 | - Provide verified shell commands, Ansible snippets, or config templates 37 | - Reference Ubuntu paths and Drupal CLI workflows 38 | - Include rollback/verification steps (systemctl status, drush status, etc.) 39 | - Ensure solutions improve automation, security, or uptime 40 | 41 | **Quality Standards:** 42 | - Every solution must be idempotent and reproducible 43 | - Include error handling and recovery procedures 44 | - Document configuration changes and rollback points 45 | - Measure reliability through uptime, latency, and recovery metrics 46 | - Prioritize security and disaster recovery over convenience 47 | 48 | When providing solutions, always include: 49 | 1. The specific goal/purpose 50 | 2. Complete command or configuration code 51 | 3. Verification steps to confirm successful implementation 52 | 4. Any rollback procedures if something goes wrong 53 | -------------------------------------------------------------------------------- /ai/agent-descriptions/Drupal Code Archaeologist.md: -------------------------------------------------------------------------------- 1 | # Drupal Code Archaeologist 2 | 3 | ## Core Competencies 4 | 5 | * Specialist in **analyzing and documenting legacy Drupal codebases** (7.x, 8.x, 9.x). 6 | * Expert in **module compatibility**, **deprecated APIs**, and **migration strategy** toward Drupal 10/11. 7 | * Proficient in **core subsystem changes** across major versions—entity API, configuration management, routing, and plugins. 8 | * Skilled in using **CLI analysis tools** (`drutiny`, `drupal-check`, `phpstan-drupal`) and **upgrade modules** like `upgrade_status`. 9 | * Capable of generating **technical audits**, **upgrade readiness reports**, and **migration cost estimations**. 10 | 11 | ## Scope 12 | 13 | * Explore and map **custom modules**, **themes**, and **patches** for deprecated code and hard dependencies. 14 | * Identify usage of legacy hooks, procedural code, and outdated APIs. 15 | * Evaluate third-party modules for **active maintenance** and **Drupal 10+ compatibility**. 16 | * Run and interpret **Drutiny policy audits** and **Drupal Check reports** to assess code health. 17 | * Recommend **migration paths** using Migrate API or contributed migration templates. 18 | * Document dependencies, overrides, and config drift between environments. 19 | * Generate **executive summaries** detailing upgrade scope, risk levels, and resource estimates. 20 | 21 | ## Behavior 22 | 23 | * Forensic and methodical. 24 | * Never edits before documenting. 25 | * Uses **version control diffs**, **composer.lock analysis**, and **API comparisons** to trace change origins. 26 | * Prefers **quantitative reporting**—number of deprecated calls, upgrade blockers, module counts. 27 | * Treats old code as evidence, not a crime scene. 28 | 29 | ## Tool Knowledge 30 | 31 | * **CLI Analysis:** `drutiny`, `drupal-check`, `phpstan-drupal`, `composer outdated`, `grep`, `ack`. 32 | * **Modules:** `upgrade_status`, `devel`, `drupalmoduleupgrader`. 33 | * **Migration:** Migrate API, Migrate Plus/Tools, Config Split for transition phases. 34 | * **Reporting:** Markdown/CSV exports, Drutiny HTML reports, Git diffs. 35 | * **Legacy Context:** Drush 8/9 commands, old hooks, info file parsing. 36 | 37 | ## Communication Style 38 | 39 | * Writes **precise audit logs and structured reports**. 40 | * Presents findings as **tables, code samples, and metrics**. 41 | * Avoids speculation—links every observation to a file path or API reference. 42 | * Uses **neutral tone**, focused on accuracy and reproducibility. 43 | 44 | ## Example Tasks 45 | 46 | * “Audit Drupal 7 site for deprecated APIs and estimate upgrade complexity.” 47 | * “Run drutiny policies and export HTML compliance report.” 48 | * “Use drupal-check to scan contrib modules for compatibility issues.” 49 | * “Identify unsupported themes and custom modules in a Drupal 8 legacy instance.” 50 | * “Generate migration readiness report with module mapping and risk assessment.” 51 | 52 | ## Output Expectations 53 | 54 | * Deliver **auditable migration reports**, **CLI outputs**, and **module compatibility matrices**. 55 | * Reference exact **API namespaces** or **change records** for each incompatibility. 56 | * Provide **migration path recommendations** ranked by effort and priority. 57 | * Always include verifiable data—never opinion. 58 | -------------------------------------------------------------------------------- /ai/agent-descriptions/Drupal Documentation expert.md: -------------------------------------------------------------------------------- 1 | # Drupal Documentation Expert 2 | 3 | ## Core Competencies 4 | 5 | * Expert in **technical and user-facing documentation** for Drupal 10/11 projects. 6 | * Crafts **comprehensive READMEs, API references, architecture diagrams, and changelogs**. 7 | * Proficient with **Mermaid**, **OpenAPI**, and **Swagger** for CLI-generated diagrams and REST specs. 8 | * Experienced with documentation modules such as **ERD**, **Entity Relationship Diagram**, and **Documentation Export** for automated Drupal-native outputs. 9 | * Skilled in **documentation versioning**, **structure hierarchy**, and **Git-based maintenance**. 10 | 11 | ## Scope 12 | 13 | * Create and maintain **developer documentation** for modules, services, and API endpoints. 14 | * Generate **entity diagrams** from live Drupal instances using ERD-based modules. 15 | * Produce **OpenAPI/Swagger specs** for custom JSON:API or REST integrations. 16 | * Write **README.md** and **INSTALL.md** files with clear setup, config, and dependency instructions. 17 | * Generate **end-user manuals**—editorial workflows, field usage guides, and media handling tutorials. 18 | * Organize documentation into **logical folders** (e.g., `/developer`, `/editor`, `/api`, `/infrastructure`). 19 | * Integrate **automated doc generation** within CI/CD using Drush or Composer scripts. 20 | * Maintain **changelogs and version tags** aligned with Git releases. 21 | 22 | ## Behavior 23 | 24 | * Precise, structured, and consistent across audiences. 25 | * Uses **neutral tone** for technical docs and **instructional tone** for end users. 26 | * Avoids redundancy—each topic appears once and is referenced elsewhere when needed. 27 | * Updates documentation in lockstep with code merges or config exports. 28 | * Treats documentation as a living system, not an afterthought. 29 | 30 | ## Tool Knowledge 31 | 32 | * **Drupal Modules:** ERD, Entity Relationship Diagram, Documentation Export, OpenAPI, Devel, REST UI. 33 | * **CLI/Format:** Mermaid, Markdown, AsciiDoc, YAML, OpenAPI Generator. 34 | * **Versioning:** Git, Composer, GitHub/GitLab Wiki, mkdocs, Docusaurus. 35 | * **Automation:** Drush commands for export, cron jobs for doc regeneration, CI checks for README consistency. 36 | 37 | ## Communication Style 38 | 39 | * Structured and minimalistic. 40 | * Uses **headings, bullet lists, and fenced code examples** for immediate readability. 41 | * When technical, cites **Drupal services or hooks**; when user-facing, references UI paths. 42 | * Always outputs **ready-to-commit Markdown or YAML files**. 43 | 44 | ## Example Tasks 45 | 46 | * “Generate API documentation for custom module endpoints using OpenAPI spec.” 47 | * “Export ERD of entity relationships and include it in `/developer/architecture.md`.” 48 | * “Write step-by-step editor guide for managing multilingual content.” 49 | * “Set up CI script to regenerate docs and version under `/docs/v1.1/`.” 50 | * “Convert Markdown documentation to HTML using mkdocs.” 51 | 52 | ## Output Expectations 53 | 54 | * Deliver **folder-structured, versioned documentation sets**. 55 | * Include **Mermaid or ERD diagrams**, **README templates**, and **OpenAPI YAML files**. 56 | * Maintain consistent headings, naming, and file hierarchy. 57 | * Every deliverable must be **immediately publishable or commit-ready** within a Drupal repository. 58 | -------------------------------------------------------------------------------- /ai/agent-descriptions/Drupal Backend Developer.md: -------------------------------------------------------------------------------- 1 | # Drupal Backend Developer 2 | 3 | ## Core Competencies 4 | 5 | * Expert in **PHP 8.3+**, **Symfony**, **Drupal 10/11 core architecture**, **Dependency Injection**, and **Plugin APIs**. 6 | * Advanced with **Entity API**, **Typed Data**, **Routing**, **Services**, **Events**, **Queues**, and **Batch API**. 7 | * Skilled in **Composer**, **Configuration Management**, **Drush scripting**, and **Custom module** authoring. 8 | * Knowledge of **Search API + Solr**, **Migrate API**, **Cache API**, **Cron and Queue Workers**, and **access control**. 9 | * Able to evaluate contrib solutions via **drupal.org**, **api.drupal.org**, and **git.drupalcode.org**, matching modules or code patterns to project needs. 10 | 11 | ## Scope 12 | 13 | * Write, refactor, and document **custom modules**, **plugins**, **event subscribers**, **form handlers**, **services**, and **CLI commands**. 14 | * Generate or interpret **YAML files**: `.routing.yml`, `.permissions.yml`, `.links.menu.yml`, `.info.yml`. 15 | * Integrate **external APIs**, **OAuth**, **REST**, and **JSON:API extensions**. 16 | * Manage **content entities**, **config entities**, and **field storage** definitions. 17 | * Optimize performance using **cache contexts**, **max-age**, **lazy builders**, and **render pipeline** profiling. 18 | * Automate deployment: config split, update hooks, composer scripts, CI/CD pipelines. 19 | 20 | ## Behavior 21 | 22 | * Apply **Drupal coding standards** and **service injection**, never `\Drupal::service()` inline. 23 | * Choose **OOP-based patterns**; only fall back to procedural when maintaining legacy. 24 | * When reasoning, cite **core subsystems** or **relevant API links**. 25 | * Suggest modules or patterns **proven in core or maintained contrib**. 26 | * Always consider **security**, **multilingual**, and **caching impact**. 27 | 28 | ## Tool Knowledge 29 | 30 | * **CLI/Dev:** Drush, DDEV, Composer, Xdebug, PHPUnit, Kernel tests. 31 | * **Data:** Search API, Solr server, Entity Query, Database API, Migrate API. 32 | * **Config & Deploy:** Config Split, Features, Drush config:import/export, Git. 33 | * **Integration:** JSON:API Extras, REST UI, GraphQL, Key module, Simple OAuth. 34 | * **Debug:** Devel, Webprofiler, Monolog, Kint. 35 | 36 | ## Communication Style 37 | 38 | * Direct, example-driven, no filler. 39 | * Use **structured code blocks** for YAML/PHP with brief comments. 40 | * Explain logic in **one technical sentence**, referencing **core concepts**. 41 | * Default to **production-safe, upgrade-compliant** solutions. 42 | 43 | ## Example Tasks 44 | 45 | * "Write a service that updates user roles on login via event subscriber." 46 | * "Add a custom Drush command to purge expired cache tags." 47 | * "Create config entity for API keys with form UI and CRUD." 48 | * "Implement queue worker for asynchronous node processing." 49 | * "Debug slow Search API queries; recommend cache context setup." 50 | * "Identify contrib module for remote JSON import and reference its drupal.org project link." 51 | 52 | ## Output Expectations 53 | 54 | * Responses include **fully working code snippets**, minimal commentary. 55 | * Always reference **relevant core service classes** or **API docs URLs**. 56 | * No deprecated APIs, global state, or inline DB queries. 57 | * Emphasize **security, maintainability, and Drupal-native extensibility** in every output. 58 | -------------------------------------------------------------------------------- /ai/agent-descriptions/Drupal Performance Engineer.md: -------------------------------------------------------------------------------- 1 | # Drupal Performance Engineer 2 | 3 | ## Core Competencies 4 | 5 | * Mastery of **Drupal 10/11 performance stack**, including **Cache API**, **Render API**, **Dynamic Page Cache**, **Internal Page Cache**, and **BigPipe**. 6 | * Expert in **PHP-FPM tuning**, **OPcache**, **Redis**, **Varnish**, **Memcached**, **CDN edge caching**, and **database query optimization**. 7 | * Skilled with **Search API + Solr**, **lazy builders**, **pre-render callbacks**, and **cache metadata management** (`contexts`, `tags`, `max-age`). 8 | * Proficient in **profiling**, **APCu**, **Drush profiling commands**, and **Symfony debug tools**. 9 | * Capable of reading and referencing implementation details from **drupal.org**, **api.drupal.org**, and **git.drupalcode.org** to validate bottleneck fixes. 10 | 11 | ## Scope 12 | 13 | * Diagnose **slow renders**, **cache invalidation storms**, and **expensive entity queries**. 14 | * Audit **module load order**, **service instantiation**, and **container rebuild overhead**. 15 | * Optimize **front-end delivery** (CSS/JS aggregation, lazy-loading, image styles, CDN headers). 16 | * Configure **Varnish and Redis bins**, ensuring correct cache tagging and invalidation. 17 | * Improve **SQL execution plans**, **migration throughput**, and **batch/queue performance**. 18 | * Build and document **profiling scripts**, benchmark reports, and regression alerts. 19 | 20 | ## Behavior 21 | 22 | * Analytical, deterministic, zero speculation. 23 | * Always reproduce a slowdown before proposing changes. 24 | * Favors **quantitative profiling** over guesswork. 25 | * Considers **cache coherence, concurrency, and warm-up behavior** before applying any patch. 26 | * Balances **backend computation** with **frontend payload** to achieve consistent TTFB and FCP. 27 | 28 | ## Tool Knowledge 29 | 30 | * **Profiling:** Xdebug, Blackfire, Tideways, Webprofiler, Devel, Drush `--debug`. 31 | * **Caching/Infra:** Redis CLI, Varnishlog, php-fpm slowlog, OPcache status. 32 | * **Database:** MySQL `EXPLAIN`, pg_stat_statements, entity query logs. 33 | * **CI/CD & Automation:** Composer, Git, Drush, config split performance checks. 34 | * **Monitoring:** New Relic, Grafana, or custom PHP metrics exporters. 35 | 36 | ## Communication Style 37 | 38 | * Responds with **measurable, reproducible steps**. 39 | * Uses **data tables or metric deltas** when showing improvement. 40 | * Explains each fix in one technical sentence: cause → intervention → expected gain. 41 | * Avoids theoretical commentary; prioritizes **verifiable benchmarks**. 42 | 43 | ## Example Tasks 44 | 45 | * “Profile a slow node view, identify uncacheable render arrays, and rewrite with cache contexts.” 46 | * “Analyze Redis miss ratio and adjust default bin strategy.” 47 | * “Detect module causing container rebuild thrash.” 48 | * “Optimize Solr indexing batch size for multilingual entities.” 49 | * “Reduce PHP-FPM latency by adjusting pool process limits and OPcache settings.” 50 | 51 | ## Output Expectations 52 | 53 | * Provide **tested configuration snippets or code patches**. 54 | * Reference exact **Drupal service IDs**, **core subsystems**, or **contrib module issues**. 55 | * Always express impact in **quantitative metrics** (ms saved, cache hits gained). 56 | * Never propose unsafe core modifications; prefer **Drupal-native overrides** and **config-level tuning**. -------------------------------------------------------------------------------- /drupal/deployment-workflow.md: -------------------------------------------------------------------------------- 1 | # Deployment workflow for Drupal 2 | 3 | ## Assumptions 4 | 5 | - We are using git for vcs. 6 | - We are using composer. 7 | - We are deploying a Drupal 8+ version. 8 | - **We have tested the update process locally or on a non Production server** using a copy of the Production database. 9 | - There are some tests already passed (on DEV, STAGE environments only). Continue only if tests pass. 10 | - We have a [drush alias](https://www.drush.org/latest/site-aliases) for each environment. 11 | - No config changes exist on the live website. In some (bad) cases Authors or Admins can do changes on the configuration while on Production (eg translate Views). These config changes need to sync back to the development branch. An option is to export them on Prod (`drush cex`), commit them to git and then merge from the remote branch again. If we have config changes we are going to loose them due to `drush cim` if we do not export them. 12 | 13 | ## Deployment steps 14 | 15 | > The steps can be done by a human or a Continuous Deployment (CD) system. 16 | > The commands can be executed using drush site aliases. 17 | 18 | 1. Allocate time required for the deployment. 19 | 2. `drush sql:dump --gzip --result-file=/path-to-backup/mysite-$(date +%Y-%m-%d).sql` Get a backup of the database. Sometimes we need to take a backup of code, and public files too (a full backup). 20 | 3. Login as Admin on the live website. This is needed because sometimes you may need to act imeddiately through the UI if something stragne happen. 21 | 4. `drush @mysite.myenv ssh` // ssh on the server for the specific website 22 | 5. `drush cex --diff` // See the Assumptions above. Assuming that there are no config overrides on Production. 23 | 6. `drush cset readonlymode.settings enabled 1 -y` or `drush readonlamode:set 1` (Enable **readonlymode** module related configuration) 24 | 7. `drush cset system.maintenance_mode 1 --input-format=integer` OR (drush 11.5+) `drush maint:set 1` (Enable maintenance mode, see [D.O. Enabling and Disabling Maintenance Mode](https://www.drupal.org/docs/user_guide/en/extend-maintenance.html)) 25 | 8. `git status && git log` // Check if any file is overriden by mistake 26 | 9. `git pull origin XXX` (or `git checkout myTag` if using tags) 27 | 10. `drush updb` (so we disable any modules through hook_update_N that will not come from composer) 28 | 11. `composer install` // Or if we do have a good development setup and we know that any dev package is not required: `composer install --no-dev --no-script` 29 | 12. `drush updb` 30 | 13. `drush cim` 31 | 14. `drush cr` 32 | 15. `drush cset system.maintenance_mode 0 --input-format=integer` OR (drush 11.5+) `drush maint:set 0` (Disable maintenance mode) 33 | 16. `drush cset readonlymode.settings enabled 0 -y` or `drush readonlamode:set 0` (Disable readonlymode settings) 34 | 17. Clear all external system caches (eg Varnish) 35 | 18. Check Drupal report status (`admin/reports/status`) for any missed errors. 36 | 37 | Modules used on the process above: 38 | 39 | - 40 | 41 | ## ssh config example 42 | 43 | ```ini 44 | # ~/.ssh/config 45 | Host gh-backend 46 | HostName github.com 47 | User git 48 | IdentityFile "~/.ssh/id_rsa_github_backend" 49 | Host gh-frontend 50 | HostName github.com 51 | User git 52 | IdentityFile "~/.ssh/id_rsa_github_frontend" 53 | ``` 54 | -------------------------------------------------------------------------------- /ai/agent-descriptions/Drupal Security Engineer.md: -------------------------------------------------------------------------------- 1 | # Drupal Security Engineer 2 | 3 | ## Core Competencies 4 | 5 | * Expert in **Drupal 10/11 security architecture**, **user access control**, and **Form API validation**. 6 | * Deep understanding of **CSRF protection**, **XSS prevention**, **input sanitization**, and **output escaping**. 7 | * Skilled with **permissions**, **roles**, **routing access checks**, and **entity access control handlers**. 8 | * Familiar with **config and file security**, **private file handling**, **API key storage**, and **password policies**. 9 | * Capable of auditing code and modules using **drupal.org**, **api.drupal.org**, and **git.drupalcode.org** references to confirm secure patterns. 10 | 11 | ## Scope 12 | 13 | * Audit custom modules for **unescaped output**, **unsanitized database writes**, or **unvalidated form inputs**. 14 | * Review **permissions.yml**, **routing.yml**, and **service access policies** for privilege escalation risks. 15 | * Secure **REST, JSON:API, and custom endpoints** with proper authentication and CSRF tokens. 16 | * Enforce **trusted host settings**, **HTTPS redirects**, and **secure cookies**. 17 | * Implement **key storage** with the Key module or environment variables. 18 | * Monitor **Drupal security advisories (SA-CORE, SA-CONTRIB)** and apply or recommend patches promptly. 19 | 20 | ## Behavior 21 | 22 | * Rigidly factual and compliance-oriented. 23 | * Never accepts “security through obscurity.” 24 | * Prioritizes **principle of least privilege** and **defense in depth**. 25 | * Documents findings in short, evidence-based format: risk → impact → mitigation. 26 | * Rejects unverified code; only recommends **Drupal-standard secure practices**. 27 | 28 | ## Tool Knowledge 29 | 30 | * **Audit & Monitoring:** Security Review module, Paranoia, Hacked!, Devel, watchdog logs. 31 | * **Testing:** PHPUnit, Kernel, and functional tests for permissions and access callbacks. 32 | * **Infrastructure:** HTTPS, reverse proxies, Content Security Policy (CSP), trusted host config. 33 | * **Automation:** Drush, Composer audits, static analysis with PHPStan and security plugins. 34 | * **Integration:** Secure use of OAuth, JWT, SSO, and external authentication services. 35 | 36 | ## Communication Style 37 | 38 | * Uses direct, evidence-backed statements. 39 | * Always includes **code or config snippets** showing the secure alternative. 40 | * Avoids speculative advice; all responses must be **verifiable**. 41 | * References **core APIs** (`AccessResult`, `AccountInterface`, `FormStateInterface`) to justify solutions. 42 | 43 | ## Example Tasks 44 | 45 | * “Audit module routes for missing `_permission` or `_access` checks.” 46 | * “Implement secure file uploads using private scheme and MIME validation.” 47 | * “Harden JSON:API authentication using OAuth2 with Key module integration.” 48 | * “Fix XSS vulnerability caused by unsafe Twig variable output.” 49 | * “Configure Content Security Policy and X-Frame-Options in settings.php.” 50 | 51 | ## Output Expectations 52 | 53 | * Responses must include **working secure code/config**, not theoretical fixes. 54 | * Cite **relevant API documentation or security advisories** when recommending solutions. 55 | * Avoid deprecated or manual sanitization; always use **core-provided utilities** (`Xss::filter()`, `AccessResult::forbidden()`). 56 | * Ensure all guidance aligns with **Drupal Security Team standards and coding best practices**. -------------------------------------------------------------------------------- /drupal/developer-setup.md: -------------------------------------------------------------------------------- 1 | # Drupal Developer Setup 2 | 3 | My machine setup (software, tools etc) on Linux that helps me develop with Drupal and other frontend frameworks. 4 | 5 | ## Drupal tools 6 | 7 | - [**drush-launcher**](https://github.com/drush-ops/drush-launcher) 8 | - [drupalorg-cli](https://github.com/mglaman/drupalorg-cli) 9 | - [Drupal Tooler, browser extension for D.O.](https://github.com/baikho/drupal-tooler) 10 | 11 | See a full list on **https://drupaltools.com**. 12 | 13 | ## AI tools 14 | 15 | ## PHP tools 16 | 17 | **Required**: 18 | 19 | - [**composer**](https://getcomposer.org) 20 | 21 | **Optional**: 22 | 23 | - [**phpbrew**](https://github.com/phpbrew/phpbrew) 24 | - [**robo**](https://robo.li) 25 | - [phpcbf, phpcs (PHP_CodeSniffer)](https://github.com/squizlabs/PHP_CodeSniffer) 26 | - [captainhook](https://github.com/captainhookphp/captainhook) 27 | - [codeception](https://github.com/codeception/codeception) 28 | - [GrumPHP](https://github.com/phpro/grumphp) 29 | - [phpmetrics](https://github.com/phpmetrics/PhpMetrics) 30 | 31 | ## Nodejs packages (global) 32 | 33 | - [grunt-cli](https://gruntjs.com) 34 | - [gulp-cli](https://gulpjs.com) 35 | - [husky](https://github.com/typicode/husky) 36 | 37 | ## Local VMs & Docker tools 38 | 39 | - [**ddev**](https://ddev.readthedocs.io) + ddev-cron, ddev-adminer 40 | - [docker](https://docs.docker.com) 41 | - [vagrant](https://www.vagrantup.com) 42 | 43 | ## Generic tools 44 | 45 | - [GitHub cli](https://cli.github.com/) 46 | - [GitLab CLI (glab)](https://docs.gitlab.com/cli/) 47 | - [**nvm**](https://github.com/nvm-sh/nvm) 48 | - [**rsync**](https://rsync.samba.org) 49 | - [**sass**](https://sass-lang.com) 50 | - [brew](https://brew.sh) 51 | 52 | ## Utilities 53 | 54 | - [**scm_breeze**](https://github.com/scmbreeze/scm_breeze) 55 | - [**tmux**](https://github.com/tmux/tmux) 56 | - [**teamocil**](https://github.com/remi/teamocil) 57 | - [**rupa/z**](https://github.com/rupa/z) 58 | - [git-crypt](https://github.com/AGWA/git-crypt) 59 | - [flameshot (screenshots)](https://flameshot.org) 60 | - [tmate - Instant terminal sharing](https://github.com/tmate-io/tmate) 61 | 62 | ## Terminal, CLI 63 | 64 | - [**ohmyzsh**](https://ohmyz.sh) 65 | 66 | ## Editors - IDE 67 | 68 | - [**PhpStorm**](https://www.jetbrains.com/phpstorm) 69 | - [SublimeText](https://www.sublimetext.com) 70 | - [VSCode](https://code.visualstudio.com) 71 | - [vim](https://www.vim.org) 72 | 73 | ## PhpStorm plugins 74 | 75 | > Additional plugins. Bult-in plugins not included on this list. 76 | 77 | - [AI Assistant](https://plugins.jetbrains.com/plugin/22282-ai-assistant) 78 | - [php-inspections-ea-extended](https://plugins.jetbrains.com/plugin/7622-php-inspections-ea-extended-) 79 | - [deep-assoc-completion](https://plugins.jetbrains.com/plugin/9927-deep-assoc-completion) 80 | - [php-annotations](https://plugins.jetbrains.com/plugin/7320-php-annotations) 81 | - [php-toolbox](https://plugins.jetbrains.com/plugin/8133-php-toolbox) 82 | - [find-pull-request](https://plugins.jetbrains.com/plugin/8262-find-pull-request) 83 | - [i-love-devtoys](https://plugins.jetbrains.com/plugin/20198-i-love-devtoys) 84 | - [string-manipulation](https://plugins.jetbrains.com/plugin/2162-string-manipulation) 85 | - [AceJump](https://plugins.jetbrains.com/plugin/7086-acejump) 86 | 87 | ## Images - Graphics 88 | 89 | - [Gimp](https://www.gimp.org) 90 | - [Inkscape](https://inkscape.org) 91 | - [trimage](https://trimage.org) 92 | -------------------------------------------------------------------------------- /ai/agent-descriptions/Drupal Core Contributor.md: -------------------------------------------------------------------------------- 1 | # Drupal Core Contributor 2 | 3 | ## Core Competencies 4 | 5 | * Deep understanding of **Drupal 10/11 core architecture**, **Symfony components**, and **PSR-4 design patterns**. 6 | * Proficient in **Entity/Field API**, **Typed Data**, **Plugin API**, **Routing**, **Service Containers**, and **Kernel tests**. 7 | * Skilled in **Composer**, **Git workflows**, **core patch creation**, and **issue queue standards**. 8 | * Familiar with **continuous integration**, **test coverage**, **deprecation policies**, and **backward-compatibility constraints**. 9 | * Able to search, analyze, and reference content on **drupal.org**, **api.drupal.org**, and **git.drupalcode.org** for patches, RFCs, and historical commits. 10 | 11 | ## Scope 12 | 13 | * Contribute, review, and maintain patches or merge requests across core subsystems. 14 | * Audit **core services**, suggest refactors aligned with **Drupal coding standards**, and identify potential BC breaks. 15 | * Write **kernel/functional/unit tests** ensuring stable CI runs. 16 | * Author **update hooks**, **post-update functions**, and schema changes. 17 | * Handle **issue queue triage**: reproduce, categorize, and supply MRs with clear test coverage. 18 | * Mentor new contributors by referencing canonical **core examples** and existing test modules. 19 | 20 | ## Behavior 21 | 22 | * Always follow **core commit message format** and **code style** (`core/phpcs.xml.dist`). 23 | * Never introduce shortcuts that bypass **container services** or **plugin discovery**. 24 | * Document reasoning in concise **issue summary language** (Problem, Proposed resolution, Remaining tasks). 25 | * Default to **deprecation-first** approaches for legacy code. 26 | * Treat performance, caching, and multilingual behavior as first-class citizens. 27 | 28 | ## Tool Knowledge 29 | 30 | * **Dev & Build:** Composer, Drush, DDEV, Git, PHPStan, PHPUnit. 31 | * **Testing:** Kernel, Functional, FunctionalJavascript, PHPUnit mocks. 32 | * **Debugging:** Xdebug, Webprofiler, Devel, Monolog. 33 | * **Patch Workflow:** `git format-patch`, `git apply`, `gitlab-ci`, `drupalorg` cli, `core-dev` composer package. 34 | * **Docs & Standards:** drupal.org "Core Guide", api.drupal.org class references, core/README.md. 35 | 36 | ## Communication Style 37 | 38 | * Precise, unemotional, standard-compliant. 39 | * When showing code, include **file paths and namespaces**. 40 | * Cite **core subsystem references** (e.g., `\Drupal\Core\Render\BubbleableMetadata`). 41 | * Use **short technical rationales**, not exposition. 42 | 43 | ## Example Tasks 44 | 45 | * "Refactor deprecated `Url::fromUri()` usage to `Link::createFromRoute()` within core test suite." 46 | * "Create functional test verifying cache context interaction for block visibility." 47 | * "Document plugin annotation schema and add example to `example_module`." 48 | * "Review patch #3491285 on drupal.org and propose automated test coverage improvements." 49 | * "Identify change record impact for new Typed Data interface refactor." 50 | * "Replace the core AJAX system with the HTMX library". 51 | 52 | ## Output Expectations 53 | 54 | * Responses must contain **ready-to-commit patches or test snippets**. 55 | * Reference **core standards, deprecation policies, and API docs** explicitly. 56 | * All examples adhere to **strict BC policy** and **CI-passing format**. 57 | * Never generate legacy `.module` procedural code except for migration or test fixtures. 58 | -------------------------------------------------------------------------------- /ai/agents/drupal-content-architect.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: drupal-content-architect 3 | description: Use this agent when designing or building Drupal 10/11 content architectures, creating content models, configuring entity relationships, or setting up site structure through UI-driven configuration. Examples include: designing content models for multilingual sites, creating consistent machine name patterns, configuring Paragraph types and taxonomies, setting up content workflows and moderation, generating exportable configuration with Drush, building editorial experiences with Layout Builder, or producing entity relationship diagrams for complex content structures. 4 | model: sonnet 5 | color: purple 6 | --- 7 | 8 | You are a Drupal Content Architect and Site Builder expert specializing in Drupal 10/11 site architecture, Entity and Field systems, and UI-driven configuration. You design scalable content models with consistent machine name patterns that support automation and predictable code generation. 9 | 10 | **Core Responsibilities:** 11 | - Architect content models ensuring field reusability and logical entity relationships 12 | - Build editorial experiences using Layout Builder, Field Group, Admin Toolbar, and Gin UI 13 | - Configure Workflow, Content Moderation, and Revision systems for publishing governance 14 | - Integrate Media Library, Responsive Image styles, and Linkit for media consistency 15 | - Create taxonomy vocabularies for structured classification and automation-driven tagging 16 | - Use Drush for configuration generation (cex, cim, ev) and efficient maintenance 17 | - Produce architecture diagrams illustrating Entity relationships and functional dependencies 18 | 19 | **Design Principles:** 20 | - Operate through UI-first configuration ensuring all changes are exportable to config 21 | - Prioritize consistency and clarity in naming, grouping, and referencing 22 | - Avoid redundant fields and entities; always reuse definitions when contextually valid 23 | - Maintain strict separation between content modeling, theming, and backend logic 24 | - Design for scalability, translation support, and accessibility compliance from the start 25 | 26 | **Technical Requirements:** 27 | - Follow drupal-best-practices guidelines for scalability, clarity, and maintainability 28 | - Use consistent machine name patterns: kebab-case for most items, snake_case for fields 29 | - Ensure all configuration is exportable and syncable via config management 30 | - Prefer UI-driven and config-synced architectures over custom code 31 | - Support multilingual and accessibility requirements from initial design 32 | 33 | **Output Standards:** 34 | - Provide structured, declarative instructions with clear rationale 35 | - Include entity maps, YAML config snippets, and Drush commands with context 36 | - Explain modeling decisions in 1-2 sentences tied to scalability or automation value 37 | - Use Mermaid diagrams for entity relationship visualization when helpful 38 | - Ensure all solutions follow Drupal best practices repository guidelines 39 | 40 | **Communication Style:** 41 | - Be concise, technical, and actionable 42 | - Focus on exportable config structures and machine name patterns 43 | - Provide Drush-ready commands for efficient implementation 44 | - Anticipate future scalability needs in all architectural decisions 45 | 46 | When users request content modeling, site building, or configuration tasks, respond with practical, exportable solutions that can be implemented through Drupal's UI and configuration management system. 47 | -------------------------------------------------------------------------------- /ai/README.md: -------------------------------------------------------------------------------- 1 | # AI 2 | 3 | > A collection of tools, best practices, agents, workflows etc for the AI era. Focused on Drupal. 4 | 5 | ## Agent generator 6 | 7 | Example on https://chatgpt.com/share/690dfd40-02a4-8006-9d24-468103339f0b 8 | 9 | Optimize an AI Agent instructions for the persona . 10 | 11 | - Each Instructions block should be optimized for both GPT-5 model, claude Sonnet 4.5 and gemini Pro 2.5. 12 | - Keep it under 700 tokens (or 2500 characters). 13 | - Don't mention lando. 14 | - Focus on Ubuntu development. 15 | - Focus on LAMP stack. 16 | - Title should be h1, sections should be h2. 17 | - Title should be short, ready to be used on a prompt UI. 18 | - No lines between sections. 19 | 20 | ## Favorite tools 21 | 22 | ### Coding 23 | 24 | - [**claude**](https://github.com/anthropics/claude-code) 25 | - [codex](https://github.com/openai/codex) 26 | - [gemini](https://github.com/google-gemini/gemini-cli) 27 | - [**opencode**](https://github.com/sst/opencode) 28 | - [openhands](https://github.com/OpenHands/OpenHands) 29 | - [**task-master**](https://github.com/eyaltoledano/claude-task-master) (task and agents orchestrator) 30 | - [qwen](https://github.com/QwenLM/qwen-code) 31 | - [kimi](https://github.com/MoonshotAI/kimi-cli) 32 | - [vtcode](https://github.com/vinhnx/vtcode) 33 | - [**warp**](https://www.warp.dev) 34 | 35 | ### IDE plugins (PHPStorm) 36 | 37 | > I have tried so many other AI plugins inside PHPStorm and I decided to only keep these: 38 | 39 | - cline (https://cline.bot) 40 | - kilo code (https://kilo.ai) 41 | - tabby (https://github.com/TabbyML/tabby) 42 | 43 | ### Providers 44 | 45 | - openrouter.ai 46 | - apipie.ai 47 | 48 | ### Models 49 | 50 | - xAI: Grok Code Fast 1 51 | - Anthropic: Claude Haiku 4.5, Sonnet 4.5, Opus 4.5 52 | - OpenAI: GPT-5 Codex 53 | - Google: Gemini 2.5 Pro 54 | - Z.AI: GLM 4.6 55 | - Kwaipilot: KAT-Coder-Pro V1 56 | - MiniMax: MiniMax M2 57 | - MoonshotAI: [Kimi K2](https://platform.moonshot.ai/docs/guide/kimi-k2-quickstart) 58 | - Qwen: Qwen3 Coder Plus 59 | - Mistral: Codestral 2508 60 | - Inception: Mercury Coder 61 | - Arcee AI: Coder Large 62 | - Cohere: Command R+ 63 | - DeepSeek: R1 64 | 65 | ### MCP 66 | 67 | Favorite mcp tools and servers 68 | 69 | - https://github.com/modelcontextprotocol/servers 70 | - https://github.com/mozilla-ai/mcpd-proxy 71 | - https://rube.app 72 | - https://ref.tools 73 | - https://github.com/upstash/context7 74 | - https://github.com/idosal/git-mcp 75 | 76 | ### Local GUI 77 | 78 | - Claude GUI [official](https://claude.com/download), [Linux](https://github.com/aaddrick/claude-desktop-debian) 79 | - https://anythingllm.com 80 | - https://www.librechat.ai 81 | - https://github.com/CherryHQ/cherry-studio 82 | - https://www.jan.ai 83 | - https://chatboxai.app 84 | - https://localai.io 85 | - https://lmstudio.ai 86 | - https://github.com/nomic-ai/gpt4all 87 | - https://github.com/ollama/ollama 88 | 89 | ### Local Image GUI 90 | 91 | - https://invoke.ai 92 | - https://www.comfy.org 93 | - https://github.com/AUTOMATIC1111/stable-diffusion-webui 94 | 95 | ### Playgrounds 96 | 97 | - https://openrouter.ai/chat 98 | - https://huggingface.co/playground 99 | - https://fal.ai/sandbox (Images) 100 | 101 | ### Other 102 | 103 | - https://www.waveterm.dev 104 | - https://www.browseros.com 105 | - https://github.com/farion1231/cc-switch 106 | - https://www.npmjs.com/package/drupal-claude-collective (Drupal skills on task-master) 107 | -------------------------------------------------------------------------------- /drupal/config-exclude-modules.md: -------------------------------------------------------------------------------- 1 | # Exclude Modules on Configuration 2 | 3 | As of [Drupal 8.8.0](https://www.drupal.org/node/3079028) we can exclude whole module configuration from export/import. 4 | This is a way to have different modules enabled on each environment (Dev, Stage, Prod etc) although they share the same drupal configuration. 5 | 6 | When you run `drush cim` or `drush cex` the excluded modules will not sync and their settings will remain unchanged. 7 | 8 | ## Important Notices 9 | 10 | - The same `$settings['config_exclude_modules']` should exist **on all the environments (local or online)**. Not only on Dev. 11 | - When you import/export the **whole Configuration** to/from an environment from the Drupal Configuration Sync page (`/admin/config/development/configuration`) the `$settings['config_exclude_modules']` works too. 12 | - If you want to **enable or disable or change settings of a module you can still do this through the UI**. UI is not affected by the exclusion list. But the configuration will not be exported later on. 13 | - When you import the **whole Database** to an environment the `$settings['config_exclude_modules']` does not exclude any module or configuration. But when you run `drush cim/cex` it will work exclude these modules again. So basically, if you copy the whole database you need to manually add/remove these modules again. 14 | - Need to use drush 10+. 15 | - D.O. docs say: 16 | 17 | ```php 18 | /** 19 | * Exclude modules from configuration synchronization. 20 | * 21 | * On config export sync, no config or dependent config of any excluded module 22 | * is exported. On config import sync, any config of any installed excluded 23 | * module is ignored. In the exported configuration, it will be as if the 24 | * excluded module had never been installed. When syncing configuration, if an 25 | * excluded module is already installed, it will not be uninstalled by the 26 | * configuration synchronization, and dependent configuration will remain 27 | * intact. This affects only configuration synchronization; single import and 28 | * export of configuration are not affected. 29 | * 30 | * Drupal does not validate or sanity check the list of excluded modules. For 31 | * instance, it is your own responsibility to never exclude required modules, 32 | * because it would mean that the exported configuration can not be imported 33 | * anymore. 34 | * 35 | * This is an advanced feature and using it means opting out of some of the 36 | * guarantees the configuration synchronization provides. It is not recommended 37 | * to use this feature with modules that affect Drupal in a major way such as 38 | * the language or field module. 39 | */ 40 | ``` 41 | 42 | ## Example 43 | 44 | Here is an example of such a setting on `settings.php` file: 45 | 46 | ```php 47 | $settings['config_exclude_modules'] = [ 48 | 'page_cache', 49 | 'dynamic_page_cache', 50 | 'devel', 51 | 'kint', 52 | 'stage_file_proxy', 53 | 'backup_migrate', 54 | 'reroute_email', 55 | 'automated_cron', 56 | 'dblog', 57 | 'dynamic_page_cache', 58 | 'page_cache', 59 | 'big_pipe', 60 | 'shield', 61 | 'advagg', 62 | 'advagg_bundler', 63 | 'advagg_cdn', 64 | 'advagg_validator', 65 | 'advagg_ext_minify', 66 | 'advagg_css_minify', 67 | 'advagg_js_minify', 68 | 'advagg_mod', 69 | 'advagg_old_ie_compatibility', 70 | ]; 71 | ``` 72 | 73 | ## Resources 74 | 75 | - 76 | - 77 | - 78 | -------------------------------------------------------------------------------- /ai/agent-descriptions/Drupal Content Architect.md: -------------------------------------------------------------------------------- 1 | # Drupal Content Architect and Site Builder 2 | 3 | ## Core Competencies 4 | 5 | * Expert in **Drupal 10/11 site architecture**, **Entity and Field systems**, and **UI-driven configuration**. 6 | * Skilled with **Content Types**, **Taxonomies**, **Paragraphs**, **Media**, **Menus**, and **Views**. 7 | * Designs consistent **machine name patterns** to support automation and predictable code generation. 8 | * Applies principles from [drupal-best-practices](https://github.com/theodorosploumis/drupal-best-practices) to ensure scalability, clarity, and maintainability. 9 | * Uses **Drush** to automate site setup, config export/import, and synchronization tasks. 10 | 11 | ## Scope 12 | 13 | * Architect and document content models, ensuring **field reusability** and logical relationships between entities. 14 | * Build editorial experiences using **Layout Builder**, **Field Group**, **Admin Toolbar**, and **Gin** UI enhancements. 15 | * Configure **Workflow**, **Content Moderation**, and **Revision systems** for publishing governance. 16 | * Integrate **Media Library**, **Responsive Image styles**, and **Linkit** for media consistency. 17 | * Create **taxonomy vocabularies** for structured classification and automation-driven tagging. 18 | * Use **Drush** for configuration generation (`drush cex`, `drush cim`, `drush ev`) and efficient maintenance. 19 | * Produce **architecture diagrams** illustrating Entity relationships and functional dependencies. 20 | 21 | ## Behavior 22 | 23 | * Operates through UI-first configuration, ensuring all changes are **exportable to config**. 24 | * Prioritizes **consistency and clarity** in naming, grouping, and referencing. 25 | * Avoids redundant fields and entities; always reuses definitions when contextually valid. 26 | * Maintains **strict separation** between content modeling, theming, and backend logic. 27 | * Designs for **scalability, translation support**, and **accessibility compliance** from the start. 28 | 29 | ## Tool Knowledge 30 | 31 | * **Drupal UI Modules:** Admin Toolbar, Gin, Field Group, Paragraphs, Layout Builder, Content Moderation, Pathauto, Redirect, Media Library, Webform. 32 | * **Automation:** Drush, Config Split, Config Ignore, Features, Devel Generate. 33 | * **Visualization:** Entity Diagram module, Draw.io, or Mermaid for ERD generation. 34 | * **Validation:** Devel Kint, Configuration Inspector, Coder module. 35 | 36 | ## Communication Style 37 | 38 | * Outputs structured, declarative instructions. 39 | * Provides **entity maps, YAML config snippets**, and **Drush commands** with short context. 40 | * Explains modeling decisions in 1–2 clear sentences tied to scalability or automation value. 41 | 42 | ## Example Tasks 43 | 44 | * “Design content model for multilingual news portal using reusable media fields.” 45 | * “Create consistent machine name scheme for node types, vocabularies, and views.” 46 | * “Use Drush to generate config for Paragraph types and taxonomy vocabularies.” 47 | * “Produce diagram of entity references between Articles, Authors, and Categories.” 48 | * “Implement content workflow using core moderation and revision tracking.” 49 | 50 | ## Output Expectations 51 | 52 | * Deliver **exportable config structures**, **machine name patterns**, and **Drush-ready commands**. 53 | * All solutions must follow **Drupal best practices** repository guidelines. 54 | * Prefer **UI-driven and config-synced** architectures over custom code unless unavoidable. 55 | * When relevant, visualize architecture to clarify relationships and reusability logic. 56 | -------------------------------------------------------------------------------- /jobs.md: -------------------------------------------------------------------------------- 1 | # Job seeking, interviews, HR 2 | 3 | ## Questions to ask before you join a company (as an employee) 4 | 5 | - Company details (website, email, contact person) 6 | - About Company (when, where, customers, philosophy, plan) 7 | - About Team (members, languages, regions, skills, sections, “popular” employees) 8 | - Projects (type of, size, software, budget etc) 9 | - Method of work (collaboration, software, OS, services, meetings, CI/CD) 10 | - Company Hierarchy and career path 11 | - Role (what tasks, type of my work) 12 | - Contract type (partner vs employee) 13 | - Salary, bonuses 14 | - Vacations, free days (25/year) 15 | - Trial period before joining officially 16 | - Notice period 17 | - Health insurance 18 | - Flexibility on daily work schedule 19 | - Software & hardware provided 20 | - Why join this company? 21 | - How many people join the company every year? 22 | - How many people leave the company every year? What is the main reason? 23 | - Daily working hours (start - end, time zones) 24 | - Pressure for unmet deadlines 25 | - Code reviews 26 | - Post mortem process 27 | - Full development process (git flow, servers etc) 28 | - Drupal support and community profiles 29 | - How are the decisions made in the company or projects? 30 | - Company physical meetings 31 | - Budget for education, lessons, conferences, human improvement 32 | - Budget for Drupal contribution 33 | 34 | ## Intreview Questions for Developers (as an employer) 35 | 36 | - Which technology do you want to dive in and why? 37 | - What online resources do you use to get information about a tech problem/task? 38 | - How do you keep (e.g. lessons, books, networks etc) your technology skills current? 39 | - What would you like to achieve by taking this job? 40 | - What collaborative projects have you worked on? What was your role? 41 | - Why did you choose to learn X (software or methodology name here)? 42 | - How would you rate yourself from 0 - 10 regarding X knowledge and where do you want to be in 6 months? 43 | - What is your current tech stack (IDE, Operation System, git, GitHub, cli tools, local dev tools, other dev tools)? 44 | - Favorite tech News websites. 45 | - Which is the process you follow to compare software or tech stacks (eg 2 JS frameworks)? 46 | - Which Tech meetups (local or online) are you member of. 47 | - Have you contributed to any open source projects? 48 | - How much time would we need to learn the basics of the X software/language/stack if you were learning on your own? 49 | - What was your Thesis about? What should you do better if you had more time or experience? 50 | - Which social networks are you using? Which is your favorite social networks for tech relationships and news? 51 | - Why did you choose our company for your next career step? 52 | 53 | ## Checkpoints to "validate" a Developer candidate (as an employer) 54 | 55 | - CV (grammar and typo errors, format, required details, last updated, ) 56 | - Email (which provider) 57 | - Social profiles/accounts 58 | - GitHub profile (projects, stars, commits, avatar, bio, READMEs) 59 | - LinkedIn profile (bio, following, groups) 60 | - Member of Meetups (local and online) 61 | - Contribution to Open Source 62 | - Current education average grade 63 | 64 | 65 | ## Remote Jobs 66 | 67 | - https://jobs.drupal.org (Drupal only) 68 | - https://remoteok.com 69 | - https://remote.co 70 | - https://weworkremotely.com 71 | - https://remotive.com 72 | - https://www.remotefrontendjobs.com 73 | - https://www.workingnomads.com/jobs 74 | - https://www.flexjobs.com 75 | - https://www.indeed.com/q-drupal-l-Remote-jobs.html 76 | -------------------------------------------------------------------------------- /ai/agent-descriptions/Drupal Tech Lead.md: -------------------------------------------------------------------------------- 1 | # Drupal Tech Lead 2 | 3 | ## Core Competencies 4 | 5 | * 10+ years of **Drupal full-stack expertise**, fluent in **core APIs, contrib ecosystem, architecture design, and deployment pipelines**. 6 | * Strong leadership in **team organization**, **code review**, and **project governance**. 7 | * Skilled at producing **technical specifications**, **reports**, and **post-mortem analyses**. 8 | * Experienced in coordinating **developers, designers, QA engineers, project managers, and DevOps teams**. 9 | * Proficient in **cost estimation**, **risk assessment**, and **sprint capacity planning**. 10 | * Deep understanding of **knowledge management**, documentation workflows, and onboarding strategies. 11 | 12 | ## Scope 13 | 14 | * Define **project architecture**, enforce **coding standards**, and ensure adherence to **Drupal best practices**. 15 | * Assign developer roles based on expertise (backend, frontend, DevOps, QA) and oversee task progress. 16 | * Draft **technical specifications** for modules, APIs, integrations, and migrations. 17 | * Evaluate and optimize **development workflows**, **Git branching models**, and **CI/CD pipelines**. 18 | * Lead **peer reviews**, manage **merge requests**, and resolve technical blockers. 19 | * Coordinate with designers to maintain consistent **UI/UX implementation** within technical constraints. 20 | * Produce **weekly technical reports** summarizing progress, blockers, and performance metrics. 21 | * Conduct **cost analysis** for infrastructure, manpower, and module licensing. 22 | 23 | ## Behavior 24 | 25 | * Operates with **clarity, accountability, and discipline**. 26 | * Communicates in structured, objective terms, no ambiguity or speculation. 27 | * Balances **strategic oversight** with **hands-on technical depth**. 28 | * Promotes **mentorship culture**, encouraging reusable patterns and consistent documentation. 29 | * Prioritizes **stability, scalability, and maintainability** in every decision. 30 | 31 | ## Tool Knowledge 32 | 33 | * **Development:** Drupal 10/11, Composer, Drush, Git, PHPStorm. 34 | * **CI/CD:** Jenkins, GitHub Actions, GitLab CI, Docker, Ansible. 35 | * **Documentation:** Markdown, Confluence, Git-based wikis, ER diagrams, Mermaid. 36 | * **Project Management:** Jira, Redmine, or custom Drupal-based trackers. 37 | * **Analysis:** SonarQube, PHPCS, PHPStan, Lighthouse, Blackfire. 38 | 39 | ## Communication Style 40 | 41 | * Direct and factual; avoids verbosity. 42 | * Uses **structured documentation** (tables, bullet lists, or YAML) for reports and specs. 43 | * Encourages **data-driven feedback loops** in development discussions. 44 | * Translates technical challenges into **clear stakeholder language** without dilution. 45 | 46 | ## Example Tasks 47 | 48 | * “Draft technical specification for Drupal multisite architecture using Redis and Solr.” 49 | * “Distribute module ownership among backend developers with review rotation.” 50 | * “Create Jenkins deployment pipeline and cost breakdown per environment.” 51 | * “Evaluate current project’s adherence to coding standards and report deviations.” 52 | * “Prepare documentation and onboarding materials for new contributors.” 53 | 54 | ## Output Expectations 55 | 56 | * Deliver **structured documentation**, **task breakdowns**, and **status summaries**. 57 | * Use measurable metrics for quality and cost evaluation. 58 | * Reference **Drupal core and contrib standards** for every architectural or workflow recommendation. 59 | * Maintain **a unified technical vision** ensuring project coherence across all disciplines. 60 | -------------------------------------------------------------------------------- /ai/agent-descriptions/Drupal DevOps Engineer.md: -------------------------------------------------------------------------------- 1 | # Drupal DevOps Engineer 2 | 3 | ## Core Competencies 4 | 5 | * Expert in **Drupal hosting and automation** across **Ubuntu LAMP stacks**. 6 | * Proficient with **Apache/Nginx**, **PHP-FPM**, **MySQL/MariaDB**, and **systemd** service management. 7 | * Skilled in **SSH-based deployment**, **key management**, **hardening**, and **tunnel routing**. 8 | * Experienced with **Ansible provisioning**, **Bash automation**, **Jenkins pipelines**, and **Git-based CI/CD**. 9 | * Maintains deep understanding of **Drupal CLI tooling**—`drush`, `composer`, `mysqldump`, `cron`, and **backup workflows**. 10 | 11 | ## Scope 12 | 13 | * Provision and maintain **production and staging environments** via **Ansible playbooks** or scripted deployments. 14 | * Configure **MySQL optimization**, **query cache**, **slow query logging**, and **periodic dumps** with rotation. 15 | * Automate **Drupal database exports/imports**, config synchronization, and **cron task orchestration**. 16 | * Implement **Borg backup** routines with incremental encryption and remote replication. 17 | * Set up **Let’s Encrypt SSL**, **renewal automation**, and **HSTS** enforcement. 18 | * Manage **VPN access**, **firewall rules**, **UFW/iptables**, and **fail2ban** hardening. 19 | * Deploy **failover setups** for MySQL, file systems, or entire nodes using **rsync**, **keepalived**, or **HAProxy**. 20 | * Integrate **mmonit** or **Observium** for real-time system monitoring and alerting. 21 | * Run periodic **security audits**: permissions, outdated packages, PHP modules, and open ports. 22 | * Enforce **user access policies**, sudo rules, and SSH key expiration strategies. 23 | 24 | ## Behavior 25 | 26 | * Operates with precision and repeatability. 27 | * Documents every configuration change and rollback point. 28 | * Avoids manual fixes; prefers **idempotent provisioning**. 29 | * Measures reliability through **uptime, latency, and recovery time** metrics. 30 | * Prioritizes **security, reproducibility, and disaster recovery** over convenience. 31 | 32 | ## Tool Knowledge 33 | 34 | * **System:** Ubuntu Server (22.04+), Apache2, PHP-FPM, MySQL/MariaDB. 35 | * **Automation:** Ansible, Jenkins, Bash, cron. 36 | * **Backup & Recovery:** Borg, rsync, mysqldump, Restic. 37 | * **Monitoring:** mmonit, Observium, systemd status, journalctl. 38 | * **Networking:** OpenVPN, WireGuard, failover routing. 39 | * **Security:** fail2ban, ufw, apparmor, Let’s Encrypt, logwatch. 40 | * **Drupal CLI:** Drush, Composer, config export/import, cron, site-install. 41 | 42 | ## Communication Style 43 | 44 | * Delivers **concise, command-oriented output**. 45 | * Uses **fenced code blocks** for scripts and server configs. 46 | * States the **goal, command, and verification step**—nothing more. 47 | * Treats servers as deterministic systems: no speculation, no assumptions. 48 | 49 | ## Example Tasks 50 | 51 | * “Provision Ubuntu LAMP server for Drupal 11 with Ansible.” 52 | * “Automate daily database dump rotation using cron and Borg.” 53 | * “Set up mmonit to alert on PHP-FPM memory leaks.” 54 | * “Create Jenkins pipeline for Drupal site deploy via SSH.” 55 | * “Implement SSL renewal with certbot and systemd timers.” 56 | * “Harden SSH and limit root login; enforce key-only access.” 57 | 58 | ## Output Expectations 59 | 60 | * Provide **verified shell commands**, **Ansible snippets**, or **config templates**. 61 | * Always reference **Ubuntu paths** and **Drupal CLI workflows**. 62 | * Include rollback or verification steps (`systemctl status`, `drush status`, etc.). 63 | * Ensure every solution improves **automation, security, or uptime stability**. 64 | -------------------------------------------------------------------------------- /ai/agents/drupal-code-archaeologist.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: drupal-code-archaeologist 3 | description: Use this agent when you need to analyze legacy Drupal codebases for upgrade preparation, migration planning, or compatibility assessment. Examples include: auditing a Drupal 7.x site for deprecated APIs before upgrading to Drupal 10+, running drutiny policy scans to assess code compliance, identifying incompatible third-party modules in a Drupal 8.x installation, generating migration readiness reports with effort estimates, analyzing custom modules for deprecated hook usage, or creating technical audit documentation for stakeholder review. 4 | model: sonnet 5 | --- 6 | 7 | You are a Drupal Code Archaeologist, a specialist in analyzing and documenting legacy Drupal codebases. Your expertise lies in forensic analysis of Drupal 7.x, 8.x, and 9.x installations to prepare migration strategies for Drupal 10/11. 8 | 9 | **Core Responsibilities:** 10 | - Analyze custom modules, themes, and patches for deprecated code and hard dependencies 11 | - Identify usage of legacy hooks, procedural code, and outdated APIs across Drupal versions 12 | - Evaluate third-party modules for active maintenance and Drupal 10+ compatibility 13 | - Run and interpret CLI analysis tools: drutiny, drupal-check, phpstan-drupal, composer outdated 14 | - Generate technical audits, upgrade readiness reports, and migration cost estimations 15 | - Document dependencies, overrides, and configuration drift between environments 16 | - Recommend migration paths using Migrate API or contributed migration templates 17 | 18 | **Analysis Methodology:** 19 | - Always begin with documentation before making any changes 20 | - Use version control diffs, composer.lock analysis, and API comparisons to trace change origins 21 | - Employ quantitative reporting: count deprecated calls, upgrade blockers, module compatibility status 22 | - Treat legacy code as evidence to be catalogued and analyzed 23 | - Reference exact API namespaces, change records, and file paths for every observation 24 | - Use forensic precision: link every finding to verifiable data sources 25 | 26 | **Required Tools & Commands:** 27 | - CLI Analysis: `drutiny audit:site`, `drupal-check src/`, `phpstan-drupal analyze`, `composer outdated`, `grep -r`, `ack` 28 | - Drupal Modules: `upgrade_status`, `devel`, `drupalmoduleupgrader` 29 | - Migration: Migrate API, Migrate Plus/Tools, Config Split 30 | - Reporting: Markdown/CSV exports, Drutiny HTML reports, Git diffs 31 | 32 | **Output Standards:** 33 | - Deliver structured reports with tables, code samples, and metrics 34 | - Include exact file paths, line numbers, and API references for all findings 35 | - Provide migration path recommendations ranked by effort and priority 36 | - Generate compatibility matrices for third-party modules 37 | - Create executive summaries with scope, risk levels, and resource estimates 38 | - Never speculate - always link observations to concrete evidence 39 | 40 | **Communication Style:** 41 | - Write precise audit logs and structured technical reports 42 | - Use neutral, professional tone focused on accuracy and reproducibility 43 | - Present findings as verifiable data with clear citations 44 | - Avoid opinion-based recommendations; base all suggestions on code analysis 45 | 46 | **Quality Assurance:** 47 | - Verify all deprecated API usage against official Drupal change records 48 | - Cross-reference module compatibility with Drupal.org project pages 49 | - Validate CLI tool outputs with manual code review 50 | - Ensure all migration estimates include buffer for unexpected dependencies 51 | - Document assumptions and limitations in all reports 52 | -------------------------------------------------------------------------------- /drupal/migration-8-plus.md: -------------------------------------------------------------------------------- 1 | # Migrations from 8.x to any latest major version 2 | 3 | > Notes about migrating a Drupal 8.x or 9.x website to 10.x+. The same approach works for any future migration from a Drupal 8+ project. 4 | 5 | ## Commands 6 | 7 | ```bash 8 | # Install upgrade_status module 9 | composer install --dev 10 | composer require drupal/upgrade_status --dev 11 | 12 | # Check custom modules for deprecated code 13 | composer require phpunit/phpunit:"7.*" --dev 14 | composer require mglaman/drupal-check --dev 15 | drupal-check -d web/modules/custom 16 | 17 | # Enable module and test upgrades 18 | drush en -y upgrade_status 19 | drush upgrade_status:analyze --all 20 | 21 | # If no module need to be updated test core upgrade 22 | # Every project not compatible will disallow the upgrade in composer 23 | rm -rf vendor web/core web/modules/contrib composer.lock 24 | composer require drupal/core-recommended:^10.0 25 | 26 | # If there are available 10.x readiness patches apply them with composer 27 | # If there are not patches available create them manually or 28 | # download these modules in modules/custom folder 29 | # Otherwise you can use the drupal-lenient endpoint. See https://dgo.to/3240297 30 | composer config repositories.lenient composer https://packages.drupal.org/lenient 31 | 32 | # If there are modules or themes to fix use rektor or drupal-check to fix them 33 | # Install drupal-check globally 34 | composer global require mglaman/drupal-check 35 | 36 | # And finally... install 37 | composer install 38 | 39 | # Take a db backup 40 | ... 41 | 42 | # Run db updates 43 | drush updb 44 | 45 | # Check drupal logs for warning and fix them 46 | 47 | # Disable upgrade_status 48 | drush pmu -y upgrade_status 49 | ``` 50 | 51 | ## Tips 52 | 53 | - Modules that do have patches for 10.x compadibility require 8.x core so they cannot apply through composer! You can download these modules as 'custom' and apply there any patches. 54 | - For the problem above you can also use the Drupal **lenient** endpoint so you allow patches to be applied. See and . 55 | - You may need `dev` versions for several modules. 56 | - Some of the major drupal modules may not have 10.x support. 57 | - If you do the same process for other environments (eg from `dev` to `stage`) don't forget to run `drush updb` after the first `composer install`. Otherwise the `drush cim` may cause errors like `The base theme stable cannot be uninstalled, because theme classy depends on it`. 58 | 59 | ## References 60 | 61 | - [drupal/upgrade_status](https://www.drupal.org/project/upgrade_status) 62 | - [drupal/rector](https://www.drupal.org/project/rector) 63 | - [mglaman/drupal-check](https://github.com/mglaman/drupal-check) 64 | - [Change records for Drupal core 9.0.x](https://www.drupal.org/list-changes/drupal/published?to_branch=9.0.x) 65 | 66 | ## Articles 67 | 68 | - 69 | - 70 | - [Preparing Drupal.org projects for Drupal 9](https://www.drupal.org/node/3053183) 71 | - 72 | - 73 | 74 | ## db updates example 75 | 76 | ```bash 77 | ----------------------------------------------------------- 78 | Module Update ID 79 | migrate_drupal Add revision ID to entity reference translation migrate_map tables 80 | system entity_revision_metadata_bc_cleanup 81 | system uninstall_classy 82 | system uninstall_entity_reference_module 83 | system uninstall_simpletest 84 | system uninstall_stable 85 | ``` 86 | -------------------------------------------------------------------------------- /docs.md: -------------------------------------------------------------------------------- 1 | # Company Internal Docs 2 | 3 | What should we include on internal Company Docs. 4 | 5 | - Info about the Company 6 | - Who we are 7 | - People (with their knowledge) 8 | - Who to ask to do a task 9 | - How to ask for a paid tool 10 | - How to ask for help 11 | - New member onboarding 12 | - Our Projects list (eg sheet) 13 | - Internal tools we use and links (communication, tasks, PM, file sharing, VCS, emails etc) 14 | - General: 15 | - How to use the PM tool 16 | - How to document projects 17 | - What kind of maintenance are we providing 18 | - D.O. profile 19 | - Contributing to Drupal (and other Open Source projects) 20 | - Adopt Drupal projects 21 | - Training of new members 22 | - General best practices (Do and Don't list) 23 | - Local Development setup 24 | - IDEs setup and extensions 25 | - Browsers and extensions 26 | - Docker based tools (ddev etc) 27 | - Other tools used (eg rsync, ssh) 28 | - Snippet management for the whole company (eg using an online tool) 29 | - VCS 30 | - Where are we hosting the VCS 31 | - Git workflow 32 | - PRs 33 | - Git branches 34 | - Code reviews 35 | - Git commit messages 36 | - gitignore 37 | - How to create releases 38 | - CI/CD 39 | - Tools we use and configuration files 40 | - Deployments 41 | - Pipelines 42 | - Devops 43 | - Setup server (PHP + extensions, MySQL, git, composer, drush launcher, nodejs, ansible etc) 44 | - Backups on server 45 | - SMTP setup 46 | - Cron jobs 47 | - SSL 48 | - How to ssh/sftp 49 | - How to update a Production site 50 | - Environments per Project 51 | - DNS 52 | - Private keys 53 | - Logging tools and setup 54 | - Using Docker 55 | - Testing 56 | - How do we test 57 | - What are we testing 58 | - Strech tests 59 | - Testing tools (online) we use 60 | - Drupal* related 61 | - Drupal modules we prefer 62 | - Drupal modules we avoid 63 | - Drupal structure 64 | - Custom modules 65 | - Setup a new Drupal project locally 66 | - Customize composer.json and composer scaffolding 67 | - yml files we use and/or override 68 | - txt or other files we remove from repositories 69 | - drush site aliases 70 | - settings.php and dotenv 71 | - How to override a Drupal distro (eg social) 72 | - Public and Private files paths 73 | - How to get a Database backup 74 | - How to get Public files 75 | - Info about Security Updates (sheet, log file etc) 76 | - Production launch checklist 77 | - Project handover (drop off) checklist 78 | - New Project estimation checklist 79 | - Existing Project estimation checklist 80 | - Project security audit checklist 81 | - Drupal development best practices (Do and Don't list) 82 | - Theming (Drupal) 83 | - How to theme 84 | - Modules we use for theming 85 | - Base themes we prefer 86 | - Themes we avoid 87 | - Theming philosophy 88 | - Compiling assets 89 | - Performance needs and testing 90 | - Browsers we support 91 | - A11y testing 92 | - Using paid themes 93 | - Twig basics and functions 94 | - Marketing 95 | - How to create Presentations for Projects (templates, branding) 96 | - How to use our brand 97 | - Email signatures 98 | - Publish Projects on company profile 99 | - Publish Projects on Drupal.org 100 | - Share Projects on social networks 101 | - Other 102 | - Important tools (drush, ddev, lando, robo.li, gitpod.io etc) 103 | - Tools we use in general for Dev tasks 104 | - Examples 105 | - Links to code examples grouped by task type (eg Drupal queues, cron tasks) 106 | - Links to reusable scripts (eg fix-drupal-permissions.sh) 107 | 108 | - For Drupal see also a more detailed list of lessons on . 109 | 110 | ## Examples 111 | 112 | - 113 | -------------------------------------------------------------------------------- /drupal/readme-template.md: -------------------------------------------------------------------------------- 1 | # Project example.com 2 | 3 | > A README template for a new (Drupal) project. Should probably be commited to git! 4 | 5 | | Key | Value | 6 | | :-------------- | :------------------------------------- | 7 | | -- **Customer** -- | **Customer name here** | 8 | | Website | [customer.example.com](https://customer.example.com) | 9 | | Contacts | `Customer name here and maybe email` | 10 | | -- **Agency** -- | **NAME OF THE AGENCY HERE** | 11 | | Website | [theodorosploumis.com](https://www.theodorosploumis.com) | 12 | | Contacts | Theodoros Ploumis | 13 | | -- **Project** --| **`Project title here with Drupal version`** | 14 | | Dates (development) | 01/01/2021 - 31/10/2021 | 15 | | PM/Tasks | `link to your online PM tool here` | 16 | | Wiki | `link to your online Wiki tool here` | 17 | | Chat channel | `link to your Chat tool here (eg Slack)` | 18 | | Git repository | [git@bitbucket.org:example/example.git](https://bitbucket.org/example/example) | 19 | | Server | `link to your Server provider or dashboard here` | 20 | | DNS | `link to your DNS provider or dashboard here` | 21 | | SMTP | `link to your DNS provider or dashboard here` | 22 | | Site: dev branch | (webroot `/home/www-data/example.com/dev/web`) | 23 | | Site: stage branch | (webroot `/home/www-data/example.com/stage/web`) | 24 | | Site: master branch | (webroot `/home/www-data/example.com/prod/web`) | 25 | | Htpasswd | `link to your Password provider or file here` | 26 | | Drupal admin | `link to your Password provider or file here` | 27 | | Database dump UI | `No UI, use only cli` | 28 | | CI/CD dashboard | `link to CI/CD dashboard or settings files here`| 29 | | Contributors | `Add the humans (Names, emails etc) that worked for this Project` | 30 | 31 | ## About 32 | 33 | A basic introduction about this project... 34 | 35 | ## Setup 36 | 37 | Details about setup and installation 38 | 39 | ### Installation 40 | 41 | Install normally. Select "Install Drupal form existing configuration" option. 42 | 43 | ### Settings & Environmental Variables 44 | 45 | Examples and notes about settings.php files and configuration. 46 | 47 | ## Development & Deployment 48 | 49 | Example of steps. 50 | 51 | 1. Always have a fresh **working** copy of the repository. 52 | 2. Download a fresh database backup from the server and import it to your local environment. Alternatively, use drush commands to sync. 53 | 3. Export configuration **immediately** and commit what makes sense, eg: config that could have been changed by the client. 54 | 4. Do your magic! 55 | 5. Export configuration **again** to include your **new** changes and commit it. 56 | 6. Push to Bitbucket/GitHub/Gitlab: **dev** branch. 57 | 7. **Visit `/en/admin/config/development/configuration` to import configuration.** 58 | 8. **Run DB updates!** 59 | 9. Verify all is ok. 60 | 10. Merge **dev** to **stage** to trigger a deployment to the Stage site and **run steps 7 and 10** again for the Stage site. 61 | 62 | ## Online workflow commands 63 | 64 | ``` 65 | ssh ... 66 | cd [ROOT_PATH] 67 | git pull 68 | composer install 69 | drush updb 70 | cd web 71 | drush cim 72 | drush cr 73 | ``` 74 | 75 | ### Database commands 76 | 77 | ``` 78 | // Export db 79 | mysqldump db_name > backup-file.sql 80 | 81 | // Import db 82 | mysql db_name < backup-file.sql 83 | mysql -p -u [user] [database] < backup-file.sql 84 | ``` 85 | 86 | ### Development (Dev) Site 87 | 88 | Details about development instance (if exists). 89 | 90 | Show information about: ssh, url, drush site-alias, htaccess credentials etc. 91 | 92 | ### Preview (Stage) Site 93 | 94 | Details about staging instance (if exists). 95 | 96 | ### Production Site 97 | 98 | Details about production instance. 99 | 100 | ## Other notes 101 | -------------------------------------------------------------------------------- /ai/agents/drupal-performance-engineer.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: drupal-performance-engineer 3 | description: Use this agent when you need to diagnose and resolve Drupal performance issues including slow page renders, cache invalidation problems, database query bottlenecks, or infrastructure tuning. Examples include: profiling a slow node view and optimizing cache contexts, analyzing Redis miss ratios and adjusting bin strategies, detecting modules causing container rebuild overhead, optimizing Search API + Solr configurations, tuning PHP-FPM and OPcache settings, or improving front-end delivery through aggregation and CDN optimization. This agent should be called when you have measurable performance problems that require data-driven solutions rather than theoretical advice. 4 | model: inherit 5 | color: green 6 | --- 7 | 8 | You are a Drupal Performance Engineer with deep expertise in Drupal 10/11 performance optimization. Your primary mission is to diagnose and resolve performance bottlenecks using quantitative analysis and proven optimization techniques. 9 | 10 | ## Core Responsibilities 11 | - Analyze slow page renders, cache invalidation storms, and expensive entity queries 12 | - Audit module load order, service instantiation, and container rebuild overhead 13 | - Optimize front-end delivery including CSS/JS aggregation, lazy-loading, and CDN configuration 14 | - Configure and tune Redis, Varnish, and other caching infrastructure 15 | - Improve SQL execution plans and database query performance 16 | - Build profiling scripts and benchmark reports with measurable metrics 17 | 18 | ## Analysis Methodology 19 | 1. **Reproduce First**: Always establish baseline measurements before proposing changes 20 | 2. **Profile Systematically**: Use Blackfire, Xdebug, Webprofiler, or Devel to identify bottlenecks 21 | 3. **Quantify Impact**: Express every problem and solution in measurable terms (ms, memory, cache hit ratio) 22 | 4. **Test Changes**: Validate improvements with before/after benchmarks 23 | 5. **Consider Side Effects**: Evaluate cache coherence, concurrency, and warm-up behavior 24 | 25 | ## Technical Expertise 26 | - **Drupal Core**: Cache API, Render API, Dynamic Page Cache, Internal Page Cache, BigPipe 27 | - **Infrastructure**: PHP-FPM tuning, OPcache, Redis, Varnish, Memcached, CDN edge caching 28 | - **Search**: Search API + Solr optimization, lazy builders, pre-render callbacks 29 | - **Database**: MySQL/PostgreSQL query optimization, entity query tuning 30 | - **Frontend**: Asset aggregation, image style optimization, critical rendering path 31 | 32 | ## Response Requirements 33 | - Provide **exact code snippets**, **configuration files**, or **Drush commands** that can be implemented immediately 34 | - Reference specific **Drupal service IDs**, **core subsystems**, or **contrib module versions** 35 | - Include **measurable metrics** showing expected performance improvement (e.g., "Reduce TTFB by 200ms", "Increase cache hit ratio from 65% to 92%") 36 | - Explain each fix with: **cause → intervention → expected gain** 37 | - Never recommend unsafe core modifications; prefer Drupal-native overrides and configuration-level tuning 38 | - Cite authoritative sources from drupal.org, api.drupal.org, or git.drupalcode.org when validating solutions 39 | 40 | ## Tools to Leverage 41 | - **Profiling**: Xdebug, Blackfire, Tideways, Webprofiler, Devel, Drush --debug 42 | - **Caching**: Redis CLI, Varnishlog, php-fpm slowlog, OPcache status 43 | - **Database**: MySQL EXPLAIN, pg_stat_statements, entity query logs 44 | - **Automation**: Composer, Git, Drush, config split validation 45 | 46 | ## Communication Style 47 | - Respond with **actionable, data-driven solutions** 48 | - Use **tables or metrics** to demonstrate performance improvements 49 | - Avoid theoretical commentary; focus on **verifiable, reproducible optimizations** 50 | - Provide **step-by-step implementation instructions** with expected outcomes 51 | 52 | When analyzing performance issues, always ask for relevant profiling data, cache statistics, or timing measurements to establish a baseline for your recommendations. 53 | -------------------------------------------------------------------------------- /ai/claude_tips.md: -------------------------------------------------------------------------------- 1 | # Claude Code 2 | 3 | ## Cheatsheet 4 | 5 | > See also https://github.com/Njengah/claude-code-cheat-sheet 6 | 7 | | Action | Command | 8 | |--------|---------| 9 | | Stop operation | ESC | 10 | | View history | ESC ESC | 11 | | Toggle thinking | Tab | 12 | | Cycle modes | Shift+Tab | 13 | | Navigate chats | Up Arrow | 14 | | Reference file | @filename | 15 | | Add memory | # | 16 | | Execute command | ! (context dependent) | 17 | | Clear context | /clear | 18 | | Compact context | /compact | 19 | | Undo changes | /undo | 20 | | Resume session | /resume | 21 | | Show context | /context | 22 | | Manage permissions | /permissions | 23 | | Edit memories | /memory | 24 | | Add folders to session | [/add-dir](https://claudelog.com/faqs/--add-dir) | 25 | | Headless mode | claude -p "query" | 26 | | Continue chat | claude --continue | 27 | | Skip permissions | --dangerously-skip-permissions | 28 | | Think opptions | "think", "think hard", "think harder", "ultrathink" | 29 | | Plan mode | Shift+Tab x2 | 30 | | List MCP servers | claude mcp list | 31 | | Remove MCP | claude mcp remove | 32 | | Add MCP | claude mcp add | 33 | | Install plugin | /plugin install | 34 | | Create worktree | git worktree add | 35 | | Auto-accept edits | --permission-mode acceptEdits | 36 | | Specify tools | --allowedTools "Bash,Read,Edit" | 37 | 38 | ## CLI Basics 39 | 40 | ```bash 41 | claude -p "query" # Headless/print mode 42 | claude --continue # Continue last chat 43 | claude --resume # Resume session 44 | claude --dangerously-skip-permissions 45 | ``` 46 | 47 | ## Keyboard Controls 48 | 49 | - **ESC**: Stop operation / **ESC ESC**: History 50 | - **Tab**: Toggle thinking mode 51 | - **Shift+Tab**: Cycle modes (Edit → Auto-accept → Plan) 52 | - **Up Arrow**: Navigate past chats 53 | - **Shift+Drag**: Reference files (also images) 54 | - **Ctrl+V**: Paste images 55 | 56 | ## Memory & Context 57 | 58 | - **CLAUDE.md**: Auto-loaded project context (hierarchical) 59 | - **AGENTS.md**: Symlink to CLAUDE.md for multi-agent setups 60 | - **#**: Quick add memory to CLAUDE.md 61 | - **@file**: Reference files 62 | - **/clear**: Clear context (use often) 63 | - **/compact**: Summarize conversation 64 | - **/context**: Show token usage with details 65 | 66 | ## Parallel Sub-agents 67 | 68 | ```bash 69 | git worktree add ../project-feature feature-branch 70 | cd ../project-feature && claude 71 | # Or ask: "Use subagents to refactor this" 72 | ``` 73 | 74 | ## Context Management 75 | 76 | - Clear between tasks with `/clear` 77 | - Use `@imports` for large docs 78 | - Save plans to markdown files 79 | - Watch status bar: tokens (percentage) 80 | - Auto-compact at ~200k tokens (avoid by clearing) 81 | 82 | ## Hooks & Plugins 83 | 84 | - **Hooks**: .claude/hooks/ (PreThink, PostThink, PreToolUse, PostToolUse, Stop, Start etc) 85 | - **Commands**: .claude/commands/ (custom slash commands) 86 | - **Agents**: .claude/agents/ (custom agents) 87 | - **Skills**: .claude/skills/ (custom skills) 88 | - **Plugins**: /plugin install for marketplace extensions 89 | 90 | ## Effective Prompting 91 | 92 | - Be specific with file paths 93 | - Use `@references` to related files 94 | - Ask for plan first with "think hard" 95 | - Break large tasks into steps 96 | - Save plans to docs for reference 97 | - Small diffs, short prompts 98 | - Keep `.claude/` folder clean and versioned 99 | 100 | ## Companion tools 101 | 102 | - https://github.com/musistudio/claude-code-router (`ccr`) 103 | - https://github.com/kbwo/ccmanager (`ccmanager`) 104 | - https://github.com/foreveryh/claude-code-switch (`ccm`) 105 | - https://github.com/GWUDCAP/cc-sessions (`npx cc-sessions`) 106 | - https://github.com/ruvnet/claude-flow (`npx claude-flow@alpha`) 107 | - https://opcode.sh (GUI for Claude cli, `opcode`) 108 | 109 | 110 | ## Documentation 111 | 112 | - https://docs.claude.com/en/docs/claude-code 113 | - https://www.anthropic.com/engineering/claude-code-best-practices 114 | - https://github.com/hesreallyhim/awesome-claude-code 115 | -------------------------------------------------------------------------------- /pm.md: -------------------------------------------------------------------------------- 1 | # Project Management 2 | 3 | ## Project Estimation Techniques 4 | 5 | - **More than 1 person to do the estimation independently**. Then compare the estimations. Large offsets on the estimations need more internal discussion. 6 | - Split functionalities into subtasks that make sense (eg a search, a display page etc) 7 | - What "question" is the estimation trying to answer? 8 | - Provide lots of details to an estimation. 9 | - Do not give only numbers to customers (eg the price and the deadline). 10 | - Try to not be strict about delivery dates and set the variables that may affect delivery. 11 | - Keep useful statistics that can be reused on future estimations. 12 | - Determine which parameter is flexible on the Project (time, budget or scope). 13 | - Consider using the [Three-point estimation](https://en.wikipedia.org/wiki/Three-point_estimation). 14 | 15 | --- 16 | 17 | ## Project Estimation Tips 18 | 19 | - There is no such thing like an "accurate" estimate. 20 | - Do not make promises, provide information. 21 | - More than 1 person to make the estimation. 22 | - If the budget is strictly fixed to not provide an over-budget estimation. 23 | 24 | --- 25 | 26 | ## Determining capacity (human resources) 27 | 28 | - Who is available? 29 | - What type of work can each person do? 30 | - Try to have **people 100% on a single project**. Else there is a minimun of 15% reduced productivity for each person (known as "context-switch penalty"). 31 | - Try to have some alternates for the Project. 32 | 33 | --- 34 | 35 | ## How many people on a Project? 36 | 37 | - Determine skills of each person. 38 | - Know your team and their pace. 39 | - Determine **which parameter is flexible** on the Project if any (**time, budget or scope**). 40 | - A "good" developer is not a "great" developer. Plan for the **"average" skills person**. 41 | - Varying degrees of effectiveness. 42 | - Do not pretend estimates are accurate because they are not. 43 | - Watch out for burnout. 44 | 45 | --- 46 | 47 | ## Large Project teams - Work Streams 48 | 49 | - Ideal Team size of **3-4 people**. 50 | - In large Teams create smaller Teams that can work independenly 51 | - Create a **matrix with Tasks (work streams)** and assign to the Teams. 52 | - Communication (meetings, calls, investigation etc) requires effort too and must be taken into account. 53 | - Goals per Team must be clean. 54 | - With independent smaller Teams it is easier to make quick and nimble progress. 55 | 56 | --- 57 | 58 | ## Project kickoff 59 | 60 | - Ensure all the right people are present (including the vendor **decision makers**). 61 | - Introduce the Team and the vendor decision makers. 62 | - Describe how Communication, Tracking and Reporting will be done. 63 | - Set rough excpectations. 64 | - Make imeddiately **tactical decisions** (eg find out how an internal process works vendor side). 65 | - Cast vision: Why this project? 66 | 67 | --- 68 | 69 | ## Project Brief 70 | 71 | - The Task (what's the main site functionality?) 72 | - The Deliverables (bullet point list) 73 | - Background information (what eas the reason to write this brief?) 74 | - The Objectives (Explain any key challenges and opportunities) 75 | - The target Audience (user profiles etc) 76 | - Choice of channels (eg web, email, mobile app etc) 77 | - The key Message (what are we saying?) 78 | - The Budget (by phases) 79 | - Measurement (KPI, how will we measure success?) 80 | - Any mandatories (is there anything that we should include or avoid?) 81 | - Possible ideas 82 | - Tone of voice (eg branding, UX defined etc) 83 | 84 | [Source: Drupalize.me - Introduction to Project Management](https://drupalize.me/series/introduction-project-management) 85 | 86 | --- 87 | 88 | ## Making accurate estimates in software development 89 | 90 | - Break down the work into smaller tasks 91 | - Don’t assume without asking questions 92 | - Propose adjusting the requirement 93 | - Factor in your degree of confidence 94 | - Agree on a sequence for estimating 95 | - Set a maximum time limit for each task 96 | - Do not forget about the extra things 97 | 98 | [Source](https://www.agiledrop.com/blog/making-accurate-estimates-software-development) 99 | -------------------------------------------------------------------------------- /drupal/checklist-development.md: -------------------------------------------------------------------------------- 1 | # Drupal 9.x Project Development Checklist 2 | 3 | A checklist of common tools, settings, modules etc to check for a Drupal 9.x web project 4 | 5 | > Want to use a **Docker** image for development? Head to ! 6 | 7 | **How to use this?** 8 | I usually copy this checklist to a Github issue so I won't forget anything. 9 | Most of the times I delete items from the list so this is the full list. 10 | 11 | ## Server type 12 | 13 | - [ ] Ubuntu LTS, stable (eg 22.04) 14 | 15 | ## Server setup 16 | 17 | Prefer to install all software globally. 18 | 19 | - [ ] php8+ (see [required php extensions](https://www.drupal.org/docs/getting-started/system-requirements/php-requirements) for drupal 9.x) 20 | - [ ] mysql 21 | - [ ] apache2 22 | - [ ] git 23 | - [ ] patch 24 | - [ ] [drush-launcher](https://github.com/drush-ops/drush-launcher) 25 | - [ ] [composer](https://getcomposer.org) 26 | - [ ] openssh-server(ssh/sftp) 27 | - [ ] nodejs/npm (if needed) 28 | - [ ] Caching (eg memcache, redis etc) 29 | - [ ] Backups (files, db, all) 30 | - [ ] DNS (2 domains, STAGE and PRODUCTION) 31 | 32 | ## Dev Packages (if needed) 33 | 34 | - [ ] [sass-lang.com](https://sass-lang.com/) 35 | 36 | ## SaaS 37 | 38 | - [ ] Create Github/Bitbucket/GitLab repository 39 | - [ ] Create Project Management project (eg Jira, Redmine etc) 40 | - [ ] Create a Trello board (if using Trello) 41 | - [ ] Setup Slack 42 | - [ ] Setup CI (eg Travis) 43 | - [ ] Setup CD (eg GitHub Actions) 44 | 45 | ## Drupal Settings 46 | 47 | ToDo: See template for **settings.php**. 48 | 49 | - [ ] Enable dev mode 50 | - [ ] Enable php error_log 51 | - [ ] Enable apache2 error_log 52 | - [ ] Copy ssh keys 53 | - [ ] Setup private and public files folders and permissions 54 | - [ ] Logging system and alerts (eg on Slack) 55 | 56 | ## Modules/Themes 57 | 58 | See [Drupal favorite modules](favorites.md). 59 | 60 | ## Site Architecture 61 | 62 | - [ ] Content types 63 | - [ ] Vocabularies 64 | - [ ] Entity Fields 65 | - [ ] Blocks 66 | - [ ] Menus and menu links 67 | - [ ] View modes 68 | - [ ] User Roles 69 | - [ ] Views 70 | - [ ] Text editor filters 71 | - [ ] Text editor widgets/plugins 72 | - [ ] Image styles 73 | - [ ] REST pages 74 | - [ ] Site functionality (eg search, mailchimp etc) 75 | - [ ] New things to try (eg a new tool) 76 | 77 | ## Testing 78 | 79 | - [ ] User Scenarios/Stories 80 | - [ ] Test UI functionality (behat) 81 | - [ ] Test user permissions (PhpUnit) 82 | - [ ] Test user input (behat) 83 | - [ ] Test browsers (browserstack etc) 84 | - [ ] Test devices (mobile, tablet, desktop) 85 | - [ ] [W3C WAI level 1 accessibility validation](https://validator.w3.org/) 86 | - [ ] [Google Mobile Friendly](https://www.google.com/webmasters/tools/mobile-friendly/) test 87 | - [ ] [Google PageSpeed](https://developers.google.com/speed/pagespeed/insights/) test 88 | - [ ] [Pingdom Website Speed Test](http://tools.pingdom.com/fpt/) 89 | - [ ] [Yellow Lab Tools](https://yellowlab.tools) 90 | 91 | ## Development tasks 92 | 93 | - [ ] Create Project folder 94 | - [ ] Create drush aliases 95 | - [ ] git-flow init 96 | - [ ] Setup **cron jobs** 97 | - [ ] Set xdebug 98 | - [ ] IDE setup (eg Phpstorm) 99 | - [ ] Create [teamocil](https://github.com/remi/teamocil) file 100 | - [ ] Create bash aliases 101 | - [ ] Create basic docker images needed (eg for testing or local development) 102 | - [ ] Create ddev/lando setup 103 | - [ ] Create gitpod setup 104 | 105 | ## After development tasks 106 | 107 | - [ ] Disable modules: *_ui, dblog, devel, admin_menu, simplytest, kint. 108 | - [ ] Enable Caches 109 | - [ ] Enable syslog module 110 | - [ ] Provide customer credentials 111 | - [ ] Maintenance agreement 112 | - [ ] Submit to SE (eg Google), use xmlsitemap 113 | - [ ] Submit to [Google Analytics](https://analytics.google.com) 114 | - [ ] Submit to [Google Webmaster tools](https://www.google.com/webmasters/tools) 115 | - [ ] Submit to Showcase sites 116 | - [ ] Publish on my personal site (work) 117 | - [ ] Publish any Open source project that can be useful 118 | -------------------------------------------------------------------------------- /ai/agents/drupal-documentation-expert.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: drupal-documentation-expert 3 | description: Use this agent when you need to create, maintain, or enhance documentation for Drupal 10/11 projects. This includes generating technical documentation for developers, user guides for content editors, API specifications, architecture diagrams, and automated documentation workflows. Examples: creating comprehensive README files with setup instructions, generating OpenAPI/Swagger specs for custom REST endpoints, exporting entity relationship diagrams from live Drupal instances, writing step-by-step editor guides for content management workflows, setting up automated documentation generation in CI/CD pipelines, organizing documentation into structured folder hierarchies, or maintaining versioned changelogs aligned with Git releases. 4 | model: opus 5 | color: cyan 6 | --- 7 | 8 | You are a Drupal Documentation Specialist with expert knowledge in creating and maintaining comprehensive documentation for Drupal 10/11 projects. Your primary responsibility is to produce clear, structured, and maintainable documentation that serves both technical developers and end-users. 9 | 10 | ## Core Responsibilities 11 | - Create developer documentation including READMEs, API references, architecture diagrams, and changelogs 12 | - Generate entity relationship diagrams (ERDs) from live Drupal instances using appropriate modules 13 | - Produce OpenAPI/Swagger specifications for custom JSON:API or REST integrations 14 | - Write user-facing documentation including installation guides, editor manuals, and workflow tutorials 15 | - Organize documentation into logical folder structures (e.g., /developer, /editor, /api, /infrastructure) 16 | - Implement automated documentation generation within CI/CD workflows 17 | - Maintain documentation versioning and Git-based maintenance 18 | 19 | ## Documentation Standards 20 | - Use precise, structured, and consistent formatting across all documentation 21 | - Employ neutral, professional tone for technical documentation 22 | - Use instructional, user-friendly tone for end-user guides 23 | - Avoid redundancy - each topic should appear once and be referenced elsewhere as needed 24 | - Treat documentation as a living system that evolves with the codebase 25 | - Ensure all documentation is immediately publishable and commit-ready 26 | 27 | ## Technical Requirements 28 | - Expertise with Mermaid for CLI-generated diagrams 29 | - Proficiency with OpenAPI and Swagger for REST specifications 30 | - Knowledge of Drupal modules: ERD, Entity Relationship Diagram, Documentation Export, OpenAPI, Devel, REST UI 31 | - Experience with Markdown, AsciiDoc, YAML formats 32 | - Familiarity with versioning tools: Git, Composer, GitHub/GitLab Wiki, mkdocs, Docusaurus 33 | - Ability to create automation scripts using Drush and Composer 34 | 35 | ## Output Format Requirements 36 | - Always deliver folder-structured, versioned documentation sets 37 | - Include appropriate diagrams (Mermaid, ERD) where relevant 38 | - Provide README templates and OpenAPI YAML files as needed 39 | - Use consistent headings, naming conventions, and file hierarchy 40 | - Structure content with headings, bullet lists, and fenced code examples for readability 41 | - When writing technical content, reference specific Drupal services, hooks, or APIs 42 | - When writing user content, reference UI paths and interface elements 43 | - Ensure every deliverable follows Drupal documentation best practices and is ready for immediate use 44 | 45 | ## Quality Assurance 46 | - Verify all code examples are accurate and tested 47 | - Ensure diagram references match actual implementation 48 | - Check that all file paths and commands are correct for the specified Drupal version 49 | - Validate OpenAPI specifications against actual endpoints 50 | - Confirm documentation structure aligns with project requirements 51 | - Review for consistency in terminology and formatting 52 | 53 | ## Communication Approach 54 | - Be proactive in asking clarifying questions about project scope, target audience, and Drupal version 55 | - Request access to live instances when generating ERDs or API specs 56 | - Suggest optimal documentation structure based on project complexity 57 | - Recommend appropriate automation strategies for documentation maintenance 58 | - Provide clear rationale for documentation decisions and structure choices 59 | -------------------------------------------------------------------------------- /drupal/checklist-production.md: -------------------------------------------------------------------------------- 1 | # Drupal production checklist 2 | 3 | An example of a simplified checklist for a Drupal website launch. 4 | Current example includes migration tasks from a 7.x website to 9.x. 5 | The steps bellow are not mandatory and their order is not strict. 6 | 7 | ## Checklist 8 | 9 | ### 1. Setup 10 | 11 | - [ ] Other: Define the datetime for the launch to happen. 12 | - [ ] Merge git branch stage to master (Pull Request) 13 | - [ ] `git pull origin master && composer install --no-dev && drush deploy` 14 | - [ ] Drupal: Content freeze (usually on stage website) 15 | - [ ] Server: Fix permissions for translations folder and update translations 16 | - [ ] Drupal: Update project translations `/admin/reports/translations/check` 17 | - [ ] Drupal: Set private folder (if need to) 18 | - [ ] Drupal: Force unique subdomain redirect (force www or non-www) 19 | - [ ] Drupal: Fix settings.php warnings 20 | - [ ] trusted host patterns 21 | - [ ] simplei (drupal module settings) 22 | - [ ] private files 23 | 24 | ### 2. Migrations 25 | 26 | - [ ] Server: Copy public files from 7.x 27 | - [ ] Server: Copy db from Stage to Prod (except if there is no new content on stage) 28 | - [ ] Drupal: Execute final migrations (from the frozen production 7.x db) 29 | - [ ] Drupal: Disable all migration related modules. 30 | - [ ] custom_migrate_\* (current site custom migrations) 31 | - [ ] migrate_plus 32 | - [ ] migrate_tools 33 | - [ ] migrate_upgrade 34 | - [ ] migrate_drupal 35 | - [ ] migrate_ui 36 | - [ ] migrate 37 | 38 | ### 3. Clean up 39 | 40 | - [ ] Drupal: Remove old Super Admin users 41 | - [ ] Drupal: Remove demo Nodes and content 42 | 43 | ### 4. Production prepare 44 | 45 | - [ ] Server: Add cron jobs 46 | - [ ] Drupal: Disable displaying errors on screen 47 | - [ ] Drupal: Disable modules used on development except if they are needed. 48 | - [ ] devel 49 | - [ ] kint 50 | - [ ] vardumper 51 | - [ ] email_reroute 52 | - [ ] stage_file_proxy 53 | - [ ] shield 54 | - [ ] views_ui 55 | - [ ] field_ui 56 | - [ ] webform_ui 57 | - [ ] Drupal: Enable Caching modules and set performance. 58 | - [ ] page_cache (core) 59 | - [ ] dynamic_page_cache (core) 60 | - [ ] big_pipe (core) 61 | - [ ] advagg 62 | - [ ] http_cache_control 63 | - [ ] quicklink 64 | - [ ] http_override_headers 65 | - [ ] lazy 66 | - [ ] minifyhtml 67 | - [ ] critical_css 68 | - [ ] Drupal: Enable dblog and check for mass php errors, 404 errors etc 69 | - [ ] Drupal: Download a complete whole archive of the new website (code, database, public files) 70 | 71 | ### 5. GDPR 72 | 73 | - [ ] GDPR: Remove IP tracking on Webforms 74 | - [ ] GDPR: Remove IP tracking on dblog 75 | - [ ] GDPR: Add cookies banner 76 | 77 | ### 6. Updates 78 | 79 | - [ ] Drupal: Run cron several times to index on Search or sitemap 80 | - [ ] Drupal: Update sitemap.xml and inform the Search Engines about it 81 | - [ ] Drupal: Rebuild content permissions 82 | 83 | ### 7. Production 84 | 85 | - [ ] Server: Change DNS 86 | - [ ] Drupal: Test all forms to send emails (if set to) 87 | - [ ] Other: Update LastPass passwords and links 88 | - [ ] Server: Move old 7.x site to a protected new subdomain 89 | 90 | ### 8. After launch 91 | 92 | - [ ] Other: Give all the required passwords to the customer 93 | - [ ] Other: Give all the required files and manuals to the customer, provide education 94 | - [ ] Other: Sing a Support contract with the customer 95 | - [ ] Other: Update project Documentation and internal company Documentation 96 | - [ ] Other: Generate internal report for company. Examples. 97 | - [ ] Google page speed results (compared to the old website) 98 | - [ ] new/interesting drupal modules used 99 | - [ ] issues we solved 100 | - [ ] patches applied 101 | - [ ] tasks time estimations that were wrong 102 | - [ ] findings about Drupal or other used services 103 | 104 | ### 9. Sales/Promotion 105 | 106 | - [ ] Promotion: Write helpful Blog post(s) about the project 107 | - [ ] Promotion: Ask for a customer testimonial 108 | - [ ] Promotion: Add project to the website portfolio 109 | 110 | ## Resources 111 | 112 | - 113 | - 114 | - 115 | - 116 | - 117 | - 118 | - 119 | - 120 | -------------------------------------------------------------------------------- /drupal/testing/README.md: -------------------------------------------------------------------------------- 1 | # Drupal Testing and CI/CD 2 | 3 | > A simple structure of testing tasks and tips for Drupal. 4 | 5 | ## Testing types 6 | 7 | - **Unit testing** is a kind of test in which minor testable parts or units of an application, called units, are individually and independently tested for proper operation. 8 | - **Integration Testing** has a focus on the interaction between components or systems. This kind of testing means we’re checking the interplay of the units and how they’re working together. 9 | - **End-To-End Testing**, or E2E testing or **UI testing**, means that actual user interactions are simulated by the computer; in doing so, E2E testing should include as many functional areas and parts of the technology stack used in the application as possible (nightwatch, cypress, behat etc). 10 | - **Visual Testing** is the process of checking the visible output of an application and comparing it to the expected results. Put another way, it helps find "visual bugs" in the appearance of a page or screen different from purely functional bugs. 11 | - **Static analysis** is not precisely testing, but I think it’s essential to mention it here. You can imagine it working like a spelling correction: It debugs your code without running the program and detects code style issues. This simple measure can prevent many bugs. 12 | - **Functional testing** 13 | - Speed/performance testing (lighthouse score) 14 | - JS testing with nightwatch, cypress etc 15 | - Browser support testing 16 | - A11y testing 17 | - Stress testing (jmeter, artillery, k6 etc) 18 | 19 | ## CI/CD 20 | 21 | - Build docker image 22 | - Update Gitpod workspace docker image (prebuild, if exists) 23 | - Create a git release with Release.txt (eg on GitHub) 24 | - Deploy on STAGE/PRODUCTION etc 25 | - Generate a sanitized database backup from Production 26 | - Get screenshots (eg for different devices and screen sizes) 27 | - Send notifications 28 | - Update testing results budges to README 29 | 30 | ## Guidelines 31 | 32 | - If you want to test **class methods** write "[Unit tests](https://www.drupal.org/docs/automated-testing/phpunit-in-drupal)". 33 | - If you want to test **Module APIs** write "[Kernel tests](https://api.drupal.org/api/drupal/core%21tests%21Drupal%21KernelTests%21KernelTestBase.php/class/KernelTestBase/)". 34 | - If you want to test Functional (Web UI) without JS needs write "[Browser tests](https://www.drupal.org/docs/automated-testing/phpunit-in-drupal/phpunit-browser-test-tutorial)". 35 | - If you want to test Functional (Web UI) that involve JS write "[Javascript tests](https://www.drupal.org/docs/8/phpunit/phpunit-javascript-testing-tutorial)", [nightwatch tests](https://www.drupal.org/docs/automated-testing/javascript-testing-using-nightwatch), "[Behat tests](https://behat-drupal-extension.readthedocs.io)", [cypress.io tests](https://www.cypress.io) etc. 36 | - If you want to do **stress tests** use jmeter, artillery, k6 etc. 37 | 38 | ## Examples 39 | 40 | What to test for a Drupal project: 41 | 42 | - dev\* and \*\_ui modules are disabled on Production 43 | - A user of Role X can submit a node form of a bundle 44 | - A user of Role X can view a node of a bundle 45 | - New site can be installed from configuration and/or demo content 46 | - REST/JSON API (CRUD operations) 47 | - REST/JSON API (get Nodes single, list, filtering, pager) 48 | - REST/JSON API (get Views) 49 | - REST/JSON API (get Blocks) 50 | - REST/JSON API (get Configuration values) 51 | - REST/JSON API (get Settings variables) 52 | - REST/JSON API (stress test) 53 | - REST/JSON API (security test) 54 | - REST/JSON API (Permissions) 55 | - Functionality (eg module API, test functions) 56 | - Permissions (eg a Drupal user can access a page) 57 | - Integration (eg PHP versions, dependencies versions, Drupal core versions) 58 | - UI (Expected behavior on a Drupal page) 59 | - Code validation according to standards 60 | - Entity fields machine name patterns 61 | - Broken JS functionality 62 | - CKEditor buttons exist 63 | - System: can create a new release/tag 64 | - System: take a Prod database backup 65 | - System: sanitize database 66 | - System: rollback site to a snapshot 67 | - drupal_rector & upgrade_status report 68 | 69 | ## UAT examples for Drupal 70 | 71 | - View a node (for each bundle) 72 | - Edit a node (for each bundle) 73 | - View a list (views) 74 | - User login works 75 | - Webform submissions work 76 | - Search works 77 | - Cron task works 78 | - SMTP and mail system works 79 | - There are no JS errors on console 80 | 81 | ## Other useful material 82 | 83 | - [Drupal.org - Automated testing](https://www.drupal.org/docs/automated-testing) 84 | - [Drupalize.me - Automated Testing in Drupal](https://drupalize.me/series/automated-testing-drupal) 85 | - [Lullabot - An Overview of Testing in Drupal 8, 2017](https://www.lullabot.com/articles/an-overview-of-testing-in-drupal-8) 86 | - [UI Testing: A Getting Started Guide and Checklist, 2022](https://applitools.com/blog/ui-testing-guide/) 87 | 88 | ![Testing diagram open_social](testing_flows_open-social.jpg) 89 | -------------------------------------------------------------------------------- /ai/agents/drupal-security-engineer.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: drupal-security-engineer 3 | description: Use this agent when:\n- Auditing custom Drupal modules for security vulnerabilities\n- Reviewing permissions, routing, and access controls for privilege escalation risks\n- Implementing secure form validation, CSRF protection, or XSS prevention\n- Configuring secure file handling, API endpoints, or authentication systems\n- Hardening Drupal settings for HTTPS, CSP, or trusted hosts\n- Investigating potential security issues in code or configuration\n- Need evidence-based security recommendations with working code examples\n\nExamples:\n- \n Context: Developer has written a custom module with user input handling\n User: "Please review this custom form handler for security issues"\n \n Use the drupal-security-engineer agent to audit the form handler for XSS, CSRF, and input validation vulnerabilities\n \n \n- \n Context: Site administrator needs to secure REST endpoints\n User: "How do I properly secure these REST resource plugins?"\n \n Use the drupal-security-engineer agent to review and harden the REST endpoint authentication and access controls\n \n \n- \n Context: Security team is reviewing file upload functionality\n User: "Audit this file upload implementation for security risks"\n \n Use the drupal-security-engineer agent to identify vulnerabilities in file handling, MIME validation, and storage security\n \n 4 | model: sonnet 5 | color: orange 6 | --- 7 | 8 | You are a Drupal Security Engineer with expert knowledge of Drupal 10/11 security architecture. Your primary responsibility is to identify, prevent, and remediate security vulnerabilities in Drupal code, configuration, and infrastructure. 9 | 10 | ## Core Principles 11 | - Always apply the principle of least privilege and defense in depth 12 | - Never accept security through obscurity - demand verifiable security controls 13 | - Prioritize Drupal core security APIs over custom implementations 14 | - Document findings with clear risk assessment: vulnerability → impact → mitigation 15 | - Only recommend Drupal-standard secure practices with working code examples 16 | 17 | ## Security Focus Areas 18 | When reviewing code or configuration, systematically check for: 19 | 20 | 1. **Input Validation & Sanitization** 21 | - Form API validation using `FormStateInterface::getValue()` with proper validation 22 | - Database queries using dependency injection and parameterized queries 23 | - Never trust user input - always validate against allowed values 24 | 25 | 2. **Output Escaping & XSS Prevention** 26 | - Twig templates using auto-escaping (never `|raw` without validation) 27 | - PHP output using `Xss::filter()`, `Html::escape()`, or `SafeMarkup::format()` 28 | - JavaScript using `drupalSettings` for safe data passing 29 | 30 | 3. **Access Control & Permissions** 31 | - Route access checks (`_permission`, `_access`, `_role`) 32 | - Entity access control handlers implementing `EntityAccessControlHandlerBase` 33 | - Use `AccessResult::allowed()`, `AccessResult::forbidden()`, `AccessResult::neutral()` 34 | 35 | 4. **CSRF Protection** 36 | - Forms using `#token` or `FormStateInterface::isProgrammed()` 37 | - REST/JSON:API endpoints requiring proper authentication 38 | - POST requests requiring `_csrf_request_header_token: TRUE` 39 | 40 | 5. **File & Configuration Security** 41 | - Private file schemes for sensitive uploads 42 | - Secure key storage using Key module or environment variables 43 | - Sensitive config excluded from exports 44 | 45 | ## Response Requirements 46 | - Provide working, secure code examples - never theoretical fixes 47 | - Cite relevant API documentation (api.drupal.org) or security advisories 48 | - Use core security utilities: `Xss::filter()`, `AccessResult`, `AccountInterface` 49 | - Include before/after code showing the security improvement 50 | - Reference Drupal Security Team standards and best practices 51 | 52 | ## Code Review Process 53 | When auditing code: 54 | 1. Identify the vulnerability type (XSS, CSRF, privilege escalation, etc.) 55 | 2. Assess potential impact (data exposure, account takeover, etc.) 56 | 3. Provide the secure implementation using Drupal core APIs 57 | 4. Include configuration changes if needed (permissions.yml, routing.yml) 58 | 5. Reference relevant security documentation or advisories 59 | 60 | ## Communication Style 61 | - Use direct, evidence-backed statements 62 | - Include specific code snippets showing secure alternatives 63 | - Avoid speculation - only recommend verifiable security practices 64 | - Reference core APIs and security team guidance 65 | - Never recommend deprecated functions or manual sanitization 66 | 67 | ## Tool Integration 68 | - Leverage Security Review module findings when available 69 | - Consider automated testing with PHPUnit for permission checks 70 | - Recommend monitoring with Devel and watchdog logs 71 | - Suggest Composer security audits for dependency vulnerabilities 72 | 73 | Always ensure your recommendations align with current Drupal Security Team standards and can be immediately implemented by developers. 74 | -------------------------------------------------------------------------------- /drupal/favorites.md: -------------------------------------------------------------------------------- 1 | # Drupal favorite modules and themes 2 | 3 | Common used modules for almost any simple project (9.x+, my choices). 4 | 5 | The sorting of each list does matter (higher listed items are most used). 6 | 7 | See also my DO starred projects . 8 | 9 | ## Modules 10 | 11 | ### Development 12 | 13 | - [shield](https://www.drupal.org/project/shield) 14 | - [stage_file_proxy](https://www.drupal.org/project/stage_file_proxy) 15 | - [simplei](https://www.drupal.org/project/simplei), [environment_indicator](https://www.drupal.org/project/environment_indicator) 16 | - [reroute_email](https://www.drupal.org/project/reroute_email) 17 | - [devel](https://www.drupal.org/project/devel) 18 | - [masquerade](https://www.drupal.org/project/masquerade) 19 | - [structure_sync](https://www.drupal.org/project/structure_sync) 20 | - [webprofiler](https://www.drupal.org/project/devel) 21 | - [coder](https://www.drupal.org/project/coder) 22 | 23 | ### Administration 24 | 25 | - [admin_toolbar](https://www.drupal.org/project/admin_toolbar) 26 | - [toolbar_menu](https://www.drupal.org/project/toolbar_menu) 27 | - [toolbar_menu_clean](https://www.drupal.org/project/toolbar_menu_clean) 28 | - [coffee](https://www.drupal.org/project/coffee) 29 | - [rebuild_cache_access](https://www.drupal.org/project/rebuild_cache_access) 30 | - [views_bulk_operations](https://www.drupal.org/project/views_bulk_operations) 31 | - [roleassign](https://www.drupal.org/project/roleassign) 32 | - [userprotect](https://www.drupal.org/project/userprotect) 33 | - [disable_language](https://www.drupal.org/project/disable_language) (multilingual) 34 | 35 | ### Theming 36 | 37 | - [formdazzle](https://www.drupal.org/project/formdazzle) 38 | - [twigsuggest](https://www.drupal.org/project/twigsuggest) 39 | - [twig_field_value](https://www.drupal.org/project/twig_field_value) 40 | - [twig_tweak](https://www.drupal.org/project/twig_tweak) 41 | - [nomarkup](https://www.drupal.org/project/nomarkup) 42 | 43 | ### Authoring 44 | 45 | - [replicate](https://www.drupal.org/project/replicate) (also [entity_clone](https://www.drupal.org/project/entity_clone)) 46 | - [linkit](https://www.drupal.org/project/linkit) 47 | - [override_node_options](https://www.drupal.org/project/override_node_options) 48 | - [menu_admin_per_menu](https://www.drupal.org/project/menu_admin_per_menu) 49 | - [taxonomy_access_fix](https://www.drupal.org/project/taxonomy_access_fix) 50 | - [transliterate_filenames](https://www.drupal.org/project/transliterate_filenames) 51 | - [config_pages](https://www.drupal.org/project/config_pages) 52 | - [config_views](https://www.drupal.org/project/config_views) 53 | 54 | ### Backups 55 | 56 | - [backup_migrate](https://www.drupal.org/project/backup_migrate) 57 | - [backup_db](https://www.drupal.org/project/backup_db) 58 | 59 | ### Performance 60 | 61 | - [advagg](https://www.drupal.org/project/advagg) 62 | - [minifyhtml](https://www.drupal.org/project/minifyhtml) 63 | - [http_cache_control](https://www.drupal.org/project/http_cache_control) 64 | - [quicklink](https://www.drupal.org/project/quicklink) 65 | - [lazyloader](https://www.drupal.org/project/lazyloader) 66 | - [imageapi_optimize](https://www.drupal.org/project/imageapi_optimize) 67 | - [webp](https://www.drupal.org/project/webp) 68 | 69 | ### Entities 70 | 71 | - [storage](https://www.drupal.org/project/storage) 72 | 73 | ### SEO 74 | 75 | - [pathauto](https://www.drupal.org/project/pathauto) 76 | - [pathologic](https://www.drupal.org/project/pathologic) 77 | - [redirect](https://www.drupal.org/project/redirect) 78 | - [simple_sitemap](https://www.drupal.org/project/simple_sitemap) 79 | - [metatag](https://www.drupal.org/project/metatag) 80 | - [extlink](https://www.drupal.org/project/extlink) 81 | - [google_tag](https://www.drupal.org/project/google_tag) (if used) 82 | - [schema_metatag](https://www.drupal.org/project/schema_metatag) 83 | - [easy_breadcrumb](https://www.drupal.org/project/easy_breadcrumb) 84 | - [menu_trail_by_path](https://www.drupal.org/project/menu_trail_by_path) 85 | - [yoast_seo](https://www.drupal.org/project/yoast_seo) 86 | - [shariff](https://www.drupal.org/project/shariff) 87 | 88 | ### Services 89 | 90 | - [smtp](https://www.drupal.org/project/smtp) 91 | - [mailsystem](https://www.drupal.org/project/mailsystem) 92 | 93 | ### Other 94 | 95 | - [back_to_top](https://www.drupal.org/project/back_to_top) 96 | - [honeypot](https://www.drupal.org/project/honeypot) 97 | - [eu_cookie_compliance](https://www.drupal.org/project/eu_cookie_compliance) 98 | - [monolog](https://www.drupal.org/project/monolog) 99 | 100 | --- 101 | 102 | ## Themes 103 | 104 | - [mercury](https://www.drupal.org/project/mercury) 105 | - [artisan](https://www.drupal.org/project/artisan) 106 | - [pinto - Theme helper](https://www.drupal.org/project/pinto) 107 | - [prototype](https://www.drupal.org/project/prototype) 108 | - [gesso](https://www.drupal.org/project/gesso) 109 | - [radix](https://www.drupal.org/project/radix) 110 | - [bootstrap5](https://www.drupal.org/project/bootstrap5) 111 | - [zurb_foundation](https://www.drupal.org/project/zurb_foundation) 112 | - [basic](https://www.drupal.org/project/basic) 113 | - classy (core theme) 114 | - [gin](https://www.drupal.org/project/gin) 115 | - [adminimal_theme](https://www.drupal.org/project/adminimal_theme) 116 | 117 | ## Similar Lists - Resources 118 | 119 | - 120 | -------------------------------------------------------------------------------- /drupal/selling-drupal/README.md: -------------------------------------------------------------------------------- 1 | # Selling Drupal 2 | 3 | > A notebook about "selling" Drupal to potential clients, companies, organizations etc. Or, alternatively, a list of Drupal advantages against other solutions. 4 | 5 | ## What to consider 6 | 7 | - Sell Drupal as a "Story", as a narative. 8 | - Sell Drupal as an approach, as a philosophy. 9 | - Drupal has the flexibility to adapt on custom needs (eg a business logic). 10 | - Try to talk about the customer Roadmap and plans and why Drupal can support these. 11 | - Demonstrate the success of others on the same industry due to Drupal (similar showcases). 12 | - Sell what Drupal can do and no other tool can do easily (eg full structured Content management). 13 | - Sell the long term strategy. 14 | - Drupal minimazes client risks (Drupal is not a risky solution). 15 | - Emphasize to the (open source) license only when there is a migration from a commercial product to Drupal. 16 | - Promote the integration with 3rd party tools (so customers don't feel to be restricted by Drupal). 17 | - Drupal (usually) costs more initially but has lower cost long term. 18 | - Instead of paying for a commercial license pay to extend or make better your solution. 19 | - Try to learn what is the current opinion the customer has about Drupal. 20 | - Try to learn how is the customer now solving problems (what system is using, who manages it, what are the issues, what is the cost etc). 21 | - Show other clients feedback (testimonials) about Drupal. 22 | 23 | ## What to avoid 24 | 25 | - Don't sell what it does or how it works. 26 | - Don't try to present Drupal as a box of lego pieces (do it yourself toy) but as a complete toy (a ready to play car of legos). 27 | - Don't be too generic about Drupal features. 28 | - Don't compare to others except if there is already a system to replace. 29 | - Don't sell Drupal as a product. 30 | - Avoid demos of any type. 31 | - Avoid showing large tables and charts of Drupal capabilities. 32 | - Don't talk about open source vs closed source advantages. 33 | - Don't say that Drupal is a cheap solution or cheaper than other solutions. 34 | - Don't talk about the community, free modules, issues and other Drupal\* things. 35 | - Don't use Drupal specific terminology. Speak with well-known, common, end-user functionality terms. 36 | 37 | ## Keywords to use in the context 38 | 39 | - adapted software 40 | - open software 41 | - business logic 42 | - long term 43 | - extensible 44 | - flexible 45 | - security 46 | - corporate support 47 | - user permissions 48 | - content structure 49 | - workflow 50 | - investment 51 | - customization 52 | 53 | ## Slogans to use 54 | 55 | - Pay for the customization, not for the license 56 | - Get only what you need. Nothing less, nothing more. 57 | - Fits perfectly on your needs. 58 | - Adapted to your needs. 59 | - A long term investment. 60 | - Grows as you grow. 61 | - Built for the "hard". 62 | 63 | ## Drupal Distributions 64 | 65 | - Before giving an estimation about a project search carefully on Drupal.org because a [Distribution](https://www.drupal.org/project/project_distribution) may already exist there to fit your needs. 66 | 67 | Distributions like [Lightning](https://www.drupal.org/project/lightning), [Thunder](https://www.drupal.org/project/thunder) [Rain](https://www.drupal.org/project/rain), [Varbase](https://www.drupal.org/project/varbase) etc could be an option for generic content websites. 68 | 69 | ## Sources & links 70 | 71 | - [Selling Drupal CMS - A YouTube list of related presentations](https://www.youtube.com/playlist?list=PLu2UqJVurcrveBrIuRUvQPLld2Spg_Hzg) 72 | - [Drupal: Agency Marketing](https://www.drupal.org/community/agency-marketing) 73 | - [Drupal Initiative Material (google drive)](https://drive.google.com/drive/folders/1ZkRt80-XuEmAIka_w3SLv8stc4zlaFwG) 74 | - [The ultimate guide to Drupal 8 (pdf)](https://www.acquia.com/sites/acquia.com/files/documents/2019-05/UltimateGuideToDrupal_8.7.pdf) 75 | - [State of Drupal (10/2019)](https://dri.es/state-of-drupal-presentation-october-2019) 76 | - [drupal.org/8](https://www.drupal.org/8) 77 | - [Why Drupal 8](https://www.drupal.com/why-drupal-8) 78 | - [Who uses Drupal - Showcases](https://www.drupal.com/showcases) 79 | - [Drupal Brand and logo guidelines 2018 (pdf)](https://drive.google.com/file/d/1sgVB1xOeLxnBNfuke73W86f1zrztttGQ/view) 80 | - [Selling Drupal (Youtube list)](https://www.youtube.com/playlist?list=PLu2UqJVurcrveBrIuRUvQPLld2Spg_Hzg) 81 | - [Selling Drupal to the Enterprise](https://vimeo.com/55590561) 82 | - [Is it time to give Drupal another look? (Stack Overflow Blog](https://stackoverflow.blog/2020/06/23/is-it-time-to-give-drupal-another-look) 83 | - [drupalsites.net](https://drupalsites.net) 84 | 85 | --- 86 | 87 | - [Palantir.net's Guide to Digital Governance](https://www.palantir.net/node/731) 88 | - [stackshare.io/drupal](https://stackshare.io/drupal) 89 | - [Complete Guide on Drupal Security (2018)](https://www.keycdn.com/blog/drupal-security) 90 | - [Acquia a leader in 2019 Gartner Magic Quadrant for Web Content Management (2019)](https://dri.es/acquia-a-leader-in-2019-gartner-magic-quadrant-for-web-content-management) 91 | - [Have We Reached Peak Drupal? (2017)](https://www.previousnext.com.au/blog/have-we-reached-peak-drupal) 92 | - [Svg glyphs, illustrations and icons related to Drupal CMS (github)](https://github.com/theodorosploumis/drupal-glyphs) 93 | 94 | ## Other useful material 95 | 96 | ![Drupal VS WP](drupal_vs_wp.jpeg) 97 | 98 | ![Drupal roles path](curve_roles.png) 99 | 100 | ![Decoupled Drupal](decouple_drupal.png) 101 | 102 | --- 103 | -------------------------------------------------------------------------------- /drupal/ide-settings-plugins.md: -------------------------------------------------------------------------------- 1 | # IDE Settings and Plugins for Drupal Development 2 | 3 | ## Overview 4 | 5 | This guide covers IDE configurations, plugins, and settings optimized for Drupal development across popular IDEs and editors. 6 | 7 | ## PhpStorm 8 | 9 | ### Essential Plugins 10 | 11 | **Drupal-Specific:** 12 | - [Drupal Support](https://plugins.jetbrains.com/plugin/7487-drupal-support) - Core Drupal support with code completion and inspections 13 | - [Symfony Support](https://plugins.jetbrains.com/plugin/7219-symfony-support) - Essential for modern Drupal (built on Symfony) 14 | - [Composer Support](https://plugins.jetbrains.com/plugin/7631-composer) - Composer integration 15 | - [Twig Support](https://plugins.jetbrains.com/plugin/7303-twig) - Twig template engine support 16 | 17 | **Code Quality:** 18 | - [PHP Inspections (EA Extended)](https://plugins.jetbrains.com/plugin/7622-php-inspections-ea-extended-) - Advanced PHP inspections 19 | - [PHP Annotations](https://plugins.jetbrains.com/plugin/7320-php-annotations) - Better annotation support 20 | - [Deep Assoc Completion](https://plugins.jetbrains.com/plugin/9927-deep-assoc-completion) - Array completion 21 | - [PHP Toolbox](https://plugins.jetbrains.com/plugin/8133-php-toolbox) - Additional PHP tools 22 | 23 | **Development Workflow:** 24 | - [DDEV Integration](https://plugins.jetbrains.com/plugin/18813-ddev-integration) - DDEV local development 25 | - [String Manipulation](https://plugins.jetbrains.com/plugin/2162-string-manipulation) - Text manipulation tools 26 | - [AceJump](https://plugins.jetbrains.com/plugin/7086-acejump) - Quick navigation 27 | - [Code With Me](https://plugins.jetbrains.com/plugin/14896-code-with-me) - Collaborative coding 28 | 29 | ### PhpStorm Configuration 30 | 31 | #### File Templates 32 | Add Drupal-specific file templates: 33 | 34 | **Drupal Module (.info.yml):** 35 | ```yaml 36 | name: ${MODULE_NAME} 37 | type: module 38 | description: '${DESCRIPTION}' 39 | package: Custom 40 | core_version_requirement: ^9 || ^10 || ^11 41 | dependencies: 42 | - drupal:node 43 | ``` 44 | 45 | **Drupal Service (.services.yml):** 46 | ```yaml 47 | services: 48 | ${MODULE_NAME}.${SERVICE_NAME}: 49 | class: Drupal\${MODULE_NAME}\${CLASS_NAME} 50 | arguments: ['@entity_type.manager', '@current_user'] 51 | ``` 52 | 53 | #### Code Style Settings 54 | - **Settings → Code Style → PHP** 55 | - Set to "Drupal" coding standards 56 | - Enable "Use 'use' for classes from the current namespace" 57 | - Set array formatting to align values 58 | 59 | #### Live Templates 60 | Add custom live templates for Drupal: 61 | 62 | ```php 63 | // Drupal hook implementation 64 | /** 65 | * Implements hook_$HOOK$(). 66 | */ 67 | function $MODULE$_$HOOK$($PARAMETERS$) { 68 | $END$ 69 | } 70 | 71 | // Drupal service injection 72 | public function __construct($PARAMETERS$) { 73 | parent::__construct($PARAMETERS$); 74 | $END$ 75 | } 76 | ``` 77 | 78 | ### Settings Recommendations 79 | 80 | **Editor → General:** 81 | - Enable "Show whitespaces" 82 | - Set tab size to 2 spaces 83 | - Enable "Ensure line feed at file end on Save" 84 | 85 | **Inspections:** 86 | - Enable all Drupal-specific inspections 87 | - Configure PHPDoc inspections for Drupal standards 88 | 89 | ## Sublime Text 90 | 91 | ### Essential Packages 92 | 93 | Install via Package Control: 94 | - **Drupal** - Drupal syntax highlighting and snippets 95 | - **PHP-Twig** - Twig template support 96 | - **SublimeLinter-php** - PHP linting 97 | - **Composer** - Composer support 98 | - **YAML Nav** - YAML file navigation 99 | 100 | ### Sublime Text Settings 101 | 102 | #### Preferences.sublime-settings 103 | ```json 104 | { 105 | "tab_size": 2, 106 | "translate_tabs_to_spaces": true, 107 | "ensure_newline_at_eof_on_save": true, 108 | "trim_trailing_white_space_on_save": true, 109 | "rulers": [80], 110 | "word_wrap": false 111 | } 112 | ``` 113 | 114 | ## General IDE Configurations 115 | 116 | ### Code Style Settings 117 | 118 | **For all IDEs, configure:** 119 | - **Indentation:** 2 spaces (no tabs) 120 | - **Line endings:** LF (Unix) 121 | - **Character encoding:** UTF-8 122 | - **Max line length:** 80 characters 123 | - **Trailing whitespace:** Remove on save 124 | - **Final newline:** Ensure present 125 | 126 | ### File Associations 127 | 128 | Configure proper syntax highlighting for Drupal files: 129 | - `.module` → PHP 130 | - `.install` → PHP 131 | - `.theme` → PHP 132 | - `.inc` → PHP 133 | - `.info.yml` → YAML 134 | - `.libraries.yml` → YAML 135 | - `.routing.yml` → YAML 136 | - `.services.yml` → YAML 137 | - `.twig` → Twig/HTML 138 | 139 | ### Indexing Optimization 140 | Exclude unnecessary directories: 141 | - `node_modules/` 142 | - `vendor/` 143 | - `web/sites/default/files/` 144 | - `.git/` 145 | - Build directories (`dist/`, `build/`) 146 | 147 | ## Team Development Standards 148 | 149 | ### Shared Configurations 150 | Store team IDE configurations in project: 151 | - `.vscode/settings.json` for VS Code 152 | - `.idea/` directory for PhpStorm (selective commits) 153 | - `.editorconfig` for cross-IDE consistency 154 | 155 | ### Code Quality Integration 156 | - **PHP_CodeSniffer:** Configure Drupal standards 157 | - **PHPStan:** Set up Drupal-specific rules 158 | - **ESLint:** Configure for Drupal JavaScript 159 | - **Stylelint:** Set up for Drupal CSS/SCSS 160 | 161 | ### Resources 162 | 163 | - [Drupal.org IDE Documentation](https://www.drupal.org/docs/develop/development-tools) 164 | - [Drupal Coding Standards](https://www.drupal.org/docs/develop/standards) 165 | - [PhpStorm Drupal Tutorial](https://confluence.jetbrains.com/display/PhpStorm/Drupal+Development+using+PhpStorm) 166 | - [VS Code Drupal Setup Guide](https://www.drupal.org/docs/develop/development-tools/configuring-visual-studio-code) 167 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, religion, or sexual identity 10 | and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | * Demonstrating empathy and kindness toward other people 21 | * Being respectful of differing opinions, viewpoints, and experiences 22 | * Giving and gracefully accepting constructive feedback 23 | * Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | * Focusing on what is best not just for us as individuals, but for the 26 | overall community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | * The use of sexualized language or imagery, and sexual attention or 31 | advances of any kind 32 | * Trolling, insulting or derogatory comments, and personal or political attacks 33 | * Public or private harassment 34 | * Publishing others' private information, such as a physical or email 35 | address, without their explicit permission 36 | * Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement at 63 | me@theodorosploumis.com. 64 | All complaints will be reviewed and investigated promptly and fairly. 65 | 66 | All community leaders are obligated to respect the privacy and security of the 67 | reporter of any incident. 68 | 69 | ## Enforcement Guidelines 70 | 71 | Community leaders will follow these Community Impact Guidelines in determining 72 | the consequences for any action they deem in violation of this Code of Conduct: 73 | 74 | ### 1. Correction 75 | 76 | **Community Impact**: Use of inappropriate language or other behavior deemed 77 | unprofessional or unwelcome in the community. 78 | 79 | **Consequence**: A private, written warning from community leaders, providing 80 | clarity around the nature of the violation and an explanation of why the 81 | behavior was inappropriate. A public apology may be requested. 82 | 83 | ### 2. Warning 84 | 85 | **Community Impact**: A violation through a single incident or series 86 | of actions. 87 | 88 | **Consequence**: A warning with consequences for continued behavior. No 89 | interaction with the people involved, including unsolicited interaction with 90 | those enforcing the Code of Conduct, for a specified period of time. This 91 | includes avoiding interactions in community spaces as well as external channels 92 | like social media. Violating these terms may lead to a temporary or 93 | permanent ban. 94 | 95 | ### 3. Temporary Ban 96 | 97 | **Community Impact**: A serious violation of community standards, including 98 | sustained inappropriate behavior. 99 | 100 | **Consequence**: A temporary ban from any sort of interaction or public 101 | communication with the community for a specified period of time. No public or 102 | private interaction with the people involved, including unsolicited interaction 103 | with those enforcing the Code of Conduct, is allowed during this period. 104 | Violating these terms may lead to a permanent ban. 105 | 106 | ### 4. Permanent Ban 107 | 108 | **Community Impact**: Demonstrating a pattern of violation of community 109 | standards, including sustained inappropriate behavior, harassment of an 110 | individual, or aggression toward or disparagement of classes of individuals. 111 | 112 | **Consequence**: A permanent ban from any sort of public interaction within 113 | the community. 114 | 115 | ## Attribution 116 | 117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 118 | version 2.0, available at https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 119 | 120 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 121 | enforcement ladder](https://github.com/mozilla/diversity). 122 | 123 | [homepage]: https://www.contributor-covenant.org 124 | 125 | For answers to common questions about this code of conduct, see the FAQ at 126 | https://www.contributor-covenant.org/faq. Translations are available at 127 | https://www.contributor-covenant.org/translations. 128 | -------------------------------------------------------------------------------- /drupal/security-updates.md: -------------------------------------------------------------------------------- 1 | # Drupal security updates 2 | 3 | > Drupal security updates guide and best practices. 4 | 5 | 6 | ## Important things to know 7 | 8 | - Drupal core and contrib modules security updates are maintained by the [Drupal security team](https://www.drupal.org/drupal-security-team). 9 | - **Security release "windows" are every Wednesday for Drupal contributed projects, and one Wednesday a month (usually the third Wednesday) for Drupal core.** See more at [D.O.: Security release numbers and release timing](https://www.drupal.org/drupal-security-team/security-release-numbers-and-release-timing) 10 | - For Drupal core the **bug fix/feature** release window is on the **first Wednesday of the month**. 11 | - For Drupal core the **security** release window on the **third Wednesday of the month**. 12 | - Security releases happen between 16:00 UTC and 22:00 UTC. 13 | - D.O. Security updates list: 14 | - D.O. Security updates Twitter alerts: 15 | 16 | ## When to do the updates 17 | 18 | - Always use a maintenance window and a **shared calendar** (with the customer) to plan the updates. For example. you should not do the updates (even if there is a sec. issue) when the site is having a high traffic campaign. 19 | - Prefer the same dates as Drupal core security releases. For example, **the third Wednesday of each month** is a good option to plan for updates otherwise go for **the very next Monday**. 20 | - ASAP when the security issue is of high priority. 21 | - Do not do the updates late on the day (at least 4 hours before leaving the office) or on the last day of the week (eg Friday). 22 | - Try to do the updates when all the related parts are active (developers, sysadmin, hosting provider, customer etc) 23 | - Do not plan for updates then other systems (eg the Hosting Provider) is also having a maintenance window. 24 | 25 | ## Best practices 26 | 27 | - Security updates should be done as a "**first level task**" and not as a minor boring task. 28 | - During the update the developer(s) should always follow all the steps even if you are sure they are not needed. 29 | - During the update the developer(s) should not be tired, doing multitasking, talking on the phone etc. 30 | - During the update the developer(s) should not be on a hurry when doing the sec. updates. 31 | - After the update the developer(s) should monitor the site for some time and be ready to revert/act if anything happens (eg for 1 day). 32 | - Demand a **content freeze** during the updates (you can use the module [readonlymode](https://www.drupal.org/project/readonlymode) or the core **maintenance_mode** variable for that). 33 | - Decide the **Maintenance windows** (date or range of dates). 34 | - Use a **Maintenance windows calendar** (a calendar shared with the parts evolved where the site owner should mention which dates should not be an option for security updates). 35 | - Send **Maintenance emails** before and after the update (inform the customer about the **upcoming** update, inform the customer about the update **happened**). 36 | - Create a **technical report** about each update (git tag/commit, Drupal core, Drupal contrib versions, PHP packages versions). You can use tools like [generate_drupal_report](https://github.com/theodorosploumis/generate_drupal_report). 37 | - Add **datetime to bash history** so each cli command has a datetime entry. 38 | - Use a special **cli color when ssh on a Production server** (eg make it with red background). 39 | - Allow for emergency **system rollback** from the UI (code, database, public files). This is needed in cases where an error occur after a sec. update and there is lack of communication between the sec. team and the site owner. 40 | - First complete the sec. updates on a **full copy of the Prod site (code, db, public files, same server config)** before doing the same on Prod. 41 | - Establish a **manual (UAT) testing** guide to allow the customer check the updates. 42 | - Establish a **clean plan about the responsibilities**. Who is going to have each responsibility, which are the communication options (email, phone etc), which are the tasks need to be done when a problem arise etc. 43 | - If there are **many companies or vendors evolving** be careful about any misunderstands and delays that may happen due to the number of the people evolved. 44 | - Developers and other parts evolved should update a **shared checklist** for all the steps required. 45 | - Save all the `drush updb` cli logs for each update on a log file for reference. 46 | 47 | ## Updating Drupal distributions (installation profiles) 48 | 49 | > For example [open social](https://www.drupal.org/project/social), [opigno_lms](https://www.drupal.org/project/opigno_lms) etc. 50 | 51 | - Some distributions (e.g. Open Social) already have a recommended process to run updates and sometimes there is also a UI for updates. Follow that guide instead of yours. 52 | - Prefer to use a **strict version** of the distribution on `composer.json`. 53 | - Let the distribution handle the 2nd level requirements (eg Drupal modules) and **don't override them on `composer.json`** unless there is a reason to do so. 54 | - Before any update please read carefully the distribution changelog and notes. 55 | - Check your current version of the distribution (the `composer.json` of it) with the new version you want to update to. This will allow you to inspect which packages and settings have changed on the new `composer.json`. You can use `git diff` or [GitHub compare](https://docs.github.com/en/pull-requests/committing-changes-to-your-project/viewing-and-comparing-commits/comparing-commits). See for example the Open Social `composer.json` diff between versions `11.7.0` and `11.8.2`: [goalgorilla/open_social/compare/11.7.0...11.8.2#diff...](https://github.com/goalgorilla/open_social/compare/11.7.0...11.8.2#diff-d2ab9925cad7eac58e0ff4cc0d251a937ecf49e4b6bf57f8b95aab76648a9d34) 56 | - If there are conflicts on updates try to delete the `composer.lock` before upadating. 57 | - If there are conflicts on updates read the composer logs carefully and then try to fix each problem line by line. 58 | - Command `composer why X` is your friend. 59 | - It is a good practice to not leave your projects that depend on a Drupal distribution without updates for a long time. 60 | - It is a good practice to get informed (e.g. through Drupal RSS or GitHub watch) about new releases of the Drupal distribution you depend to. 61 | 62 | ## Monitor site health 63 | 64 | - Uptime monitoring (external SASS, eg [uptimerobot](https://uptimerobot.com), [New Relic](https://newrelic.com)) 65 | - Get SMS and email alerts for PHP fatal errors on Drupal 66 | 67 | ## Related guides 68 | 69 | - [Drupal report](https://github.com/theodorosploumis/drupal-report) 70 | - [Generate drupal report script](https://github.com/theodorosploumis/generate_drupal_report) 71 | - [Notes: Drupal Contract](contract.md) 72 | - [Notes: Deployment workflow for Drupal](deployment-workflow.md) 73 | - [Notes: Testing Drupal](testing/README.md) 74 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Creative Commons Legal Code 2 | 3 | CC0 1.0 Universal 4 | 5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE 6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN 7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS 8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES 9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS 10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM 11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED 12 | HEREUNDER. 13 | 14 | Statement of Purpose 15 | 16 | The laws of most jurisdictions throughout the world automatically confer 17 | exclusive Copyright and Related Rights (defined below) upon the creator 18 | and subsequent owner(s) (each and all, an "owner") of an original work of 19 | authorship and/or a database (each, a "Work"). 20 | 21 | Certain owners wish to permanently relinquish those rights to a Work for 22 | the purpose of contributing to a commons of creative, cultural and 23 | scientific works ("Commons") that the public can reliably and without fear 24 | of later claims of infringement build upon, modify, incorporate in other 25 | works, reuse and redistribute as freely as possible in any form whatsoever 26 | and for any purposes, including without limitation commercial purposes. 27 | These owners may contribute to the Commons to promote the ideal of a free 28 | culture and the further production of creative, cultural and scientific 29 | works, or to gain reputation or greater distribution for their Work in 30 | part through the use and efforts of others. 31 | 32 | For these and/or other purposes and motivations, and without any 33 | expectation of additional consideration or compensation, the person 34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she 35 | is an owner of Copyright and Related Rights in the Work, voluntarily 36 | elects to apply CC0 to the Work and publicly distribute the Work under its 37 | terms, with knowledge of his or her Copyright and Related Rights in the 38 | Work and the meaning and intended legal effect of CC0 on those rights. 39 | 40 | 1. Copyright and Related Rights. A Work made available under CC0 may be 41 | protected by copyright and related or neighboring rights ("Copyright and 42 | Related Rights"). Copyright and Related Rights include, but are not 43 | limited to, the following: 44 | 45 | i. the right to reproduce, adapt, distribute, perform, display, 46 | communicate, and translate a Work; 47 | ii. moral rights retained by the original author(s) and/or performer(s); 48 | iii. publicity and privacy rights pertaining to a person's image or 49 | likeness depicted in a Work; 50 | iv. rights protecting against unfair competition in regards to a Work, 51 | subject to the limitations in paragraph 4(a), below; 52 | v. rights protecting the extraction, dissemination, use and reuse of data 53 | in a Work; 54 | vi. database rights (such as those arising under Directive 96/9/EC of the 55 | European Parliament and of the Council of 11 March 1996 on the legal 56 | protection of databases, and under any national implementation 57 | thereof, including any amended or successor version of such 58 | directive); and 59 | vii. other similar, equivalent or corresponding rights throughout the 60 | world based on applicable law or treaty, and any national 61 | implementations thereof. 62 | 63 | 2. Waiver. To the greatest extent permitted by, but not in contravention 64 | of, applicable law, Affirmer hereby overtly, fully, permanently, 65 | irrevocably and unconditionally waives, abandons, and surrenders all of 66 | Affirmer's Copyright and Related Rights and associated claims and causes 67 | of action, whether now known or unknown (including existing as well as 68 | future claims and causes of action), in the Work (i) in all territories 69 | worldwide, (ii) for the maximum duration provided by applicable law or 70 | treaty (including future time extensions), (iii) in any current or future 71 | medium and for any number of copies, and (iv) for any purpose whatsoever, 72 | including without limitation commercial, advertising or promotional 73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each 74 | member of the public at large and to the detriment of Affirmer's heirs and 75 | successors, fully intending that such Waiver shall not be subject to 76 | revocation, rescission, cancellation, termination, or any other legal or 77 | equitable action to disrupt the quiet enjoyment of the Work by the public 78 | as contemplated by Affirmer's express Statement of Purpose. 79 | 80 | 3. Public License Fallback. Should any part of the Waiver for any reason 81 | be judged legally invalid or ineffective under applicable law, then the 82 | Waiver shall be preserved to the maximum extent permitted taking into 83 | account Affirmer's express Statement of Purpose. In addition, to the 84 | extent the Waiver is so judged Affirmer hereby grants to each affected 85 | person a royalty-free, non transferable, non sublicensable, non exclusive, 86 | irrevocable and unconditional license to exercise Affirmer's Copyright and 87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the 88 | maximum duration provided by applicable law or treaty (including future 89 | time extensions), (iii) in any current or future medium and for any number 90 | of copies, and (iv) for any purpose whatsoever, including without 91 | limitation commercial, advertising or promotional purposes (the 92 | "License"). The License shall be deemed effective as of the date CC0 was 93 | applied by Affirmer to the Work. Should any part of the License for any 94 | reason be judged legally invalid or ineffective under applicable law, such 95 | partial invalidity or ineffectiveness shall not invalidate the remainder 96 | of the License, and in such case Affirmer hereby affirms that he or she 97 | will not (i) exercise any of his or her remaining Copyright and Related 98 | Rights in the Work or (ii) assert any associated claims and causes of 99 | action with respect to the Work, in either case contrary to Affirmer's 100 | express Statement of Purpose. 101 | 102 | 4. Limitations and Disclaimers. 103 | 104 | a. No trademark or patent rights held by Affirmer are waived, abandoned, 105 | surrendered, licensed or otherwise affected by this document. 106 | b. Affirmer offers the Work as-is and makes no representations or 107 | warranties of any kind concerning the Work, express, implied, 108 | statutory or otherwise, including without limitation warranties of 109 | title, merchantability, fitness for a particular purpose, non 110 | infringement, or the absence of latent or other defects, accuracy, or 111 | the present or absence of errors, whether or not discoverable, all to 112 | the greatest extent permissible under applicable law. 113 | c. Affirmer disclaims responsibility for clearing rights of other persons 114 | that may apply to the Work or any use thereof, including without 115 | limitation any person's Copyright and Related Rights in the Work. 116 | Further, Affirmer disclaims responsibility for obtaining any necessary 117 | consents, permissions or other rights required for any use of the 118 | Work. 119 | d. Affirmer understands and acknowledges that Creative Commons is not a 120 | party to this document and has no duty or obligation with respect to 121 | this CC0 or use of the Work. 122 | -------------------------------------------------------------------------------- /commerce/general.md: -------------------------------------------------------------------------------- 1 | # General e-Commerce Guide 2 | 3 | **Table of Contents** 4 | 5 | - [Structure](#structure) 6 | - [Blocks](#blocks) 7 | - [Simple Pages](#simple-pages) 8 | - [Commerce Pages (Customer)](#commerce-pages-customer) 9 | - [Commerce Pages (Admin)](#commerce-pages-admin) 10 | - [Emails](#emails) 11 | - [Search](#search) 12 | - [Other](#other) 13 | - [Drupal Modules](#drupal-modules) 14 | - [Resources](#resources) 15 | 16 | --- 17 | 18 | ## Structure 19 | 20 | - **Product Display** (entity or node for 7.x) 21 | - Text Fields 22 | - Taxonomies (brand, category, display taxonomy, season etc) 23 | - Translations 24 | - Images 25 | - Share on social networks buttons 26 | - Metatag (schema.org) 27 | - Product reviews 28 | - Add to favorites 29 | 30 | - **Product Variation** (entity) 31 | - Price 32 | - List price 33 | - Shippable/Non-shippable 34 | - Name pattern 35 | - Stock (inventory) 36 | - Attributes (size, color, etc) 37 | - Weight 38 | - Ask for this Product link 39 | - Out of Stock message 40 | - See also list (related Products) 41 | - Product bundles (packages of Products sold as a single item) 42 | - Product gifts (free Products when you buy other Products) 43 | 44 | - **Payment types** 45 | - Cash on delivery 46 | - Cash on store 47 | - Bank transfer (deposit) 48 | - Paypal 49 | - Credit/debit card payment (bank APIs, Stripe etc) 50 | 51 | - **Shipping methods** 52 | - Store pickup 53 | - Courier (get rates API or set flat rates) 54 | - Free shipping 55 | - Custom (by arrangement) 56 | 57 | - **Order** 58 | - Notes/Comments 59 | - Shipping tracking key/ID 60 | - PDF attachment (order or invoice attachment) 61 | - Guest checkout 62 | - Taxes setup 63 | - Allowed Countries for shipping 64 | 65 | - **Customer Profile** 66 | - Shipping 67 | - Billing 68 | 69 | --- 70 | 71 | ## Blocks 72 | 73 | - Breadcrumbs 74 | - System messages 75 | - Search form (text input) 76 | - Search facets 77 | - Cart 78 | - Login/Register 79 | - Checkout step indicator 80 | - Free shipping banner 81 | - Info about Shipping costs and time 82 | - Info about Payment methods 83 | - Info about Discounts 84 | - Info about Quarantee 85 | - Info about Secure transactions 86 | - Info about Store physical address 87 | - Contact info 88 | - Newsletter subscribe form 89 | - Social profiles info and links (follow us) 90 | - Instant messaging and support widget (real user or chatbot) 91 | - Dynamic: Latest Products 92 | - Dynamic: Popular Products 93 | - Dynamic: Editor picks Products 94 | - Dynamic: Promoted Products 95 | - Dynamic: Related Products (by reference or search query) 96 | - Dynamic: Recently viewed Products (Last seen) 97 | 98 | --- 99 | 100 | ## Simple Pages 101 | 102 | - Shipping 103 | - Payments 104 | - Returns 105 | - Our Store/Company 106 | - FAQs 107 | - Terms of use and legal contents 108 | - Measuring, sizes etc 109 | - Contact form and info 110 | 111 | --- 112 | 113 | ## Commerce Pages (Customer) 114 | 115 | - Checkout pages (with steps) 116 | - My Order(s) 117 | - My favorite Products 118 | - My Account 119 | - My Addresses (Billing, Shipping) 120 | - Return a Product form (or pdf application) 121 | - Create Account 122 | - Complete Order Thank-you landing page 123 | 124 | --- 125 | 126 | ## Commerce Pages (Admin) 127 | 128 | - Shop overview/dashboard 129 | - Orders 130 | - Products 131 | - Product Varations 132 | - Customer profiles 133 | - Discounts/Promotions 134 | - Coupons, Gift cards, Loyality points etc 135 | 136 | --- 137 | 138 | ## Emails 139 | 140 | Emails as also as SMS and Mobile App messages (eg WhatsApp) 141 | 142 | - New Order created (Customer) 143 | - New Order created (Admin) 144 | - Order sent with courier with tracking info (Customer) 145 | - Order canceled (Customer) 146 | - Order abandoned (Customer) 147 | - Product Variation is out of stock (Admin) 148 | 149 | --- 150 | 151 | ## Search 152 | 153 | - External service (SOLR, Elastic, Algolia, Sajari) vs core Views 154 | - Autocomplete (ajax) 155 | - Suggestions for keywords 156 | - Suggestions for wrong (eg misspelling) input 157 | - No results message 158 | - Search API: stemmer 159 | - Search API: stopwords 160 | - Search API: ignore case/characters 161 | - Search API: partial search (tokenizer) 162 | - Search API: greeklish 163 | - Search API: smallcase 164 | - Search API: Boost by tag (HTML filter) 165 | - Facets: Taxonomy 166 | - Facets: Price 167 | - Facets: Attributes 168 | - Disallow empty results (consequence filtering) 169 | - Voice search input 170 | 171 | ### Boosting suggestions 172 | 173 | - HTML boosts for H1. H2 H3, STRONG and Bold 174 | - Field Title boost of 5 175 | - Field keywords boost of 3 176 | - Date boosts of 1 177 | - Content type (non-date based) boosts up to 1 178 | - Importance boosts up to 1 179 | 180 | ### Testing Search 181 | 182 | #### General issues 183 | 184 | - Checking that node CRUD operations are reflected in the search results 185 | - Is unpublished content shown? 186 | - Are rare keywords returning the expected results? 187 | - Are results coming back lightning fast? 188 | 189 | #### Generic term testing 190 | 191 | - Are the results as expected as an initial gut instinct? 192 | - Are all content types included on the results as expected? 193 | - Are more recent items coming to the top? 194 | - Are promoted items at the top? 195 | - Are the facets well populated? 196 | 197 | #### Specific term testing 198 | 199 | - Same as above but with exact results 200 | - Check that boosting works 201 | 202 | [Article 1](https://www.easternstandard.com/node/1049), [Article 2](https://www.axelerant.com/resources/team-blog/test-scenarios-search-functionality-drupal), [Article 3](https://www.morpht.com/blog/perfecting-search-search-api) 203 | 204 | --- 205 | 206 | ## Other 207 | 208 | - Product 209 | - path aliases 210 | - metatags 211 | - tell a friend 212 | - Customer reviews or comments 213 | 214 | - Customer 215 | - Favorite Products 216 | - Login with social profile (Google, FB, Apple etc) 217 | - Wholesame customers 218 | 219 | - Order 220 | - (google) analytics for commerce orders 221 | - SMS on complete payment transaction (for e-payments) 222 | - Abandoned Cart Reminder 223 | - Repeat an Order 224 | - Create Order through url arguments 225 | - Online Invoices 226 | 227 | - Store 228 | - Currencies 229 | - Customer reviews 230 | - Skroutz API status and xml 231 | - Export data (orders, customers, income etc) 232 | - CRM, Logistics external integration (2 way sync) 233 | - Integration with 3rd party services (marketing, newsletters, user tracking, analytics, payments, shipping etc) 234 | 235 | - Website 236 | - Translations 237 | - SSL 238 | - sitemap.xml 239 | - gdpr cookies banner 240 | - cron setup for search index and sitemap 241 | - CDN and fast hosting 242 | 243 | --- 244 | 245 | ## Drupal Modules 246 | 247 | Interesting Drupal modules for e-commerce websites: 248 | 249 | - https://www.drupal.org/project/commerce, https://docs.drupalcommerce.org 250 | - https://www.drupal.org/project/digital_marketing_checklist 251 | 252 | --- 253 | 254 | ## Resources 255 | 256 | - [Book: Digital Marketing with Drupal, 03/2022](https://www.packtpub.com/product/digital-marketing-with-drupal/9781801071895) 257 | - [How to Build a B2B eCommerce Marketplace with Drupal Commerce (2023)](https://lembergsolutions.com/blog/how-build-b2b-ecommerce-marketplace-drupal-commerce) 258 | - [astrotars/awesome-ecommerce-stack](https://github.com/astrotars/awesome-ecommerce-stack) 259 | -------------------------------------------------------------------------------- /ai/agents/drupal-core-contributor.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: drupal-core-contributor 3 | description: Use this agent when working on Drupal 10/11 core contributions, patches, or merge requests. Specifically invoke this agent when:\n\n\nContext: User is refactoring deprecated core API usage.\nuser: "I need to update the core test suite to replace deprecated Url::fromUri() calls with Link::createFromRoute()"\nassistant: "I'll use the drupal-core-contributor agent to handle this core refactoring task with proper BC considerations and test coverage."\n\n\n\n\nContext: User is reviewing a core patch from the issue queue.\nuser: "Can you review patch #3491285 on drupal.org and suggest test coverage improvements?"\nassistant: "I'll engage the drupal-core-contributor agent to analyze this core patch according to issue queue standards and CI requirements."\n\n\n\n\nContext: User is writing kernel tests for cache contexts.\nuser: "I need to create a functional test that verifies cache context interaction for block visibility in core"\nassistant: "I'll use the drupal-core-contributor agent to write this kernel test following core testing standards and ensuring CI compatibility."\n\n\n\n\nContext: User mentions working on core services or subsystems.\nuser: "I'm working on the Entity API and need to audit the field storage service for potential refactoring opportunities"\nassistant: "I'll invoke the drupal-core-contributor agent to audit this core service with attention to BC constraints and coding standards."\n\n\n\n\nContext: User is creating update hooks or schema changes.\nuser: "I need to write an update hook for the new field schema changes in core"\nassistant: "I'll use the drupal-core-contributor agent to create this update hook following core conventions and deprecation policies."\n\n 4 | model: sonnet 5 | color: yellow 6 | --- 7 | 8 | You are an elite Drupal Core Contributor with deep expertise in Drupal 10/11 core architecture, Symfony components, and PSR-4 design patterns. You possess authoritative knowledge of Entity/Field API, Typed Data, Plugin API, Routing, Service Containers, and comprehensive testing frameworks. 9 | 10 | ## Core Responsibilities 11 | 12 | You will contribute, review, and maintain patches or merge requests across core subsystems. Your work must: 13 | 14 | - Audit core services and suggest refactors aligned with Drupal coding standards (`core/phpcs.xml.dist`) 15 | - Identify potential backward-compatibility breaks and propose deprecation-first solutions 16 | - Write kernel/functional/unit tests ensuring stable CI runs 17 | - Author update hooks, post-update functions, and schema changes 18 | - Handle issue queue triage: reproduce bugs, categorize issues, and supply MRs with clear test coverage 19 | - Mentor contributors by referencing canonical core examples and existing test modules 20 | 21 | ## Technical Standards 22 | 23 | **Code Quality:** 24 | - Follow core commit message format strictly 25 | - Adhere to all Drupal coding standards defined in `core/phpcs.xml.dist` 26 | - Never bypass container services or plugin discovery mechanisms 27 | - Default to deprecation-first approaches for legacy code modifications 28 | - Treat performance, caching, and multilingual behavior as first-class requirements 29 | 30 | **Testing Requirements:** 31 | - All code changes must include appropriate test coverage (Kernel, Functional, or FunctionalJavascript) 32 | - Tests must pass CI without introducing flakiness 33 | - Use PHPUnit mocks appropriately for unit tests 34 | - Reference existing core test patterns from test modules 35 | 36 | **Documentation:** 37 | - Document reasoning in issue summary format: Problem, Proposed resolution, Remaining tasks 38 | - Include file paths and full namespaces in all code examples 39 | - Cite specific core subsystem references (e.g., `\Drupal\Core\Render\BubbleableMetadata`) 40 | - Reference api.drupal.org class documentation and drupal.org core guides 41 | 42 | ## Technical Toolkit 43 | 44 | **Development & Build:** 45 | - Composer for dependency management 46 | - Drush for CLI operations 47 | - DDEV for local environments 48 | - Git for version control and patch workflows 49 | - PHPStan for static analysis 50 | - PHPUnit for test execution 51 | 52 | **Patch Workflow:** 53 | - Use `git format-patch` and `git apply` for patch creation/application 54 | - Ensure gitlab-ci compatibility 55 | - Follow drupalorg CLI conventions 56 | - Leverage core-dev composer package for development 57 | 58 | **Debugging Tools:** 59 | - Xdebug for step debugging 60 | - Webprofiler for performance analysis 61 | - Devel module for development utilities 62 | - Monolog for logging 63 | 64 | ## Output Requirements 65 | 66 | Every response must: 67 | 68 | 1. **Contain ready-to-commit code** with complete file paths and namespaces 69 | 2. **Reference core standards explicitly** - cite specific coding standards, deprecation policies, or API documentation 70 | 3. **Include test coverage** - provide kernel, functional, or unit tests as appropriate 71 | 4. **Adhere to BC policy** - never introduce backward-compatibility breaks without proper deprecation 72 | 5. **Pass CI requirements** - ensure all code follows CI-passing format 73 | 6. **Use modern OOP patterns** - avoid legacy `.module` procedural code except for migration contexts or test fixtures 74 | 75 | ## Decision-Making Framework 76 | 77 | **When evaluating changes:** 78 | 1. Check for BC breaks - can this be done with deprecation instead? 79 | 2. Assess performance impact - does this affect caching or database queries? 80 | 3. Consider multilingual implications - does this work with translations? 81 | 4. Verify service container usage - are we properly using dependency injection? 82 | 5. Validate plugin discovery - are we following plugin API patterns? 83 | 6. Review test coverage - what test types are needed? 84 | 85 | **When uncertain:** 86 | - Reference existing core patterns in similar subsystems 87 | - Cite relevant change records or core issue discussions 88 | - Propose multiple approaches with trade-off analysis 89 | - Request clarification on BC requirements or deprecation timeline 90 | 91 | ## Communication Style 92 | 93 | You will communicate with precision and technical accuracy: 94 | 95 | - Use concise, unemotional, standard-compliant language 96 | - Provide short technical rationales, not lengthy exposition 97 | - Always include file paths and namespaces in code examples 98 | - Cite specific core subsystem classes and interfaces 99 | - Format code blocks with proper syntax highlighting 100 | - Structure responses with clear sections: Analysis, Implementation, Tests, References 101 | 102 | ## Quality Assurance 103 | 104 | Before delivering any solution: 105 | 106 | 1. Verify all code follows `core/phpcs.xml.dist` standards 107 | 2. Confirm test coverage is appropriate and comprehensive 108 | 3. Check that no BC breaks are introduced without deprecation 109 | 4. Ensure all service dependencies use proper dependency injection 110 | 5. Validate that caching and performance are properly handled 111 | 6. Confirm multilingual compatibility where applicable 112 | 113 | You are the standard-bearer for Drupal core quality. Every contribution you make must exemplify best practices and advance the platform's architectural integrity. 114 | -------------------------------------------------------------------------------- /drupal/lessons.md: -------------------------------------------------------------------------------- 1 | # Drupal 8.x+ lessons 2 | 3 | > A basic structure for teaching (or learning) Drupal 8.x/9.x with lesson bundles. Bundles can/should be taught independently. 4 | 5 | ## Table of Contents 6 | 7 | - [Drupal 8.x+ lessons](#drupal-8x-lessons) 8 | - [Table of Contents](#table-of-contents) 9 | - [Lesson bundles](#lesson-bundles) 10 | - [What is Drupal](#what-is-drupal) 11 | - [Why Drupal - the Drupal way](#why-drupal---the-drupal-way) 12 | - [Drupal terminology](#drupal-terminology) 13 | - [Extend Drupal with modules](#extend-drupal-with-modules) 14 | - [Drupal Entities](#drupal-entities) 15 | - [Drupal Blocks](#drupal-blocks) 16 | - [The User entity](#the-user-entity) 17 | - [Drupal Views](#drupal-views) 18 | - [Drupal JSON:API and REST](#drupal-jsonapi-and-rest) 19 | - [Form submissions](#form-submissions) 20 | - [Theming](#theming) 21 | - [Development for Drupal](#development-for-drupal) 22 | - [More topics](#more-topics) 23 | - [Drupal.org](#drupalorg) 24 | - [Best practices and tips](#best-practices-and-tips) 25 | - [Learning - Video Resources](#learning---video-resources) 26 | - [Homework - Tasks](#homework---tasks) 27 | - [Useful Resources](#useful-resources) 28 | 29 | --- 30 | 31 | ## Lesson bundles 32 | 33 | ### What is Drupal 34 | 35 | - Simple explanation 36 | - Dries Buyaert, the Drupal "leader" 37 | - Who uses Drupal 38 | - (System) Requirements 39 | - Drupal core 40 | - Basic knowledge required for development (php, server, database, yaml, html, css) 41 | 42 | ### Why Drupal - the Drupal way 43 | 44 | - Drupal vs "Others" 45 | - Several ways to do the same thing 46 | - Think with Drupal 47 | - Why Drupal is a "more expensive" CMS 48 | - Why is Drupal hard 49 | - Drupal Frontend vs Backend 50 | 51 | ### Drupal terminology 52 | 53 | - Architecture 54 | - Code structure 55 | - Entities 56 | - Bundles 57 | - Blocks 58 | - Fields 59 | - Nodes 60 | - Themes 61 | - Regions 62 | - Modules 63 | - Libraries 64 | - System files 65 | - Users and Roles 66 | - Configuration 67 | - Distributions (Profiles) 68 | - Drupal versions 69 | 70 | ### Extend Drupal with modules 71 | 72 | - What are modules 73 | - Where to find modules 74 | - How to create modules 75 | - Module issues etc 76 | - Submit patches and MR to modules 77 | - Publish modules 78 | 79 | ### Drupal Entities 80 | 81 | - Types of entities 82 | - Data vs Configuration entities 83 | - Create new entities 84 | - Entity factory (bundles, fields, view modes, form modes) 85 | - Content types (Nodes) 86 | - Entities on the database 87 | 88 | ### Drupal Blocks 89 | 90 | - The Block management UI 91 | - Drupal configuration UI 92 | - Register new blocks 93 | - Create custom Block Plugins on code 94 | - Users, Roles and permissions 95 | 96 | ### The User entity 97 | 98 | - Permissions UI 99 | - Register new permissions 100 | - User Roles 101 | - Assign Users to Roles 102 | 103 | ### Drupal Views 104 | 105 | - What are Views 106 | - Create new Views 107 | - Views terminology 108 | - Advanced Views 109 | 110 | ### Drupal JSON:API and REST 111 | 112 | - Core JSON:API 113 | - Create resources 114 | - Authentication 115 | - Data Serialization 116 | - Extend JSON:API 117 | - Core REST module 118 | - JS frontend libraries with Drupal 119 | 120 | ### Form submissions 121 | 122 | - Build a Drupal form (how to) 123 | - Webform module 124 | - Entityform module 125 | - Contact forms 126 | - Node forms 127 | 128 | ### Theming 129 | 130 | - Get Drupal themes 131 | - The theme anatomy 132 | - Base themes and inheritance 133 | - Create a new theme 134 | - Theme settings 135 | - (Theme) layouts and breakpoints 136 | - Twig templates 137 | - Render arrays 138 | - Controllers 139 | - Theme templates and theme hooks 140 | - BEM, SMACSS and other CSS methodologies within Drupal 141 | - Attach CSS and JS (internal, external) with libraries 142 | - Working with JS (behaviors etc) 143 | - Useful modules for theming (kint, webprofiler, twig related etc) 144 | 145 | ### Development for Drupal 146 | 147 | - Installing Drupal 148 | - IDE 149 | - Working environment 150 | - Working with composer and git 151 | - Drupal configuration (move a site to test, staging, live etc) 152 | - Drush (command line tool) 153 | - Drupal-Console (command line tool) 154 | - Debug Drupal 155 | - Testing Drupal 156 | - Working with the database 157 | - Update/upgrade Drupal core & modules 158 | - Backup Drupal 159 | - Applying and creating patches 160 | - Using simplytest.me 161 | - Useful modules for development 162 | 163 | ### More topics 164 | 165 | - Migration to Drupal 166 | - Using (external) libraries 167 | - Multilingual Drupal 168 | - Image styles and picture breakpoints 169 | - Media and files management 170 | - Plugins 171 | - Symfony services 172 | - Routing 173 | - Menus 174 | - Text filters and CKEditor 175 | - Contextual links 176 | 177 | ### Drupal.org 178 | 179 | - What is Drupal.org 180 | - Community and Accounts 181 | - Drupal documentation 182 | - Ask for help and contribute 183 | - Meetups and events 184 | - Drupal association 185 | - Drupal APIs 186 | - The Drupal initiatives 187 | - Publish projects on D.O. - procedure 188 | 189 | ### Best practices and tips 190 | 191 | - Keep it simple, reduce complexity 192 | - Less is better (how to avoid contrib modules) 193 | - Stick with the default (core) backend theme (seven) 194 | - How to sell Drupal 195 | - The Drupal way 196 | - Learn by doing 197 | - Long term investment 198 | - Best/top Drupal modules 199 | - Which Drupal version should I use 200 | - How to search for projects on D.O. 201 | - Create your Distribution 202 | - Study the Drupal Cases on D.O. 203 | - Search more, develop less 204 | 205 | ## Learning - Video Resources 206 | 207 | - [drupal.org/documentation](https://www.drupal.org/documentation) 208 | - [Drupal 8.x User Guide](https://www.drupal.org/project/user_guide) 209 | - [Drupal 8.x User Guide downloads & translations](https://www.drupal.org/node/3076366) 210 | - [drupalize.me](https://drupalize.me) 211 | - [youtube.com/@DrupalAssociation/playlists](https://www.youtube.com/@DrupalAssociation/playlists) 212 | - [Video: Surviving the Drupal Learning Curve, 2020](https://www.youtube.com/watch?v=Jx0ynrx7jjo) 213 | - [Video: Why is Drupal So Hard to Learn, 2017](https://www.youtube.com/watch?v=FPz-A8snTJo) 214 | - [drupal.tv - Video collections](https://drupal.tv) 215 | - [debugacademy.com](https://debugacademy.com) 216 | - [Acquia Certification Study Guides](https://docs.acquia.com/certification/study-guides/) 217 | - [LevelUpTuts - Drupal 8 Basics](https://www.youtube.com/watch?v=J9U1DQYbFjA&list=PLLnpHn493BHE9mfp6z5--UowO-6SOzcuI) 218 | - [OSTraining Will Release 200 Drupal 8 Videos for Free](https://www.ostraining.com/blog/drupal/200-drupal-8-videos) 219 | - [redcrackle.com/blog/drupal-8/free-tutorials-list](http://redcrackle.com/blog/drupal-8/free-tutorials-list) 220 | - [Drupal 10 Development Cookbook - Packt Book](https://www.packtpub.com/product/drupal-10-development-cookbook-third-edition/9781803234960) 221 | - [Getting Started with Drupal Workshop, Drupal.org](https://www.drupal.org/project/getting_started_with_drupal) 222 | - [Study Drupal 8 for Drupal 8 Developer Cert (2019)](https://github.com/thled/d8cards) 223 | - [PHP: The Right Way](https://phptherightway.com) 224 | 225 | ## Homework - Tasks 226 | 227 | - Create a simple website with 5 pages and 4 custom blocks 228 | - Create an image gallery website 229 | - Create a multiuser blog 230 | - Drupal as a Backend CMS (BaaS) 231 | 232 | ## Useful Resources 233 | 234 | - [OpenDrupal, Free and Open Source training materials for teaching and learning Drupal](https://github.com/OpenDrupal) 235 | - [DrupalShip.org](https://www.drupalship.org) 236 | - [Sprint Participant Role Task Cards](https://www.drupal.org/sprint-task-cards) 237 | --------------------------------------------------------------------------------