---
title: Products and Services
products:
  -
    title: Development team coaching
    description: |
      Do you want to upskill your in-house team or have someone provide oversight and guidance as they deliver a project? Does your company want to learn to contribute to open-source software? Get unlimited 1-on-1 private Slack access to me and regular check-in calls to ensure things are on track.
    perMonth: true
    isLimited: true
    price: 10000
    remainingPlaces: 2
    link:
      text: Apply now
      url: /team-coaching
  -
    title: Drupal development subscription
    description: |
      In less time than it takes to post on a job board, and for a fraction of the cost, get unlimited access to a certified Drupal development expert, core contributor and multiple-time DrupalCon speaker for a fixed monthly fee. No surprises. Cancel anytime.
    perMonth: true
    price: 5000
    isFrom: true
    link:
      text: Register now
      url: /subscription
  -
    title: Drupal upgrade roadmap
    description: |
      Are you stuck on an already or soon-to-be unsupported version of Drupal? Get a personalised roadmap of your Drupal website, including details and actionable steps to upgrade it.
    price: 5000
    link:
      text: Book your roadmap now
      url: /drupal-upgrade
  -
    title: Diagnosis
    description: |
      An in-depth investigation into a single issue where I'll provide a report with my findings and advice on the next steps. Once you've purchased, you can book a Zoom call with me to discuss what you want me to investigate.
    price: 2500
    link:
      text: Book now
      url: https://buy.stripe.com/00gbJs84G2jg8Vy9AJ
  -
    title: Private talk or workshop
    description: |
      If you found one of my public speaking presentations or workshops useful, I'm available for private speaking engagements on a variety of topics to help your team succeed.
    price: 2000
    isFrom: true
    link:
      text: Schedule a talk
      url: https://buy.stripe.com/eVa4h0bgSaPM6NqcMU
  -
    title: 1-on-1 consulting call
    description: |
      Book a 1-on-1 video call, and I can help you by answering questions about software development, architecture and automation, helping you write your first automated test, or reviewing some of your code and giving advice and suggestions.
    price: 350
    link:
      text: Book your call now
      url: /call
  -
    title: Pair program with me
    description: |
      Would you like another pair of eyes on your code, providing real-time suggestions and feedback rather than waiting for a code review? Book a 2-hour pair programming call and we can work on your code together.
    price: 499
    link:
      text: Book your session now
      url: /pair
  -
    title: Introduction to automated testing in Drupal - 7-day email course
    description: |
      Register for my free upcoming email course on automated testing in Drupal.
    link:
      text: Register now
      url: /atdc
  -
    title: Drupal module template
    description: |
      If you're creating a new Drupal module, try starting with my free module template for Drupal 9 and 10.
    link:
      text: Download
      url: https://github.com/opdavies/drupal-module-template
---

{% block content %}

{% for product in page.products %}

  <article>
    <h2>
      {{ product.title }} -
      {{ product.isFrom ? 'from' }}
      {% if product.price %}
        £{{ product.price|number_format() }}
      {% else %}
        free!
      {% endif %}
      {{ product.perMonth ? 'per month' }}
    </h2>

    <div>
      <p>
        {{ product.description }}

        {% if product.remainingPlaces %}
          <strong>{{ product.remainingPlaces }} places remaining!</strong>
        {% elseif product.isLimited %}
          <strong>Limited places available!</strong>
        {% endif %}
      </p>
    </div>

    <footer>
      <a href="{{ product.link.url }}">
        {{ product.link.text }}
        &rarr;
      </a>
    </footer>
  </article>
{% endfor %}
{% endblock %}

{% block content_top %}
  {% include 'message.html.twig' %}
{% endblock %}