[{"content":"Every published page on this site has a machine-readable twin alongside its HTML, so an agent, script, or LLM never has to scrape a rendered page to read it. Everything below is an anonymous GET: no key, no signup, no request body, and Access-Control-Allow-Origin: * on every response so browser-based agents can read them too.\nIf you would rather not learn any of these URLs, ask for Markdown by name and any page will answer in it:\ncurl -s https://michalak.world/about/ -H \"Accept: text/markdown\" Content negotiation # Send Accept: text/markdown and a page returns its Markdown instead of its HTML, at the page’s own URL. Nothing needs to be appended and nothing needs to be discovered first — if you have a link to a page, you can read it as Markdown. Browsers ask for text/html ahead of anything else, so they still get the rendered page.\nThe response is text/markdown; charset=utf-8, carries Vary: Accept so caches keep the two representations apart, and includes two headers worth reading:\nHeader Meaning x-markdown-tokens Estimated tokens in the response, for sizing a context window or picking a chunk size. Content-Location The URL of the Markdown itself, if you want to cache or cite it directly. This is served from the same file you would get by appending index.md, so the two routes are interchangeable — use whichever fits your client. Pages that have no Markdown twin, such as the numbered pages of a paginated list, fall back to HTML rather than erroring.\nEndpoints # Endpoint Returns /index.json Every page in one JSON array: title, description, summary, full body text, tags, and dates. /{page}/index.md That page’s source Markdown, headings and code fences intact. Append index.md to any page URL, or ask the page itself for text/markdown. /llms.txt A curated map of the site in the llmstxt.org shape: expertise, key pages, every article with a description. /llms-full.txt The full text of every page concatenated into one response. /api/openapi.json OpenAPI 3.1 description of everything in this table. /api/status.json Which build the CDN is currently serving. /.well-known/api-catalog The RFC 9727 catalog listing these APIs. /sitemap.xml and /index.xml are published in the usual places as well.\nStart here # Read the catalog to find the APIs, then the OpenAPI document to find their shapes:\ncurl -s https://michalak.world/.well-known/api-catalog | jq '.linkset[].anchor' curl -s https://michalak.world/api/openapi.json | jq '.paths | keys' Ingest the whole site in one request, or take a single page as Markdown:\ncurl -s https://michalak.world/index.json | jq '.[] | {title, permalink, tags}' curl -s https://michalak.world/about/index.md The permalink field of each index entry is the path to append index.md to — or to request with Accept: text/markdown, which returns the same document. Either way a two-step crawl is straightforward: read the index, pick the pages worth reading in full, fetch their Markdown.\nWhat to expect # Responses are static files served from Cloudflare’s edge. They change only when the site is rebuilt, so caching them for a few minutes costs nothing in freshness — /api/status.json names the build you are being served if you need to tell a live deployment from a stale copy.\nThere is no versioned URL prefix. The OpenAPI document carries a version, and the response shapes described there will not change incompatibly without it changing too; new fields may appear at any time, so parse defensively and ignore what you do not recognize.\nNothing here is rate limited beyond ordinary CDN protection. AI crawlers are welcome: /robots.txt allows the training, search, and user-initiated fetchers by name. Reuse is subject to the terms of use, and attribution with a link back is appreciated.\nDiscovery # The catalog is advertised three ways, so an agent can find it without guessing. The well-known URI is one. A HEAD of the site root is another: it returns Link headers for api-catalog, service-desc, service-doc, and describedby without downloading a byte of HTML. And every page carries \u003clink rel=\"api-catalog\"\u003e in its \u003chead\u003e, for an agent that landed mid-site rather than at the front door.\nInside the catalog, each entry anchors one endpoint and carries the same three links: service-desc to the OpenAPI document, service-doc to this page, and status.\nQuestions, or something you want exposed that is not here? Get in touch.\n","date":"18 August 2026","datePublished":"2026-08-18","description":"Every page on michalak.world is published as JSON, Markdown, and plain text over anonymous HTTP GETs, described by an OpenAPI 3.1 document and listed in an RFC 9727 API catalog.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/api/","section":"Michael Michalak","summary":"The machine-readable endpoints this site publishes: a JSON index of every page, a Markdown twin of each page, and two plain-text digests, all listed in an RFC 9727 API catalog.","title":"API","type":"page"},{"content":"","date":"17 August 2026","datePublished":"2026-08-17","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/ai-agents/","section":"Tags","summary":"","title":"AI Agents","type":"tags"},{"content":"","date":"17 August 2026","datePublished":"2026-08-17","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/ai-consulting/","section":"Tags","summary":"","title":"AI Consulting","type":"tags"},{"content":"","date":"17 August 2026","datePublished":"2026-08-17","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/ai-seo/","section":"Tags","summary":"","title":"AI SEO","type":"tags"},{"content":"","date":"17 August 2026","datePublished":"2026-08-17","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/cloudflare/","section":"Tags","summary":"","title":"Cloudflare","type":"tags"},{"content":" Key takeaways Access comes first. If your CDN or WAF blocks AI bots at the network edge, nothing else you do matters — a blocked crawler never even reads your robots.txt. Name each bot explicitly in robots.txt. Every major operator runs several crawlers for different purposes, and allowing one does nothing for the others. Structured data is the highest-leverage change. An AI system can only cite you as an entity if you give it a resolvable one: a Person or Organization with a stable @id and sameAs links it can verify. Freshness signals have to be true. Most sites emit a dateModified that just restates the publish date, which tells an AI system nothing. llms.txt is close to a no-op. An Ahrefs study of 137,000 domains found 97% of llms.txt files got zero requests in May 2026. Ship it because AI coding agents read it, not because it will win you citations. Write answer-first. Question-and-answer pairs and standalone opening summaries are the most extractable content shapes for an answer engine. auth.md is not an SEO file. It tells an agent how to register for a service that issues credentials. If you only publish content, the honest implementation is a short file saying no registration exists. “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.\nHere is what survived that sort, in the order that matters.\nFirst, 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.\nPurpose 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.\nIf 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.\nStep 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.\nA 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.\nIf 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.\nTwo settings deserve specific attention:\nManaged 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:\ncurl -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.\nStep 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.\nUser-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.\nUnlike 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.\nOne 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.\nStep 3: Structured data — the real visibility lever # This is where most sites leave the largest gain on the table.\nNearly every CMS and theme emits something like this:\n\"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.\nWhat 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:\n{ \"@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.\nTwo things to get right:\nUse 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.\nValidate with the Google Rich Results Test and the Schema.org validator after deploying.\nStep 4: Make your freshness signals true # Check your own site for this one, because it is almost universal and completely invisible.\nAcross 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 \u003clastmod\u003e in the sitemap was just restating when the page was first written. A page I had substantially revised looked untouched since 2019.\nIn Hugo the fix is enableGitInfo = true, which derives modification dates from the last commit that touched each file. Every generator has an equivalent.\nThe 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.\nWhile you are in there:\nCreate 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 and Bing Webmaster Tools. 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.\nFix 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\u0026A 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.\nMarkdown 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 \u003clink rel=\"alternate\" type=\"text/markdown\"\u003e 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.\nllms.txt: near-zero value, near-zero cost. I want to be direct about this because the file gets recommended constantly:\nAn 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.\nA 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.\nauth.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:\nYour API returns 401 with a WWW-Authenticate: Bearer resource_metadata=\"…\" header. That points at Protected Resource Metadata (RFC 9728) at /.well-known/oauth-protected-resource, naming the resource, its scopes, and its authorization server. The authorization server’s metadata (RFC 8414) 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.\nWhether 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.\nThis 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.\nOne 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.\nHow to tell whether it worked # There is no rank tracker for AI answers. Everything above is input; there are only two honest feedback loops.\nYour 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. 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.\nIf 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%.\nEverything else on the list is refinement, and anything not on the list is probably someone’s product.\nWant 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 and I will tell you which of the six steps above you are actually missing.\nFrequently asked questions What does it mean to make a website AI-friendly? An AI-friendly website is one that AI crawlers are allowed to fetch, that states machine-readable facts about who published it, and that is structured so a model can extract a complete answer from a single section. In practice that means four things: not blocking AI bots at the CDN level, explicit per-bot rules in robots.txt, a Schema.org JSON-LD entity graph with stable identifiers, and an accurate sitemap with truthful modification dates. Is AI SEO different from regular SEO? Mostly no. AI answer engines lean heavily on conventional search indexes, so a site that is technically sound for Google is already most of the way there. The genuine additions are explicit crawler permissions for AI-specific bots, structured data that resolves you into an entity rather than a name string, and content shaped so a passage can be extracted and cited on its own. Do I need an llms.txt file? No. An Ahrefs study of 137,000 domains found that 97% of llms.txt files received zero requests in May 2026, Google stated in June 2026 that the file is not required for Search, and both OpenAI’s and Anthropic’s crawler documentation points site owners to robots.txt instead. It is worth adding only because AI coding agents such as Cursor and Claude Code do read it and the cost is one build step. Do not expect a citation lift from it. Do I need an auth.md file? Only if your service issues credentials. auth.md is an open protocol WorkOS published in May 2026 that tells an AI agent how to register on a user’s behalf and receive a scoped, revocable token. Its real discovery path runs through OAuth Protected Resource Metadata and Authorization Server metadata, so it assumes you have an API behind a 401. A pure content site has no protected resource, no authorization server and no registration endpoint, which means publishing that discovery chain would advertise URLs that return 404. If you have nothing behind a login, the honest version is a short /auth.md stating that no registration exists and listing your public endpoints instead. Should I let AI crawlers train on my content? It depends on how you make money. If your goal is name recognition and inbound work, allowing training is usually the right trade, because being represented in a model’s weights means being mentioned when someone asks a general question. If your content itself is the product, block the training crawlers and allow only the search and user-initiated ones. That keeps you citable in AI answers while opting out of training. How do I know if any of this is working? There is no rank tracker for AI answers. The two feedback loops worth watching are your CDN’s AI bot analytics, which report real crawler request volume by operator, and asking ChatGPT, Claude, and Perplexity the questions your customers would ask, then noting whether you get cited. Give it two to four weeks before reading anything into either one. ","date":"17 August 2026","datePublished":"2026-08-17","description":"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.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/how-to-make-your-website-ai-friendly/","section":"Blog","summary":"A practical, evidence-ordered guide to making a website AI-friendly, based on rebuilding this site for AI discoverability: what AI crawlers actually enforce, why structured data is the real lever, and which popular AI SEO tactics are not worth your time.","tags":["AI SEO","SEO","Structured Data","Schema.org","Cloudflare","Hugo","AI Consulting","AI Agents","Technology Strategy"],"title":"How to Make Your Website AI-Friendly (What Actually Works in 2026)","type":"posts"},{"content":"","date":"17 August 2026","datePublished":"2026-08-17","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/hugo/","section":"Tags","summary":"","title":"Hugo","type":"tags"},{"content":"","date":"17 August 2026","datePublished":"2026-08-17","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/schema.org/","section":"Tags","summary":"","title":"Schema.org","type":"tags"},{"content":"","date":"17 August 2026","datePublished":"2026-08-17","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/seo/","section":"Tags","summary":"","title":"SEO","type":"tags"},{"content":"","date":"17 August 2026","datePublished":"2026-08-17","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/structured-data/","section":"Tags","summary":"","title":"Structured Data","type":"tags"},{"content":"","date":"17 August 2026","datePublished":"2026-08-17","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/","section":"Tags","summary":"","title":"Tags","type":"tags"},{"content":"","date":"17 August 2026","datePublished":"2026-08-17","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/technology-strategy/","section":"Tags","summary":"","title":"Technology Strategy","type":"tags"},{"content":"","date":"12 February 2026","datePublished":"2026-02-12","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/api/","section":"Tags","summary":"","title":"API","type":"tags"},{"content":"The GEN (Global Entrepreneurship Network) platform 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.\nWhile 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.\nImproving 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.\nAs part of this work, I:\nRevamped 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.\nCleaner Code, Better Performance # Beyond visible improvements, a big part of the update involved revisiting existing custom code and modernizing it where needed. This included:\nStreamlining 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.\nDeployment 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.\nThat meant validating edge cases, coordinating changes across components, and making sure the updated system behaved predictably under real-world usage.\nLooking 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.\nIt’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.\n","date":"12 February 2026","datePublished":"2026-02-12","description":"Behind the Scenes of the GEN Platform Update: Making Engagement Seamless","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/behind-the-scenes-of-the-gen-platform-update/","section":"Blog","summary":"Behind the Scenes of the GEN Platform Update: Making Engagement Seamless","tags":["Drupal","Drupal 10","Theming","Testing","Bootstrap","Bootstrap 5","Composer","Configuration","API"],"title":"Behind the Scenes of the GEN Platform Update: Making Engagement Seamless","type":"posts"},{"content":"","date":"12 February 2026","datePublished":"2026-02-12","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/bootstrap/","section":"Tags","summary":"","title":"Bootstrap","type":"tags"},{"content":"","date":"12 February 2026","datePublished":"2026-02-12","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/bootstrap-5/","section":"Tags","summary":"","title":"Bootstrap 5","type":"tags"},{"content":"","date":"12 February 2026","datePublished":"2026-02-12","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/composer/","section":"Tags","summary":"","title":"Composer","type":"tags"},{"content":"","date":"12 February 2026","datePublished":"2026-02-12","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/configuration/","section":"Tags","summary":"","title":"Configuration","type":"tags"},{"content":"","date":"12 February 2026","datePublished":"2026-02-12","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/drupal/","section":"Tags","summary":"","title":"Drupal","type":"tags"},{"content":"","date":"12 February 2026","datePublished":"2026-02-12","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/drupal-10/","section":"Tags","summary":"","title":"Drupal 10","type":"tags"},{"content":"","date":"12 February 2026","datePublished":"2026-02-12","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/testing/","section":"Tags","summary":"","title":"Testing","type":"tags"},{"content":"","date":"12 February 2026","datePublished":"2026-02-12","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/theming/","section":"Tags","summary":"","title":"Theming","type":"tags"},{"content":"","date":"6 May 2025","datePublished":"2025-05-06","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/agencies/","section":"Tags","summary":"","title":"Agencies","type":"tags"},{"content":"","date":"6 May 2025","datePublished":"2025-05-06","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/ai-generated-code/","section":"Tags","summary":"","title":"AI Generated Code","type":"tags"},{"content":"","date":"6 May 2025","datePublished":"2025-05-06","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/code-review/","section":"Tags","summary":"","title":"Code Review","type":"tags"},{"content":"","date":"6 May 2025","datePublished":"2025-05-06","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/freelance/","section":"Tags","summary":"","title":"Freelance","type":"tags"},{"content":" Key takeaways Agencies charge for overhead and project layers; a freelancer is paid for the work done. Communication is direct with a freelancer versus filtered through project managers and leads. AI coding tools shorten iteration cycles, so an agency’s multi-day approval chain becomes friction exactly where speed matters most. Agencies rotate team members, losing context and causing rework. A freelancer learns the codebase and keeps that knowledge across every phase. The assumption that more people means better results is the same mistake companies made with offshore outsourcing. 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.\nJust 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.\nFreelancers 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:\nNew 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.\nFreelancers 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.\nA freelancer:\nLearns 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.\nWhen a Freelancer Is the Better Fit # Consider a freelancer when:\nYou 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.\nA strong freelancer doesn’t just write or review code — they own outcomes.\nSo before defaulting to a big agency, ask yourself:\nWhat if one highly skilled freelancer could give me better results, faster — with less overhead and more care?\nChances are, they can.\nLooking for freelance support with AI-assisted code, legacy refactoring, or fast-growing projects?\nLet’s chat. I help teams move quickly — without cutting corners.\n","date":"6 May 2025","datePublished":"2025-05-06","description":"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.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/freelancers-vs-agencies-the-quite-advantage-in-the-age-of-ai-coding/","section":"Blog","summary":"In the age of AI coding, a skilled freelancer often beats an agency on communication, speed, cost, and retained context, because agency process adds friction exactly where AI removes it.","tags":["Freelance","Agencies","VibeCoding","AI Generated Code","Code Review","Hiring"],"title":"Freelancers vs. Agencies: The Quiet Advantage in the Age of AI Coding","type":"posts"},{"content":"","date":"6 May 2025","datePublished":"2025-05-06","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/hiring/","section":"Tags","summary":"","title":"Hiring","type":"tags"},{"content":"","date":"6 May 2025","datePublished":"2025-05-06","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/vibecoding/","section":"Tags","summary":"","title":"VibeCoding","type":"tags"},{"content":"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?”\nIt was an attractive idea — until it wasn’t.\nThe 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.\nWhat followed was a predictable pattern:\nIncomplete 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?\nBecause they had to:\nAudit 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.\nFast Forward to Today: Enter AI \u0026 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.\nThis is incredibly exciting and powerful.\nBut the same warning applies: fast doesn’t mean right.\nAI can generate syntactically valid code, but:\nIt 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.\nThe Lesson: Cheap ≠ Efficient # The lesson from the outsourcing era isn’t “never outsource” — it’s that development is more than typing code.\nIt’s about:\nUnderstanding 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.\nOtherwise, you may find yourself — once again — spending double to fix what you thought you were saving on.\nMy 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.\nUse AI. Move fast. But build smart.\nIf 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.\n","date":"5 May 2025","datePublished":"2025-05-05","description":"AI Coding vs. Offshore Outsourcing: Are We Repeating the Same Mistake?","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/ai-coding-vs-offshore-outsourcing-are-we-repeating-the-same-mistake/","section":"Blog","summary":"AI Coding vs. Offshore Outsourcing: Are We Repeating the Same Mistake?","tags":["Debuging","VibeCoding","AI Generated Code","Testing","Code Review","API"],"title":"AI Coding vs. Offshore Outsourcing: Are We Repeating the Same Mistake?","type":"posts"},{"content":"","date":"5 May 2025","datePublished":"2025-05-05","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/debuging/","section":"Tags","summary":"","title":"Debuging","type":"tags"},{"content":"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.\nBut 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.\nAs a developer and technical consultant, here’s how I help teams review, debug, and production-proof AI-generated and vibe-coded projects.\nReviewing the Logic Behind the Suggestions # AI tools can’t fully understand your business rules or long-term goals. That’s where I come in.\nI walk through AI-generated code and check:\nDoes 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.\nIdentifying Bugs and Anti-Patterns # AI can introduce:\nInefficient 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:\nInput/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.\nWhen I review AI-generated code, I:\nAdapt 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.\nWriting Unit Tests for AI Code # AI often skips testing — I don’t.\nFor every feature or function generated, I help:\nWrite meaningful unit and integration tests Mock dependencies properly Validate edge cases and error handling This turns suggestions into stable code.\nDebugging 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.\nIn these sessions, I help developers:\nStay 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.\nFinal Thoughts # AI can assist — but it’s not a replacement for experience, context, and judgment.\nIf your team is exploring AI tools or building projects with vibe coding techniques, I can help ensure:\nYour 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.\nNeed help reviewing or debugging AI-generated code?\nI offer code audits, hands-on development support, and dev team mentorship. Let’s connect.\n","date":"4 May 2025","datePublished":"2025-05-04","description":"13+ Years as a Developer Consultant: Reviewing and Debugging AI-Generated Code \u0026 Vibe Coding Projects.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/reviewing-and-debugging-ai-generated-code-and-vibe-coding-projects/","section":"Blog","summary":"Reviewing and Debugging AI-Generated Code \u0026 Vibe Coding Projects.","tags":["Debuging","VibeCoding","AI Generated Code","Testing","Code Review","API"],"title":"Reviewing and Debugging AI-Generated Code \u0026 Vibe Coding Projects","type":"posts"},{"content":"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.\nComing 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:\nA 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.\nNot 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.\nOver time, I’ve helped clients:\nRefactor 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.\nMy 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.\nI’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.\nIf 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.\nNeed help with your Drupal project?\nLet’s connect. I’m always happy to take a look, whether you need a one-time fix or a long-term technical partner.\n","date":"1 May 2025","datePublished":"2025-05-01","description":"13+ Years as a Drupal Developer Consultant: Jumping Into Projects and Driving Real Results.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/13-plus-as-a-drupal-developer-consultant/","section":"Blog","summary":"13+ Years as a Drupal Developer Consultant: Jumping Into Projects and Driving Real Results","tags":["Drupal","Drupal 10","Drupal 9","Drupal 8","Drupal 7","API","Technical Partner","Hosting"],"title":"13+ Years as a Drupal Developer Consultant: Jumping Into Projects and Driving Real Results","type":"posts"},{"content":"","date":"1 May 2025","datePublished":"2025-05-01","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/drupal-7/","section":"Tags","summary":"","title":"Drupal 7","type":"tags"},{"content":"","date":"1 May 2025","datePublished":"2025-05-01","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/drupal-8/","section":"Tags","summary":"","title":"Drupal 8","type":"tags"},{"content":"","date":"1 May 2025","datePublished":"2025-05-01","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/drupal-9/","section":"Tags","summary":"","title":"Drupal 9","type":"tags"},{"content":"","date":"1 May 2025","datePublished":"2025-05-01","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/hosting/","section":"Tags","summary":"","title":"Hosting","type":"tags"},{"content":"","date":"1 May 2025","datePublished":"2025-05-01","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/technical-partner/","section":"Tags","summary":"","title":"Technical Partner","type":"tags"},{"content":"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.\nIn 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.\nWebflow # 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.\nFramer # 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.\nWordPress # 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.\nDrupal # 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.\nHugo (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.\nBest Pick for 2025 # Brochures and Landing Pages: # Hugo + Netlify is the best combo for small businesses that want:\nSpeed 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.\nComplex 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.\nFinal Thoughts # There is no one-size-fits-all CMS. Your best choice depends on your team, goals, and scale:\nUse 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.\n","date":"30 April 2025","datePublished":"2025-04-30","description":"Best content management systems for 2025.  A comparison between: Framer, Drupal, Webflow, Wordpress and Hugo.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/best-cms-for-2025/","section":"Blog","summary":"Best content management systems for 2025","tags":["Drupal","Wordpress","Webflow","Hugo","Framer","CMS","Content Management"],"title":"Best CMS of 2025: A Comparison for Modern Websites","type":"posts"},{"content":"","date":"30 April 2025","datePublished":"2025-04-30","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/cms/","section":"Tags","summary":"","title":"CMS","type":"tags"},{"content":"","date":"30 April 2025","datePublished":"2025-04-30","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/content-management/","section":"Tags","summary":"","title":"Content Management","type":"tags"},{"content":"","date":"30 April 2025","datePublished":"2025-04-30","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/framer/","section":"Tags","summary":"","title":"Framer","type":"tags"},{"content":"","date":"30 April 2025","datePublished":"2025-04-30","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/webflow/","section":"Tags","summary":"","title":"Webflow","type":"tags"},{"content":"","date":"30 April 2025","datePublished":"2025-04-30","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/wordpress/","section":"Tags","summary":"","title":"Wordpress","type":"tags"},{"content":"“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.\nBut with great accessibility comes hidden risk.\nAs more people rely on visual builders and intuition-driven design over traditional development, the questions arise:\nIs 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.\nThe 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:\nWhat 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.\n2. Lack of Auditable Source Code # With no-code platforms:\nYou 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.\n3. Security by Obscurity # Many visual tools provide abstraction and simplicity. But that often hides:\nWeak access control Misconfigured data permissions Unvalidated user input These vulnerabilities can lead to data exposure, injection attacks, and privilege escalation.\n4. Performance Bottlenecks You Can’t Fix # Creators have little insight into:\nRendering bottlenecks Payload sizes Unoptimized database queries You may be stuck with sluggish performance and limited ability to optimize beyond what the platform exposes.\n5. Over-reliance on Platform-Specific Features # Vibecoding often results in:\nDeep 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.\nHow to Validate Performance and Security in No-Code Projects # 1. Ask About Dependencies # If using a no-code platform, ask:\nWhat 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 Monitor uptime with Pingdom or UptimeRobot Use browser dev tools to check asset sizes and load times 3. Limit Sensitive Functionality # Avoid putting:\nAuthentication Payment processing Private user data …inside tools where you can’t verify the code or configure permissions properly.\n4. Export and Self-Host (When Possible) # If your tool allows export (e.g., Webflow or Framer static export):\nHost 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:\nIdentify insecure defaults Suggest best practices Improve data handling and privacy configuration Should You Avoid Vibecoding? # Not at all. No-code tools are incredible for:\nRapid prototyping Internal tools MVPs and landing pages But:\nTrusting a platform does not mean ignoring responsibility.\nIf you’re building a product that handles sensitive data or grows beyond a prototype, you need to:\nThink 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.\nCreativity without control is exciting — but creativity with control is sustainable.\nUse no-code tools. Trust your intuition. But also:\nValidate the stack Test the performance Respect your users’ data ","date":"29 April 2025","datePublished":"2025-04-29","description":"Webflow and Framer: The Vendor Lock-In Dilemma and limitations.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/is-vibecoding-safe-understanding-the-risks-of-no-code-and-visual-development/","section":"Blog","summary":"Downsides of Webflow and Framer","tags":["Webflow","Framer","CMS","Content Management"],"title":"Is Vibecoding Safe? Understanding the Risks of No-Code and Visual Development","type":"posts"},{"content":"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.\nBut there’s a hidden cost that becomes clear only after you’ve committed: vendor lock-in.\nWhat 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.\nYou Don’t Truly Own Your Content # With Webflow and Framer:\nYou 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.\nHosting and Platform Lock-In # Both platforms encourage (and in some cases require) you to host your site on their infrastructure:\nWebflow 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.\nLimited Control and Flexibility # Need to:\nIntegrate 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.\nAlternatives That Offer Real Ownership # If you want:\nFull control over your code The ability to switch hosting or platforms freely Long-term flexibility and security Consider platforms like:\nHugo + 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.\nFinal 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.\nChoose tools that grow with you — not ones that trap you.\n","date":"29 April 2025","datePublished":"2025-04-29","description":"Webflow and Framer: The Vendor Lock-In Dilemma and limitations.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/webflow-and-framer-the-vendor-lock-in-dilemma/","section":"Blog","summary":"Downsides of Webflow and Framer","tags":["Webflow","Framer","CMS","Content Management"],"title":"Webflow and Framer: The Vendor Lock-In Dilemma","type":"posts"},{"content":"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.\nKey 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 \u0026 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.\n","date":"12 April 2025","datePublished":"2025-04-12","description":"AI agent development and LLM consulting: autonomous agent orchestration with LangChain and CrewAI, Python LLM workflows, observability with Langfuse, and vector database integration.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/experience/ai-agent-experience/","section":"Experience","summary":"Designing and building production AI agents with LangChain, CrewAI, and Langfuse, including custom LLM workflows and vector database integration.","tags":["AI agents","LangChain","CrewAI","Langfuse","LLM","Python","AI Consulting"],"title":"AI Agent Experience","type":"experience"},{"content":"","date":"12 April 2025","datePublished":"2025-04-12","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/crewai/","section":"Tags","summary":"","title":"CrewAI","type":"tags"},{"content":"","date":"12 April 2025","datePublished":"2025-04-12","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/fractional-cto/","section":"Tags","summary":"","title":"Fractional CTO","type":"tags"},{"content":" Key takeaways A senior freelance Drupal developer frequently delivers Fractional CTO value on top of implementation, because the same person setting architecture is the one shipping it. Strategic contributions include tech roadmaps, vendor vetting for hosting and SaaS, scalable architecture planning to avoid costly replatforming, and development team leadership. You get execution and leadership together, without the salary and equity cost of a full-time executive. This matters most when business outcomes are directly tied to technology decisions, which for most companies is now the default. 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.\nWhat 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.\nClosing # 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.\n","date":"12 April 2025","datePublished":"2025-04-12","description":"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.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/fractional-cto-the-strategic-bonus-of-hiring-an-expert-freelance-drupal-developer/","section":"Blog","summary":"Hiring a senior freelance Drupal developer often gets you a Fractional CTO too: roadmaps, vendor vetting, architecture planning, and team leadership alongside execution.","tags":["Fractional CTO","Drupal","Drupal 10","Technical Leadership","Technology Strategy","Freelance Drupal Developer"],"title":"Fractional CTO: The Strategic Bonus of Hiring an Expert Freelance Drupal Developer","type":"posts"},{"content":"","date":"12 April 2025","datePublished":"2025-04-12","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/freelance-drupal-developer/","section":"Tags","summary":"","title":"Freelance Drupal Developer","type":"tags"},{"content":"","date":"12 April 2025","datePublished":"2025-04-12","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/langchain/","section":"Tags","summary":"","title":"LangChain","type":"tags"},{"content":"","date":"12 April 2025","datePublished":"2025-04-12","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/langfuse/","section":"Tags","summary":"","title":"Langfuse","type":"tags"},{"content":"","date":"12 April 2025","datePublished":"2025-04-12","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/llm/","section":"Tags","summary":"","title":"LLM","type":"tags"},{"content":"","date":"12 April 2025","datePublished":"2025-04-12","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/python/","section":"Tags","summary":"","title":"Python","type":"tags"},{"content":"","date":"12 April 2025","datePublished":"2025-04-12","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/technical-leadership/","section":"Tags","summary":"","title":"Technical Leadership","type":"tags"},{"content":"","date":"10 April 2025","datePublished":"2025-04-10","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/gdpr/","section":"Tags","summary":"","title":"GDPR","type":"tags"},{"content":" Key takeaways The main risks of a neglected Drupal site are outdated modules and core vulnerabilities, slow code causing downtime, and non-compliance with GDPR and CCPA. The work that fixes it: security audits to find and patch vulnerabilities, proactive patching ahead of security releases, hardening of file permissions, config management and database access, and optimization through caching, cron, and query tuning. Measured impact: about 70% fewer security incidents and 2x to 5x faster page loads. Faster, healthier sites also lower bounce rates and improve SEO, so security work pays back beyond risk reduction. 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.\nThe 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.\n","date":"10 April 2025","datePublished":"2025-04-10","description":"How a freelance Drupal developer improves security and site health through security audits, proactive patching, hardening, and performance optimization, cutting incidents roughly 70%.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/how-a-freelance-drupal-developer-improves-security-and-site-health/","section":"Blog","summary":"Security audits, proactive patching, hardening, and caching and query optimization reduce Drupal security incidents by roughly 70% and improve page speed 2x to 5x.","tags":["Drupal","Website Security","Drupal 10","Performance","GDPR","Freelance Drupal Developer","Site Maintenance"],"title":"How a Freelance Drupal Developer Improves Security and Site Health","type":"posts"},{"content":"","date":"10 April 2025","datePublished":"2025-04-10","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/performance/","section":"Tags","summary":"","title":"Performance","type":"tags"},{"content":"","date":"10 April 2025","datePublished":"2025-04-10","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/site-maintenance/","section":"Tags","summary":"","title":"Site Maintenance","type":"tags"},{"content":"","date":"10 April 2025","datePublished":"2025-04-10","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/website-security/","section":"Tags","summary":"","title":"Website Security","type":"tags"},{"content":" 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.\nA 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.\nClosing # 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.\n","date":"8 April 2025","datePublished":"2025-04-08","description":"Why Hosting and DevOps Skills Matter in Your Freelance Drupal Developer.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/why-hosting-and-devops-skills-matter-in-your-freelance-drupal-developer/","section":"Blog","summary":"Why Hosting and DevOps Skills Matter in Your Freelance Drupal Developer","tags":["Drupal","Drupal 10","Drupal 9","Drupal 8","Drupal 7","API"],"title":"Why Hosting and DevOps Skills Matter in Your Freelance Drupal Developer","type":"posts"},{"content":" 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.\nWhat 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.\nClosing # 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.\n","date":"6 April 2025","datePublished":"2025-04-06","description":"Beyond Content Types: What Real Drupal Backend Expertise Looks Like.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/beyond-content-types-what-real-drupal-backend-expertise-looks-like/","section":"Blog","summary":"Beyond Content Types: What Real Drupal Backend Expertise Looks Like","tags":["Drupal","Drupal 10","Drupal 9","Drupal 8","Drupal 7","API"],"title":"Beyond Content Types: What Real Drupal Backend Expertise Looks Like","type":"posts"},{"content":"","date":"5 April 2025","datePublished":"2025-04-05","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/sme/","section":"Tags","summary":"","title":"SME","type":"tags"},{"content":"","date":"5 April 2025","datePublished":"2025-04-05","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/startups/","section":"Tags","summary":"","title":"Startups","type":"tags"},{"content":" Key takeaways 78% of startups fail due to technical missteps, most of them preventable with experienced technical leadership. Companies with Fractional CTOs launch 30-50% faster because of better early architectural decisions. Businesses save 50-70% versus hiring a full-time CTO or tech lead. Security posture improves measurably within 3 to 6 months of technical oversight. What to look for: strategic vision tied to your business model, architecture you can build on, team leadership without micromanaging, startup and SME experience, security and risk management, and vendor and budget optimization. Can’t justify hiring a full-time CTO?\nYou’re not alone.\nIt’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.\nLet’s let the numbers tell the story:\n78% 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:\nStrategic Vision \u0026 Execution They shouldn’t just advise — they should align tech decisions with your business model, go-to-market strategy, and long-term goals. 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. Team Leadership Without Micro-Managing They should set direction, mentor engineers, and foster healthy dev culture — not just “code and go.” Startup \u0026 SME Experience Look for someone who’s built and scaled products across multiple growth stages, not just corporate IT environments. Security and Risk Management From GDPR compliance to data architecture and backup strategies — they help you sleep better at night. 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.\nIf 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.\n","date":"5 April 2025","datePublished":"2025-04-05","description":"A great Fractional CTO delivers senior-level leadership, scalable architecture, and immediate value — without the six-figure salary and equity package.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/the-hidden-roi-of-a-fractional-cto/","section":"Blog","summary":"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.","tags":["Fractional CTO","Technical Leadership","Technology Strategy","Startups","SME","Hiring"],"title":"The Hidden ROI of a Fractional CTO","type":"posts"},{"content":"","date":"4 April 2025","datePublished":"2025-04-04","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/cost-optimization/","section":"Tags","summary":"","title":"Cost Optimization","type":"tags"},{"content":" Key takeaways Companies typically save 30-60% hiring a freelance Drupal developer versus a full-time equivalent, because you pay only for the hours the work actually needs. Businesses can reduce technical debt by up to 50% within 6 months of bringing in senior help. Security incidents drop about 70% after expert audits and consistent patching. Page load times improve 2x to 5x after backend optimization. The bigger win is seniority: freelancers are often developers who have already solved your problem, rather than junior hires learning on your codebase. 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.\nThe 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.\nClosing # 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.\n","date":"4 April 2025","datePublished":"2025-04-04","description":"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.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/why-hiring-a-freelance-drupal-developer-could-save-your-business-60/","section":"Blog","summary":"A freelance Drupal developer costs 30-60% less than a full-time hire and gives you senior expertise only when you need it, cutting technical debt and security incidents.","tags":["Drupal","Drupal 10","Drupal 9","Drupal 8","Drupal 7","Freelance Drupal Developer","Cost Optimization"],"title":"Why Hiring a Freelance Drupal Developer Could Save Your Business 60%","type":"posts"},{"content":"Can’t justify hiring a full-time Drupal developer?\nYou’re not alone.\nIt’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.\nLet’s let the results speak for themselves:\nBusinesses 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:\nDrupal 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. Backend Specialization A freelance Drupal backend dev should go beyond content types — think API integrations, commerce workflows, Solr search, and database optimization. Hosting \u0026 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. Business-Focused Results Not just code. You’re hiring someone who understands how Drupal drives business, improves conversions, and supports growth. 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. ","date":"1 April 2025","datePublished":"2025-04-01","description":"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.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/the-hidden-roi-of-a-freelance-drupal-developer/","section":"Blog","summary":"Freelance Drupal developers bring deep expertise, flexible engagement, and long-term ROI","tags":["Drupal","Drupal 10","Drupal 9","Drupal 8","Drupal 7","API"],"title":"The Hidden ROI of a Freelance Drupal Developer","type":"posts"},{"content":"","date":"1 March 2025","datePublished":"2025-03-01","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/backend-development/","section":"Tags","summary":"","title":"Backend Development","type":"tags"},{"content":"","date":"1 March 2025","datePublished":"2025-03-01","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/drupal-commerce/","section":"Tags","summary":"","title":"Drupal Commerce","type":"tags"},{"content":" 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.\nMark 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.\nSean 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.\nCrystal 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.\nBrian 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.\n","date":"1 March 2025","datePublished":"2025-03-01","description":"Recommendations page","externalUrl":null,"lastmod":"2026-08-19","permalink":"/recommendations/","section":"Michael Michalak","summary":"A page showcasing recomendations.","title":"Recommendations","type":"page"},{"content":" 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 \u0026 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 \u0026 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 \u0026 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\n• Support for vTiger CRM, vTiger-Google Application Integration, vTiger-QuickBooks Integration and Web2project\n• Deploy, configure and maintain Boru’s software\n• Assist in maintaining SVN infrastructure\n• Manage projects and overseas team Education # Purdue University — Bachelor of Science in Computer Engineering, 2004-2010\nSkills # Technology Leadership \u0026 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 \u0026 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 \u0026 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 \u0026 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 \u0026 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.\nMark 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.\nBrian 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.\nSean 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.\nCrystal 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.\nBrian 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.\n","date":"1 March 2025","datePublished":"2025-03-01","description":"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.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/resume/","section":"Michael Michalak","summary":"Resume and career history: AI agent consultant, Fractional CTO, and Drupal backend developer, with a BS in Computer Engineering from Purdue University.","tags":["Resume","Drupal","Fractional CTO","AI agents","Backend Development","Drupal Commerce"],"title":"Resume","type":"page"},{"content":"","date":"1 March 2025","datePublished":"2025-03-01","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/resume/","section":"Tags","summary":"","title":"Resume","type":"tags"},{"content":"","date":"29 October 2024","datePublished":"2024-10-29","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/acquia/","section":"Tags","summary":"","title":"Acquia","type":"tags"},{"content":"","date":"29 October 2024","datePublished":"2024-10-29","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/apache-solr/","section":"Tags","summary":"","title":"Apache Solr","type":"tags"},{"content":" 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.\n","date":"29 October 2024","datePublished":"2024-10-29","description":"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.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/experience/drupal-10-experience/","section":"Experience","summary":"Drupal 10 migrations, custom module and REST API development, Commerce 2.x workflows, GDPR compliance, and hosting on Pantheon and Acquia.","tags":["Drupal 10","Drupal","Drupal Commerce","Drupal Migrations","REST API","Apache Solr","GDPR","Pantheon","Acquia"],"title":"Drupal 10 Experience","type":"experience"},{"content":"","date":"29 October 2024","datePublished":"2024-10-29","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/drupal-migrations/","section":"Tags","summary":"","title":"Drupal Migrations","type":"tags"},{"content":"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.\nWhat 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.\nWho 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.\nContact me today to discuss how I can support your business as a Fractional CTO and help drive your technology initiatives forward.\nFrequently asked questions What is a Fractional CTO? A Fractional CTO is an experienced technology executive who works with your company part-time instead of as a full-time hire. You get senior-level technical judgment on architecture, hiring, vendor selection, and roadmap planning, scaled to the hours you actually need. It is a common arrangement for startups and small to medium businesses that face real technical decisions but cannot justify a six-figure salary and equity package. When should I hire a Fractional CTO instead of a full-time CTO? A fractional arrangement fits when you need senior technical judgment more than you need forty hours a week of it. Typical triggers are planning an MVP, preparing to scale, inheriting a codebase nobody understands, evaluating vendors or an agency, or filling a leadership gap during a merger or while recruiting a permanent CTO. Businesses generally save 50 to 70 percent compared to a full-time CTO or tech lead. What does a Fractional CTO engagement look like? Engagements are flexible and shaped around the problem. Some are ongoing strategic guidance with a recurring monthly commitment, some are scoped to a specific project such as a platform migration or architecture review, and some are interim leadership covering a transition. In each case the work spans technology strategy, architecture and platform planning, vendor and team evaluation, roadmap and budget alignment, and coaching for existing engineers. What kinds of companies and industries have you worked with? Thirteen-plus years across e-commerce platforms, higher education and universities, healthcare organizations, nonprofits, and global organizations. That work has ranged from high-traffic Drupal Commerce builds to backend architecture, hosting and DevOps, and more recently production AI agent development. Do you write code, or only advise? Both. Alongside fractional CTO work I remain a hands-on backend developer specializing in Drupal architecture, Drupal Commerce, custom module development, migrations, and performance and security work. That means recommendations come from someone who still ships production code, and I can implement directly rather than only hand off a plan. ","date":"29 October 2024","datePublished":"2024-10-29","description":"Fractional CTO services for startups and small to medium businesses. Senior technology leadership, architecture planning, and technical strategy on a part-time basis.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/experience/fractional-cto/","section":"Experience","summary":"Fractional CTO services for startups and SMEs: technology strategy, architecture planning, team leadership, and vendor management without the cost of a full-time executive hire.","tags":["Fractional CTO","Technology Strategy","Technical Leadership","Startups","SME"],"title":"Fractional CTO","type":"experience"},{"content":"","date":"29 October 2024","datePublished":"2024-10-29","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/pantheon/","section":"Tags","summary":"","title":"Pantheon","type":"tags"},{"content":"","date":"29 October 2024","datePublished":"2024-10-29","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/rest-api/","section":"Tags","summary":"","title":"REST API","type":"tags"},{"content":"Drupal form API states can support multiple values.\nE.g.\n$form['field_something']['#states'] = [ 'visible' =\u003e [ ':input[name=\"field_else[0][target_id]\"]' =\u003e [ ['value' =\u003e 'one'], ['value' =\u003e 'two'], ['value' =\u003e 'three'], ['value' =\u003e 'four'], ], ], ]; This also applies to:\nDrupal 7 Drupal 8 Drupal 9 Drupal 10 ","date":"16 October 2024","datePublished":"2024-10-16","description":"Drupal 9 Patch htaccess with Composer","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-form-api-states/","section":"Blog","summary":"Drupal 9 Patch htaccess with Composer.\"","tags":["Drupal","Drupal 10","Drupal 9","Drupal 8","Drupal 7","Form API","API"],"title":"Drupal Form API States","type":"posts"},{"content":"","date":"16 October 2024","datePublished":"2024-10-16","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/form-api/","section":"Tags","summary":"","title":"Form API","type":"tags"},{"content":"","date":"26 October 2023","datePublished":"2023-10-26","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/graphql/","section":"Tags","summary":"","title":"GraphQL","type":"tags"},{"content":"","date":"26 October 2023","datePublished":"2023-10-26","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/integration/","section":"Tags","summary":"","title":"Integration","type":"tags"},{"content":"","date":"26 October 2023","datePublished":"2023-10-26","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/node-js/","section":"Tags","summary":"","title":"Node JS","type":"tags"},{"content":"","date":"26 October 2023","datePublished":"2023-10-26","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/polaris/","section":"Tags","summary":"","title":"Polaris","type":"tags"},{"content":"","date":"26 October 2023","datePublished":"2023-10-26","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/shopify/","section":"Tags","summary":"","title":"Shopify","type":"tags"},{"content":"It is not possible to update a checkout object via Shopiy’s Admin REST API unless the custom app created the checkout object.\nPer Shopify Staff: The checkout PUT endpoint is intended to only be used to modify checkouts that were created by that same ap Reference:\nhttps://community.shopify.com/c/graphql-basics-and/update-checkout-not-working-on-api-2023-01-checkouts/m-p/2025238/highlight/true#M5766 ","date":"26 October 2023","datePublished":"2023-10-26","description":"Shopify Draft Order Metafields","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/shopify-admin-rest-api-checkout-object-put-request/","section":"Blog","summary":"Working with Shopify Draft Order Metafields.","tags":["Shopify","Polaris","Node JS","GraphQL","REST API","Integration"],"title":"Shopify Admin REST API Checkout Object PUT Request","type":"posts"},{"content":"","date":"29 September 2023","datePublished":"2023-09-29","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/e-commerce/","section":"Tags","summary":"","title":"E-Commerce","type":"tags"},{"content":"","date":"29 September 2023","datePublished":"2023-09-29","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/migrations/","section":"Tags","summary":"","title":"Migrations","type":"tags"},{"content":"","date":"29 September 2023","datePublished":"2023-09-29","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/node.js/","section":"Tags","summary":"","title":"Node.js","type":"tags"},{"content":"","date":"29 September 2023","datePublished":"2023-09-29","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/shopify-api/","section":"Tags","summary":"","title":"Shopify API","type":"tags"},{"content":"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.\nApp 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. ","date":"29 September 2023","datePublished":"2023-09-29","description":"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.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/experience/shopify-experience/","section":"Experience","summary":"Shopify app and app extension development in Node.js, GraphQL and Admin REST API work, and Drupal Commerce to Shopify migrations.","tags":["Shopify","Node.js","GraphQL","Shopify API","Drupal Commerce","E-commerce","Migrations"],"title":"Shopify Experience","type":"experience"},{"content":"In composer.json add to the scripts section. See below:\n\"scripts\": { \"pre-install-cmd\": [], ... \"post-drupal-scaffold-cmd\": [ \"patch -p1 \u003c patches/my-htaccess.patch\" ] }, ","date":"21 September 2023","datePublished":"2023-09-21","description":"Drupal 9 Patch htaccess with Composer","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-9-patch-htaccess-with-composer/","section":"Blog","summary":"Drupal 9 Patch htaccess with Composer.\"","tags":["Drupal","Drupal 10","Drupal 9","Drupal 8","Composer","Configuration"],"title":"Drupal 9 Patch htaccess with Composer","type":"posts"},{"content":"","date":"3 August 2023","datePublished":"2023-08-03","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/drush/","section":"Tags","summary":"","title":"Drush","type":"tags"},{"content":"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.\nThese 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.\n","date":"3 August 2023","datePublished":"2023-08-03","description":"Shopify Draft Order Metafields","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/shopify-draft-order-metafields/","section":"Blog","summary":"Working with Shopify Draft Order Metafields.","tags":["Shopify","Polaris","Node JS","GraphQL","REST API"],"title":"Shopify Draft Order Metafields","type":"posts"},{"content":"Update a UUID:\ndrush config-set \"config.name\" uuid \"a2afbb3b-d34f-42fd-bf0c-593a103aa6f4\" Also how to generate an new UUID:\ndrush php-eval \"echo \\Drupal::service('uuid')-\u003egenerate();\" Notes:\nRemember to back up your database first! Check your config: drush config-get \"config.name\" uuid ","date":"3 August 2023","datePublished":"2023-08-03","description":"Update UUID in a Drupal Configuration","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/update-uuid-in-a-drupal-configuration/","section":"Blog","summary":"Update UUID in a Drupal Configuration.","tags":["Drupal","Drupal 10","Drupal 9","Drupal 8","Drush","Configuration"],"title":"Update UUID in a Drupal Configuration","type":"posts"},{"content":"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.\nToday 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.\nI have pulled together a code example from the Twilio API documents and as you can see below there isn’t much there.\nuse Twilio\\Rest\\Client; $twilio = new Client($sid, $token); $to = “+1234567890”; $from = “+0987654321”; $document = “https://example.com/document.pdf”; $response = twilio-\u003efax-\u003ev1-\u003efaxes-\u003ecreate($to, $document,[\"from\" =\u003e $from]); A couple of notes on the Twilio fax API:\nThere 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 ","date":"6 December 2020","datePublished":"2020-12-06","description":"Drupal 8 - Sending Faxes with Twilio","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-8-sending-faxes-with-twilio/","section":"Blog","summary":"Yep, you read the title correctly and it says “fax.”  Faxes are still used, and Twilio has an API to send and receive faxes that is quite easy to use.","tags":["Drupal","Drupal 8","Drupal 7","Drupal Commerce","Integration","REST API"],"title":"Drupal 8 - Sending Faxes with Twilio","type":"posts"},{"content":" 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.\n","date":"29 October 2019","datePublished":"2019-10-29","description":"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.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/experience/drupal-9-experience/","section":"Experience","summary":"Drupal 9 upgrades, custom module and REST API development, Commerce 2.x workflows, and performance and hosting management.","tags":["Drupal 9","Drupal","Drupal Commerce","Drupal Migrations","REST API","Pantheon","Acquia"],"title":"Drupal 9 Experience","type":"experience"},{"content":"","date":"29 September 2019","datePublished":"2019-09-29","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/drupal-development/","section":"Tags","summary":"","title":"Drupal Development","type":"tags"},{"content":"When styling mobile-friendly pages I have run into issues between the different iPhone X versions. Also included: iPhone 7 and 8.\niPhone 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 Apple Developer iOS Interface Guidelines Stack Overflow: iPhone XR / XS / XS Max CSS media queries Stack Overflow: All iPhones Ultimate Guide to iPhone Resolutions ","date":"29 September 2019","datePublished":"2019-09-29","description":"When styling mobile-friendly pages I have run into issues between the different iPhone X versions.  Also included: iPhone 7 and 8.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/iphone-screen-sizes-and-media-queries/","section":"Blog","summary":"When styling mobile-friendly pages I have run into issues between the different iPhone X versions.  Also included: iPhone 7 and 8.","tags":["Drupal","Drupal 7","Drupal 8","Drupal Development"],"title":"iPhone Screen Sizes and Media Queries ","type":"posts"},{"content":"","date":"21 August 2019","datePublished":"2019-08-21","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/drupal-performance/","section":"Tags","summary":"","title":"Drupal Performance","type":"tags"},{"content":"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.\nWhen tasked at generating PDFs, I have been applying the dompdf library. The dompdf library implements the most versatility by using HTML and CSS to generate PDFs. Therefore, giving the most flexibility for custom theming.\nExample 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.\nExample 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.\nThe dompdf library has been enjoyable and straightforward to use and I intend to use this library for future PDF generation projects.\n","date":"21 August 2019","datePublished":"2019-08-21","description":"Cloning a Pantheon Project","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/pdf-generation-in-drupal/","section":"Blog","summary":"If you need to clone a project within the Pantheon ecosystem Terminus is a great tool to use.  Terminus has an additional plugin to clone sites.","tags":["Drupal 7","Drupal 8","Drupal","Drupal Development","Drupal Commerce","Drupal Performance"],"title":"PDF Generation in Drupal","type":"posts"},{"content":"If you need to clone a project within the Pantheon ecosystem Terminus is a great tool to use.\nFirst, install Terminus and then add the site clone plugin.\nAfter authenticating with terminus use the site:clone command\nterminus site:clone \u003csource\u003e.\u003cenv\u003e \u003cdestination\u003e.\u003cenv\u003e \u003csource\u003e and \u003cdestination\u003e are either the site names or the site UUIDs. \u003cenv\u003e is the environment, e.g. dev, test, prod or multi dev.\nResources # Install Terminus Terminus’s Site Clone Plugin Terminus Documentation Pantheon Migration Documentation ","date":"8 August 2019","datePublished":"2019-08-08","description":"Cloning a Pantheon Project","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/pantheon-cloning-a-project/","section":"Blog","summary":"If you need to clone a project within the Pantheon ecosystem Terminus is a great tool to use.  Terminus has an additional plugin to clone sites.","tags":["Drupal 7","Drupal 8","Drupal","Security","Update","Drupal Development","Drupal Commerce","Update"],"title":"Cloning a Pantheon Project","type":"posts"},{"content":"","date":"8 August 2019","datePublished":"2019-08-08","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/security/","section":"Tags","summary":"","title":"Security","type":"tags"},{"content":"","date":"8 August 2019","datePublished":"2019-08-08","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/update/","section":"Tags","summary":"","title":"Update","type":"tags"},{"content":"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.\nAfter 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.\nWhat 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.\n","date":"1 August 2019","datePublished":"2019-08-01","description":"Help recover a website that might have been exploited by hackers","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/compromised-drupal-7-website-recovery-review/","section":"Blog","summary":"Reviewing a compromised Drupal 7 website for potential exploits and backdoors.","tags":["Drupal 7","Drupal","Security","Update","Drupal Development"],"title":"Compromised Drupal 7 Website Recovery Review","type":"posts"},{"content":"","date":"31 July 2019","datePublished":"2019-07-31","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/commerce-promo/","section":"Tags","summary":"","title":"Commerce Promo","type":"tags"},{"content":"Currently “Buy X and Get Y” discount is only related to the whole order and not at the order item level.\nI needed order item level discounts. e.g. buy 10 or more of the same product and get 10% off that order item.\nThe new promotion will only discount at the order item level for order items with a quantity of 10 or more.\nExample - 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\nI 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.\nDrupal Commerce Issue Queue: https://www.drupal.org/project/commerce/issues/3066724\n","date":"31 July 2019","datePublished":"2019-07-31","description":"Drupal Commerce Promtions","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-8-commerce-promotions/","section":"Blog","summary":"Buy X or more of the same product and get % off that order item promtotions.","tags":["Drupal 8","Drupal","Drupal Commerce","Commerce Promo","Drupal Development"],"title":"Drupal 8 Commerce Promotions - Buy X or more of the same product and get % off that order item","type":"posts"},{"content":"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.\nDrupal 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.\nTax-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.\nLine 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.\nThanks for reading! Let me know if you have any questions. Please leave a comment below!\n","date":"31 July 2019","datePublished":"2019-07-31","description":"Drupal Commerce Tax Resolvers","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-8-commerce-tax-resolvers/","section":"Blog","summary":"Using Drupal 8 Commerce tax resolvers to create new ways to either tax or exempt tax from customers.","tags":["Drupal 8","Drupal","Drupal Commerce","Drupal Development"],"title":"Drupal 8 Commerce Tax Resolvers","type":"posts"},{"content":"I created this post to provide a quick overview of two different Drupal 8 modules that extend the default node title length.\nThere are currently two modules:\nNode Title Length 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.\nNode Title Length [Recommended] # Module: Node 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: # Enable the module. All set! No additional configuration is needed. Entity Title Length # Module: Entity Title Length Admin Configuration: /admin/etl/config Official Release: ❌ No How to Set Up and Configure: # Enable the module. Update the configuration in the admin section: /admin/etl/config Update the title length in the form display configuration for that entity/node to the desired new length. ","date":"11 July 2019","datePublished":"2019-07-11","description":"Longer Titles","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-8-longer-titles/","section":"Blog","summary":"Longer Titles - Entity Title Length/Node Title Length.","tags":["Drupal 8","Drupal"],"title":"Drupal 8 - Longer Titles - Entity Title Length/Node Title Length","type":"posts"},{"content":" Configuration Synchronization # Drupal 8 has a great configuration synchronization system, making it easy to sync different environments.\nWhen creating new modules and adding new functionality, I really enjoy working with Drupal 8’s configuration synchronization tool.\nNot only does this tool eliminate guesswork for updates on other environments, but it also documents all changes, ensuring a clear record of modifications.\nNew 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.\nI have adopted this methodology for moving changes across environments, ensuring:\nPortability Clear documentation Predictable deployments Pairing this approach with a deployment guide removes any guesswork about what needs to be updated.\nUses for Configuration Synchronization # Drupal 8’s configuration synchronization tool is useful for managing various types of changes, including:\nBlock 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.\nWhen a module installation conflicts with synchronization, it can cause headaches. However, once issues are resolved, the process runs smoothly.\nIn most cases, resolving conflicts requires reworking the install() and uninstall() hooks for the module.\n","date":"29 May 2019","datePublished":"2019-05-29","description":"Drupal 8 Configuration Synchronization","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-8-configuration-synchronization/","section":"Blog","summary":"Drupal 8 Configuration Synchronization.","tags":["API","Drupal 8","Drupal Commmerce","Drupal Development","Composer","Drupal","Update"],"title":"Drupal 8 Configuration Synchronization","type":"posts"},{"content":"","date":"29 May 2019","datePublished":"2019-05-29","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/drupal-commmerce/","section":"Tags","summary":"","title":"Drupal Commmerce","type":"tags"},{"content":"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.\nThe 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\nUpdate - May 10, 2019\nThe patch has been working great and allows the Drupal Commerce website function as requested.\n","date":"10 May 2019","datePublished":"2019-05-10","description":"Commerce Tax for VAT and Sales Tax","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-8-commerce-tax-for-vat-sales-tax/","section":"Blog","summary":"Commerce Tax for VAT and Sales Tax.","tags":["Drupal 8","Drupal Commmerce","Drupal Development","Drupal","Update"],"title":"Drupal 8 Commerce Tax for VAT and Sales Tax","type":"posts"},{"content":"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\nThank you a.dmitriiev for creating a patch to solve this issue!\n","date":"8 May 2019","datePublished":"2019-05-08","description":"Setting a Default Currency on Product Variation","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-8-commerce-setting-a-default-currency-product-variations/","section":"Blog","summary":"Setting a Default Currency on Product Variation.","tags":["Drupal","Drupal 8","Drupal Commmerce","Drupal Development"],"title":"Drupal 8 Commerce - Setting a Default Currency on Product Variations","type":"posts"},{"content":"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.\nWhen using custom cookies a special naming convention must be used. The cookie’s name must start with STYXKEY.\nPer 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/\n","date":"3 May 2019","datePublished":"2019-05-03","description":"Drupal 8 Performance Tuning","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-pantheon-cookies/","section":"Blog","summary":"Pantheon cookie restrictions.","tags":["Drupal","Performance","Google","Update","Drupal 8","Drupal Commmerce","Drupal Development"],"title":"Drupal: Pantheon Cookies","type":"posts"},{"content":"","date":"3 May 2019","datePublished":"2019-05-03","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/google/","section":"Tags","summary":"","title":"Google","type":"tags"},{"content":"","date":"19 April 2019","datePublished":"2019-04-19","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/commerce-shipping/","section":"Tags","summary":"","title":"Commerce Shipping","type":"tags"},{"content":"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.\nThat 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.\nDrupal modules # Commerce Currency Reslover Smart IP ","date":"19 April 2019","datePublished":"2019-04-19","description":"Cloning a Pantheon Project","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-commerce-multi-currency/","section":"Blog","summary":"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.","tags":["Drupal","Drupal 8","Drupal Development","Drupal Commerce","Commerce Shipping","Integration","Payment Gateway"],"title":"Drupal Commerce Multi-currency","type":"posts"},{"content":"","date":"19 April 2019","datePublished":"2019-04-19","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/payment-gateway/","section":"Tags","summary":"","title":"Payment Gateway","type":"tags"},{"content":"This week I started a mini project to optimize a slow Drupal 8 website.\nDrupal-8-Performance-Update.png\nThe issue, various parts of the website are taking 10, 20 and even 30 seconds to load. Wow, a long time.\nMy 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.\nHere is a before and after comparison of page size, request sand load time:\nbefore-after.png\nNext steps, to go back through the requests that are sent, and then to review the hosting configuration.\n","date":"17 April 2019","datePublished":"2019-04-17","description":"Drupal 8 Performance Tuning","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-8-performance-tuning/","section":"Blog","summary":"Performance Tuning a Drupal 8 system.","tags":["Drupal","Performance","Google","Update","Drupal 8","Drupal Commmerce","Drupal Development"],"title":"Drupal 8 Performance Tuning","type":"posts"},{"content":"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.\nExample\nGET Request: https://api.exchangeratesapi.io/latest?base=USD\u0026symbols=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\nGET Request: https://api.exchangeratesapi.io/latest?base=EUR\u0026symbols=USD,GBP,HKD Result: {\"base\":\"EUR\",\"rates\":{\"USD\":1.1264,\"HKD\":8.8354,\"GBP\":0.86168},\"date\":\"2019-04-11\"} Resources\nhttps://exchangeratesapi.io/ ","date":"12 April 2019","datePublished":"2019-04-12","description":"Post about an exchange rates API","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/exchange-rates-api/","section":"Blog","summary":"Information about the exchangerateapi.io API.","tags":["API","Drupal 7","Drupal 8","Drupal Commmerce","Drupal Development","Integration"],"title":"Exchange Rates API","type":"posts"},{"content":"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.\nCloudflare 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.\n","date":"4 April 2019","datePublished":"2019-04-04","description":"Post about Drupal and Cloudflare","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-and-cloudflare/","section":"Blog","summary":"Cloudflare is a great tool to add another layer of security to your Drupal website..","tags":["Drupal","Drupal 7","Drupal 8","Drupal Commmerce","Drupal Performance","Security"],"title":"Drupal and Cloudflare","type":"posts"},{"content":"I recently update my modules routing.yml file and needed to update the routes in my Drupal 8 project.\nClearing the caches won’t update the routes.\nTo update the routes run this command with Drush:\ndrush ev '\\Drupal::service(\"router.builder\")-\u003erebuild();' ","date":"1 April 2019","datePublished":"2019-04-01","description":"Update routes with Drush","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-8-update-routes/","section":"Blog","summary":"Notes on updating routes in Drupal 8 with Drush.","tags":["Drupal 8","Drush","Drupal Development"],"title":"Drupal 8 - Update Routes","type":"posts"},{"content":"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.\nThere 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.\nThe 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.\n","date":"24 March 2019","datePublished":"2019-03-24","description":"Drupal 8 Performance on a commerce REST API","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-8-performance-commerce-rest-api/","section":"Blog","summary":"A performance review on for Drupal 8 commerce REST API project.","tags":["Commerce Shipping","Drupal 8","Drupal Commerce","Drupal Development","Integration","REST API"],"title":"Drupal 8 Performance - Commerce REST API","type":"posts"},{"content":"","date":"22 March 2019","datePublished":"2019-03-22","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/caching/","section":"Tags","summary":"","title":"Caching","type":"tags"},{"content":"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.\nIn 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.\nA couple of good modules for managing image styles are:\nImageinfo Cache Image style flush 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.\nWhile 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.\nThe 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.\nI 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 function:\n$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.\nParameters # $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 \u003cimg\u003e tag. Requesting the URL will cause the image to be created.\nSource for image_style_url: https://api.drupal.org/api/drupal/modules%21image%21image.module/function/image_style_url/7.x\n","date":"22 March 2019","datePublished":"2019-03-22","description":"How to apply and manage patches with composer","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-7-image-styles-not-regenerating/","section":"Blog","summary":"How to apply and manage patches with composer.","tags":["Drupal","Caching","Drupal 7","Drupal Development"],"title":"Drupal 7 - Image Styles Not Regenerating","type":"posts"},{"content":"How to apply and manage patches with composer.\nFirst add the library ‘cweagans/composer-patches’ to your composer.json\nThen under installer-paths in your composer.json add “patches”. “Patches” is then organized by modules. Here is an example:\n\"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' } } ","date":"14 March 2019","datePublished":"2019-03-14","description":"How to apply and manage patches with composer","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-8-applying-patches-with-composer/","section":"Blog","summary":"How to apply and manage patches with composer.","tags":["Drupal","Composer","Drupal 8","Drupal Development"],"title":"Drupal 8: Applying Patches with Composer","type":"posts"},{"content":"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.\n$form['product']['weight'] = array( '#type' =\u003e 'physical_measurement', '#title' =\u003e t('Weight'), '#measurement_type' =\u003e 'weight', //the default field is required and must be an array. '#default_value' =\u003e ['number' =\u003e 2.00, 'unit' =\u003e 'oz'], ); ","date":"14 March 2019","datePublished":"2019-03-14","description":"Custom weights on Form API Fields","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-8-form-api-weighted-fields/","section":"Blog","summary":"Custom weights on Form API fields.","tags":["Drupal","Drupal 8","Form API","Drupal Commerce","Drupal Development","Purchase Orders"],"title":"Drupal 8: Form API - Weight Fields","type":"posts"},{"content":"I have been creating a lot of custom forms for purchase order creation and custom shipping methods, using Drupal 8’s form API.\nFor the latest form, I needed to add an autocomplete field for user accounts that filtered by a specific role.\nIn the example below I only needed to show users with the role of ‘Supplier’\nExample:\n$form['group']['field_user'] = array( '#type' =\u003e 'entity_autocomplete', '#title' =\u003e t('Add User'), '#description' =\u003e t('Example text goes here'), '#target_type' =\u003e 'user', '#selection_settings' =\u003e [ 'include_anonymous' =\u003e FALSE, 'filter' =\u003e [ 'role' =\u003e ['supplier'], ], ], ); ","date":"14 March 2019","datePublished":"2019-03-14","description":"Form API Autocomplete Filtering By Role","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-8-form-api-autocomplete-filtering-by-role/","section":"Blog","summary":"Custom filtering on autocomplete fields by user role.","tags":["Drupal","Drupal 8","Form API"],"title":"Drupal 8: Form API Autocomplete Filtering By Role","type":"posts"},{"content":"","date":"14 March 2019","datePublished":"2019-03-14","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/purchase-orders/","section":"Tags","summary":"","title":"Purchase Orders","type":"tags"},{"content":"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.\nMy 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.\nI also enhance Drupal projects to integrate and automate custom business functionality and globalize my client’s websites.\nGlobalize you ask? Improving websites to be multilingual, GDPR compliant, multi-currency, and tax reconciliation, Sales Tax and VAT tax.\nAs 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.\nThere 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.\nThank you for watching my video. If you have any questions, please feel free to reach out.\nHave a great day!\n","date":"2 March 2019","datePublished":"2019-03-02","description":"Video Update, Drupal Backend and Commerce Development","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/video-update-drupal-backend-and-commerce-development/","section":"Blog","summary":"Video Update, Drupal Backend and Commerce Development.","tags":["Drupal","Integration","Commerce Shipping","Drupal Commmerce","Form API","Integration","Payment Gateway"],"title":"Video Update! Drupal Backend and Commerce Development","type":"posts"},{"content":"","date":"22 February 2019","datePublished":"2019-02-22","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/avalara/","section":"Tags","summary":"","title":"Avalara","type":"tags"},{"content":" 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 \u0026 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.\n","date":"22 February 2019","datePublished":"2019-02-22","description":"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.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/experience/drupal-7-experience/","section":"Experience","summary":"Drupal 7 custom module development, Commerce 1.x and Ubercart, multilingual builds, Avalara tax integration, security remediation, and hosting management.","tags":["Drupal 7","Drupal","Drupal Commerce","Ubercart","Multilingual","Avalara","Website Security","Pantheon","Acquia"],"title":"Drupal 7 Experience","type":"experience"},{"content":" 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.\n","date":"22 February 2019","datePublished":"2019-02-22","description":"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.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/experience/drupal-8-experience/","section":"Experience","summary":"Drupal 8 migrations from Drupal 7, custom module and REST API development, Commerce 2.x implementations, and hosting management.","tags":["Drupal 8","Drupal","Drupal Commerce","Drupal Migrations","REST API","Pantheon","Acquia"],"title":"Drupal 8 Experience","type":"experience"},{"content":" 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 ","date":"22 February 2019","datePublished":"2019-02-22","description":"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.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/experience/drupal-health-care-experience/","section":"Experience","summary":"Drupal work for healthcare: enrollment applications, clinic information platforms with SMS reminders, and accreditation platforms with application scoring and fee handling.","tags":["Drupal","Healthcare","Drupal Commerce","Webform","SMS Integration"],"title":"Drupal Healthcare Experience","type":"experience"},{"content":"I have worked on many higher education website projects.\nThey range from:\nBook 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 ","date":"22 February 2019","datePublished":"2019-02-22","description":"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.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/experience/drupal-higher-education---university-experience/","section":"Experience","summary":"Drupal work for universities: bookstore Commerce builds, news platforms, department multisites on Pantheon, migrations, and custom learning platforms with video and assessment.","tags":["Drupal","Higher Education","Drupal Commerce","Drupal Migrations","Pantheon","Multisite","Organic Groups"],"title":"Drupal: Higher Education - University Experience","type":"experience"},{"content":"","date":"22 February 2019","datePublished":"2019-02-22","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/healthcare/","section":"Tags","summary":"","title":"Healthcare","type":"tags"},{"content":"","date":"22 February 2019","datePublished":"2019-02-22","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/higher-education/","section":"Tags","summary":"","title":"Higher Education","type":"tags"},{"content":"","date":"22 February 2019","datePublished":"2019-02-22","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/multilingual/","section":"Tags","summary":"","title":"Multilingual","type":"tags"},{"content":"","date":"22 February 2019","datePublished":"2019-02-22","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/multisite/","section":"Tags","summary":"","title":"Multisite","type":"tags"},{"content":"","date":"22 February 2019","datePublished":"2019-02-22","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/organic-groups/","section":"Tags","summary":"","title":"Organic Groups","type":"tags"},{"content":"","date":"22 February 2019","datePublished":"2019-02-22","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/sms-integration/","section":"Tags","summary":"","title":"SMS Integration","type":"tags"},{"content":"","date":"22 February 2019","datePublished":"2019-02-22","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/ubercart/","section":"Tags","summary":"","title":"Ubercart","type":"tags"},{"content":"","date":"22 February 2019","datePublished":"2019-02-22","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/webform/","section":"Tags","summary":"","title":"Webform","type":"tags"},{"content":"","date":"2 February 2019","datePublished":"2019-02-02","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/aws/","section":"Tags","summary":"","title":"AWS","type":"tags"},{"content":"","date":"2 February 2019","datePublished":"2019-02-02","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/commerce-tax/","section":"Tags","summary":"","title":"Commerce Tax","type":"tags"},{"content":"","date":"2 February 2019","datePublished":"2019-02-02","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/devops/","section":"Tags","summary":"","title":"DevOps","type":"tags"},{"content":"","date":"2 February 2019","datePublished":"2019-02-02","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/digital-ocean/","section":"Tags","summary":"","title":"Digital Ocean","type":"tags"},{"content":" Commerce 1.x and 2.x Implementations # Drupal 8 Commerce 2.x # Custom Commerce Cart Workflows Drupal Commerce Taxes commmerce_tax - Custom Tax Resolvers 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 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 ","date":"2 February 2019","datePublished":"2019-02-02","description":"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.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/experience/drupal-commerce-experience/","section":"Experience","summary":"Drupal Commerce 1.x and 2.x implementations: custom cart and checkout workflows, tax resolvers, promotions, multi-currency, shipping and payment gateway integrations, and warehouse management.","tags":["Drupal Commerce","Drupal","Drupal 8","Drupal 7","E-commerce","Multi-currency","Payment Gateways","Commerce Shipping","Commerce Tax"],"title":"Drupal Commerce Experience","type":"experience"},{"content":"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.\nUpon 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.\nThe solution to this problem was to update the autocomplete attribute with a string other than ‘off.’\nCorrect way, but ignored by Google:\n\u003cinput type=\"text\" name=\"commerce_coupon\" autocomplete=\"off\"\u003e Updated way to work with the latest Google Chrome:\n\u003cinput type=\"text\" name=\"commerce_coupon\" autocomplete=\"new-string\"\u003e Original Post: https://www.linkedin.com/pulse/google-chrome-ignoring-autocomplete-mike-michalak/\n","date":"2 February 2019","datePublished":"2019-02-02","description":"Google Chrome Ignoring Autocomplete","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/google-chrome-ignoring-autocomplete/","section":"Blog","summary":"Issues with how Google Chrome is ignoring autocomplete.","tags":["Drupal Development","Google"],"title":"Google Chrome Ignoring Autocomplete","type":"posts"},{"content":" 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.\n","date":"2 February 2019","datePublished":"2019-02-02","description":"Hosting and DevOps experience across Pantheon, Acquia, AWS, Digital Ocean, Linode, Rackspace, and shared hosts, covering managed Drupal platforms and self-managed cloud infrastructure.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/experience/hosting-experience/","section":"Experience","summary":"Hosting platforms used regularly, from managed Drupal hosts like Pantheon and Acquia to cloud infrastructure on AWS, Digital Ocean, Linode, and Rackspace.","tags":["Hosting","DevOps","Pantheon","Acquia","AWS","Digital Ocean","Linode"],"title":"Hosting Experience","type":"experience"},{"content":"","date":"2 February 2019","datePublished":"2019-02-02","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/linode/","section":"Tags","summary":"","title":"Linode","type":"tags"},{"content":"","date":"2 February 2019","datePublished":"2019-02-02","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/multi-currency/","section":"Tags","summary":"","title":"Multi-Currency","type":"tags"},{"content":"","date":"2 February 2019","datePublished":"2019-02-02","externalUrl":null,"lastmod":"2026-08-19","permalink":"/tags/payment-gateways/","section":"Tags","summary":"","title":"Payment Gateways","type":"tags"},{"content":" Privacy Policy Effective date: January 19, 2019 Mindfulness and Meditation LLC (\"us\", \"we\", or \"our\") operates the https://michalak.world website (hereinafter referred to as the \"Service\"). This page informs you of our policies regarding the collection, use and disclosure of personal data when you use our Service and the choices you have associated with that data. We use your data to provide and improve the Service. By using the Service, you agree to the collection and use of information in accordance with this policy. Unless otherwise defined in this Privacy Policy, the terms used in this Privacy Policy have the same meanings as in our Terms and Conditions, accessible from https://michalak.world Definitions Service Service is the https://michalak.world website operated by Mindfulness and Meditation LLC Personal Data Personal Data means data about a living individual who can be identified from those data (or from those and other information either in our possession or likely to come into our possession). Usage Data Usage Data is data collected automatically either generated by the use of the Service or from the Service infrastructure itself (for example, the duration of a page visit). Cookies Cookies are small files stored on your device (computer or mobile device). Data Controller Data Controller means the natural or legal person who (either alone or jointly or in common with other persons) determines the purposes for which and the manner in which any personal information are, or are to be, processed. For the purpose of this Privacy Policy, we are a Data Controller of your Personal Data. Data Processors (or Service Providers) Data Processor (or Service Provider) means any natural or legal person who processes the data on behalf of the Data Controller. We may use the services of various Service Providers in order to process your data more effectively. Data Subject (or User) Data Subject is any living individual who is using our Service and is the subject of Personal Data. Information Collection and Use We collect several different types of information for various purposes to provide and improve our Service to you. Types of Data Collected Personal Data While using our Service, we may ask you to provide us with certain personally identifiable information that can be used to contact or identify you (\"Personal Data\"). Personally identifiable information may include, but is not limited to: Email address First name and last name Cookies and Usage Data We may use your Personal Data to contact you with newsletters, marketing or promotional materials and other information that may be of interest to you. You may opt out of receiving any, or all, of these communications from us by following the unsubscribe link or instructions provided in any email we send or by contacting us. Usage Data We may also collect information on how the Service is accessed and used (\"Usage Data\"). This Usage Data may include information such as your computer's Internet Protocol address (e.g. IP address), browser type, browser version, the pages of our Service that you visit, the time and date of your visit, the time spent on those pages, unique device identifiers and other diagnostic data. Location Data We may use and store information about your location if you give us permission to do so (\"Location Data\"). We use this data to provide features of our Service, to improve and customise our Service. You can enable or disable location services when you use our Service at any time by way of your device settings. Tracking \u0026 Cookies Data We use cookies and similar tracking technologies to track the activity on our Service and we hold certain information. Cookies are files with a small amount of data which may include an anonymous unique identifier. Cookies are sent to your browser from a website and stored on your device. Other tracking technologies are also used such as beacons, tags and scripts to collect and track information and to improve and analyse our Service. You can instruct your browser to refuse all cookies or to indicate when a cookie is being sent. However, if you do not accept cookies, you may not be able to use some portions of our Service. Examples of Cookies we use: Session Cookies. We use Session Cookies to operate our Service. Preference Cookies. We use Preference Cookies to remember your preferences and various settings. Security Cookies. We use Security Cookies for security purposes. Advertising Cookies. Advertising Cookies are used to serve you with advertisements that may be relevant to you and your interests. Use of Data Mindfulness and Meditation LLC uses the collected data for various purposes: To provide and maintain our Service To notify you about changes to our Service To allow you to participate in interactive features of our Service when you choose to do so To provide customer support To gather analysis or valuable information so that we can improve our Service To monitor the usage of our Service To detect, prevent and address technical issues To provide you with news, special offers and general information about other goods, services and events which we offer that are similar to those that you have already purchased or enquired about unless you have opted not to receive such information Legal Basis for Processing Personal Data under the General Data Protection Regulation (GDPR) If you are from the European Economic Area (EEA), Mindfulness and Meditation LLC legal basis for collecting and using the personal information described in this Privacy Policy depends on the Personal Data we collect and the specific context in which we collect it. Mindfulness and Meditation LLC may process your Personal Data because: We need to perform a contract with you You have given us permission to do so The processing is in our legitimate interests and it is not overridden by your rights To comply with the law Retention of Data Mindfulness and Meditation LLC will retain your Personal Data only for as long as is necessary for the purposes set out in this Privacy Policy. We will retain and use your Personal Data to the extent necessary to comply with our legal obligations (for example, if we are required to retain your data to comply with applicable laws), resolve disputes and enforce our legal agreements and policies. Mindfulness and Meditation LLC will also retain Usage Data for internal analysis purposes. Usage Data is generally retained for a shorter period of time, except when this data is used to strengthen the security or to improve the functionality of our Service, or we are legally obligated to retain this data for longer periods. Transfer of Data Your information, including Personal Data, may be transferred to — and maintained on — computers located outside of your state, province, country or other governmental jurisdiction where the data protection laws may differ from those of your jurisdiction. If you are located outside United States and choose to provide information to us, please note that we transfer the data, including Personal Data, to United States and process it there. Your consent to this Privacy Policy followed by your submission of such information represents your agreement to that transfer. Mindfulness and Meditation LLC will take all the steps reasonably necessary to ensure that your data is treated securely and in accordance with this Privacy Policy and no transfer of your Personal Data will take place to an organisation or a country unless there are adequate controls in place including the security of your data and other personal information. Disclosure of Data Business Transaction If Mindfulness and Meditation LLC is involved in a merger, acquisition or asset sale, your Personal Data may be transferred. We will provide notice before your Personal Data is transferred and becomes subject to a different Privacy Policy. Disclosure for Law Enforcement Under certain circumstances, Mindfulness and Meditation LLC may be required to disclose your Personal Data if required to do so by law or in response to valid requests by public authorities (e.g. a court or a government agency). Legal Requirements Mindfulness and Meditation LLC may disclose your Personal Data in the good faith belief that such action is necessary to: To comply with a legal obligation To protect and defend the rights or property of Mindfulness and Meditation LLC​​​​​​​ To prevent or investigate possible wrongdoing in connection with the Service To protect the personal safety of users of the Service or the public To protect against legal liability Security of Data The security of your data is important to us but remember that no method of transmission over the Internet or method of electronic storage is 100% secure. While we strive to use commercially acceptable means to protect your Personal Data, we cannot guarantee its absolute security. Our Policy on \"Do Not Track\" Signals under the California Online Protection Act (CalOPPA) We do not support Do Not Track (\"DNT\"). Do Not Track is a preference you can set in your web browser to inform websites that you do not want to be tracked. You can enable or disable Do Not Track by visiting the Preferences or Settings page of your web browser. Your Data Protection Rights under the General Data Protection Regulation (GDPR) If you are a resident of the European Economic Area (EEA), you have certain data protection rights. Mindfulness and Meditation LLC aims to take reasonable steps to allow you to correct, amend, delete or limit the use of your Personal Data. If you wish to be informed about what Personal Data we hold about you and if you want it to be removed from our systems, please contact us. In certain circumstances, you have the following data protection rights: The right to access, update or delete the information we have on you. Whenever made possible, you can access, update or request deletion of your Personal Data directly within your account settings section. If you are unable to perform these actions yourself, please contact us to assist you. The right of rectification. You have the right to have your information rectified if that information is inaccurate or incomplete. The right to object. You have the right to object to our processing of your Personal Data. The right of restriction. You have the right to request that we restrict the processing of your personal information. The right to data portability. You have the right to be provided with a copy of the information we have on you in a structured, machine-readable and commonly used format. The right to withdraw consent. You also have the right to withdraw your consent at any time where Mindfulness and Meditation LLC relied on your consent to process your personal information. Please note that we may ask you to verify your identity before responding to such requests. You have the right to complain to a Data Protection Authority about our collection and use of your Personal Data. For more information, please contact your local data protection authority in the European Economic Area (EEA). Service Providers We may employ third party companies and individuals to facilitate our Service (\"Service Providers\"), provide the Service on our behalf, perform Service-related services or assist us in analysing how our Service is used. These third parties have access to your Personal Data only to perform these tasks on our behalf and are obligated not to disclose or use it for any other purpose. Analytics We may use third-party Service Providers to monitor and analyse the use of our Service. Google Analytics Google Analytics is a web analytics service offered by Google that tracks and reports website traffic. Google uses the data collected to track and monitor the use of our Service. This data is shared with other Google services. Google may use the collected data to contextualise and personalise the ads of its own advertising network. You can opt-out of having made your activity on the Service available to Google Analytics by installing the Google Analytics opt-out browser add-on. The add-on prevents the Google Analytics JavaScript (ga.js, analytics.js and dc.js) from sharing information with Google Analytics about visits activity. For more information on the privacy practices of Google, please visit the Google Privacy \u0026 Terms web page: https://policies.google.com/privacy?hl=en Advertising We may use third-party Service Providers to show advertisements to you to help support and maintain our Service. Google AdSense \u0026 DoubleClick Cookie Google, as a third party vendor, uses cookies to serve ads on our Service. Google's use of the DoubleClick cookie enables it and its partners to serve ads to our users based on their visit to our Service or other websites on the Internet. You may opt out of the use of the DoubleClick Cookie for interest-based advertising by visiting the Google Ads Settings web page: http://www.google.com/ads/preferences/ Bing Ads Bing Ads is an advertising service provided by Microsoft Inc. You can opt-out from Bing Ads by following the instructions on Bing Ads Opt-out page: https://advertise.bingads.microsoft.com/en-us/resources/policies/personalized-ads For more information about Bing Ads, please visit their Privacy Policy: https://privacy.microsoft.com/en-us/PrivacyStatement Behavioral Remarketing Mindfulness and Meditation LLC uses remarketing services to advertise on third party websites to you after you visited our Service. We and our third-party vendors use cookies to inform, optimise and serve ads based on your past visits to our Service. Google Ads (AdWords) Google Ads (AdWords) remarketing service is provided by Google Inc. You can opt-out of Google Analytics for Display Advertising and customise the Google Display Network ads by visiting the Google Ads Settings page: http://www.google.com/settings/ads Google also recommends installing the Google Analytics Opt-out Browser Add-on - https://tools.google.com/dlpage/gaoptout - for your web browser. Google Analytics Opt-out Browser Add-on provides visitors with the ability to prevent their data from being collected and used by Google Analytics. For more information on the privacy practices of Google, please visit the Google Privacy \u0026 Terms web page: https://policies.google.com/privacy?hl=en Twitter Twitter remarketing service is provided by Twitter Inc. You can opt-out from Twitter's interest-based ads by following their instructions: https://support.twitter.com/articles/20170405 You can learn more about the privacy practices and policies of Twitter by visiting their Privacy Policy page: https://twitter.com/privacy Facebook Facebook remarketing service is provided by Facebook Inc. You can learn more about interest-based advertising from Facebook by visiting this page: https://www.facebook.com/help/164968693837950 To opt-out from Facebook's interest-based ads, follow these instructions from Facebook: https://www.facebook.com/help/568137493302217   Facebook adheres to the Self-Regulatory Principles for Online Behavioural Advertising established by the Digital Advertising Alliance. You can also opt-out from Facebook and other participating companies through the Digital Advertising Alliance in the USA http://www.aboutads.info/choices/, the Digital Advertising Alliance of Canada in Canada http://youradchoices.ca/ or the European Interactive Digital Advertising Alliance in Europe http://www.youronlinechoices.eu/, or opt-out using your mobile device settings. For more information on the privacy practices of Facebook, please visit Facebook's Data Policy: https://www.facebook.com/privacy/explanation Links to Other Sites Our Service may contain links to other sites that are not operated by us. If you click a third party link, you will be directed to that third party's site. We strongly advise you to review the Privacy Policy of every site you visit. We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services. Children's Privacy Our Service does not address anyone under the age of 18 (\"Children\"). We do not knowingly collect personally identifiable information from anyone under the age of 18. If you are a parent or guardian and you are aware that your Child has provided us with Personal Data, please contact us. If we become aware that we have collected Personal Data from children without verification of parental consent, we take steps to remove that information from our servers. Changes to This Privacy Policy We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on this page. We will let you know via email and/or a prominent notice on our Service, prior to the change becoming effective and update the \"effective date\" at the top of this Privacy Policy. You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page. Contact Us If you have any questions about this Privacy Policy, please contact us: By visiting this page on our website: https://michalak.world/contact ","date":"2 February 2019","datePublished":"2019-02-02","description":"Privacy Policy","externalUrl":null,"lastmod":"2026-08-19","permalink":"/privacy-policy/","section":"Michael Michalak","summary":"Privacy Policy","title":"Privacy Policy","type":"page"},{"content":" Website Terms of Use Version 1.0 The Michalak website located at https://michalak.world is a copyrighted work belonging to Mindfulness and Meditation LLC. Certain features of the Site may be subject to additional guidelines, terms, or rules, which will be posted on the Site in connection with such features. All such additional terms, guidelines, and rules are incorporated by reference into these Terms. These Terms of Use described the legally binding terms and conditions that oversee your use of the Site. BY LOGGING INTO THE SITE, YOU ARE BEING COMPLIANT THAT THESE TERMS and you represent that you have the authority and capacity to enter into these Terms. YOU SHOULD BE AT LEAST 18 YEARS OF AGE TO ACCESS THE SITE. IF YOU DISAGREE WITH ALL OF THE PROVISION OF THESE TERMS, DO NOT LOG INTO AND/OR USE THE SITE.   These terms require the use of arbitration Section 10.2 on an individual basis to resolve disputes and also limit the remedies available to you in the event of a dispute. These Terms of Use were created with the help of the Terms Of Use Generator. Access to the Site Subject to these Terms. Company grants you a non-transferable, non-exclusive, revocable, limited license to access the Site solely for your own personal, noncommercial use. Certain Restrictions. The rights approved to you in these Terms are subject to the following restrictions: (a) you shall not sell, rent, lease, transfer, assign, distribute, host, or otherwise commercially exploit the Site; (b) you shall not change, make derivative works of, disassemble, reverse compile or reverse engineer any part of the Site; (c) you shall not access the Site in order to build a similar or competitive website; and (d) except as expressly stated herein, no part of the Site may be copied, reproduced, distributed, republished, downloaded, displayed, posted or transmitted in any form or by any means unless otherwise indicated, any future release, update, or other addition to functionality of the Site shall be subject to these Terms.  All copyright and other proprietary notices on the Site must be retained on all copies thereof. Company reserves the right to change, suspend, or cease the Site with or without notice to you.  You approved that Company will not be held liable to you or any third-party for any change, interruption, or termination of the Site or any part. No Support or Maintenance. You agree that Company will have no obligation to provide you with any support in connection with the Site. Excluding any User Content that you may provide, you are aware that all the intellectual property rights, including copyrights, patents, trademarks, and trade secrets, in the Site and its content are owned by Company or Company’s suppliers. Note that these Terms and access to the Site do not give you any rights, title or interest in or to any intellectual property rights, except for the limited access rights expressed in Section 2.1. Company and its suppliers reserve all rights not granted in these Terms. Third-Party Links \u0026 Ads; Other Users Third-Party Links \u0026 Ads. The Site may contain links to third-party websites and services, and/or display advertisements for third-parties.  Such Third-Party Links \u0026 Ads are not under the control of Company, and Company is not responsible for any Third-Party Links \u0026 Ads.  Company provides access to these Third-Party Links \u0026 Ads only as a convenience to you, and does not review, approve, monitor, endorse, warrant, or make any representations with respect to Third-Party Links \u0026 Ads.  You use all Third-Party Links \u0026 Ads at your own risk, and should apply a suitable level of caution and discretion in doing so. When you click on any of the Third-Party Links \u0026 Ads, the applicable third party’s terms and policies apply, including the third party’s privacy and data gathering practices. Other Users. Each Site user is solely responsible for any and all of its own User Content.  Because we do not control User Content, you acknowledge and agree that we are not responsible for any User Content, whether provided by you or by others.  You agree that Company will not be responsible for any loss or damage incurred as the result of any such interactions.  If there is a dispute between you and any Site user, we are under no obligation to become involved. You hereby release and forever discharge the Company and our officers, employees, agents, successors, and assigns from, and hereby waive and relinquish, each and every past, present and future dispute, claim, controversy, demand, right, obligation, liability, action and cause of action of every kind and nature, that has arisen or arises directly or indirectly out of, or that relates directly or indirectly to, the Site. If you are a California resident, you hereby waive California civil code section 1542 in connection with the foregoing, which states: \"a general release does not extend to claims which the creditor does not know or suspect to exist in his or her favor at the time of executing the release, which if known by him or her must have materially affected his or her settlement with the debtor.\" Cookies and Web Beacons. Like any other website, Michalak.world uses ‘cookies’. These cookies are used to store information including visitors’ preferences, and the pages on the website that the visitor accessed or visited. The information is used to optimize the users’ experience by customizing our web page content based on visitors’ browser type and/or other information. Google DoubleClick DART Cookie. Google is one of a third-party vendor on our site. It also uses cookies, known as DART cookies, to serve ads to our site visitors based upon their visit to www.website.com and other sites on the internet. However, visitors may choose to decline the use of DART cookies by visiting the Google ad and content network Privacy Policy at the following URL – https://policies.google.com/technologies/ads Our Advertising Partners. Some of advertisers on our site may use cookies and web beacons. Our advertising partners are listed below. Each of our advertising partners has their own Privacy Policy for their policies on user data. For easier access, we hyperlinked to their Privacy Policies below. Google https://policies.google.com/technologies/ads Disclaimers The site is provided on an \"as-is\" and \"as available\" basis, and company and our suppliers expressly disclaim any and all warranties and conditions of any kind, whether express, implied, or statutory, including all warranties or conditions of merchantability, fitness for a particular purpose, title, quiet enjoyment, accuracy, or non-infringement.  We and our suppliers make not guarantee that the site will meet your requirements, will be available on an uninterrupted, timely, secure, or error-free basis, or will be accurate, reliable, free of viruses or other harmful code, complete, legal, or safe.  If applicable law requires any warranties with respect to the site, all such warranties are limited in duration to ninety (90) days from the date of first use. Some jurisdictions do not allow the exclusion of implied warranties, so the above exclusion may not apply to you.  Some jurisdictions do not allow limitations on how long an implied warranty lasts, so the above limitation may not apply to you. Limitation on Liability To the maximum extent permitted by law, in no event shall company or our suppliers be liable to you or any third-party for any lost profits, lost data, costs of procurement of substitute products, or any indirect, consequential, exemplary, incidental, special or punitive damages arising from or relating to these terms or your use of, or incapability to use the site even if company has been advised of the possibility of such damages.  Access to and use of the site is at your own discretion and risk, and you will be solely responsible for any damage to your device or computer system, or loss of data resulting therefrom. To the maximum extent permitted by law, notwithstanding anything to the contrary contained herein, our liability to you for any damages arising from or related to this agreement, will at all times be limited to a maximum of fifty U.S. dollars (u.s. $50). The existence of more than one claim will not enlarge this limit.  You agree that our suppliers will have no liability of any kind arising from or relating to this agreement. Some jurisdictions do not allow the limitation or exclusion of liability for incidental or consequential damages, so the above limitation or exclusion may not apply to you. Term and Termination. Subject to this Section, these Terms will remain in full force and effect while you use the Site.  We may suspend or terminate your rights to use the Site at any time for any reason at our sole discretion, including for any use of the Site in violation of these Terms.  Upon termination of your rights under these Terms, your Account and right to access and use the Site will terminate immediately.  You understand that any termination of your Account may involve deletion of your User Content associated with your Account from our live databases.  Company will not have any liability whatsoever to you for any termination of your rights under these Terms.  Even after your rights under these Terms are terminated, the following provisions of these Terms will remain in effect: Sections 2 through 2.5, Section 3 and Sections 4 through 10. Copyright Policy. Company respects the intellectual property of others and asks that users of our Site do the same.  In connection with our Site, we have adopted and implemented a policy respecting copyright law that provides for the removal of any infringing materials and for the termination of users of our online Site who are repeated infringers of intellectual property rights, including copyrights.  If you believe that one of our users is, through the use of our Site, unlawfully infringing the copyright(s) in a work, and wish to have the allegedly infringing material removed, the following information in the form of a written notification (pursuant to 17 U.S.C. § 512(c)) must be provided to our designated Copyright Agent: your physical or electronic signature; identification of the copyrighted work(s) that you claim to have been infringed; identification of the material on our services that you claim is infringing and that you request us to remove; sufficient information to permit us to locate such material; your address, telephone number, and e-mail address; a statement that you have a good faith belief that use of the objectionable material is not authorized by the copyright owner, its agent, or under the law; and a statement that the information in the notification is accurate, and under penalty of perjury, that you are either the owner of the copyright that has allegedly been infringed or that you are authorized to act on behalf of the copyright owner. Please note that, pursuant to 17 U.S.C. § 512(f), any misrepresentation of material fact in a written notification automatically subjects the complaining party to liability for any damages, costs and attorney’s fees incurred by us in connection with the written notification and allegation of copyright infringement. General These Terms are subject to occasional revision, and if we make any substantial changes, we may notify you by sending you an e-mail to the last e-mail address you provided to us and/or by prominently posting notice of the changes on our Site.  You are responsible for providing us with your most current e-mail address.  In the event that the last e-mail address that you have provided us is not valid our dispatch of the e-mail containing such notice will nonetheless constitute effective notice of the changes described in the notice.  Any changes to these Terms will be effective upon the earliest of thirty (30) calendar days following our dispatch of an e-mail notice to you or thirty (30) calendar days following our posting of notice of the changes on our Site.  These changes will be effective immediately for new users of our Site.  Continued use of our Site following notice of such changes shall indicate your acknowledgement of such changes and agreement to be bound by the terms and conditions of such changes. Dispute Resolution. Please read this Arbitration Agreement carefully. It is part of your contract with Company and affects your rights.  It contains procedures for MANDATORY BINDING ARBITRATION AND A CLASS ACTION WAIVER. Applicability of Arbitration Agreement. All claims and disputes in connection with the Terms or the use of any product or service provided by the Company that cannot be resolved informally or in small claims court shall be resolved by binding arbitration on an individual basis under the terms of this Arbitration Agreement.  Unless otherwise agreed to, all arbitration proceedings shall be held in English.  This Arbitration Agreement applies to you and the Company, and to any subsidiaries, affiliates, agents, employees, predecessors in interest, successors, and assigns, as well as all authorized or unauthorized users or beneficiaries of services or goods provided under the Terms. Notice Requirement and Informal Dispute Resolution. Before either party may seek arbitration, the party must first send to the other party a written Notice of Dispute describing the nature and basis of the claim or dispute, and the requested relief.  A Notice to the Company should be sent to: 5 Washington St. Valparaiso, IN 46383. After the Notice is received, you and the Company may attempt to resolve the claim or dispute informally.  If you and the Company do not resolve the claim or dispute within thirty (30) days after the Notice is received, either party may begin an arbitration proceeding.  The amount of any settlement offer made by any party may not be disclosed to the arbitrator until after the arbitrator has determined the amount of the award to which either party is entitled. Arbitration Rules. Arbitration shall be initiated through the American Arbitration Association, an established alternative dispute resolution provider that offers arbitration as set forth in this section.  If AAA is not available to arbitrate, the parties shall agree to select an alternative ADR Provider.  The rules of the ADR Provider shall govern all aspects of the arbitration except to the extent such rules are in conflict with the Terms.  The AAA Consumer Arbitration Rules governing the arbitration are available online at adr.org or by calling the AAA at 1-800-778-7879.  The arbitration shall be conducted by a single, neutral arbitrator.  Any claims or disputes where the total amount of the award sought is less than Ten Thousand U.S. Dollars (US $10,000.00) may be resolved through binding non-appearance-based arbitration, at the option of the party seeking relief.  For claims or disputes where the total amount of the award sought is Ten Thousand U.S. Dollars (US $10,000.00) or more, the right to a hearing will be determined by the Arbitration Rules.  Any hearing will be held in a location within 100 miles of your residence, unless you reside outside of the United States, and unless the parties agree otherwise.  If you reside outside of the U.S., the arbitrator shall give the parties reasonable notice of the date, time and place of any oral hearings. Any judgment on the award rendered by the arbitrator may be entered in any court of competent jurisdiction.  If the arbitrator grants you an award that is greater than the last settlement offer that the Company made to you prior to the initiation of arbitration, the Company will pay you the greater of the award or $2,500.00.  Each party shall bear its own costs and disbursements arising out of the arbitration and shall pay an equal share of the fees and costs of the ADR Provider. Additional Rules for Non-Appearance Based Arbitration. If non-appearance based arbitration is elected, the arbitration shall be conducted by telephone, online and/or based solely on written submissions; the specific manner shall be chosen by the party initiating the arbitration.  The arbitration shall not involve any personal appearance by the parties or witnesses unless otherwise agreed by the parties. Time Limits. If you or the Company pursues arbitration, the arbitration action must be initiated and/or demanded within the statute of limitations and within any deadline imposed under the AAA Rules for the pertinent claim. Authority of Arbitrator. If arbitration is initiated, the arbitrator will decide the rights and liabilities of you and the Company, and the dispute will not be consolidated with any other matters or joined with any other cases or parties.  The arbitrator shall have the authority to grant motions dispositive of all or part of any claim.  The arbitrator shall have the authority to award monetary damages, and to grant any non-monetary remedy or relief available to an individual under applicable law, the AAA Rules, and the Terms.  The arbitrator shall issue a written award and statement of decision describing the essential findings and conclusions on which the award is based.  The arbitrator has the same authority to award relief on an individual basis that a judge in a court of law would have.  The award of the arbitrator is final and binding upon you and the Company. Waiver of Jury Trial. THE PARTIES HEREBY WAIVE THEIR CONSTITUTIONAL AND STATUTORY RIGHTS TO GO TO COURT AND HAVE A TRIAL IN FRONT OF A JUDGE OR A JURY, instead electing that all claims and disputes shall be resolved by arbitration under this Arbitration Agreement.  Arbitration procedures are typically more limited, more efficient and less expensive than rules applicable in a court and are subject to very limited review by a court.  In the event any litigation should arise between you and the Company in any state or federal court in a suit to vacate or enforce an arbitration award or otherwise, YOU AND THE COMPANY WAIVE ALL RIGHTS TO A JURY TRIAL, instead electing that the dispute be resolved by a judge. Waiver of Class or Consolidated Actions. All claims and disputes within the scope of this arbitration agreement must be arbitrated or litigated on an individual basis and not on a class basis, and claims of more than one customer or user cannot be arbitrated or litigated jointly or consolidated with those of any other customer or user. Confidentiality. All aspects of the arbitration proceeding shall be strictly confidential.  The parties agree to maintain confidentiality unless otherwise required by law.  This paragraph shall not prevent a party from submitting to a court of law any information necessary to enforce this Agreement, to enforce an arbitration award, or to seek injunctive or equitable relief. Severability. If any part or parts of this Arbitration Agreement are found under the law to be invalid or unenforceable by a court of competent jurisdiction, then such specific part or parts shall be of no force and effect and shall be severed and the remainder of the Agreement shall continue in full force and effect. Right to Waive. Any or all of the rights and limitations set forth in this Arbitration Agreement may be waived by the party against whom the claim is asserted.  Such waiver shall not waive or affect any other portion of this Arbitration Agreement. Survival of Agreement. This Arbitration Agreement will survive the termination of your relationship with Company. Small Claims Court. Nonetheless the foregoing, either you or the Company may bring an individual action in small claims court. Emergency Equitable Relief. Anyhow the foregoing, either party may seek emergency equitable relief before a state or federal court in order to maintain the status quo pending arbitration.  A request for interim measures shall not be deemed a waiver of any other rights or obligations under this Arbitration Agreement. Claims Not Subject to Arbitration. Notwithstanding the foregoing, claims of defamation, violation of the Computer Fraud and Abuse Act, and infringement or misappropriation of the other party’s patent, copyright, trademark or trade secrets shall not be subject to this Arbitration Agreement. In any circumstances where the foregoing Arbitration Agreement permits the parties to litigate in court, the parties hereby agree to submit to the personal jurisdiction of the courts located within Netherlands County, California, for such purposes. The Site may be subject to U.S. export control laws and may be subject to export or import regulations in other countries. You agree not to export, re-export, or transfer, directly or indirectly, any U.S. technical data acquired from Company, or any products utilizing such data, in violation of the United States export laws or regulations. Company is located at the address in Section 10.8. If you are a California resident, you may report complaints to the Complaint Assistance Unit of the Division of Consumer Product of the California Department of Consumer Affairs by contacting them in writing at 400 R Street, Sacramento, CA 95814, or by telephone at (800) 952-5210. Electronic Communications. The communications between you and Company use electronic means, whether you use the Site or send us emails, or whether Company posts notices on the Site or communicates with you via email. For contractual purposes, you (a) consent to receive communications from Company in an electronic form; and (b) agree that all terms and conditions, agreements, notices, disclosures, and other communications that Company provides to you electronically satisfy any legal obligation that such communications would satisfy if it were be in a hard copy writing. Entire Terms. These Terms constitute the entire agreement between you and us regarding the use of the Site. Our failure to exercise or enforce any right or provision of these Terms shall not operate as a waiver of such right or provision. The section titles in these Terms are for convenience only and have no legal or contractual effect. The word \"including\" means \"including without limitation\". If any provision of these Terms is held to be invalid or unenforceable, the other provisions of these Terms will be unimpaired and the invalid or unenforceable provision will be deemed modified so that it is valid and enforceable to the maximum extent permitted by law.  Your relationship to Company is that of an independent contractor, and neither party is an agent or partner of the other.  These Terms, and your rights and obligations herein, may not be assigned, subcontracted, delegated, or otherwise transferred by you without Company’s prior written consent, and any attempted assignment, subcontract, delegation, or transfer in violation of the foregoing will be null and void.  Company may freely assign these Terms.  The terms and conditions set forth in these Terms shall be binding upon assignees. Your Privacy. Please read our Privacy Policy. Copyright/Trademark Information. Copyright ©. All rights reserved.  All trademarks, logos and service marks displayed on the Site are our property or the property of other third-parties. You are not permitted to use these Marks without our prior written consent or the consent of such third party which may own the Marks. Contact Information Address: 5 Washington St. Valparaiso, IN 46383 ","date":"2 February 2019","datePublished":"2019-02-02","externalUrl":null,"lastmod":"2026-08-19","permalink":"/terms-of-use/","section":"Michael Michalak","summary":"Terms of Use","title":"Terms of Use","type":"page"},{"content":"In this blog entry I will be going to outline why I think it is the perfect tool with which to design your site.\nFlexibility # 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.\nWebsite 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.\nExpanding Needs \u0026 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!”.\nThe 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.\nThe 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.\n","date":"1 February 2019","datePublished":"2019-02-01","description":"Drupal Development and Management","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/3-reasons-drupal-development-and-management-is-valuable/","section":"Blog","summary":"Outlining why Drupal is a good platform to use for websites.","tags":["Drupal","Drupal Development"],"title":"3 Reasons Drupal Development \u0026 Management Is Valuable","type":"posts"},{"content":"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.\nFrom 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.\nDrupal Development # My work focuses on complex Drupal backend architecture and custom Drupal Commerce solutions. I specialize in:\nBuilding 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.\nFractional 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:\nTechnical 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.\nAI Agent Development \u0026 LLM Consulting # In addition to Drupal, I’m a Freelance AI Agent Developer building advanced LLM powered systems. I’ve worked with:\nLangChain 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.\nCurrent 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:\nHelping 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.\nFrequently asked questions Who is Michael Michalak? Michael Michalak is a backend developer, Fractional CTO, and AI agent consultant with more than 13 years of experience. He holds a Bachelor of Science in Computer Engineering from Purdue University and has specialized in Drupal since 2011, building platforms for e-commerce, higher education, healthcare, nonprofits, and global organizations. What services does Michael Michalak offer? Three main areas. Drupal backend development covering custom modules, entity architecture, Drupal Commerce, migrations, performance tuning, and security remediation. Fractional CTO services covering technology strategy, architecture planning, vendor evaluation, and roadmap work. AI agent development using LangChain, Langfuse, and CrewAI, or custom agents written from scratch. What technologies does he specialize in? Drupal 7 through 10 and Drupal Commerce are the core, along with PHP and the LAMP stack, REST API development, and hosting platforms including Pantheon and Acquia. On the AI side, Python with OpenAI, LangChain, Langfuse, CrewAI, and vector databases such as ChromaDB. He also works with Shopify and Hugo. Is he available for freelance or contract work? Yes. He works with startups, small and medium businesses, and nonprofits on a freelance and contract basis, remotely and worldwide. Engagements range from hands-on development to ongoing Fractional CTO retainers and interim technical leadership during transitions. ","date":"1 February 2019","datePublished":"2019-02-01","description":"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.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/about/","section":"Michael Michalak","summary":"Backend developer, Fractional CTO, and AI consultant specializing in Drupal architecture, Drupal Commerce, and production AI agents.","title":"About","type":"page"},{"content":"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.\nYour email: Your message: Send Frequently asked questions What kinds of projects should I contact you about? Drupal backend and Drupal Commerce development, including custom modules, migrations between Drupal versions, performance tuning, and security remediation. Fractional CTO engagements covering technology strategy, architecture review, and interim technical leadership. AI agent development with LangChain, Langfuse, and CrewAI or written from scratch. Hosting and DevOps work on platforms such as Pantheon and Acquia. Do you work with clients remotely? Yes. Work is remote and available worldwide. Past engagements have spanned e-commerce platforms, universities, healthcare organizations, nonprofits, and global organizations, including multilingual, multicurrency, and GDPR-sensitive projects. How can I reach you besides this form? LinkedIn at linkedin.com/in/michaelmichalak is the fastest alternative, and code is on GitHub at github.com/mikemichalak. The form on this page reaches me directly by email. ","date":"1 February 2019","datePublished":"2019-02-01","description":"Contact Michael Michalak for Drupal backend development, Drupal Commerce, Fractional CTO, or AI agent consulting work.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/contact/","section":"Michael Michalak","summary":"Get in touch about Drupal development, Drupal Commerce, Fractional CTO engagements, or AI agent projects.","title":"Contact","type":"page"},{"content":"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!\nYour custom module will need to have a couple of additional files:\nmymodule.commerce_log_categories.yml mymodule.commerce_log_templates.yml mymodule.commerce_log_categories.yml # Defines our log categories. e.g.\nexample_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.\nexample_status_update category: example_categories label: 'Status Update' template: '\u003cp\u003eStatus has been updated.\u003c/p\u003e' example_second_status_update category: example_categories label: 'Second Status Update' template: '\u003cp\u003eStatus two has been updated.\u003c/p\u003e' update_example_status category: example_categories_two label: 'Order Status Update' template: '\u003cp\u003e Order Update Status\u003c/p\u003e' update_example_status_two category: example_categories_two label: 'Order Status Update Two' template: '\u003cp\u003e Order Update Status Two\u003c/p\u003e' 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:\n$log_storage = \\Drupal::entityTypeManager()-\u003egetStorage('commerce_log'); $log = $log_storage-\u003egenerate($order, 'update_example_status_two'); //use one of our predefined templates $log-\u003esave(); And that’s it— now we can add messages to our orders in Drupal 8 Commerce 2.x. Go message it up!\nOriginal Post: https://trail9.com/?q=news/drupal-8-commerce-2x-order-messages\n","date":"1 February 2019","datePublished":"2019-02-01","description":"A comparison between Drupal and Wordpress","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-8-commerce-2x-order-messages/","section":"Blog","summary":"This post compares Drupal and WordPress, highlighting licensing, security, and flexibility as key reasons why Drupal is a better choice for website development.","tags":["Drupal","Drupal Commerce","Drupal Development"],"title":"Drupal 8 Commerce 2.x Order Messages","type":"posts"},{"content":" Why Choose Drupal Over WordPress? # There are three main reasons why I prefer using Drupal for website development, and they are:\nLicensing 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.\nAnother 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.\nDrupal 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.\nAnd, 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.\nSecurity # 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.\nAlso, 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.\nDrupal 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.\nFlexibility # 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.\nWith a WordPress website, the same functionalities may be difficult to use, or even impossible, due to the installed plug-ins and what they require.\nOriginal Post: https://trail9.com/?q=news/ask-mike-why-do-we-choose-drupal-over-wordpress\n","date":"1 February 2019","datePublished":"2019-02-01","description":"A comparison between Drupal and Wordpress","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/drupal-vs-wordpress/","section":"Blog","summary":"This post compares Drupal and WordPress, highlighting licensing, security, and flexibility as key reasons why Drupal is a better choice for website development.","tags":["Drupal","Wordpress"],"title":"Drupal Vs WordPress","type":"posts"},{"content":"","externalUrl":null,"permalink":"/authors/","section":"Authors","summary":"","title":"Authors","type":"authors"},{"content":"Technical writing from 13+ years of backend development and technology leadership. Most articles here fall into four areas:\nDrupal backend development — custom modules, entity architecture, Form API, migrations, and the Drupal 7 through 10 upgrade path. Drupal Commerce — tax resolvers, promotions, multi-currency, checkout flows, and REST API performance. AI and development practice — AI agent tooling, reviewing AI-generated code, and where vibe coding helps or hurts. Technology leadership — fractional CTO work, hiring tradeoffs between freelancers and agencies, and platform selection. Posts are written from production work on real client platforms, so most include the specific configuration or code that solved the problem.\n","description":"Technical articles on Drupal backend development, Drupal Commerce, AI agents, and technology leadership by Michael Michalak.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/posts/","section":"Blog","summary":"Technical writing on Drupal backend development, Drupal Commerce, AI agents, and fractional CTO work.","title":"Blog","type":"posts"},{"content":"","externalUrl":null,"permalink":"/categories/","section":"Categories","summary":"","title":"Categories","type":"categories"},{"content":"Detailed breakdowns of where I do my best work, organized by platform and by service. Each page covers the specific problems I solve, the technologies involved, and the kinds of engagements that fit.\nBroadly, engagements fall into three shapes:\nDrupal backend and commerce work — custom module development, entity and service architecture, Drupal Commerce implementations, version migrations, performance tuning, and security remediation across Drupal 7 through 10. Fractional CTO leadership — technology strategy, architecture planning, vendor evaluation, team mentorship, and roadmap work for startups and SMEs that need senior technical judgment without a full-time hire. AI agent development — designing and building production AI agents with LangChain, Langfuse, and CrewAI, or from scratch when off-the-shelf frameworks do not fit. Work is remote and available worldwide, spanning e-commerce, higher education, healthcare, nonprofits, and global organizations.\n","description":"Services and areas of expertise: Drupal backend development, Drupal Commerce, fractional CTO leadership, AI agent development, hosting and DevOps.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/experience/","section":"Experience","summary":"Services and areas of expertise, from Drupal backend architecture to fractional CTO leadership and AI agent development.","title":"Experience","type":"experience"},{"content":"I build and stabilize the backends that businesses depend on. For 13+ years that has meant Drupal architecture and Drupal Commerce for e-commerce platforms, universities, healthcare organizations, and nonprofits — and more recently, production AI agents built with LangChain, Langfuse, and CrewAI.\nI work with startups and small-to-medium businesses in two ways: hands-on as a backend developer on complex Drupal and commerce builds, and as a Fractional CTO providing technology strategy, architecture planning, and technical leadership without the cost of a full-time executive.\nSee what I work on · Read the blog · Get in touch\n","description":"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.","externalUrl":null,"lastmod":"2026-08-19","permalink":"/","section":"Michael Michalak","summary":"I build and stabilize the backends that businesses depend on. For 13+ years that has meant Drupal architecture and Drupal Commerce for e-commerce platforms, universities, healthcare organizations, and nonprofits — and more recently, production AI agents built with LangChain, Langfuse, and CrewAI.\nI work with startups and small-to-medium businesses in two ways: hands-on as a backend developer on complex Drupal and commerce builds, and as a Fractional CTO providing technology strategy, architecture planning, and technical leadership without the cost of a full-time executive.","title":"Michael Michalak","type":"page"},{"content":"","externalUrl":null,"permalink":"/series/","section":"Series","summary":"","title":"Series","type":"series"}]