# Michael Michalak — full site text > Backend Developer, Fractional CTO and AI Consultant. Backend developer and Fractional CTO with 13+ years of experience in Drupal architecture, Drupal Commerce, and AI agent development. Generated 2026-08-18 from https://michalak.world/ Canonical URL for each section is listed with its heading. --- # About URL: https://michalak.world/about/ Michael Michalak is a backend developer, Fractional CTO, and AI consultant with 13+ years of experience in Drupal architecture, Drupal Commerce, and AI agent development. Hello! I'm Michael Michalak, a seasoned Backend Developer and Freelance AI Agent Consultant with over a decade of handson experience building and optimizing complex digital platforms. From deep backend architecture to cutting edge AI integrations, I help businesses scale and solve real world challenges with custom technology solutions. ## Technical Background I found my passion for backend development while pursuing my degree in Computer Engineering. Since 2011, I’ve specialized in Drupal, building robust platforms for e-commerce, global organizations, and nonprofits. ### Drupal Development My work focuses on complex Drupal backend architecture and custom Drupal Commerce solutions. I specialize in: - Building scalable backend systems for high-traffic platforms - Architecting entity models, custom modules, and service layers - Creating extensible APIs and automating backend workflows - Developing advanced Drupal Commerce features including: - Custom checkout flows and tax logic - Product types with dynamic pricing and attributes - Subscription billing, bookings, and service-based products I work best in backend-heavy environments where performance, extensibility, and reliability are critical. ### Fractional CTO Services As a Fractional CTO, I help startups, nonprofits, and scaling businesses make sound technical decisions. I bridge the gap between business strategy and engineering, offering: - Technical leadership without the fulltime overhead - Architecture and platform planning - Vendor and team evaluation - Long term tech roadmaps and budget alignment - Coaching for internal tech teams Whether you're building your MVP or preparing for scale, I provide the expertise to guide you forward with confidence. ### AI Agent Development & LLM Consulting In addition to Drupal, I’m a Freelance AI Agent Developer building advanced LLM powered systems. I’ve worked with: - LangChain for orchestration and monitoring - Langfuse for observability and fine tuning agent workflows - CrewAI for structured, multi-agent task delegation - Custom AI agent development for research, summarization, and blog generation I help teams build intelligent automation pipelines using Python, OpenAI, vector databases like ChromaDB, and modern monitoring stacks. ## Current Focus Today, I serve as a Fractional CTO, AI Consultant, and Drupal Developer/Architect—guiding teams through technical strategy, platform scaling, and innovation initiatives. I split my time between: - Helping clients evolve their Drupal ecosystems - Leading AI powered automation projects - Providing CTO level guidance on infrastructure, dev processes, and emerging technologies Whether you need a scalable platform, help modernizing legacy systems, or an AI workflow that saves your team hours. I’m here to help. --- # Resume URL: https://michalak.world/resume/ Michael Michalak's resume: 13+ years across AI agent development, Fractional CTO work, and Drupal backend and commerce development, with a BS in Computer Engineering from Purdue University. ### AI Agent Consultant and Developer, Freelancer -— Apr 2025 - Present As a freelance consultant, I specialize in designing and building AI agents that solve real-world problems through intelligent automation and reasoning. I bring hands-on experience with leading frameworks like LangChain (for both orchestration and monitoring), Langfuse (for observability), and CrewAI (for structured multi-agent systems), along with writing custom AI agents from scratch when off-the-shelf tools fall short. I collaborate with startups, teams, and SMB to build robust, testable, and scalable AI solutions that deliver real value faster. ### Fractional CTO, Freelancer -— Aug 2024 - Present Experienced technology executive with 13+ years of expertise in technology strategy, product development, and digital transformation for startups and SMEs. Skilled in technology roadmap development, team leadership, vendor management, and risk mitigation. Expertise in technology stack selection, cost optimization, and scalability planning to drive innovation and business growth. Proven ability to align technology investments with business objectives while ensuring efficiency, security, and long-term scalability. ### Drupal Backend Developer (Contractor) -- Feb 2018 - Present Experienced Drupal Backend Developer specializing in Drupal Commerce, custom module development, security and performance optimization. Skilled in API integrations (payment gateways, shipping, Hubspot, CRM, Spotme, SSO), Drupal migrations (D7 to D10), and security enhancements (unhacking, troubleshooting). Expertise in LAMP stack architecture, website globalization (GDPR, multilingual, multicurrency, geo-location), and optimizing hosting environments. Experience with new builds, feature enhancements, bug fixes, and ongoing Drupal maintenance. Led development teams, trained new developers, and provided project estimations and technical leadership. ### Origin Eight / Senior Developer -- Jul 2014 - Mar 2020 Experienced Scrum Master and Drupal Development Lead with expertise in Drupal 7 & 8, including Commerce, REST API development, and migrations. Skilled in front-end and back-end development, systems integration across cloud and on-premise platforms, and architecture on Pantheon and Acquia. Provides technical assessments, maintenance, and support for internal and client projects while serving as a technical backstop during deployments and go-live events. ### Trail 9 / Lead Developer -- Apr 2013 - Jun 2019 Experienced Drupal 7 & 8 Developer specializing in Commerce, REST APIs, and migrations, with expertise in custom API development and back-office integrations. Skilled in Linux architecture, security, and LAMP stack performance tuning, including Varnish, Memcache, Apache, MySQL/MariaDB, PHP, and PHP-FPM. Serves as a Pre-Sales and Solutions Engineering SME for enterprise clients and provides assessments, maintenance, and support for Drupal and WordPress websites. Led development teams, trained new developers, and provided project estimations and technical leadership. ### Digital Bridge Solutions / Web Developer Technical Analyst -- Nov 2012 - Jul 2014 Experienced Drupal and Magento Developer with expertise in frontend and backend development, upgrades, and migrations (Drupal 6 & 7, Magento). Skilled in Linux systems engineering, administration, optimization, and security. Led development teams, trained new developers, and provided project estimations and technical leadership. ### Boru Inc. / PHP/MySQL Application Support Associate -- Apr 2011 - Oct 2011

Maintain Boru’s Drupal website and Wiki
Support for vTiger CRM, vTiger-Google Application Integration, vTiger-QuickBooks Integration and Web2project
Deploy, configure and maintain Boru’s software
Assist in maintaining SVN infrastructure
Manage projects and overseas team

## Education Purdue University — Bachelor of Science in Computer Engineering, 2004-2010 ## Skills ### Technology Leadership & Strategy - Fractional CTO services for startups and SMEs - Technology roadmap development aligned with business objectives - Product development and innovation, from concept to deployment - Scalability planning for long-term business growth - Vendor and partner management to ensure value-driven technology investments - Risk management and cost optimization for efficient technology spending ### Drupal Development - Expertise in Drupal 6, 7, 8, 9, 10, 11 frontend and backend development - Drupal Commerce (1.x & 2.x): Custom checkout, multi-currency, geo-location, and integrations - Custom REST API design and development for system integrations - Drupal migrations and upgrades (D6 to D7, D7 to D8/D9, D8/D9 to D9, D10, D11) - Troubleshooting, debugging, securing and optimizing custom modules and themes - System Architecture & Performance Optimization - Linux system engineering, administration, security, and optimization - LAMP stack expert: Apache, MySQL/MariaDB, PHP, PHP-FPM - Performance tuning with Varnish, Redis, Memcache, and caching strategies - Cloud and on-premises infrastructure design, deployment, and maintenance - Architecture and development on AWS, Pantheon, Platform.sh and Acquia ### Project Leadership & Agile Development - Scrum Master and Scrum framework team lead - Led development teams, trained new developers, and provided technical mentorship - Served as a technical backstop for go-live events and major deployments - Conducted project estimations, pre-sales engineering, and solutions architecture ### Website Support & Maintenance - Provided assessments, ongoing support, and maintenance for Drupal and WordPress websites - Expertise in website globalization, including GDPR compliance, multilingual, multi multi-currency and geo-location - Unhacking, restoring, and securing compromised Drupal sites ## Recommendations ### Jordan Perkins - Oomph Inc. Michael is a skilled Drupal developer. I had the pleasure of working with him for a few years on a complex health and wellness client. He has keen attention to detail, is a consistent and concise communicator, highly focused on QA and quality code and an integral member of the team. He's at the top of my list whenever I need to scale my project teams. Michael Williamson - Trophy Cupcakes I've worked with and managed many developers over the 30 years I've been in the field. Mike is one of the best I've ever worked with. Highly recommended. ### Mark Marich - genglobal.org Michael was exactly what we needed for the task. He immediately assessed our site, stabilized it and worked through a long and detailed list of issues to enhance site performance – including an upgrade from Drupal 8 to Drupal 9. His work on the initial project turned out so well that we kept it open and kept him on as a regular consultant for a couple years. ### Brian Thopsey - fundwisdom.com I would re-hire Michael in a heartbeat. He was an amazing help running server administration of a multi-site Drupal environment, moving and enhancing the infrastructure. ### Sean Procyshyn - Do Yoga With Me Michael is a pleasure to work with. Highly motivated, excellent communicator and attention to detail. We highly recommend his services. ### Crystal Rose - Learningsolutionsmag.com Michael was very responsive and fixed our problems with our Drupal site promptly and to our satisfaction, explaining options and working within budgets. If we find ourselves in need of Drupal support in the future, we will definitely contact him. ### Brian Michaelis - Origin Eight Mike and I worked as a team managing dozens of client-facing projects. Mike's, background and experience as a Drupal developer, along with an exchange of ideas, shows in the many successful system upgrades / launches.I’d (and will) work with Mike again if the opportunity should arise. When it comes to web development, Drupal, Drupal Commerce, Drupal Migrations, PHP, and MySQL - Mike has my highest recommendation. --- # Contact URL: https://michalak.world/contact/ Contact Michael Michalak for Drupal backend development, Drupal Commerce, Fractional CTO, or AI agent consulting work. Get in touch about Drupal backend development, Drupal Commerce, Fractional CTO engagements, or AI agent projects. Use the form below and I will reply by email, or reach me on [LinkedIn](https://www.linkedin.com/in/michaelmichalak).
--- # Services and experience --- ## AI Agent Experience URL: https://michalak.world/experience/ai-agent-experience/ AI agent development and LLM consulting: autonomous agent orchestration with LangChain and CrewAI, Python LLM workflows, observability with Langfuse, and vector database integration. As a freelance consultant, I design and build intelligent agents that solve real-world problems through automation and reasoning. I specialize in crafting custom LLM workflows and autonomous systems that go beyond simple API calls. #### Key Focus Areas: - **Agent Orchestration**: Building autonomous agents using LangChain and CrewAI for complex, multi-step tasks. - **LLM Workflow Engineering**: Designing intelligent, Python-based workflows for research, decision support, and content generation. - **Observability & Optimization**: Using Langfuse and LangChain’s tools to monitor, debug, and fine-tune agent behavior. - **Knowledge Integration**: Connecting agents to external APIs, vector databases, and embedding pipelines for persistent context. - **Strategic Consulting**: Advising teams and startups on system architecture, feasibility, and implementation best practices. I work closely with teams to build scalable, testable, and production-ready AI solutions that deliver measurable results. --- ## Drupal 10 Experience URL: https://michalak.world/experience/drupal-10-experience/ Drupal 10 development experience: Drupal 8 and 9 upgrades, custom REST APIs and modules, Drupal Commerce 2.x workflows, GDPR compliance, Apache Solr search, and Pantheon and Acquia hosting. ## Migrations - Upgraded Drupal 8 and 9 sites to Drupal 10. ## Custom Development - Developed custom REST APIs and integrated external data feeds into Drupal. - Created custom entity fields in Drupal for tailored content management solutions. - Built custom modules and integrated data via Feeds, including importing from RSS feeds. - Implemented Apache Solr for enhanced search capabilities. - Developed custom tools such as calculators, landing pages, and site views with caching based on user entry points. - Created and customized themes, including working with Glazed Builder and enhancing its functionality with views and exposed filters. - Integrated third-party services and solutions, including PDF generation for nodes, Webform submissions, and Commerce invoices. - Debugged and resolved complex issues in existing Drupal installations. - Managed multisite setups and implemented SMS integrations with platforms like Mobile Commons and Twilio. - **GDPR Compliance:** Developed GDPR-compliant solutions, enabling users to opt-out, view their data, mark data as sensitive, and manage cookie consent. - **3rd Party Integrations:** Seamlessly integrated with platforms like HubSpot, Partnero, and EasyPost Shipping to enhance functionality and streamline operations. ## Drupal Commerce Expertise - Customized Drupal Commerce 2.x workflows, including bespoke cart and checkout processes. - Developed custom tax resolvers and exemptions, including VAT handling for international shipping. - Created promotions like "Buy X, get Y% off," and implemented custom purchase order workflows. - Integrated multi-currency support with GEOIP-based currency detection and conversion. - Designed custom order types, price lists based on user roles, and Solr-indexed product catalogs with faceted search. - Implemented advanced shipping solutions with EasyPost, FedEx, USPS, and UPS, supporting multi-currency transactions and multi-location shipping. - Developed custom payment gateway integrations with Recurly, Apple Pay, Authorize.net, Braintree, PayPal, Cybersource, and Stripe, contributing to community patches. - Enabled multilingual support for existing projects, adding and managing multiple languages. - Built custom session variables for checkout flows, language settings, and UTM parameters. - Created custom events for shopping carts and order states and managed warehouse requests and product borrowing modules. - Automated order processing via cron jobs, including generating pick tickets and updating order statuses. - Integrated mapping solutions like Google Maps and Leaflet for store locators and product availability. - Developed features for anonymous orders and auto-account creation based on checkout email. ## Hosting and Maintenance - Managed hosting on Pantheon and Acquia, providing routine maintenance and security updates. - Handled module updates, patches, and multisite setups. - Conducted performance reviews and implemented enhancements, including server optimizations for Apache, MySQL/MariaDB/Percona, PHP, Redis, and Memcache. - Built and maintained infrastructure, from single servers to load-balanced solutions, across CentOS, Redhat, Ubuntu, and Debian. - Performed load testing, benchmarking, and server-level security patching. - Implemented SSL solutions with Let's Encrypt and integrated Apache Solr for advanced search capabilities. This portfolio showcases my expertise in Drupal development, focusing on custom solutions, complex integrations, and robust hosting and maintenance practices. Whether migrating legacy systems, optimizing performance, or building new features, I deliver tailored, high-quality results for Drupal projects. --- ## Drupal 7 Experience URL: https://michalak.world/experience/drupal-7-experience/ Drupal 7 development experience: custom modules and rules, multilingual builds with Transifex, Commerce 1.x and Ubercart, Avalara VAT and sales tax, security remediation, and server optimization. ## Drupal 7 Development - **Multilingual Implementations:** Successfully implemented multilingual features, including integrations with Transifex for seamless translation management. - **Custom Session Variables:** Developed custom session handling, including storing and reporting UTM parameters for detailed analytics. - **Custom Module Development:** Created bespoke modules tailored to client needs, ensuring robust functionality and easy maintenance. - **Custom 3rd Party Integrations:** Integrated various third-party services to extend Drupal's capabilities and meet complex business requirements. - **Custom Tools:** Developed custom calculator tools and landing pages, enhancing user interaction and engagement. - **User Sessions:** Managed custom user sessions to optimize user experience and functionality across the site. - **Custom Theming:** Designed and implemented custom themes for unique, brand-aligned website aesthetics. - **Groups Module:** Configured and integrated specific rules within the Groups module to meet precise project specifications. - **Custom Rules:** Developed and implemented custom rules for Drupal Commerce and other functionalities tailored to business processes. - **Security:** Expertly secured websites, including resolving vulnerabilities and protecting against hacks. ## Drupal 7 Commerce 1.x - **Custom Commerce Workflows:** Designed and implemented custom workflows for Drupal Commerce carts, optimizing the checkout process. - **Tax Handling:** Integrated Avalara for VAT and sales tax calculations, including custom rules and real-time VAT ID validation. - **Multi-Store Support:** Added support for additional store addresses, enhancing the flexibility of multi-store setups. - **GEOIP Currency Detection:** Implemented GEOIP-based currency detection to display prices in the user's local currency automatically. - **Payment Gateway Integrations:** Integrated popular payment gateways such as Authorize.net, PayPal, Cybersource, and Stripe. Contributed to community patches for PayPal and Cybersource on drupal.org. - **Stock Management:** Managed stock levels within Drupal Commerce, ensuring accurate inventory tracking. - **Multilingual Support:** Enabled multilingual commerce features, including integration with Transifex for easy translation management. - **Ubercart:** Customized Ubercart setups, including session variable handling and UTM parameter tracking. - **Custom Commerce Rules:** Developed custom rules for Drupal Commerce to handle complex business logic and workflows. ## Drupal 7 Hosting and Maintenance - **Hosting Management:** Expertly managed hosting environments on Pantheon and Acquia, including setting up and maintaining multisite configurations. - **Routine Maintenance:** Provided regular maintenance services, including security updates, module updates, and patches. - **Performance Optimization:** Conducted performance reviews and implemented enhancements to ensure optimal site speed and reliability. - **Infrastructure Setup:** Built and maintained infrastructure on single servers or load-balanced solutions using CentOS, Redhat, Ubuntu, and Debian. - **Load Testing & Benchmarking:** Performed load testing, benchmarking, and overloading tests to ensure site stability under high-traffic conditions. - **Promotion Testing:** Tested and optimized the site for promotional events to handle increased traffic and sales. - **Server-Level Security:** Applied patches at the server level to address security vulnerabilities and protect client data. - **SSL Implementation:** Set up and managed Let's Encrypt for SSL certificates, ensuring secure data transmission. - **Server Optimization:** Optimized server configurations, including Apache, MySQL/MariaDB/Percona, PHP (5.x, 7.x, FPM), Redis/Memcache, and Apache Solr, for peak performance. This portfolio highlights my extensive experience in **Drupal 7 development**, particularly in **building custom solutions, managing complex commerce implementations, and ensuring secure and high-performing hosting environments**. Whether developing custom modules or optimizing server infrastructure, I deliver **reliable and scalable Drupal solutions**. --- ## Drupal 8 Experience URL: https://michalak.world/experience/drupal-8-experience/ Drupal 8 development experience: Drupal 7 migrations, custom modules and REST APIs, Drupal Commerce 2.x carts and checkout, multi-currency and tax handling, and hosting on Pantheon and Acquia. ## Migrations - Upgraded sites from Drupal 6/7 to Drupal 8, including complex data migrations from various databases. - Seamlessly transitioned Drupal 8 sites to Drupal 9. ## Custom Development - Developed custom REST APIs and integrate external data feeds into Drupal. - Created custom entity fields in Drupal 8 for tailored content management solutions. - Built custom modules and integrated data via Feeds, including importing from RSS feeds. - Implemented Apache Solr for enhanced search capabilities. - Developed custom tools such as calculators, landing pages, and site views with caching based on user entry points. - Created and customized themes, including working with Glazed Builder and enhancing its functionality with views and exposed filters. - Integrated third-party services and solutions, including PDF generation for nodes, Webform submissions, and Commerce invoices. - Debugged and resolved complex issues in existing Drupal installations. - Managed multisite setups and implemented SMS integrations with platforms like Mobile Commons and Twilio. - **GDPR Compliance:** Developed GDPR-compliant solutions, enabling users to opt-out, view their data, mark data as sensitive, and manage cookie consent. ## Drupal Commerce Expertise - Customized Drupal Commerce 2.x workflows, including bespoke cart and checkout processes. - Developed custom tax resolvers and exemptions, including VAT handling for international shipping. - Created promotions like "Buy X, get Y% off," and implemented custom purchase order workflows. - Integrated multi-currency support with GEOIP-based currency detection and conversion. - Designed custom order types, price lists based on user roles, and Solr-indexed product catalogs with faceted search. - Implemented advanced shipping solutions with EasyPost, FedEx, USPS, and UPS, supporting multi-currency transactions and multi-location shipping. - Developed custom payment gateway integrations with Authorize.net, Braintree, PayPal, Cybersource, and Stripe, contributing to community patches. - Enabled multilingual support for existing projects, adding and managing multiple languages. - Built custom session variables for checkout flows, language settings, and UTM parameters. - Created custom events for shopping carts and order states and managed warehouse requests and product borrowing modules. - Automated order processing via cron jobs, including generating pick tickets and updating order statuses. - Integrated mapping solutions like Google Maps and Leaflet for store locators and product availability. - Developed features for anonymous orders and auto-account creation based on checkout email. ## Hosting and Maintenance - Managed hosting on Pantheon and Acquia, providing routine maintenance and security updates. - Handled module updates, patches, and multisite setups. - Conducted performance reviews and implemented enhancements, including server optimizations for Apache, MySQL/MariaDB/Percona, PHP, Redis, and Memcache. - Built and maintained infrastructure, from single servers to load-balanced solutions, across CentOS, Redhat, Ubuntu, and Debian. - Performed load testing, benchmarking, and server-level security patching. - Implemented SSL solutions with Let's Encrypt and integrated Apache Solr for advanced search capabilities. This portfolio showcases my expertise in Drupal development, focusing on custom solutions, complex integrations, and robust hosting and maintenance practices. Whether migrating legacy systems, optimizing performance, or building new features, I deliver tailored, high-quality results for Drupal projects. --- ## Drupal 9 Experience URL: https://michalak.world/experience/drupal-9-experience/ Drupal 9 development experience: Drupal 7 and 8 upgrades, custom module and REST API development, Drupal Commerce 2.x workflows, performance tuning, and hosting on Pantheon and Acquia. ## Migrations - Seamlessly transitioned Drupal 8 sites to Drupal 9. ## Custom Development - Developed custom REST APIs and integrate external data feeds into Drupal. - Created custom entity fields in Drupal 8 for tailored content management solutions. - Built custom modules and integrated data via Feeds, including importing from RSS feeds. - Implemented Apache Solr for enhanced search capabilities. - Developed custom tools such as calculators, landing pages, and site views with caching based on user entry points. - Created and customized themes, including working with Glazed Builder and enhancing its functionality with views and exposed filters. - Integrated third-party services and solutions, including PDF generation for nodes, Webform submissions, and Commerce invoices. - Debugged and resolved complex issues in existing Drupal installations. - Managed multisite setups and implemented SMS integrations with platforms like Mobile Commons and Twilio. - **GDPR Compliance:** Developed GDPR-compliant solutions, enabling users to opt-out, view their data, mark data as sensitive, and manage cookie consent. ## Drupal Commerce Expertise - Customized Drupal Commerce 2.x workflows, including bespoke cart and checkout processes. - Developed custom tax resolvers and exemptions, including VAT handling for international shipping. - Created promotions like "Buy X, get Y% off," and implemented custom purchase order workflows. - Integrated multi-currency support with GEOIP-based currency detection and conversion. - Designed custom order types, price lists based on user roles, and Solr-indexed product catalogs with faceted search. - Implemented advanced shipping solutions with EasyPost, FedEx, USPS, and UPS, supporting multi-currency transactions and multi-location shipping. - Developed custom payment gateway integrations with Authorize.net, Braintree, PayPal, Cybersource, and Stripe, contributing to community patches. - Enabled multilingual support for existing projects, adding and managing multiple languages. - Built custom session variables for checkout flows, language settings, and UTM parameters. - Created custom events for shopping carts and order states and managed warehouse requests and product borrowing modules. - Automated order processing via cron jobs, including generating pick tickets and updating order statuses. - Integrated mapping solutions like Google Maps and Leaflet for store locators and product availability. - Developed features for anonymous orders and auto-account creation based on checkout email. ## Hosting and Maintenance - Managed hosting on Pantheon and Acquia, providing routine maintenance and security updates. - Handled module updates, patches, and multisite setups. - Conducted performance reviews and implemented enhancements, including server optimizations for Apache, MySQL/MariaDB/Percona, PHP, Redis, and Memcache. - Built and maintained infrastructure, from single servers to load-balanced solutions, across CentOS, Redhat, Ubuntu, and Debian. - Performed load testing, benchmarking, and server-level security patching. - Implemented SSL solutions with Let's Encrypt and integrated Apache Solr for advanced search capabilities. This portfolio showcases my expertise in Drupal development, focusing on custom solutions, complex integrations, and robust hosting and maintenance practices. Whether migrating legacy systems, optimizing performance, or building new features, I deliver tailored, high-quality results for Drupal projects. --- ## Drupal Commerce Experience URL: https://michalak.world/experience/drupal-commerce-experience/ Drupal Commerce experience across Commerce 1.x and 2.x: custom tax resolvers, promotions, multi-currency with GEOIP detection, EasyPost and FedEx shipping, Stripe and Braintree payment gateways, and PDF invoicing. ## Commerce 1.x and 2.x Implementations ## **Drupal 8 Commerce 2.x** - Custom Commerce Cart Workflows - **Drupal Commerce Taxes** - [commmerce_tax - Custom Tax Resolvers](/article/drupal-8-commerce-tax) - Tax Exemptions - Line Item Taxing - VAT Shipping Tax - **Drupal 8 Promotions** - [Buy X or more of the same product and get % off that order item](/article/drupal-8-commerce-promotions-buy-x-or-more-same-product-and-get-order-item) - Custom Purchase Order Implementations - Custom Point of Sale Implementations - **MultiCurrency** - GEOIP Currency Detection: IP detects country then uses list to pick currency - Currency Conversion - Custom Currency - **GEO IP Detection** - Set Currency - Set Payment gateway - **Custom Order Email Templates** - Upon placing order - Update user based upon order state - Update user when order has been shipped - Custom Order Types: Order, Purchase Order, Point of Sale - Pricelists - Different price sets based on role - Custom Apache Solr indexed catalogs with faceted searches and auto complete - Product Creation - Custom forms for on-the-fly project and variation generation integrated with commerce_pricelists. - **Commerce Shipping Integrations** - **EasyPost** - Custom Shipping Integration - Shipping internationally using FedEx, USPS, UPS - Shipping from multiple locations based upon customer's address - Integrated with multi-currency - Purchase shipping label, attach to order - Update users and orders with shipping status updates. - FedEx - USPS - **Drupal Commerce Payment Gateways**: Authorize.net, Braintree, PayPal, Cybersource, and Stripe - I have contributed to PayPal and Cybersource patches on drupal.org. - **Multilingual Implementations** - Taken existing projects and added multiple languages - **Custom Session Variables** - Checkout flows - Languages - Coupons - UTM Params to Variable - **Custom Events** - Shopping Cart Events - Order Events - Based on Order State - **Warehouse Management** - Request for product - Create a location for the product - Manage Requests for products - **Product Borrowing Module** - Auto set borrowing timeline - Alert/Email user when product is due back - **PDF Generation** - mpdf, dompdf - Order Invoices - Picket Tickets - Sell Sheets - **Reorder an Order** - Allow user to reorder the same order from their account - **Process Orders via Cron Run** - Generate Picket Tickets - Update order state/status - Update Account - **Maps - Google Maps, Leaflet** - Store Locator - Product Availability - **Anonymous Orders** - Auto-create Account - New orders are automatically added to account based on email address used during checkout. ## **Drupal 7 Commerce 1.x** - Custom Commerce Cart Workflows - **Drupal Commerce Taxes** - Avalara - VAT and Sales Tax - Custom Avalara Rules - Additional Store Addresses - VAT ID Real-Time Validation - GEOIP Currency Detection - **Drupal Commerce Payment Gateways**: Authorize.net, PayPal, Cybersource, and Stripe - I have contributed to PayPal and Cybersource patches on drupal.org. - Drupal Commerce Stock Levels - Multilingual Implementations - Multilingual Integrations: Transifex - Ubercart - Custom Session Variables - UTM Parameters Storing and Reporting - Custom Commerce Rules - Custom Roles to Bypass Cart Checkout - Purchased Product View for Customer - Subscriptions - Recurring Billing - Commerce Card on File - **Custom Store Clerk Interface** - Implemented Zebra Scanner - Custom order interface to allow store clerk to fill part of an order, using ajax - Allow for partial order shipment and partial order pickup - Order pickup slip generation based on line items selected - Multiple Store Locations - Store Locator with Google Maps - SalesForce --- ## Drupal Healthcare Experience URL: https://michalak.world/experience/drupal-health-care-experience/ Drupal healthcare project experience: healthcare enrollment and application forms, city clinic information platforms with SMS reminders, and accreditation platforms with scoring and Commerce-based fees. ## Types of Health Care Projects ### Healthcare Enrollment - Application Forms - Data Handling - Healthcare Plan Information - Moving Data between environments ### City Clinic - Information platform - SMS Reminders (Appointments, Take Prescriptions, Refill Prescriptions) - Information Catalog - Drupal Design Builder for Admins ### Accreditation Platforms - 300-400 Application Questions - Application and Accreditation Fees (Drupal Commerce) - Questionnaire Follow Up - Verification Forms - Application Scoring and Approval Process --- ## Drupal: Higher Education - University Experience URL: https://michalak.world/experience/drupal-higher-education---university-experience/ Drupal higher education experience: university bookstore Commerce projects, news platforms, department multisites with custom Pantheon upstreams, Drupal 7 to 8 migrations, and custom learning platforms. I have worked on many higher education website projects. They range from: - Book Store Drupal Commerce Project - University News Projects - Department Websites and Multi-sites (Custom Upstreams on Pantheon) - Drupal 7 to 8 Migrations - Custom Module Development - Custom Rules Module Development - Custom Organic Groups Module Development - Custom learning platform with third party video, user submissions and assessment.  - Google Maps API - Troubleshooting - Drupal Training --- ## Fractional CTO URL: https://michalak.world/experience/fractional-cto/ Fractional CTO services for startups and small to medium businesses. Senior technology leadership, architecture planning, and technical strategy on a part-time basis. I provide fractional CTO services to startups, small and medium-sized enterprises, and growing businesses that need senior technology leadership without a full-time executive hire. With 13 years of experience, I combine hands-on technical depth with strategic vision to help organizations navigate technology management, product development, and digital transformation. ## What I Offer - Technology Strategy Development - Product Development and Innovation - Team Leadership and Mentorship - Vendor and Partner Management - Technology Stack Selection - Risk Management - Cost Optimization - Scalability Planning ## Why Choose Me? - Flexible Engagement - Cost-Effective Solution - Immediate Impact - Strategic Focus ### Proven Expertise With a track record of success across various industries, I bring deep knowledge and experience to every project, ensuring your technology supports your business growth. ## Who Can Benefit? - **Startups:** Establish a robust technology foundation, avoid common pitfalls, and ensure your tech supports rapid growth. - **SMEs:** Scale your business confidently with a technology infrastructure designed to grow with you. - **Established Companies:** Navigate digital transformations or tackle complex projects with expert guidance and strategic oversight. - **Temporary Needs:** Fill the gap during transitions, such as mergers and acquisitions, or while searching for a full-time CTO. ## Let's Work Together Whether you need ongoing strategic guidance, help with a specific project, or interim leadership during a transition, my Fractional CTO services offer the flexibility and expertise you need to achieve your technology goals. Contact me today to discuss how I can support your business as a Fractional CTO and help drive your technology initiatives forward. --- ## Hosting Experience URL: https://michalak.world/experience/hosting-experience/ Hosting and DevOps experience across Pantheon, Acquia, AWS, Digital Ocean, Linode, Rackspace, and shared hosts, covering managed Drupal platforms and self-managed cloud infrastructure. - Pantheon - Acquia - Digital Ocean - Rackspace - Amazon Web Services (AWS) - Linode - Site Ground - Bluehost - Inmotion Hosting I have also worked with many other hosting environments. These are the environments I have used time and time again. --- ## Shopify Experience URL: https://michalak.world/experience/shopify-experience/ Shopify development experience: building apps and app extensions in Node.js, working with the GraphQL, Admin REST, and Storefront APIs, and migrating Drupal Commerce stores to Shopify. I have developed Shopify applications and app extensions using Node JS, as well as performed data migrations from Drupal utilizing PHP. Throughout the migration process, I transferred various elements including product variations, individual products, customers, orders, images, and product redirects. ## App Development Languages - Node JS - PHP ## API Experience - GraphQL - Admin Rest API - Storefront API ## Migrations - Drupal Commerce to Shopify - Converted all custom Drupal modules into Shopify modules. --- # Articles --- ## How to Make Your Website AI-Friendly (What Actually Works in 2026) URL: https://michalak.world/posts/how-to-make-your-website-ai-friendly/ Published: 2026-08-17 Tags: AI SEO, SEO, Structured Data, Schema.org, Cloudflare, Hugo, AI Consulting, AI Agents, Technology Strategy Making a site AI-ready comes down to four things that are actually enforced: let AI crawlers through at the network edge, name them in robots.txt, describe yourself as a resolvable entity in Schema.org JSON-LD, and keep your sitemap and modification dates honest. Most other AI SEO advice is unmeasurable. "AI SEO" has become a product category, and most of what is sold under that label cannot be measured. I spent August rebuilding this site for AI discoverability, and the useful part of that work was not the tactics — it was sorting the recommendations that are actually *enforced* by AI crawlers from the ones that just sound plausible. Here is what survived that sort, in the order that matters. --- ## First, understand the three ways AI reaches your content Every major AI operator runs **several** crawlers with different jobs, and they are governed independently. This is the detail that trips up most site owners: blocking or allowing one does nothing to the others. | Purpose | What it does | Examples | | --- | --- | --- | | **Training** | Collects content to train or fine-tune models | `GPTBot`, `ClaudeBot`, `Google-Extended`, `Applebot-Extended`, `CCBot`, `meta-externalagent` | | **Search / answer index** | Indexes content to answer questions later, with citations | `OAI-SearchBot`, `Claude-SearchBot`, `PerplexityBot` | | **User-initiated fetch** | Fetches a page in real time because a person asked | `ChatGPT-User`, `Claude-User`, `Perplexity-User` | The distinction is a business decision, not a technical one. Training gets you into the model's weights with no attribution and no referral traffic. Search and user-initiated fetches are what produce a **cited link back to you**. If you want to be recommended when someone asks a general question, allow all three. If your content *is* your product, block training and allow the other two. --- ## Step 1: Confirm you are not already blocking them This is the step that gates everything else, and it is the one people skip because it lives in a dashboard rather than in the codebase. A block at your CDN or WAF happens at the network level. The crawler gets a `403` and **never reaches the `robots.txt` you carefully wrote**. All the structured data in the world is worthless behind that. If you are on Cloudflare, this is time-sensitive. On **September 15, 2026**, Cloudflare applies new default AI bot policies: bots classified as Training or Agent get blocked on pages displaying ads, and mixed-purpose crawlers that combine Search and Training are blocked by any configuration that blocks training. Free-plan customers who have never touched these settings are moved onto the new defaults automatically. Two settings deserve specific attention: - **Managed `robots.txt`** — when enabled, Cloudflare serves its *own* `robots.txt` containing `Disallow` rules for known AI crawlers plus a Content Signals policy defaulting to `ai-train=no`. That silently overrides whatever your site generates. - **The legacy "Block AI bots" toggle** — deprecating on the same date, and it now also blocks mixed-purpose crawlers. That includes Googlebot. Test it from outside, with a real bot user agent. All of these should return `200`: ```bash curl -sI -A "GPTBot/1.0" https://example.com/ | head -1 curl -sI -A "OAI-SearchBot/1.0" https://example.com/ | head -1 curl -sI -A "ClaudeBot/1.0" https://example.com/ | head -1 ``` A `403` means your edge configuration is the problem, and no amount of on-site work will fix it. --- ## Step 2: Name each bot in `robots.txt` A bare `User-agent: * / Allow: /` is technically sufficient. Naming each crawler is still worth doing, because it makes your policy explicit, self-documenting, and robust against wildcard-matching quirks in individual crawlers. ``` User-agent: GPTBot Allow: / User-agent: OAI-SearchBot Allow: / User-agent: ClaudeBot Allow: / User-agent: PerplexityBot Allow: / Content-Signal: search=yes, ai-input=yes, ai-train=yes Sitemap: https://example.com/sitemap.xml ``` That `Content-Signal` line is Cloudflare's Content Signals Policy, which expresses intent separately for search indexing, real-time answer generation (`ai-input`), and model training. Unlike much of this space, `robots.txt` compliance is genuinely documented by every major operator — OpenAI, Anthropic, Google, and Perplexity all publish that they honor it. One warning if you use a static site generator: many themes deliberately emit `Disallow: /` in development builds. Check the file your **production** build produces, not the one your local server serves. --- ## Step 3: Structured data — the real visibility lever This is where most sites leave the largest gain on the table. Nearly every CMS and theme emits something like this: ```json "author": { "@type": "Person", "name": "Michael Michalak" } ``` An AI system cannot do anything useful with that. It is a **name string**, not an entity. There is nothing to resolve it against, nothing to verify, and no relationship between the author of an article and the person the site is about. What you want instead is a single JSON-LD `@graph` with cross-referenced `@id` values, so every node on every page points at the same canonical entity: ```json { "@context": "https://schema.org", "@graph": [ { "@type": "Person", "@id": "https://example.com/#person", "name": "Michael Michalak", "jobTitle": "Backend Developer, Fractional CTO, AI Consultant", "sameAs": [ "https://www.linkedin.com/in/michaelmichalak", "https://github.com/mikemichalak" ], "knowsAbout": ["Drupal", "Drupal Commerce", "AI Agents"], "alumniOf": { "@type": "CollegeOrUniversity", "name": "Purdue University" } }, { "@type": "WebSite", "@id": "https://example.com/#website", "publisher": { "@id": "https://example.com/#person" } }, { "@type": "BlogPosting", "author": { "@id": "https://example.com/#person" }, "publisher": { "@id": "https://example.com/#person" } } ] } ``` The `@id` values are the whole point. They turn a set of unrelated per-page snippets into one graph that consistently says *this article was written by this specific person, who is the subject of this site, and who is also these two external profiles.* Two things to get right: - **Use the type that matches the page.** A page about a person should be `ProfilePage` with `mainEntity` pointing at your `Person`. Pages describing what you offer should be `Service`, not a generic `Article`. Add `BreadcrumbList` so the hierarchy is explicit. - **Make `sameAs` reciprocal.** `sameAs` is only a *claim* until the external profile links back. Put your site URL in your LinkedIn and GitHub profile fields. Unverifiable claims in structured data are worse than absent ones. Keep the facts in one data file rather than scattered through templates, and only assert things a human can confirm from visible page content. Validate with the [Google Rich Results Test](https://search.google.com/test/rich-results) and the [Schema.org validator](https://validator.schema.org/) after deploying. --- ## Step 4: Make your freshness signals true Check your own site for this one, because it is almost universal and completely invisible. Across the 76 pages here, **zero** set a modification date. Hugo silently fell back to the publish date, which meant every `dateModified` in the structured data and every `` in the sitemap was just restating when the page was first written. A page I had substantially revised looked untouched since 2019. In Hugo the fix is `enableGitInfo = true`, which derives modification dates from the last commit that touched each file. Every generator has an equivalent. The catch worth knowing: this needs **full git history at build time**. Most hosts, including Cloudflare Pages, clone with depth 1 by default. If all your `lastmod` values collapse to the build date, that is why. While you are in there: - **Create real section landing pages.** `/posts/` and `/experience/` were rendering untitled and undescribed here, and both are prime targets for category-level queries. - **Submit your sitemap** to [Google Search Console](https://search.google.com/search-console) and [Bing Webmaster Tools](https://www.bing.com/webmasters). AI answer engines lean on conventional search indexes far more than on anything AI-specific, and Bing's index still feeds several AI answer products. --- ## Step 5: Shape content so a passage can stand alone An answer engine does not cite pages. It extracts **passages**. Content that requires reading three sections to assemble one answer does not get used. - **Fix your heading hierarchy.** If your generator renders the front matter title as the `H1`, a `#` heading in the body creates a second one and flattens the structure parsers use to segment a page. Seven pages here had this, one of them using `#` for every single section. - **Add question-and-answer pairs.** Q&A is the single most extractable shape there is. Pair the visible content with `FAQPage` JSON-LD generated from the *same source*, so the markup can never describe a question a visitor cannot see — which is what Google requires. - **Lead with the answer.** Put a complete, standalone summary in the opening block so an extractive summarizer finds a finished answer instead of having to synthesize one. - **Write descriptions that add information.** A `description` that restates the title gives an AI system nothing it did not already have from the heading. Write it as a self-contained answer to the question the page addresses. --- ## Step 6: Machine-readable endpoints, with realistic expectations Two things here, and they are not equally worthwhile. **Markdown twins of every page: worth it.** Hugo 0.164 ships a built-in `markdown` output format, so every page gets a clean `.md` version at `/posts/slug/index.md`, discoverable through the `` tag. An agent gets source Markdown with its lists, code blocks, and heading structure intact, rather than HTML that has been crudely stripped of tags. **`llms.txt`: near-zero value, near-zero cost.** I want to be direct about this because the file gets recommended constantly: - An Ahrefs study of 137,000 domains found **97% of `llms.txt` files received zero requests** in May 2026. - Google stated in June 2026 that the file is **not required** for Search. - OpenAI's and Anthropic's crawler documentation both point site owners to `robots.txt` instead. Ship it anyway if it costs you one build step, because AI coding agents like Cursor, Claude Code, and Copilot *do* read it. Just do not expect citations from it, and do not let anyone sell you an AI SEO package whose centerpiece it is. --- ## A note on `auth.md`, which is not an SEO file One more file has entered this conversation recently, and it belongs in a different category from everything above. [`auth.md`](https://github.com/workos/auth.md) is an open protocol WorkOS published in May 2026. It answers a question none of the other files touch: how does an AI agent *sign up* for your service on behalf of a user, without a human filling in a form? The Markdown file at `https://yourapp.com/auth.md` is the prose entry point. The actual discovery path is two hops of existing OAuth standards: 1. Your API returns `401` with a `WWW-Authenticate: Bearer resource_metadata="…"` header. 2. That points at Protected Resource Metadata ([RFC 9728](https://www.rfc-editor.org/rfc/rfc9728)) at `/.well-known/oauth-protected-resource`, naming the resource, its scopes, and its authorization server. 3. The authorization server's metadata ([RFC 8414](https://www.rfc-editor.org/rfc/rfc8414)) at `/.well-known/oauth-authorization-server` carries an `agent_auth` block with the registration endpoints and the flows you accept. There are two flows. In **agent verified**, the agent's identity provider signs an ID-JAG assertion vouching for the user, and the service issues a credential synchronously with no human in the loop. In **user claimed**, the agent shows the user a one-time code to confirm, which needs no provider integration at all. **Whether this applies to you is a yes-or-no question, not a spectrum.** If your site issues credentials — accounts, an API, anything sitting behind a `401` — it is worth reading properly. If you publish content, it is not for you, and publishing the discovery documents anyway means advertising endpoints that `404`. That is the same failure as an unverifiable `sameAs`: a machine-readable claim that does not survive being checked. This site is squarely in the second group, so I published an `/auth.md` that says exactly that — no registration exists, no credential is needed, here are the open endpoints, do not go looking for a `register_uri`. An agent gets its answer in one fetch instead of walking a discovery chain to a dead end. One safety note for anyone building scanners: **do not probe `POST /agent/auth` to test whether a site supports this.** That is a registration endpoint. Hitting it can create accounts, send email, and issue live credentials. The public discovery documents are the safe source of truth, and they are the only thing worth reading unattended. --- ## How to tell whether it worked There is no rank tracker for AI answers. Everything above is input; there are only two honest feedback loops. 1. **Your CDN's AI bot analytics.** Cloudflare's AI Crawl Control reports actual AI bot request volume by operator. What you want to see is `GPTBot`, `ClaudeBot`, `OAI-SearchBot`, and `PerplexityBot` appearing with non-zero counts and no blocks. Give it two to four weeks. 2. **Ask the models directly, monthly.** Put the question your customer would actually type into ChatGPT, Claude, and Perplexity, and note whether you get cited. That is the outcome all of this aims at, and no dashboard reports it. --- ## The short version The uncomfortable truth about AI SEO is that most of it is just technical SEO done properly, plus one genuinely new requirement: **explicitly permitting AI crawlers, and describing yourself in a way a machine can resolve and verify.** If you only do three things: unblock the crawlers at your edge, build a real Schema.org entity graph with `@id` references and reciprocal `sameAs` links, and make your modification dates tell the truth. That is the 80%. Everything else on the list is refinement, and anything not on the list is probably someone's product. --- **Want a second opinion on your own setup?** I do this work on client sites — crawler policy, structured data, and the technical SEO underneath it. [Get in touch](/contact/) and I will tell you which of the six steps above you are actually missing. --- ## Behind the Scenes of the GEN Platform Update: Making Engagement Seamless URL: https://michalak.world/posts/behind-the-scenes-of-the-gen-platform-update/ Published: 2026-02-12 Tags: Drupal, Drupal 10, Theming, Testing, Bootstrap, Bootstrap 5, Composer, Configuration, API Behind the Scenes of the GEN Platform Update: Making Engagement Seamless The [**GEN (Global Entrepreneurship Network) platform**](https://www.genglobal.org/) recently rolled out a series of updates designed to make it easier, faster, and more intuitive for users to engage with content, programs, and the broader global entrepreneurship ecosystem. While the announcement highlights what’s new on the surface, a lot of meaningful work happened behind the scenes to ensure the platform could support these improvements smoothly, reliably, and at scale. I had the opportunity to participate directly in implementing and deploying these updates, focusing on both structural improvements and custom frontend behavior. ## Improving the Foundation for Engagement One of the main goals of the update was to remove friction for users navigating the platform. That meant revisiting how key UI components were built and rendered, especially those that appear everywhere and directly affect usability. As part of this work, I: - Revamped custom menu and header logic to ensure consistent behavior across devices and page types - Refactored dynamic blocks and content rendering, making them more flexible and easier to manage - Improved how content adapts to different contexts without sacrificing performance or maintainability These changes weren’t just cosmetic. They helped reduce technical debt, clarified how content flows through the system, and made future enhancements easier to ship. ## Cleaner Code, Better Performance Beyond visible improvements, a big part of the update involved revisiting existing custom code and modernizing it where needed. This included: - Streamlining conditional logic tied to navigation and layout - Improving how dynamic content is injected and cached - Ensuring updates deployed cleanly across environments with minimal risk The result is a platform that feels lighter and more responsive for users, while also being easier for the team to extend and maintain. ## Deployment with Stability in Mind Implementing changes on a global platform isn’t just about writing code, it’s about deploying with confidence. I was involved in the deployment process to ensure updates rolled out smoothly and didn’t disrupt existing functionality. That meant validating edge cases, coordinating changes across components, and making sure the updated system behaved predictably under real-world usage. ## Looking Ahead These updates lay the groundwork for future improvements to the GEN platform. With cleaner custom code, more flexible content structures, and a more robust navigation system, the platform is better positioned to evolve alongside the needs of the global entrepreneurship community. It’s always rewarding to work on projects where thoughtful technical improvements directly support a better user experience, and this update was a great example of that balance. --- ## Freelancers vs. Agencies: The Quiet Advantage in the Age of AI Coding URL: https://michalak.world/posts/freelancers-vs-agencies-the-quite-advantage-in-the-age-of-ai-coding/ Published: 2025-05-06 Tags: Freelance, Agencies, VibeCoding, AI Generated Code, Code Review, Hiring Why a skilled freelancer often outperforms an agency in the age of AI coding: direct communication, faster pivots, no overhead layers, and retained context on your codebase. Following up on my last post — *“AI Coding vs. Offshore Outsourcing: Are We Repeating the Same Mistake?”* — I wanted to dive into a more nuanced topic: **why hiring a skilled freelancer often delivers better results than hiring an agency**. Just like the old outsourcing model, many companies still assume that **more people means better results**. So they go with an agency — for the brand, for the perceived process, or for the promise of scalability. But the truth is, in today’s environment (especially with AI and vibe coding in the mix), a well-rounded freelancer can often outperform an agency in key areas. --- ## Freelancers vs. Agencies: What's the Difference? | Aspect | Freelancer | Agency | |----------------------|----------------------------------------|----------------------------------------| | **Communication** | Direct — you talk to the person doing the work | Filtered — through PMs, leads, etc. | | **Speed** | Fast, focused, and agile | Slower — often bogged down by process | | **Cost** | Pay for the work done | Pay for overhead and project layers | | **Customization** | Highly flexible and personal | Tends to be templated or standardized | --- ## In the Age of AI, Agencies Often Add Friction When AI tools are writing and refactoring code at speed, the last thing you want is an approval chain that takes days. Agencies tend to rely on rigid workflows, making it harder to react to: - New requirements - Unexpected bugs - Design/UX insights uncovered mid-sprint A freelancer, on the other hand, can **pivot quickly**, refine AI output in real-time, and focus on delivering working software — not managing a ticket queue. --- ## Freelancers Bring Deep Context — and Keep It Agencies often rotate team members, or assign multiple people across projects. That leads to loss of context, dropped details, and rework. A freelancer: - Learns your codebase inside and out - Builds a long-term relationship with your team - Sticks with the project through every phase of growth That continuity **saves time, prevents bugs**, and ensures smoother long-term evolution. --- ## When a Freelancer Is the Better Fit Consider a freelancer when: - You need someone **hands-on and strategic** - You want **AI-generated code reviewed, cleaned, and deployed safely** - You value **speed and flexibility** over layers of management - You’re looking to **build a long-term relationship** with someone who knows your system deeply --- ## Final Thoughts AI is reshaping how we build software — fast. But fast code still needs clear thinking, real experience, and accountability behind it. A strong freelancer doesn’t just write or review code — they **own outcomes**. So before defaulting to a big agency, ask yourself: > What if one highly skilled freelancer could give me better results, faster — with less overhead and more care? Chances are, they can. --- **Looking for freelance support with AI-assisted code, legacy refactoring, or fast-growing projects?** Let’s chat. I help teams move quickly — without cutting corners. --- ## AI Coding vs. Offshore Outsourcing: Are We Repeating the Same Mistake? URL: https://michalak.world/posts/ai-coding-vs-offshore-outsourcing-are-we-repeating-the-same-mistake/ Published: 2025-05-05 Tags: Debuging, VibeCoding, AI Generated Code, Testing, Code Review, API AI Coding vs. Offshore Outsourcing: Are We Repeating the Same Mistake? About 10–15 years ago, there was a massive push to **outsource software development overseas** in search of lower costs. The logic was simple: “Why pay $150/hr for a developer in the U.S. when you can get someone for a fraction of that elsewhere?” It was an attractive idea — until it wasn’t. --- ## The Outsourcing Boom... and Bust For a few years, many companies handed over their entire codebases to offshore dev shops. Some got lucky. Most didn’t. What followed was a predictable pattern: - Incomplete or poorly structured code - Communication gaps due to time zones and language barriers - Lack of context for business logic - Projects delivered that “worked” but weren’t maintainable Eventually, many teams had to **bring development back in-house or to U.S.-based developers**, only now with added costs. Why? Because they had to: - **Audit** what was done - **Untangle** technical debt - **Rebuild** critical features - **Fix** bugs that cost them customers and credibility The total cost? Often **double (or more)** than if it had been built correctly the first time. --- ## Fast Forward to Today: Enter AI & Vibe Coding Now we’re in the age of **AI coding assistants** and **vibe coding** — the idea of staying in flow with tools like GitHub Copilot, Devin, or ChatGPT writing large portions of code for us. This is incredibly exciting and powerful. But the same warning applies: **fast doesn’t mean right**. AI can generate syntactically valid code, but: - It doesn’t understand your product vision - It can’t anticipate complex edge cases - It often skips testing, security, and maintainability - It can hallucinate APIs or make outdated assumptions We’re already seeing teams **depend heavily on AI-generated code** without proper review — and later pay the price in debugging, performance issues, and rewrites. --- ## The Lesson: Cheap ≠ Efficient The lesson from the outsourcing era isn’t “never outsource” — it’s that **development is more than typing code**. It’s about: - Understanding context - Solving business problems - Writing code that evolves with your product AI tools can help — just like offshore teams can. But they need oversight, structure, and experience guiding the process. Otherwise, you may find yourself — once again — spending **double** to fix what you thought you were saving on. --- ## My Take I’ve worked with companies cleaning up after rushed outsourcing decisions — and I’m now helping teams **review and debug AI-generated code** before it creates tech debt. Use AI. Move fast. But build smart. If your team is experimenting with vibe coding or integrating AI into your workflow, I’d love to help you build a solid review, QA, and architecture strategy — so you don’t have to do the work twice. --- --- ## Reviewing and Debugging AI-Generated Code & Vibe Coding Projects URL: https://michalak.world/posts/reviewing-and-debugging-ai-generated-code-and-vibe-coding-projects/ Published: 2025-05-04 Tags: Debuging, VibeCoding, AI Generated Code, Testing, Code Review, API 13+ Years as a Developer Consultant: Reviewing and Debugging AI-Generated Code & Vibe Coding Projects. AI-generated code is becoming increasingly common in modern development workflows. Tools like GitHub Copilot, ChatGPT, and Devin offer speed and convenience — suggesting functions, writing boilerplate, and even scaffolding full-featured modules. Meanwhile, "vibe coding" — a term capturing the flow-like collaboration between developers and AI — is redefining how we build software. But here’s the truth: AI-generated code still needs review. And debugging AI-assisted code requires the same attention to detail (if not more) as hand-written code. As a developer and technical consultant, here’s how I help teams **review, debug, and production-proof** AI-generated and vibe-coded projects. --- ## Reviewing the Logic Behind the Suggestions AI tools can’t fully understand your business rules or long-term goals. That’s where I come in. I walk through AI-generated code and check: - Does this logic actually make sense for your use case? - Are there edge cases that the AI didn’t consider? - Is this code maintainable and scalable? Code might *run*, but if it doesn’t serve your product, it's not helping. --- ## Identifying Bugs and Anti-Patterns AI can introduce: - Inefficient loops - Deprecated API usage - Hardcoded values or insecure patterns I bring years of backend development and systems experience to recognize when code "looks right" but is quietly brittle. I test for: ### Input/output validation - Missing type checks - Lack of null checks or default values - Unsanitized input - Unsafe assumptions about structure or presence of fields ### API misuse - Incorrect HTTP method (e.g., using GET when POST is required) - Missing Authorization headers - Skipping proper content type (like application/json) - Ignoring rate limits, error codes, or retries - Misunderstanding request/response formats ### Runtime behavior under stress - Can it handle large datasets without crashing? - Are there memory leaks from infinite loops or unclosed streams? - Does the code gracefully handle missing APIs or services? - Is concurrency handled safely in async, fiber, or thread-based logic? - Are timeouts, retries, and fail-safes properly implemented? --- ## Integrating Code into Real-World Environments AI doesn’t know what your infrastructure looks like — I do. When I review AI-generated code, I: - Adapt it for your framework (Drupal, Node.js, Django, etc.) - Ensure it works within your CI/CD pipeline - Align it with your deployment strategy (serverless, containers, monoliths) This turns raw code into something deployable. --- ## Writing Unit Tests for AI Code AI often skips testing — I don’t. For every feature or function generated, I help: - Write meaningful unit and integration tests - Mock dependencies properly - Validate edge cases and error handling This turns suggestions into **stable code**. --- ## Debugging Vibe Coding Projects in Real Time Vibe coding isn’t just about code completion — it’s a development style where you work in rhythm with AI. In these sessions, I help developers: - Stay in flow while still being critical of the output - Adjust prompts for better AI responses - Step through and debug unexpected results on the fly This is where **engineering and intuition meet**. --- ## Final Thoughts AI can assist — but it’s not a replacement for experience, context, and judgment. If your team is exploring AI tools or building projects with vibe coding techniques, I can help ensure: - Your code works as expected - It's safe to deploy - It aligns with your long-term vision Let’s make sure your AI-enhanced development process doesn’t just move fast — but moves in the right direction. --- **Need help reviewing or debugging AI-generated code?** I offer code audits, hands-on development support, and dev team mentorship. Let’s connect. --- ## 13+ Years as a Drupal Developer Consultant: Jumping Into Projects and Driving Real Results URL: https://michalak.world/posts/13-plus-as-a-drupal-developer-consultant/ Published: 2025-05-01 Tags: Drupal, Drupal 10, Drupal 9, Drupal 8, Drupal 7, API, Technical Partner, Hosting 13+ Years as a Drupal Developer Consultant: Jumping Into Projects and Driving Real Results. As a Drupal developer with over 13 years of hands-on experience, I’ve worked with businesses of all sizes — from small startups and nonprofits to large enterprises and multi-site platforms. One consistent theme across my work is this: I’m often brought in **mid-project**, when things are already in motion, and there’s little time to waste. ## Coming In Mid-Stream: Hitting the Ground Running Unlike greenfield projects where everything starts from scratch, many of my clients bring me in during **high-stress or high-priority situations**: - A key developer has left and there’s a knowledge gap. - A critical bug is affecting a live production site. - A new feature needs to be launched quickly. - Infrastructure needs to scale — yesterday. My ability to **onboard quickly**, assess the current state of a project, and start delivering value fast is what keeps clients coming back. Whether I’m jumping into a complex deployment pipeline, unraveling legacy code, or mapping out the next Drupal version upgrade, I stay focused on the high-impact work that matters right now — while also building a plan for the long term. ## Not Just a Fixer — A Long-Term Partner While I often begin as a short-term fix for a burning issue, many of my engagements turn into **multi-year partnerships**. I become a trusted resource not just for solving the problem of the moment, but for **building a healthier codebase**, **future-proofing infrastructure**, and **supporting product growth**. Over time, I’ve helped clients: - Refactor legacy Drupal 7/8/9/10 codebases to prepare for modern best practices - Improve performance and page load speed across high-traffic sites - Add custom features tailored to business logic and real user needs - Build and enhance themes, including decoupled and headless front-ends - Set up and optimize hosting environments (Pantheon, Platform.sh, Digital Ocena, AWS, custom LAMP/LEMP) - Transition through major Drupal upgrades (e.g. 7 to 10) - Implement caching, logging, and monitoring best practices - Build internal developer tools and documentation for team scalability ## What I Bring to the Table I’m not just a backend developer — I act as a **technical partner**. That means helping teams make architecture decisions, coaching developers, vetting third-party tools, and making sure the solution fits both the technical and business goals. ### My strengths include: - **Fast ramp-up on complex projects** - **Deep experience across all Drupal versions (7, 8, 9, 10)** - **Strong focus on backend development and API integration** - **Experience with DevOps and infrastructure management** - **Clear, dependable communication with technical and non-technical stakeholders** ## Why Clients Choose to Keep Working with Me Many of the clients I support appreciate that I don’t just deliver code — I help **improve the entire lifecycle of the project**. From maintaining clean and stable environments to advising on long-term tech direction, I become a reliable resource who cares about the health of the platform and the team. I’m comfortable jumping into projects that are already underway, figuring out what’s working and what’s not, and bringing clarity and structure to move things forward. If you’re dealing with a project that’s off-track, in transition, or just needs another experienced set of hands — I’d love to talk. --- **Need help with your Drupal project?** Let’s connect. I’m always happy to take a look, whether you need a one-time fix or a long-term technical partner. --- ## Best CMS of 2025: A Comparison for Modern Websites URL: https://michalak.world/posts/best-cms-for-2025/ Published: 2025-04-30 Tags: Drupal, Wordpress, Webflow, Hugo, Framer, CMS, Content Management Best content management systems for 2025. A comparison between: Framer, Drupal, Webflow, Wordpress and Hugo. When building a modern website in 2025, choosing the right CMS (Content Management System) can make or break your workflow, performance, and long-term scalability. Whether you're launching a product, growing a brand, or managing a small business site, selecting the right platform is critical. In this post, we'll compare and contrast **Webflow**, **Framer**, **WordPress**, **Drupal**, and **Hugo** — and explain why **Hugo** might be the best choice for SMBs focused on brochures and landing pages, and why **Drupal** excels for complex, integrated sites. --- ## Webflow - **Strengths:** - Excellent visual editor for designers - Built-in CMS for structured content - Great for marketing teams and no-code workflows - **Weaknesses:** - Hosting is tied to Webflow - Limited backend flexibility - Can become costly per project **Best For:** Marketing teams and designers building CMS-driven sites without dev support. --- ## Framer - **Strengths:** - Lightning-fast site generation - Beautiful animations and design tools - SEO optimized and mobile-first by default - **Weaknesses:** - Limited extensibility - Requires Framer's hosting - Still maturing as a CMS **Best For:** Creative portfolios, fast landing pages, visually-rich campaigns. --- ## WordPress - **Strengths:** - Massive plugin and theme ecosystem - Strong community support - Works for blogs, e-commerce, and membership sites - **Weaknesses:** - Can be slow or bloated without tuning - Frequent maintenance and security patches needed **Best For:** Content-heavy sites, blogs, and businesses with diverse needs. --- ## Drupal - **Strengths:** - Enterprise-grade CMS with powerful APIs - Customizable to meet any business need - Excellent for structured content and workflows - Scalable, secure, and multilingual-ready - Easy integration with third-party tools - Built-in user authentication and role systems - Well-suited for e-commerce and online communities - **Weaknesses:**** - Steeper learning curve - Requires developer involvement - Overkill for simple sites **Best For:** Government, enterprise, higher education, content-rich platforms, e-commerce, community-driven websites, and SMBs that need extensive customization and flexibility. --- ## Hugo (with Netlify) - **Strengths:** - Ultra-fast static site generation - No database = less risk and blazing performance - Markdown-based content = simple version control - Excellent SEO and security out of the box - Seamless deployment and CMS management with Netlify - Easy editing through Netlify CMS or Git-based workflows - **Weaknesses:** - Does not support user authentication or dynamic content out of the box - Limited built-in search functionality - Not suited for community platforms or e-commerce without heavy customization **Best For:**** SMBs, agencies, and developers needing high-performance brochure and landing pages. ## **Best Pick for 2025** ### **Brochures and Landing Pages:** **Hugo + Netlify** is the best combo for small businesses that want: - Speed - Simplicity - Easy deployment - Top-tier SEO If you value a streamlined workflow, static security, and fast-loading pages without heavy CMS overhead, Hugo is the way to go in 2025. ### **Complex and Integrated Websites:** **Drupal** remains the best choice for scalable, complex websites with authentication, integrations, and dynamic workflows. It is ideal for building robust e-commerce platforms, member portals, and connected digital experiences. --- ## Final Thoughts There is no one-size-fits-all CMS. Your best choice depends on your team, goals, and scale: - Use **Webflow** or **Framer** if you're design-driven and need fast launches. - Use **WordPress** if you want a flexible, content-heavy platform with tons of plugins. - Use **Drupal** if you're building something complex, connected, or community-driven. - Use **Hugo** if you're focused on speed, simplicity, and security for brochures or landing pages. **Need help deciding?** Drop a comment or reach out, and we can help match the right CMS to your needs. --- ## Webflow and Framer: The Vendor Lock-In Dilemma URL: https://michalak.world/posts/webflow-and-framer-the-vendor-lock-in-dilemma/ Published: 2025-04-29 Tags: Webflow, Framer, CMS, Content Management Webflow and Framer: The Vendor Lock-In Dilemma and limitations. In recent years, no-code website builders like **Webflow** and **Framer** have exploded in popularity. They offer sleek interfaces, beautiful templates, and allow non-developers to create websites quickly and visually. For many startups and design teams, these platforms seem like a dream come true. But there's a hidden cost that becomes clear only after you've committed: **vendor lock-in**. --- ## What Is Vendor Lock-In? Vendor lock-in happens when you're so tied to a specific tool or ecosystem that switching away becomes difficult, costly, or outright impossible without starting from scratch. And in the case of Webflow and Framer, **your website, your content, and your freedom are locked inside their proprietary systems.** --- ## You Don't Truly Own Your Content With Webflow and Framer: - You **can’t export CMS content** in a usable way. - You **can’t export your full project and re-import it** somewhere else. - You are **tied to their hosting**, with no database access or backend control. - Your design structure is **built in their visual tool**, not in portable HTML/CSS. This means if you ever outgrow the platform or need a custom feature, you’ll likely need to rebuild everything from scratch elsewhere. --- ## Hosting and Platform Lock-In Both platforms encourage (and in some cases require) you to host your site on their infrastructure: - **Webflow** exports static code, but CMS functionality is **non-transferable**. - **Framer** also exports static HTML, but many dynamic features and animations are platform-specific. The end result? You’re **completely dependent on their uptime, pricing, roadmap, and limits.** --- ## Limited Control and Flexibility Need to: - Integrate a custom backend? - Add complex user authentication? - Extend your CMS beyond what's offered? You’ll quickly find yourself **hitting hard walls**. What starts as convenience becomes a cage. --- ## Alternatives That Offer Real Ownership If you want: - Full control over your code - The ability to switch hosting or platforms freely - Long-term flexibility and security Consider platforms like: - **Hugo** + Netlify (static, fast, and portable) - **WordPress** (open source, wide plugin support) - **Drupal** (powerful, scalable, fully customizable) These platforms give you **true ownership** of your website, your content, and your future. --- ## Final Thoughts Webflow and Framer are excellent for **quick launches and visually appealing sites** — but they come with real trade-offs. If you care about long-term flexibility, content ownership, or independence from a single vendor, it’s important to choose a platform that puts control back in your hands. **Choose tools that grow with you — not ones that trap you.** --- --- ## Is Vibecoding Safe? Understanding the Risks of No-Code and Visual Development URL: https://michalak.world/posts/is-vibecoding-safe-understanding-the-risks-of-no-code-and-visual-development/ Published: 2025-04-29 Tags: Webflow, Framer, CMS, Content Management Webflow and Framer: The Vendor Lock-In Dilemma and limitations. "Vibecoding" — the growing trend of building software tools, sites, and products through intuition, creativity, and no-code/low-code tools — is empowering a new generation of creators. With platforms like Webflow, Framer, Glide, and Airtable, non-technical users can now build polished experiences that were once reserved for developers. But with great accessibility comes hidden risk. As more people rely on visual builders and intuition-driven design over traditional development, the questions arise: - Is vibecoding safe? - How do we validate performance, security, and reliability? - What are the hidden dangers of trusting no-code tools? Let's dive into the concerns and what creators and businesses should know. --- ## The Hidden Risks of No-Code and Vibecoded Projects ### 1. **No Visibility Into Dependencies** Most no-code platforms include third-party libraries and frameworks under the hood. But creators often have **no idea**: - What libraries are used - How up-to-date they are - If they have known vulnerabilities This blind trust means projects can unknowingly run **outdated or compromised code**. ### 2. **Lack of Auditable Source Code** With no-code platforms: - You don’t own the source code - You can’t easily audit how features work - You have **limited ability to patch vulnerabilities** yourself In contrast, traditional codebases can be audited by security professionals, scanned by tools like Snyk, and checked into version control. ### 3. **Security by Obscurity** Many visual tools provide abstraction and simplicity. But that often hides: - Weak access control - Misconfigured data permissions - Unvalidated user input These vulnerabilities can lead to **data exposure, injection attacks, and privilege escalation**. ### 4. **Performance Bottlenecks You Can’t Fix** Creators have little insight into: - Rendering bottlenecks - Payload sizes - Unoptimized database queries You may be stuck with **sluggish performance** and **limited ability to optimize** beyond what the platform exposes. ### 5. **Over-reliance on Platform-Specific Features** Vibecoding often results in: - Deep lock-in to a specific tool’s features - No portability to other stacks or platforms If the platform is discontinued or changes direction, your entire app could be at risk. --- ## How to Validate Performance and Security in No-Code Projects ### 1. **Ask About Dependencies** If using a no-code platform, ask: - What frameworks/libraries are used? - How often are they updated? - Do they monitor for CVEs or known security issues? ### 2. **Use External Monitoring Tools** - Track site speed with [Google Lighthouse](https://developers.google.com/web/tools/lighthouse) - Monitor uptime with Pingdom or UptimeRobot - Use browser dev tools to check asset sizes and load times ### 3. **Limit Sensitive Functionality** Avoid putting: - Authentication - Payment processing - Private user data ...inside tools where you **can’t verify the code or configure permissions properly**. ### 4. **Export and Self-Host (When Possible)** If your tool allows export (e.g., Webflow or Framer static export): - Host on a platform you control (like Netlify or Vercel) - Add security headers, audit scripts, and configure CDN caching ### 5. **Collaborate with Developers or Security Professionals** Even a small review by a professional can: - Identify insecure defaults - Suggest best practices - Improve data handling and privacy configuration --- ## Should You Avoid Vibecoding? **Not at all.** No-code tools are incredible for: - Rapid prototyping - Internal tools - MVPs and landing pages But: > **Trusting a platform does not mean ignoring responsibility.** If you're building a product that handles sensitive data or grows beyond a prototype, you need to: - Think like an engineer - Validate like a security analyst - Monitor like a DevOps team --- ## Final Thoughts Vibecoding is here to stay. But as non-technical creators build tools that reach more users and handle more data, we must raise the bar for **security**, **performance**, and **accountability**. > **Creativity without control is exciting — but creativity with control is sustainable.** Use no-code tools. Trust your intuition. But also: - Validate the stack - Test the performance - Respect your users' data --- ## Fractional CTO: The Strategic Bonus of Hiring an Expert Freelance Drupal Developer URL: https://michalak.world/posts/fractional-cto-the-strategic-bonus-of-hiring-an-expert-freelance-drupal-developer/ Published: 2025-04-12 Tags: Fractional CTO, Drupal, Drupal 10, Technical Leadership, Technology Strategy, Freelance Drupal Developer An experienced freelance Drupal developer often doubles as a Fractional CTO, providing tech roadmaps, vendor vetting, scalable architecture planning, and team leadership alongside the code. ## Introduction When you hire an experienced freelance Drupal developer, you might be getting more than just code. You might be getting a **Fractional CTO** — a strategic technology advisor. ## What a Fractional CTO Can Offer: - **Tech Roadmaps**: Plan your infrastructure and growth properly. - **Vendor Vetting**: Help select trustworthy hosting, SaaS, and development vendors. - **Scalable Architecture Planning**: Avoid costly replatforming later. - **Development Team Leadership**: Mentor junior devs, lead agile teams, guide project workflows. ## Why It Matters Business success today is tied directly to technology strategy. A seasoned freelance developer who can act as your Fractional CTO provides the best of both worlds: **execution and leadership**, without the cost of a full-time executive. ## Closing Hiring a freelance Drupal developer isn't just about saving money. It's about maximizing value, improving stability, and scaling your business smartly. If you're ready to take the next step, reach out and let's explore how we can work together. --- ## How a Freelance Drupal Developer Improves Security and Site Health URL: https://michalak.world/posts/how-a-freelance-drupal-developer-improves-security-and-site-health/ Published: 2025-04-10 Tags: Drupal, Website Security, Drupal 10, Performance, GDPR, Freelance Drupal Developer, Site Maintenance How a freelance Drupal developer improves security and site health through security audits, proactive patching, hardening, and performance optimization, cutting incidents roughly 70%. ## Introduction In today's world, security isn't a luxury — it's a necessity. Your Drupal site can quickly become a target if it isn't maintained correctly. ## The Risks of Neglect - Outdated modules and core vulnerabilities - Slow, inefficient code leading to downtime - Non-compliance with GDPR, CCPA, and other regulations ## What an Expert Freelance Developer Does - **Security Audits**: Identify and patch vulnerabilities. - **Proactive Patching**: Staying ahead of security releases. - **Hardening Best Practices**: Securing file permissions, config management, and database access. - **Optimization for Health**: Caching, cron jobs, query optimization. ## Proven Impact - **70% fewer security incidents** - **2x–5x page speed improvements** - **Lower bounce rates and better SEO** due to faster, healthier sites ## Closing Hiring a freelance Drupal developer isn't just about saving money. It's about maximizing value, improving stability, and scaling your business smartly. If you're ready to take the next step, reach out and let's explore how we can work together. --- ## Why Hosting and DevOps Skills Matter in Your Freelance Drupal Developer URL: https://michalak.world/posts/why-hosting-and-devops-skills-matter-in-your-freelance-drupal-developer/ Published: 2025-04-08 Tags: Drupal, Drupal 10, Drupal 9, Drupal 8, Drupal 7, API Why Hosting and DevOps Skills Matter in Your Freelance Drupal Developer. ## Introduction If a developer builds a great site but can't host it properly, you’re setting yourself up for failure. Hosting and DevOps are essential parts of a successful Drupal build. ## A Good Freelance Developer Understands: - **Hosting Platforms**: Pantheon, Acquia, AWS, and self-hosted LAMP/LEMP stacks. - **Performance Tuning**: Using Redis, Memcached, Varnish, and CDNs. - **SSL/HTTPS Management**: Secure certificates via Let's Encrypt or managed platforms. - **Scaling Infrastructure**: Preparing for traffic spikes with scalable database and server solutions. - **Backup and Disaster Recovery**: Ensuring your site can bounce back from server issues. ## Why It Matters The biggest risks aren't just in code — they're in uptime, speed, and recoverability. A developer who understands hosting and DevOps is a safety net for your site and your brand. ## Closing Hiring a freelance Drupal developer isn't just about saving money. It's about maximizing value, improving stability, and scaling your business smartly. If you're ready to take the next step, reach out and let's explore how we can work together. --- ## Beyond Content Types: What Real Drupal Backend Expertise Looks Like URL: https://michalak.world/posts/beyond-content-types-what-real-drupal-backend-expertise-looks-like/ Published: 2025-04-06 Tags: Drupal, Drupal 10, Drupal 9, Drupal 8, Drupal 7, API Beyond Content Types: What Real Drupal Backend Expertise Looks Like. ## Introduction Many people think Drupal is just about building content types and views. True backend development is so much more — and it's critical to your site's performance, security, and scalability. ## What a Real Backend Expert Brings - **Custom Module Development**: Tailored solutions, not one-size-fits-all patches. - **API Integrations**: Smooth connections to external services (REST, GraphQL, JSON:API). - **Complex Workflows**: Building intricate commerce flows, approval pipelines, or custom publishing workflows. - **Search Optimization**: Integrating and tuning Apache Solr for lightning-fast, faceted searches. - **Database Optimization**: Query tuning, caching strategies, and schema design for performance. ## Why This Matters Backend expertise is what makes Drupal shine when your site needs to scale, integrate, or support business-critical processes. ## Closing Hiring a freelance Drupal developer isn't just about saving money. It's about maximizing value, improving stability, and scaling your business smartly. If you're ready to take the next step, reach out and let's explore how we can work together. --- ## The Hidden ROI of a Fractional CTO URL: https://michalak.world/posts/the-hidden-roi-of-a-fractional-cto/ Published: 2025-04-05 Tags: Fractional CTO, Technical Leadership, Technology Strategy, Startups, SME, Hiring A great Fractional CTO delivers senior-level leadership, scalable architecture, and immediate value — without the six-figure salary and equity package. Can’t justify hiring a full-time CTO? You’re not alone. It’s more than just finding a technical lead — it’s about bringing on someone who can bridge the gap between business and engineering, without the cost or commitment of a C-level hire. Let’s let the numbers tell the story: - 78% of startups fail due to technical missteps — most of them preventable with experienced tech leadership - Companies with Fractional CTOs launch 30–50% faster due to better architectural decisions - Businesses save 50–70% compared to hiring a full-time CTO or tech lead - Security posture improves significantly within 3–6 months of oversight from a technical strategist - Teams report increased velocity and reduced churn with proper tech leadership and process Here’s what to look for in a great Fractional CTO: - [x] Strategic Vision & Execution - They shouldn’t just advise — they should align tech decisions with your business model, go-to-market strategy, and long-term goals. - [x] Architecture You Can Build On - From your first MVP to scale-ready infrastructure, a good Fractional CTO helps you avoid rewrites and tech debt — and choose the right tools for now and later. - [x] Team Leadership Without Micro-Managing - They should set direction, mentor engineers, and foster healthy dev culture — not just "code and go." - [x] Startup & SME Experience - Look for someone who’s built and scaled products across multiple growth stages, not just corporate IT environments. - [x] Security and Risk Management - From GDPR compliance to data architecture and backup strategies — they help you sleep better at night. - [x] Vendor and Budget Optimization - A seasoned CTO knows when to build, when to buy, and how to avoid burning budget on the wrong tools or services. A great Fractional CTO delivers senior-level leadership, scalable architecture, and immediate value — without the six-figure salary and equity package. If you're launching a product, scaling a team, or need to stabilize your tech stack, a Fractional CTO might just be your most strategic hire. --- ## Why Hiring a Freelance Drupal Developer Could Save Your Business 60% URL: https://michalak.world/posts/why-hiring-a-freelance-drupal-developer-could-save-your-business-60/ Published: 2025-04-04 Tags: Drupal, Drupal 10, Drupal 9, Drupal 8, Drupal 7, Freelance Drupal Developer, Cost Optimization Hiring a freelance Drupal developer instead of a full-time hire typically saves 30-60% while giving you senior-level expertise on demand, reducing technical debt and security incidents. ## Introduction Hiring a full-time Drupal developer can be expensive and hard to justify if your project load fluctuates. Yet maintaining and growing a Drupal site demands senior expertise. Enter the freelance Drupal developer: the cost-effective solution for businesses needing reliable, expert support without the overhead of a full-time salary. ## The Numbers Speak for Themselves - Businesses can reduce technical debt by up to **50% within 6 months**. - **Security incidents drop 70%** after expert audits and patching. - **Page load times improve by 2x–5x** after backend optimization. - Companies save **30–60%** compared to hiring full-time. ## Why it Matters Freelance developers give you flexibility. You pay only for the expertise you need, when you need it. Plus, you often get senior-level developers who have "seen it all," rather than junior hires still learning. ## Closing Hiring a freelance Drupal developer isn't just about saving money. It's about maximizing value, improving stability, and scaling your business smartly. If you're ready to take the next step, reach out and let's explore how we can work together. --- ## The Hidden ROI of a Freelance Drupal Developer URL: https://michalak.world/posts/the-hidden-roi-of-a-freelance-drupal-developer/ Published: 2025-04-01 Tags: Drupal, Drupal 10, Drupal 9, Drupal 8, Drupal 7, API Freelance Drupal developers bring deep expertise, flexible engagement, and long-term ROI — especially when you need to move fast, stay secure, and keep costs predictable. Can't justify hiring a full-time Drupal developer? You're not alone. It’s more than just writing code — it’s about having someone who understands your platform inside out, keeps it secure, optimized, and scalable — without the overhead of a full-time salary. Let’s let the results speak for themselves: - Businesses reduce technical debt by up to 50% within 6 months of hiring an experienced freelance developer - Site security incidents drop by over 70% after expert audits and patching - Page load times improve by 2x–5x after backend optimization - Companies save 30–60% compared to hiring a full-time dev, while getting senior-level expertise on demand Here's how to find the right fit: - [x] Drupal Experience (Obviously) look for a developer with 13+ years in Drupal 7, 8, 9, and 10, who’s built everything from custom modules to complex migrations and multisite setups. - [x] Backend Specialization A freelance Drupal backend dev should go beyond content types — think API integrations, commerce workflows, Solr search, and database optimization. - [x] Hosting & DevOps Know-How Pantheon, Acquia, AWS, LAMP/LEMP — they’ve done it. From SSL to Redis to performance tuning, you need someone who can speak dev and ops. - [x] Business-Focused Results Not just code. You're hiring someone who understands how Drupal drives business, improves conversions, and supports growth. - [x] Fractional Leadership Need strategic tech guidance too? A seasoned freelance Drupal dev can act as a Fractional CTO, helping you plan scalable architectures, vet vendors, and lead tech teams — without a full-time hire. --- ## Drupal Form API States URL: https://michalak.world/posts/drupal-form-api-states/ Published: 2024-10-16 Tags: Drupal, Drupal 10, Drupal 9, Drupal 8, Drupal 7, Form API, API Drupal 9 Patch htaccess with Composer Drupal form API states can support multiple values. E.g. ``` $form['field_something']['#states'] = [ 'visible' => [ ':input[name="field_else[0][target_id]"]' => [ ['value' => 'one'], ['value' => 'two'], ['value' => 'three'], ['value' => 'four'], ], ], ]; ``` This also applies to: - Drupal 7 - Drupal 8 - Drupal 9 - Drupal 10 --- ## Shopify Admin REST API Checkout Object PUT Request URL: https://michalak.world/posts/shopify-admin-rest-api-checkout-object-put-request/ Published: 2023-10-26 Tags: Shopify, Polaris, Node JS, GraphQL, REST API, Integration Shopify Draft Order Metafields It is not possible to update a checkout object via Shopiy's Admin REST API unless the custom app created the checkout object. Per Shopify Staff: The checkout PUT endpoint is intended to only be used to modify checkouts that were created by that same ap Reference: - https://community.shopify.com/c/graphql-basics-and/update-checkout-not-working-on-api-2023-01-checkouts/m-p/2025238/highlight/true#M5766 --- ## Drupal 9 Patch htaccess with Composer URL: https://michalak.world/posts/drupal-9-patch-htaccess-with-composer/ Published: 2023-09-21 Tags: Drupal, Drupal 10, Drupal 9, Drupal 8, Composer, Configuration Drupal 9 Patch htaccess with Composer In composer.json add to the scripts section. See below: ``` "scripts": { "pre-install-cmd": [],   ... "post-drupal-scaffold-cmd": [ "patch -p1 < patches/my-htaccess.patch" ] }, ``` --- ## Update UUID in a Drupal Configuration URL: https://michalak.world/posts/update-uuid-in-a-drupal-configuration/ Published: 2023-08-03 Tags: Drupal, Drupal 10, Drupal 9, Drupal 8, Drush, Configuration Update UUID in a Drupal Configuration Update a UUID: ``` drush config-set "config.name" uuid "a2afbb3b-d34f-42fd-bf0c-593a103aa6f4" ``` Also how to generate an new UUID: ``` drush php-eval "echo \Drupal::service('uuid')->generate();" ``` Notes: - Remember to back up your database first! - Check your config: - `drush config-get "config.name" uuid` --- ## Shopify Draft Order Metafields URL: https://michalak.world/posts/shopify-draft-order-metafields/ Published: 2023-08-03 Tags: Shopify, Polaris, Node JS, GraphQL, REST API Shopify Draft Order Metafields While trying to track data on draft orders and orders I wanted to use metafields.  This lead me to find out that draft orders cannot have metafields configured. These lead me to two options to track data.  - Note attributes on the order - A custom mysql database table for my app to track the data. I've used both depending on the type of data and how store clerks needed to update the data. --- ## Drupal 8 - Sending Faxes with Twilio URL: https://michalak.world/posts/drupal-8-sending-faxes-with-twilio/ Published: 2020-12-06 Tags: Drupal, Drupal 8, Drupal 7, Drupal Commerce, Integration, REST API Drupal 8 - Sending Faxes with Twilio Yep, you read the title correctly and it says “fax.” Faxes are still used more than I thought, and it is really cool that Twilio has an API to send and receive faxes that is quite easy to use. Today in this post I will be talking about sending faxes from your Drupal website. Which is quite easy and doesn’t take much code to achieve. I have pulled together a code example from the Twilio API documents and as you can see below there isn’t much there. ``` use Twilio\Rest\Client; $twilio = new Client($sid, $token); $to = “+1234567890”; $from = “+0987654321”; $document = “https://example.com/document.pdf”; $response = twilio->fax->v1->faxes->create($to, $document,["from" => $from]); ``` A couple of notes on the Twilio fax API: - There isn’t much of a response back which can make error handling or logging a little difficult. - The document being faxed must be a PDF. ## Resources: - Twilio: https://www.twilio.com/fax --- ## iPhone Screen Sizes and Media Queries URL: https://michalak.world/posts/iphone-screen-sizes-and-media-queries/ Published: 2019-09-29 Tags: Drupal, Drupal 7, Drupal 8, Drupal Development When styling mobile-friendly pages I have run into issues between the different iPhone X versions.  Also included: iPhone 7 and 8. When styling mobile-friendly pages I have run into issues between the different iPhone X versions. Also included: iPhone 7 and 8. ## iPhone XR ``` /* 1792x828px at 326ppi */ @media only screen and (device-width : 414px) and (device-height : 896px) and (-webkit-device-pixel-ratio : 2) { } ``` ## iPhone X ``` /* 2436x1125px at 458ppi */ @media only screen and (device-width : 375px) and (device-height : 812px) and (-webkit-device-pixel-ratio : 3) { } ``` ## iPhone Xs ``` /* 2688x1242px at 458ppi */ @media only screen and (device-width : 414px) and (device-height : 896px) and (-webkit-device-pixel-ratio : 3) { } ``` ## iPhone 7+/8+ ``` /* iphone 6+, 6s+, 7+, 8+ */ @media only screen and (min-device-width: 414px) and (max-device-height: 736px) and (-webkit-device-pixel-ratio: 3) { } ``` ## iPhone 7/8 ``` /* iphone 6, 6s, 7, 8 */ @media only screen and (min-device-width: 375px) and (max-device-height: 667px) and (-webkit-device-pixel-ratio: 2) { } ``` ## Resources: - [Apple - Developer Archive](https://developer.apple.com/library/archive/documentation/DeviceInformation/Reference/iOSDeviceCompatibility/Displays/Displays.html) - [Apple Developer iOS Interface Guidelines](https://developer.apple.com/design/human-interface-guidelines/ios/visual-design/adaptivity-and-layout) - [Stack Overflow: iPhone XR / XS / XS Max CSS media queries](https://stackoverflow.com/questions/52321212/iphone-xr-xs-xs-max-css-media-queries) - [Stack Overflow: All iPhones](https://stackoverflow.com/questions/46313640/iphone-x-8-8-plus-css-media-queries#46313641) - [Ultimate Guide to iPhone Resolutions](https://www.paintcodeapp.com/news/ultimate-guide-to-iphone-resolutions) --- ## PDF Generation in Drupal URL: https://michalak.world/posts/pdf-generation-in-drupal/ Published: 2019-08-21 Tags: Drupal 7, Drupal 8, Drupal, Drupal Development, Drupal Commerce, Drupal Performance Cloning a Pantheon Project It is nice when a user can click a button and generate a PDF. Over the last few months, I have added PDF generation to many projects. Examples of PDF generation include order invoices, sell sheets, webform submission results, and general node to PDF generation. When tasked at generating PDFs, I have been applying the dompdf library. The [dompdf library](https://github.com/dompdf/dompdf) implements the most versatility by using HTML and CSS to generate PDFs. Therefore, giving the most flexibility for custom theming. ## Example 1 The most recent PDF generation task I completed was for Drupal commerce order invoices. I leveraged twig templates to provide as much flexibility as possible, which allowed me to incorporate a special entity view mode and for additional block regions. The new entity view display allows website admins to add, remove or rearrange order fields, and the additional block regions allowed for adding additional blocks throughout the template. The flexibility of the Drupal interface not only provides a way for website admins to generate order invoices but also allows them to modify the layouts of the PDF invoice. ## Example 2 In a past Drupal 8 commerce project, I have also automated the process to generate picket tickets upon orders reaching a specific state in the commerce order workflow. The dompdf library has been enjoyable and straightforward to use and I intend to use this library for future PDF generation projects. --- ## Cloning a Pantheon Project URL: https://michalak.world/posts/pantheon-cloning-a-project/ Published: 2019-08-08 Tags: Drupal 7, Drupal 8, Drupal, Security, Update, Drupal Development, Drupal Commerce, Update Cloning a Pantheon Project If you need to clone a project within the Pantheon ecosystem Terminus is a great tool to use. First, [install Terminus](https://pantheon.io/docs/terminus/install) and then add the [site clone plugin](https://github.com/pantheon-systems/terminus-site-clone-plugin). After authenticating with terminus use the site:clone command ``` terminus site:clone . . ``` `` and `` are either the site names or the site UUIDs. `` is the environment, e.g. dev, test, prod or multi dev. ## Resources - [Install Terminus](https://pantheon.io/docs/terminus/install) - [Terminus's Site Clone Plugin](https://github.com/pantheon-systems/terminus-site-clone-plugin) - [Terminus Documentation](https://pantheon.io/docs/terminus) - [Pantheon Migration Documentation](https://pantheon.io/docs/migrate) --- ## Compromised Drupal 7 Website Recovery Review URL: https://michalak.world/posts/compromised-drupal-7-website-recovery-review/ Published: 2019-08-01 Tags: Drupal 7, Drupal, Security, Update, Drupal Development Help recover a website that might have been exploited by hackers I was brought on board to help recover a website that was possibly exploited by hackers, a Drupal 7 project. What triggered the investigation? My client was informed that their customers were receiving spam emails from the website. After a thorough review of the project's code base and database. I found multiple exploits and backdoors. All of the issues/exploits were within the Drupal core. None of the contrib. or custom modules were exploited. What was the cause? The website was compromised due to an outdated Drupal 7 core. With routine updates, this would have not happened. That is why it is important to keep up with website maintenance and security updates. --- ## Drupal 8 Commerce Tax Resolvers URL: https://michalak.world/posts/drupal-8-commerce-tax-resolvers/ Published: 2019-07-31 Tags: Drupal 8, Drupal, Drupal Commerce, Drupal Development Drupal Commerce Tax Resolvers In Drupal 7 it was easy to create new tax configurations using rules. Now in Drupal 8, it is a little bit more complicated but even more flexible. At the moment there isn't a GUI to configure taxes past setting up a simple Sales or VAT per location. That is where Drupal 8 commerce tax resolvers come in. Drupal Commerce's tax resolvers make it easy for setting up custom tax rules based upon your criteria. Recently I set up two new types of tax resolvers. The new tax resolvers allow for a user to be tax-exempt and also taxed based upon the cost of each line item. ## Tax-Exempt The tax-exempt tax resolver I implemented basically allows an authenticated user bypass taxes. This was done with a setting up a special type of role and allows the admin to grant tax exemptions to users. Once the role is setup then the tax resolver takes over at checkout. ## Line Item Tax The line item tax resolver was needed to provide a tax on line items after a certain amount threshold was met for that line item. E.g. if a user was purchasing $90 a line item they would not be taxed but if they spent $100 or more then tax would need to be applied to that line item.   Each custom tax resolver is currency independent and can be applied to either sales tax or VAT tax if needed. Both of these are simple implementations and can be expanded upon in the future. Thanks for reading! Let me know if you have any questions. Please leave a comment below! --- ## Drupal 8 Commerce Promotions - Buy X or more of the same product and get % off that order item URL: https://michalak.world/posts/drupal-8-commerce-promotions/ Published: 2019-07-31 Tags: Drupal 8, Drupal, Drupal Commerce, Commerce Promo, Drupal Development Drupal Commerce Promtions Currently "Buy X and Get Y" discount is only related to the whole order and not at the order item level. I needed order item level discounts. e.g. buy 10 or more of the same product and get 10% off that order item. The new promotion will only discount at the order item level for order items with a quantity of 10 or more. Example - Buy 10 or more and get a 10% discount. Order Item 1 - Quantity of 5 - No Discount Order Item 2 - Quantity of 11 - 10% off discount Order item 3 - Quantity of 10 - 10% off discount Order Item 4 - Quantity of 1 - No Discount I have created a patch for this type of discount. The discount is labeled: "Buy X per order item get a percentage off." The new promotion only allows only for a percentage off discount and does not include a fixed amount discount. Drupal Commerce Issue Queue: https://www.drupal.org/project/commerce/issues/3066724 --- ## Drupal 8 - Longer Titles - Entity Title Length/Node Title Length URL: https://michalak.world/posts/drupal-8-longer-titles/ Published: 2019-07-11 Tags: Drupal 8, Drupal Longer Titles I created this post to provide a **quick overview** of two different **Drupal 8 modules** that extend the **default node title length**. There are currently **two modules**: 1. **Node Title Length** 2. **Entity Title Length** Both modules are **easy to set up** with **minimal configuration**. However, I **recommend** the **Node Title Length** module as it is in a **stable and released state**. --- ## **Node Title Length [Recommended]** - **Module:** [Node Title Length](https://www.drupal.org/project/title_length) - **Admin Configuration:** No admin configuration required. Defaults to **8000 characters**, which can be **updated before installing** in the module code. - **Official Release:** ✅ **Yes** ### **How to Set Up and Configure:** 1. **Enable the module.** 2. **All set!** No additional configuration is needed. --- ## **Entity Title Length** - **Module:** [Entity Title Length](https://www.drupal.org/project/entity_title_length) - **Admin Configuration:** `/admin/etl/config` - **Official Release:** ❌ **No** ### **How to Set Up and Configure:** 1. **Enable the module.** 2. **Update the configuration** in the admin section: `/admin/etl/config` 3. **Update the title length** in the **form display configuration** for that **entity/node** to the desired new length. --- ## Drupal 8 Configuration Synchronization URL: https://michalak.world/posts/drupal-8-configuration-synchronization/ Published: 2019-05-29 Tags: API, Drupal 8, Drupal Commmerce, Drupal Development, Composer, Drupal, Update Drupal 8 Configuration Synchronization ## **Configuration Synchronization** Drupal 8 has a **great configuration synchronization system**, making it easy to sync different environments. When creating **new modules** and adding **new functionality**, I really enjoy working with **Drupal 8's configuration synchronization tool**. Not only does this tool **eliminate guesswork** for updates on other environments, but it also **documents all changes**, ensuring a **clear record of modifications**. --- ## **New Modules and New Functionality** The **Drupal 8 content synchronization tool**, combined with **update hooks**, is an excellent way to make all changes **portable** and **documented**. I have **adopted this methodology** for moving changes across environments, ensuring: - **Portability** - **Clear documentation** - **Predictable deployments** Pairing this approach with a **deployment guide** removes any **guesswork** about what needs to be updated. --- ## **Uses for Configuration Synchronization** Drupal 8's **configuration synchronization tool** is useful for managing various types of changes, including: - **Block Configuration** - **New Content Types** - **Updating Content Types** - **Adding New Fields to Entities** - **Adding or Updating Views** - **Etc.** --- ## **Conclusion** I have a **love-hate relationship** with configuration synchronization. When a **module installation** conflicts with **synchronization**, it can cause **headaches**. However, **once issues are resolved**, the process runs **smoothly**. In most cases, resolving conflicts requires **reworking the `install()` and `uninstall()` hooks** for the module. --- --- ## Drupal 8 Commerce Tax for VAT and Sales Tax URL: https://michalak.world/posts/drupal-8-commerce-tax-for-vat-sales-tax/ Published: 2019-05-10 Tags: Drupal 8, Drupal Commmerce, Drupal Development, Drupal, Update Commerce Tax for VAT and Sales Tax Today I have been working through an issue with commerce tax.  I had to apply a patch that allows me to configure taxes a bit more. The patch allows Drupal commerce to decouple the tax calculation with the store address.  That way the Drupal commerce store can have multiple tax rates instead of one tax rate for the state the store is located in.  Drupal Issue: https://www.drupal.org/project/commerce/issues/3005440 ***Update - May 10, 2019*** The patch has been working great and allows the Drupal Commerce website function as requested. --- ## Drupal 8 Commerce - Setting a Default Currency on Product Variations URL: https://michalak.world/posts/drupal-8-commerce-setting-a-default-currency-product-variations/ Published: 2019-05-08 Tags: Drupal, Drupal 8, Drupal Commmerce, Drupal Development Setting a Default Currency on Product Variation By default Drupal 8 commerce 2.x product variations do not have a default currency setting for multi-currency projects.  Currently, there is a patch in the works to solve this issue.  The patch can be found in the commerce issue queue: https://www.drupal.org/project/commerce/issues/3016777 Thank you a.dmitriiev for creating a patch to solve this issue! --- ## Drupal: Pantheon Cookies URL: https://michalak.world/posts/drupal-pantheon-cookies/ Published: 2019-05-03 Tags: Drupal, Performance, Google, Update, Drupal 8, Drupal Commmerce, Drupal Development Drupal 8 Performance Tuning I've been using the commerce_currency_resolver module and it has been fantastic to use.  One issue I ran into was with how the cookies are handled on Pantheon. When using custom cookies a special naming convention must be used.  The cookie's name must start with STYXKEY. Per Pantheon: Respond to a request with cached content depending on the presence and value of a particular cookie. It's important to note that in order for the response to be cached by Pantheon's edge, the cookie name must match STYXKEY[a-zA-Z0-9_-]+. Pantheon Documentation: https://pantheon.io/docs/cookies/ --- ## Drupal Commerce Multi-currency URL: https://michalak.world/posts/drupal-commerce-multi-currency/ Published: 2019-04-19 Tags: Drupal, Drupal 8, Drupal Development, Drupal Commerce, Commerce Shipping, Integration, Payment Gateway Cloning a Pantheon Project I have been working on many Drupal commerce projects both Drupal 7 and Drupal 8 and I have encountered the need for multiple currencies many times.  Drupal 8 has made it very easy to have multiple currencies.  The tricky part is when and how to switch from one currency to another. That is where the Drupal's commerce currency resolver module comes in handy.  The commerce currency resolver module makes it easy to switch between currencies and has also automated a currency conversion when a price has not be set in the currency the user wants to use.  e.g. The stores base currency is USD or EUR and you need 2, 4 or even 10 currencies.  Maintaining all of these prices could be tricky and hard to maintain.  On a side note and another possible blog post, using commerce feeds, each product variation's price could be imported and maintained.  The commerce currency resolver is a really good module to get multi-currency out of the box especially if you allow your users to select their currency.  Actually, in this case, it is perfect.  Now if you want some automation with auto currency selection.  e.g. To have the Drupal commerce project auto-select the user's currency, a small module will be needed.  That is exactly what I did this for a recent Drupal commerce project where I needed to auto select a user's currency based on their location (GEO IP based currency detection).  To do this I created a small module that leverages both the commerce currency resolver's cookie-based currency selection and the smart IP module to leverage the user's location.  Now the Drupal commerce project has GEO IP based currency selection. ## Drupal modules - [Commerce Currency Reslover](https://www.drupal.org/project/commerce_currency_resolver) - [Smart IP](https://www.drupal.org/project/smart_ip) --- ## Drupal 8 Performance Tuning URL: https://michalak.world/posts/drupal-8-performance-tuning/ Published: 2019-04-17 Tags: Drupal, Performance, Google, Update, Drupal 8, Drupal Commmerce, Drupal Development Drupal 8 Performance Tuning This week I started a mini project to optimize a slow Drupal 8 website. Drupal-8-Performance-Update.png The issue, various parts of the website are taking 10, 20 and even 30 seconds to load. Wow, a long time. My first round of updates to the Drupal configuration and code took off 15 - 20 seconds of page load time. Then after the second review of assets loading on the page, I was able to knock off about 3 MB of loaded resources. Now the page load must faster and is much lighter. Here is a before and after comparison of page size, request sand load time: before-after.png Next steps, to go back through the requests that are sent, and then to review the hosting configuration. --- ## Exchange Rates API URL: https://michalak.world/posts/exchange-rates-api/ Published: 2019-04-12 Tags: API, Drupal 7, Drupal 8, Drupal Commmerce, Drupal Development, Integration Post about an exchange rates API Wow, what a great little API.  Exchange Rates API is a free API that helps with currency conversion rates.  All that needs to be sent is the base currency and the currency that you want to convert.  Then the conversion rate is returned.  Making it simple. Example GET Request:  ``` https://api.exchangeratesapi.io/latest?base=USD&symbols=GBP ``` Result:  ``` {"base":"EUR","rates":{"USD":1.1264,"GBP":0.86168},"date":"2019-04-11"} ``` Another option is to send a base currency and to get the currency rates of multiple currencies.  This can be done in one API call.  Example GET Request:  ``` https://api.exchangeratesapi.io/latest?base=EUR&symbols=USD,GBP,HKD ``` Result:  ``` {"base":"EUR","rates":{"USD":1.1264,"HKD":8.8354,"GBP":0.86168},"date":"2019-04-11"} ``` Resources - https://exchangeratesapi.io/ --- ## Drupal and Cloudflare URL: https://michalak.world/posts/drupal-and-cloudflare/ Published: 2019-04-04 Tags: Drupal, Drupal 7, Drupal 8, Drupal Commmerce, Drupal Performance, Security Post about Drupal and Cloudflare Cloudflare is a great tool to add another layer of security to your Drupal website.  When setup correctly Cloudflare will act as a firewall to block malicious traffic to your Drupal website at the application level.  Cloudflare blocks many types of attacks: cross-site scripting, cross-site forgery requests, and SQL injection attacks.  User checks can also be enabled such as GEO IP location and browser integrity checking to limit questionable or unneeded traffic. Cloudflare also acts as a CDN and has many caching and performance features.  With minimal setup time, it is a no brainer to setup Cloudflare.  Simple setup for additional security with additional benefits of better website performance. --- ## Drupal 8 - Update Routes URL: https://michalak.world/posts/drupal-8-update-routes/ Published: 2019-04-01 Tags: Drupal 8, Drush, Drupal Development Update routes with Drush I recently update my modules routing.yml file and needed to update the routes in my Drupal 8 project. Clearing the caches won't update the routes. To update the routes run this command with Drush: ``` drush ev '\Drupal::service("router.builder")->rebuild();' ``` --- ## Drupal 8 Performance - Commerce REST API URL: https://michalak.world/posts/drupal-8-performance-commerce-rest-api/ Published: 2019-03-24 Tags: Commerce Shipping, Drupal 8, Drupal Commerce, Drupal Development, Integration, REST API Drupal 8 Performance on a commerce REST API This was a fun Drupal 8 Commerce project that I had the change to work on.  In this project I set up a REST API that consumed Drupal Commerce orders.  There was also much more back-office functionality that was heavy on the PHP memory.  E.g. custom PDF generation, shipping automation, order report generation. There were many challenges with this project so it was always good to be informed and to plan ahead for the future months.  I think this was one of the critical aspects of developing the whole system.  Going from a few hundred orders a day to a few thousand orders a day makes a big difference.  Planning for this and load testing the system was critical. The end goal was to consume 300k orders a month so it was very crucial to plan for this in many ways.  Not only were server resources needed but also to plan for the database.  Orders for this project had many fields so I was working with a lot of information stored here.  The database would start to grow very fast. --- ## Drupal 7 - Image Styles Not Regenerating URL: https://michalak.world/posts/drupal-7-image-styles-not-regenerating/ Published: 2019-03-22 Tags: Drupal, Caching, Drupal 7, Drupal Development How to apply and manage patches with composer Every now and then I work on a project were the image styles are missing and usually not regenerating.  This usually occurs when moving a site from one hosting provider to another due to missing files and or purging image styles. In this case, I was moving a Drupal 7 project to Pantheon.  This is when I found missing images and I was trying to regenerate them. A couple of good modules for managing image styles are: - [Imageinfo Cache](https://www.drupal.org/project/imageinfo_cache) - [Image style flush](https://www.drupal.org/project/imagestyleflush) After installing these modules and working on regenerating image styles, nothing was happening.  Well actually more images were disappearing, due to not regenerating new image styles and purging the old files. While I worked with these image styles a bit longer I realized they couldn't be regenerated.  Re-uploading and saving the content that these image styles were related to also did not regenerate the missing image styles. The Imageinfo Cache module also showed that the images styles I was trying to regenerate and work with were not used by Drupal.  After a further review, I discovered the images from these image styles were pulled into templates without any way to regenerate them.  So once the image styles were on the server there wasn't a way to regenerate them. I ended up updating the theme template variables before passing the variables to the template.  Instead of using a file name with a hardcoded URL I ended up using the [image_style_url](https://api.drupal.org/api/drupal/modules%21image%21image.module/function/image_style_url/7.x) function: ``` $image_url = image_style_url($style, $file_name); ``` When calling image_style_url function, this function gave Drupal an opportunity to regenerate the image styles on the fly, if the images style images were not on the server.  --- ## More about the function: image_style_url: Returns the URL for an image derivative given a style and image path. ## Parameters - ***`$style_name`:*** The name of the style to be used with this image. - ***`$path`:*** The path to the image. ## Return value The absolute URL where a style image can be downloaded, suitable for use in an `` tag. Requesting the URL will cause the image to be created. Source for image_style_url: https://api.drupal.org/api/drupal/modules%21image%21image.module/function/image_style_url/7.x --- ## Drupal 8: Form API Autocomplete Filtering By Role URL: https://michalak.world/posts/drupal-8-form-api-autocomplete-filtering-by-role/ Published: 2019-03-14 Tags: Drupal, Drupal 8, Form API Form API Autocomplete Filtering By Role I have been creating a lot of custom forms for purchase order creation and custom shipping methods, using Drupal 8's form API. For the latest form, I needed to add an autocomplete field for user accounts that filtered by a specific role. In the example below I only needed to show users with the role of 'Supplier' Example: ``` $form['group']['field_user'] = array( '#type' => 'entity_autocomplete', '#title' => t('Add User'), '#description' => t('Example text goes here'), '#target_type' => 'user', '#selection_settings' => [ 'include_anonymous' => FALSE, 'filter' => [ 'role' => ['supplier'], ], ], ); ``` --- ## Drupal 8: Form API - Weight Fields URL: https://michalak.world/posts/drupal-8-form-api-weighted-fields/ Published: 2019-03-14 Tags: Drupal, Drupal 8, Form API, Drupal Commerce, Drupal Development, Purchase Orders Custom weights on Form API Fields Currently, I am working on a custom form that generates products on the fly for a custom purchase order implementation.  For this Drupal 8 commerce website, the product variations have a required weight field which was needed in the custom form.  Here is an example of the weight field. ``` $form['product']['weight'] = array( '#type' => 'physical_measurement', '#title' => t('Weight'), '#measurement_type' => 'weight', //the default field is required and must be an array. '#default_value' => ['number' => 2.00, 'unit' => 'oz'], ); ``` --- ## Drupal 8: Applying Patches with Composer URL: https://michalak.world/posts/drupal-8-applying-patches-with-composer/ Published: 2019-03-14 Tags: Drupal, Composer, Drupal 8, Drupal Development How to apply and manage patches with composer How to apply and manage patches with composer. First add the library 'cweagans/composer-patches' to your composer.json Then under installer-paths in your composer.json add "patches".  "Patches" is then organized by modules.  Here is an example: ``` "installer-paths": { }, "patches": { "drupal/commerce_shipping": { "Commerce Shipping - Deleted Profile Error": "https://www.drupal.org/files/issues/2018-06-15/commerce_shipping-deleted-profile-error-2969540-6.patch", "Patch Label": "https://path-to-patch' } } ``` --- ## Video Update! Drupal Backend and Commerce Development URL: https://michalak.world/posts/video-update-drupal-backend-and-commerce-development/ Published: 2019-03-02 Tags: Drupal, Integration, Commerce Shipping, Drupal Commmerce, Form API, Integration, Payment Gateway Video Update, Drupal Backend and Commerce Development Looking for a Drupal developer? Specifically a Drupal Commerce or a backend developer? Then you came to the right place.  I am a backend Drupal developer with extensive experience working with Drupal Commerce for both Drupal 7 and 8 for over seven years now. My niche is to customize Drupal Commerce functionality according to clients specifications. Types of customization include checkout flows, catalogs, products, and user sessions. I have also created various proprietary Drupal commerce tools for clients such as warehouse management, product borrowing, purchase orders, and products on hold. I also enhance Drupal projects to integrate and automate custom business functionality and globalize my client's websites. Globalize you ask? Improving websites to be multilingual, GDPR compliant, multi-currency, and tax reconciliation, Sales Tax and VAT tax. As for business functionality, the end goal is to automate and integrate business process that help my clients with their business workflow. A couple of examples: Setting up a REST API for consuming orders to eliminate email and custom PDF generation. There are many examples of PDF generation, but my favorite is batching PDFs for a print company. An employee would spend at least eight hours a day generating PDFs. Now the PDFs are generated automatically without error and as orders come through. The employee also thanked me for eliminating this tedious job. Thank you for watching my video. If you have any questions, please feel free to reach out. Have a great day! --- ## Google Chrome Ignoring Autocomplete URL: https://michalak.world/posts/google-chrome-ignoring-autocomplete/ Published: 2019-02-02 Tags: Drupal Development, Google Google Chrome Ignoring Autocomplete While working on a Drupal Commerce project, I came across an interesting issue during checkout. My client’s coupon field keeps getting populated with a user’s country when they use autofill to fill out their address. Upon working through disabling the autofill or autocomplete feature on the coupon field, the new version of Google’s browser Google Chrome ignores the autocomplete=off setting. The solution to this problem was to update the autocomplete attribute with a string other than ‘off.’ Correct way, but ignored by Google: ``` ``` Updated way to work with the latest Google Chrome: ``` ``` Original Post: https://www.linkedin.com/pulse/google-chrome-ignoring-autocomplete-mike-michalak/ --- ## Drupal Vs WordPress URL: https://michalak.world/posts/drupal-vs-wordpress/ Published: 2019-02-01 Tags: Drupal, Wordpress A comparison between Drupal and Wordpress ## Why Choose **Drupal** Over **WordPress**? There are three main reasons why I prefer using Drupal for website development, and they are: - Licensing - Security - Flexibility ## **Licensing** A lot of WordPress's themes and plug-ins have some sort of licensing attached to them, which can end up being quite a pain. If you want to use certain plug-ins that give your website specific functionality, you could be nickel and dimed the whole way. This can be especially expensive when setting up distinct development environments. Another drawback is that WordPress's plug-ins are sometimes unstable, in that they sometimes won't work together. For example, if you want to use plug-ins A and B, there's the possibility that you'll only be allowed to use one of them, limiting your website's functionality. Trying to use two disagreeing plug-ins together could even cause issues that crash your website. Drupal is much more community-driven than WordPress is, and Drupal developers tend not to sell their modules. Usually, a client pays a developer to make a module for a certain functionality they want on their website. Then, the developer gives the module back to the Drupal community, making it accessible for everyone. And, if one of Drupal's community modules is performing incorrectly, the person using it can submit a bug report to the original developer, who will fix whatever's wrong. ## **Security** Drupal's community-driven environment is also excellent for its websites' security. Drupal's dedicated security team releases consistent updates that help keep its websites safe from new online threats. Also, if anyone finds a new vulnerability within Drupal, they're urged to submit it to the security team so it can be fixed right away. The security team also reviews anything new that's about to complete its testing phases. If they see something they don't like, they'll either patch it or tell the maker they need to meet specific guidelines before it's released. Drupal has also demonstrated that it's a more secure software than WordPress is, and it has a better track record of not being hacked. E.g. 100,000 WordPress websites were infected with ransomware in a *single day* back in December 2016. These websites' users then had their data locked until they came up with the fee the hackers demanded. ## **Flexibility** Finally, Drupal provides more flexibility out-of-the-box than WordPress does, and, with the proper configuration, it allows for more functionality to be added or removed as needed. With a WordPress website, the same functionalities may be difficult to use, or even impossible, due to the installed plug-ins and what they require. **Original Post:** [https://trail9.com/?q=news/ask-mike-why-do-we-choose-drupal-over-wordpress](https://trail9.com/?q=news/ask-mike-why-do-we-choose-drupal-over-wordpress) --- ## Drupal 8 Commerce 2.x Order Messages URL: https://michalak.world/posts/drupal-8-commerce-2x-order-messages/ Published: 2019-02-01 Tags: Drupal, Drupal Commerce, Drupal Development A comparison between Drupal and Wordpress I'm currently working on a custom feature for Drupal 8 Commerce 2.x, and I decided along the way that I wanted to update orders with messages. Documentation on this topic was so light that I decided to write my own post about it! Your custom module will need to have a couple of additional files: - mymodule.commerce_log_categories.yml - mymodule.commerce_log_templates.yml ## mymodule.commerce_log_categories.yml Defines our log categories.  e.g. ``` example_categories: label: Example Categories entity_type: commerce_order example_categories_two: label: Example Categories Two entity_type: commerce_order ``` ## mymodule.commerce_log_templates.yml This file defines the messages or message templates that will be used and seen on orders. ``` example_status_update category: example_categories label: 'Status Update' template: '

Status has been updated.

' example_second_status_update category: example_categories label: 'Second Status Update' template: '

Status two has been updated.

' update_example_status category: example_categories_two label: 'Order Status Update' template: '

Order Update Status

' update_example_status_two category: example_categories_two label: 'Order Status Update Two' template: '

Order Update Status Two

' ``` ## Creating a Message on Commerce Orders Now that we have our categories and message templates defined, we're ready to start adding messages to our orders.  We will need to have the order entity: ``` $log_storage = \Drupal::entityTypeManager()->getStorage('commerce_log'); $log = $log_storage->generate($order, 'update_example_status_two'); //use one of our predefined templates $log->save(); ``` And that's it— now we can add messages to our orders in Drupal 8 Commerce 2.x. Go message it up! ***Original Post:*** https://trail9.com/?q=news/drupal-8-commerce-2x-order-messages --- ## 3 Reasons Drupal Development & Management Is Valuable URL: https://michalak.world/posts/3-reasons-drupal-development-and-management-is-valuable/ Published: 2019-02-01 Tags: Drupal, Drupal Development Drupal Development and Management In this blog entry I will be going to outline why I think it is the perfect tool with which to design your site. ## Flexibility Sure there are other, more basic web development platforms but Drupal allows for a wide range of options when it comes to creating a site. "One size fits all" is not the motto here. Drupal is powerful enough to customize a website around your particular needs while building upon a solid foundation of basic necessities. ## Website Security One of our development focal points is the security of the websites we produce for clients. Making sure the servers and the data stored on them is secure is critical. This is not only for peace of mind while sleeping at night but also to meet compliance regulations that are applicable to a variety of industries. ## Expanding Needs & Uses Sure, right now that basic website that is out in the wild is probably fine. However, if you are like most entrepreneurs, eventually you might want or need additional functionality and features. Very often we are tasked with illustrating how a website can more deeply integrate with the daily operations a business is actively engaged in carrying out. The answer is "Yes!". The robust depth of the Drupal development platform is valuable whether you are based in Colorado while working in coordination with federal government agencies, state and local departments or serving small business and non-profits in Detroit. When you want to design something with the capability to incorporate your evolving needs, you'll be happy to have something less rigid to work within. ## The Right Conclusion There you have it, Drupal is a great tool that is flexible, secure and will ready your online presence for expansion. So if you are in need of a new website or just want to freshen up your currently deployed Drupal site, get in contact with us so we can outline a plan of action together.