Stack Innovations / Services / CMS / Drupal

Drupal, run like infrastructure.

Most Drupal projects ship with stock contrib and a half-configured admin. We treat Drupal like the infrastructure it is — Composer-managed dependencies, config/sync between environments, Views authored in YAML, Twig themed top-to-bottom, Drush automated, JSON:API where it makes sense. Audited and accessible by default.

01 — In numbers

Eight years shipping
config at scale.

Each stat is a Drupal field config — the YAML that lands in config/sync on deploy. Hover any to see the field definition. Counters scrub with scroll.

field.field.node.article.shipped
0+ Enterprise sites shipped
type: integer
settings:
  min: 28
  unsigned: true
required: true
field.field.node.article.entities
0+ Entities modeled
type: integer
settings:
  min: 4200
required: true
field.field.node.article.modules
0+ Custom modules & patches
type: integer
settings:
  min: 142
  scope: custom
field.field.node.article.default_config
0 Default-config Drupal builds
type: integer
settings:
  max: 0
default_value: 0
02 — What we build

A full-stack Drupal practice.

Click the toolbar on the left — the active capability opens in the admin, rendered like a real Drupal admin page in the Olivero/Claro chrome. Each pane is a working configuration we've shipped.

Stack · Drupal 11.x /admin/structure/types/manage/article prod · cached D S
node bundle article · basic page · landing · 14 more DEPLOYED

Content modeling, at entity depth.

id: node.type.article updated: 09:42 today by: stack-eng
summary · description

We model in entities — nodes, taxonomy, paragraphs, custom — with Field UI in development and Configuration Management to ship. View modes per surface (teaser, card, RSS, JSON:API), display modes per role, and Layout Builder where editors need it.

items · capability list
  • Custom entity types · EntityBase classes
  • Bundles, fields, view modes, display modes
  • Paragraphs · composable content blocks
  • Layout Builder · per-bundle & per-node
  • Computed fields · ComputedItemList
views.view.*.yml articles · events · team · 41 more DEPLOYED

Views, everything you list comes from one.

id: views.view.articles updated: yesterday by: stack-eng
summary

Views isn't a "module," it's the query language for your editorial surface. We model contextual filters, exposed forms, relationships, aggregation, and custom display plugins so a marketer can rebuild a listing without a deploy.

items
  • Contextual filters · route-aware
  • Exposed filters · AJAX · cached
  • Relationships · entity reference traversal
  • Custom display plugins · PHP
  • REST Export displays · JSON:API parity
config/sync 1,247 active config items IN SYNC

Config management, environments stay honest.

id: system.site · +1,246 updated: 2d ago by: stack-eng
summary

Drupal's Configuration Management is the killer enterprise feature. Every entity, view, role, field, theme setting lives in YAML in config/sync, version-controlled, code-reviewed, and synced via drush cim. Per-environment splits with config_split for what should differ.

items
  • YAML config in Git · reviewed
  • config_split · per-env overrides
  • drush deploy · one command
  • Audit trail · config_log
Migrate API CSV · SQL · XML · JSON · D7 REPLAYABLE

Migrate API, from anywhere, idempotent.

id: migrate_plus.migration.* updated: 4d ago by: stack-eng
summary

From WordPress, Sitecore, AEM, Drupal 7, or that homegrown CMS no one wants to touch. We model source plugins, process pipelines, and destination plugins. Run, rollback, re-run — idempotent until cutover. Redirects mapped, SEO continuity preserved.

items
  • Source plugins · CSV / SQL / JSON:API
  • Process pipelines · transforms, lookups
  • Destination plugins · entity, paragraph, file
  • migrate:rollback · safe replay
  • 301s, sitemaps, hreflang continuity
locale.translation.* en · fr · de · es · ar · ja PUBLISHED

Multilingual, at the core, not bolted on.

id: language.entity.* updated: 1w ago by: stack-eng
summary

Drupal is the gold standard for multilingual CMS. We tune the four core modules (Language, Content Translation, Configuration Translation, Interface Translation), set fallback chains, hreflang, RTL theming, and per-locale URL strategies that pass SEO audits.

items
  • Content translation · per-field
  • Interface translation · .po sync
  • Configuration translation
  • RTL theming · Olivero overrides
  • hreflang · per-route
performance · security BigPipe · DPC · PHPStan · SAS A-GRADE

Performance & security, auditable, not aspirational.

id: system.performance updated: 2w ago by: stack-eng
summary

BigPipe streaming, Dynamic Page Cache tuned, CDN purges via tags, PHPStan in CI, security advisories monitored, regular pen-tests, full audit logs. Hosted on Pantheon / Acquia / Platform.sh / your bare metal — we don't care; we configure for the runtime.

items
  • BigPipe + DPC tuned per-route
  • Cache tags · CDN purge integration
  • PHPStan + Drupal Rector in CI
  • Security advisories · auto-PRs
  • WCAG-AA · verified per-release
03 — Views → rendered output

Compose a View.
The page renders.

This is the Views UI — Drupal's signature feature. Drag fields, filters, sort & display options into the view config. The right pane re-renders the listing in real time, exactly as it would appear on the site. anime.js draggable, popmotion inertia, mojs burst on save.

views.view.articles.yml page.tpl.twig
view articles id: views.view.articles
FIELDS drop to add
  • Aa Title node.title
  • Author node.uid
  • Created date node.created
  • Status node.status
FILTERS drop to add
    SORT drop to add
      DISPLAY drop to add
      • Table /articles
      stackinnovations.com/articles live render
      6 rows CACHE HIT · 12ms
      04 — Why us

      Stack Innovations vs the typical Drupal build.

      Same platform, two views.view.articles.yml files. The diff tells the story.

      typical/views.view.articles.yml — default Views UI clicks
      langcode: en
      status: true
      id: articles
      label: 'Articles'
      module: views
      description: ''
      tag: ''
      base_table: node_field_data
      display:
        default:
          display_options:
            pager: { type: full }
      
      # no contextual filters
      # no exposed filters
      # no relationships
      # no cache tags
      # shipped to prod — everywhere.
      
      stack/views.view.articles.yml — Stack Innovations
      langcode: en
      status: true
      id: articles
      label: 'Articles'
      display:
        default:
          display_options:
            relationships:
              author: { entity: user, required: true }
            arguments:
              tag: { type: taxonomy_term }
            filters:
              status: { value: 1, exposed: false }
              type:   { value: [article] }
            cache:
              type: tag
              max_age: 3600
            access: { type: perm, perm: 'access content' }
        rest_export:
          display_options:
            style: { type: serializer, formats: [json_api] }
            path: api/articles
      
      typical · default View, no filters, no caching Stack · relationships, args, cache tags, REST display
      05 — Configuration management

      Three environments,
      one source of truth.

      Drupal's config/sync directory is the canonical state of every entity, view, role, and theme setting. We sync it between dev, staging, and prod via drush cim, with config_split for what should differ. Click an environment tab to see the active config diff.

      /admin/config/development/configuration/sync $ drush config:status
      06 — How it ships

      Six weeks,
      config first.

      1. w 01

        Discovery + audit

        Stakeholder interviews, content audit, performance baseline, accessibility audit, content modeling sessions.

      2. w 02

        Composer scaffold

        Composer-managed Drupal 11, environments configured (dev / staging / prod), CI pipeline, lando/ddev local.

      3. w 02–04

        Modeling + Views + Twig

        Entities, bundles, fields, view modes. Views authored, Olivero subtheme, Twig overrides, Layout Builder where editors need it.

      4. w 04

        Migrate API + SEO

        Source plugins, transforms, idempotent rollback. Sitemaps, redirects, hreflang, schema markup, Drupal SEO Checklist.

      5. w 06

        Editor onboarding + launch

        Loom walkthroughs, role setup, content moderation states, dry-run publishes. drush deploy, DNS cutover.

      6. Care plan

        Security advisories, monthly minor upgrades, Drupal Rector for major bumps, perf monitoring, quarterly review.

      Booking Q3 2026 · Avg engagement: 6 weeks · Reply within 24h