Add a pages content type and move page files
This commit is contained in:
parent
7087bbbb7f
commit
e1573ef072
38 changed files with 2 additions and 0 deletions
21
source/_pages/404.md
Normal file
21
source/_pages/404.md
Normal file
|
@ -0,0 +1,21 @@
|
|||
---
|
||||
layout: page
|
||||
title: Page not found
|
||||
---
|
||||
|
||||
{% block content %}
|
||||
Perhaps you were looking for one of these pages:
|
||||
|
||||
- [Products and services](/pricing)
|
||||
- [Public speaking and workshops](/presentations)
|
||||
- [My daily email list](/daily)
|
||||
- [The Beyond Blocks podcast](/podcast)
|
||||
|
||||
If you were looking for something else, you can [search for it](/search).
|
||||
{% endblock %}
|
||||
|
||||
{% block content_bottom %}
|
||||
{% include 'daily-email-form.html.twig' with {
|
||||
intro: 'Sign up and get daily emails about Drupal, PHP and software development.'
|
||||
} %}
|
||||
{% endblock %}
|
48
source/_pages/archive.html
Normal file
48
source/_pages/archive.html
Normal file
|
@ -0,0 +1,48 @@
|
|||
---
|
||||
layout: page
|
||||
title: The Daily Drupaler
|
||||
meta:
|
||||
title: The Daily Drupaler - Daily Software Development Thoughts and Tips | %site.name%
|
||||
description: |-
|
||||
Daily Software Development Thoughts and Tips by %site.name%.
|
||||
generator: pagination
|
||||
pagination:
|
||||
max_per_page: 30
|
||||
provider: data.daily_emails
|
||||
use:
|
||||
- daily_emails
|
||||
---
|
||||
|
||||
{% block content %}
|
||||
{% set daily_emails = data.daily_emails|filter((email) => email.date <= 'now'|date) %}
|
||||
|
||||
<p>This is an archive of the {{ daily_emails|length|number_format }} email messages I have sent to <a href="/daily">my daily mailing list</a> since the 12th of August, 2022. Enjoy!</p>
|
||||
|
||||
<div class="mt-6 space-y-16">
|
||||
<div>
|
||||
<ul>
|
||||
{% for email in page.pagination.items %}
|
||||
<li>
|
||||
<a href="{{ email.url }}">
|
||||
{{ email.date|date('jS F Y') }}:
|
||||
{{ email.title }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
{% if page.pagination.previous_page or page.pagination.next_page %}
|
||||
<nav class="flex justify-center pt-10 space-x-6">
|
||||
{% if page.pagination.previous_page %}<a href="{{ site.url }}{{ page.pagination.previous_page.url }}">← Newer Posts{% endif %}<br />
|
||||
{% if page.pagination.next_page %}<a href="{{ site.url }}{{ page.pagination.next_page.url }}">Older Posts →</a>{% endif %}<br />
|
||||
</nav>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
{% block content_bottom %}
|
||||
{% include 'daily-email-form.html.twig' %}
|
||||
|
||||
{% include 'about-me.html.twig' %}
|
||||
{% endblock %}
|
24
source/_pages/atdc-welcome.md
Normal file
24
source/_pages/atdc-welcome.md
Normal file
|
@ -0,0 +1,24 @@
|
|||
---
|
||||
layout: page
|
||||
title: Welcome to the Test-Driven Drupal email course
|
||||
meta:
|
||||
title: Welcome to the Test-Driven Drupal email course | %site.name%
|
||||
---
|
||||
|
||||
{% block head_meta %}
|
||||
<meta name="robots" content="noindex">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
Hi. Thank you for registering for my Test-Driven Drupal email course.
|
||||
|
||||
Every email will be sent from my personal email address, so if you have a question about any email, press reply, send it to me, and I'll personally respond.
|
||||
|
||||
I'd also appreciate any feedback as you work through or complete the course.
|
||||
|
||||
Remember to check your inbox and confirm your email address to ensure you get the lessons.
|
||||
|
||||
In the meantime, why not [go to my daily email archive](/archive) and read some of my previous daily emails?
|
||||
|
||||
Found this page by accident? [Consider subscribing for the course](/atdc).
|
||||
{% endblock %}
|
26
source/_pages/atdc.md
Normal file
26
source/_pages/atdc.md
Normal file
|
@ -0,0 +1,26 @@
|
|||
---
|
||||
layout: page
|
||||
title: Automated Testing in Drupal email course
|
||||
---
|
||||
|
||||
{% block content %}
|
||||
|
||||
Do you want to learn how to write automated tests and do test-driven development in Drupal?
|
||||
|
||||
Register below for my free 10-day email course, where you'll learn to write a new Drupal module from scratch with automated tests.
|
||||
|
||||
Learn to test things like:
|
||||
|
||||
* Whether pages exist.
|
||||
* Whether users can view specific pages based on their permissions.
|
||||
* Whether certain content is visible on a page given particular circumstances.
|
||||
* Refactoring code to test dedicated classes such as Services, Repositories, Builders and Actions.
|
||||
|
||||
{% include 'email-course-form.html.twig' %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content_bottom %}
|
||||
<div class="space-y-12">
|
||||
{% include 'testimonials' with { tag: 'atdc' } %}
|
||||
</div>
|
||||
{% endblock %}
|
30
source/_pages/bcm.md
Normal file
30
source/_pages/bcm.md
Normal file
|
@ -0,0 +1,30 @@
|
|||
---
|
||||
layout: page
|
||||
title: Hi, PHP UserGroup Munich!
|
||||
---
|
||||
|
||||
{% block head_meta %}
|
||||
<meta name="robots" content="noindex">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
Thanks for attending my talk on [Build Configs](/build-configs).
|
||||
|
||||
[These are the slides](/talks/building-build-configs) I presented and the example video:
|
||||
|
||||
{% include 'youtube-video' with { id: 'LkhsdmxReUc'} %}
|
||||
|
||||
From nothing to a working Drupal 10 website in less than a minute!
|
||||
|
||||
If you have any further questions, let me know.
|
||||
|
||||
## Can we work together?
|
||||
|
||||
[Get in touch](/contact) if you're interested in using Build Configs-based managed configuration files in your projects (I offer one-off implementations or ongoing updates via a subscription), you need an in-house tool built for your team, or if we can [work together another way](/pricing).
|
||||
|
||||
## While you're here
|
||||
|
||||
Why not join my [daily email list](/daily) or register for my [free email course](/atdc) on automated testing in Drupal?
|
||||
|
||||
Oliver
|
||||
{% endblock %}
|
32
source/_pages/bco.md
Normal file
32
source/_pages/bco.md
Normal file
|
@ -0,0 +1,32 @@
|
|||
---
|
||||
layout: page
|
||||
title: Hi, PHP Oxford!
|
||||
---
|
||||
|
||||
{% block head_meta %}
|
||||
<meta name="robots" content="noindex">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
Thanks for attending my talk on [Build Configs](/build-configs).
|
||||
|
||||
[These are the slides](/presentations/building-build-configs) I presented and the example video:
|
||||
|
||||
{% include 'youtube-video' with { id: 'LkhsdmxReUc'} %}
|
||||
|
||||
From nothing to a working Drupal 10 website in less than a minute!
|
||||
|
||||
If you have any further questions, let me know.
|
||||
|
||||
## Can we work together?
|
||||
|
||||
[Get in touch](/contact) if you're interested in using Build Configs-based managed configuration files in your projects (I offer one-off implementations or ongoing updates via a subscription), you need an in-house tool built for your team, or if we can [work together another way](/pricing).
|
||||
|
||||
If you liked the talk, or [any of my others](/presentations), I can also present talks and run workshops for companies.
|
||||
|
||||
## While you're here
|
||||
|
||||
Why not join my [daily email list](/daily) or register for my [free email course](/atdc) on automated testing in Drupal?
|
||||
|
||||
Oliver
|
||||
{% endblock %}
|
38
source/_pages/brumphp.md
Normal file
38
source/_pages/brumphp.md
Normal file
|
@ -0,0 +1,38 @@
|
|||
---
|
||||
layout: page
|
||||
title: BrumPHP
|
||||
---
|
||||
|
||||
{% block head_meta %}
|
||||
<meta name="robots" content="noindex">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
Thank you for attending my Sculpin talk at BrumPHP.
|
||||
|
||||
[The slides and a previous recording](/talks/building-static-websites-sculpin) are on the talk page.
|
||||
|
||||
To see an example of a Sculpin project, you can see [the source code for this website](https://github.com/opdavies/oliverdavies.uk) or [my demo for PHP South West](https://github.com/opdavies/phpsw-sculpin-demo).
|
||||
|
||||
If you want to try Sculpin, you can use [the Sculpin Skeleton project I created](https://github.com/opdavies/sculpin-skeleton) as a starting point for new projects.
|
||||
|
||||
## Can we work together?
|
||||
|
||||
As well as building static websites with Sculpin, I do consulting and advisory work using other PHP projects - namely, Drupal and Symfony.
|
||||
|
||||
I offer [unlimited monthly Drupal consulting](/consulting), [1-on-1 consultation calls](/call) and [pair programming sessions](/pair) to get people unstuck, and fixed prices (not estimates) for development work.
|
||||
|
||||
## Are you stuck on Drupal 7, 8 or 9?
|
||||
|
||||
Drupal 7 will be end-of-life and no longer supported as of the 5th of January, 2025.
|
||||
|
||||
Drupal 8 and 9 are already unsupported.
|
||||
|
||||
If you have an outdated Drupal website and want to know more about upgrading to Drupal 10, [book your upgrade roadmap](/drupal-upgrade) and I'll help you get there.
|
||||
|
||||
## Stay in touch
|
||||
|
||||
The best way to stay in touch with me is my [email list](/daily) to which I send daily emails about Drupal and software development.
|
||||
|
||||
All emails are sent from my personal email address, so you can press reply and contact me directly.
|
||||
{% endblock %}
|
78
source/_pages/build-configs.md
Normal file
78
source/_pages/build-configs.md
Normal file
|
@ -0,0 +1,78 @@
|
|||
---
|
||||
layout: page
|
||||
title: "Build Configs - configuration files as a service"
|
||||
products:
|
||||
-
|
||||
price: 2500
|
||||
link: https://buy.stripe.com/14kbJs98K1fc0p29AC
|
||||
buttonText: Get started
|
||||
-
|
||||
price: 1000
|
||||
link: https://buy.stripe.com/7sIdRAbgS8HEfjWfZ1
|
||||
buttonText: Sign up
|
||||
---
|
||||
|
||||
**Sprint zero in a box.**
|
||||
|
||||
All of my projects contain similar build configuration files, such as Docker and Docker Compose files, PHPUnit and PHPStan configuration, and CI/CD pipeline workflows. I used to maintain these manually which was time-intensive and there was no guarantee that the same features or options were available from project to project.
|
||||
|
||||
Build Configs is a tool I've written to maintain a canonical set of templates and generate them for each project based on a per-project configuration file.
|
||||
|
||||
This makes it quicker and easier for me to create or onboard new projects to work on and, as all of the base files are centralised, when I fix something or add a new feature, the changes can be pushed to every project that uses it.
|
||||
|
||||
I've been using this on personal projects such as my [Drupal](https://github.com/opdavies/docker-example-drupal), [LocalGov Drupal](https://github.com/opdavies/docker-example-drupal-localgov) and [Drupal Commerce Kickstart](https://github.com/opdavies/docker-example-drupal-commerce-kickstart) Docker examples and for various client projects.
|
||||
|
||||
## How does it work?
|
||||
|
||||
- I create a `build.yaml` file for the project that contains its configuration - what version of PHP it needs, which web server to use, which paths to run automated tests from or static analysis on, etc.
|
||||
- I run the `build-configs` tool which generates the required files, such as a Dockerfile, Docker Compose file, PHPStan and PHPUnit configuration files, and a `run` script for automating project commands.
|
||||
- The files are committed to version control and pushed to your code repository (GitHub, GitLab, Bitbucket, etc).
|
||||
- As I add new features or make changes, I will re-run the process to re-generate the files and push any changes - ensuring you’re always up to date.
|
||||
|
||||
## What are some of the recent new features?
|
||||
|
||||
* Adding additional databases for working with migrations or multi-site projects.
|
||||
* Adding additional `run` tasks.
|
||||
* Adding CI pipelines with GitHub Actions to run automated quality checks.
|
||||
* Creating and running Git hooks to run automated checks before changes are pushed.
|
||||
|
||||
## Example
|
||||
|
||||
In this short video, I show how Build Configs works by creating a new Drupal 10 project, generating its configuration files, and opening it in a browser.
|
||||
|
||||
From nothing to a ready-to-work-on Drupal website in less than a minute.
|
||||
|
||||
{% include 'youtube-video.html.twig' with { id: 'LkhsdmxReUc'} %}
|
||||
|
||||
## Options
|
||||
|
||||
### Initial project setup - £{{ page.products.0.price|number_format() }}
|
||||
|
||||
To get your project started on the right foot, I will create a new Drupal project skeleton for you using `build-configs` that is ready to work on, including all of the generated files. You can even edit them if you like as they will get no ongoing updates.
|
||||
|
||||
{% include 'button.html.twig' with {
|
||||
text: page.products.0.buttonText,
|
||||
url: page.products.0.link,
|
||||
} %}
|
||||
|
||||
### Ongoing updates and support (single site) - £{{ page.products.1.price|number_format }} per month
|
||||
|
||||
Once you have a project with `build-configs`, if you want to receive ongoing updates to the generated files, I can automatically refresh your files once changes are available and push them to your code repository.
|
||||
|
||||
This also includes unlimited support via a dedicated Slack channel and you can make feature requests for me to consider adding to the roadmap.
|
||||
|
||||
If you like, I can add you to a beta users list and you’ll get new experimental features before anyone else.
|
||||
|
||||
{% include 'button.html.twig' with {
|
||||
text: page.products.1.buttonText,
|
||||
url: page.products.1.link,
|
||||
} %}
|
||||
|
||||
|
||||
If you have multiple Drupal sites, [contact me](/contact) and we can work something out.
|
||||
|
||||
### Retro-fitting into an existing project
|
||||
|
||||
`build-configs` can also be added to an existing project. It can be tricky and will be different from project to project so [contact me](/contact) and we can discuss it further.
|
||||
|
||||
Once I know more about your project, I’ll be happy to give you a fixed-price quote to do the work.
|
124
source/_pages/call.html.twig
Normal file
124
source/_pages/call.html.twig
Normal file
|
@ -0,0 +1,124 @@
|
|||
---
|
||||
layout: page
|
||||
title: Book a 1-on-1 consulting call
|
||||
link: https://savvycal.com/opdavies/consulting-call
|
||||
price: 350
|
||||
faqs:
|
||||
-
|
||||
- What happens after I pay?
|
||||
- Your call is scheduled at the time you pay. So after payment is received, we're all set!
|
||||
-
|
||||
- What if I can't find a suitable time?
|
||||
- If you can't find a suitable time, due to your time zone, or weekly schedule, just <a href="mailto:oliver@oliverdavies.uk?subject=1-on-1 consulting call">send me an email</a>, and we can arrange something. I try to be as flexible as possible!
|
||||
-
|
||||
- Can my colleague or business partner join the call?
|
||||
- No. This is a 1-on-1 call. You are welcome to record the conversation to share it after the fact.
|
||||
-
|
||||
- Do you offer something more hands-on?
|
||||
- Sure! <a href="/pair">Book a pair programming session</a> instead and we’ll work on your code together.
|
||||
-
|
||||
- I still have questions!
|
||||
- No problem. Send me an email at <a href="mailto:oliver@oliverdavies.uk?subject=1-on-1 consulting call">oliver@oliverdavies.uk</a>.
|
||||
---
|
||||
|
||||
{% block content %}
|
||||
|
||||
{# <h2>Who is this for?</h2> #}
|
||||
|
||||
{# Pain #}
|
||||
|
||||
{# Dream #}
|
||||
|
||||
{# Fix #}
|
||||
|
||||
<p>As a professional Software Developer and Consultant with {{ get_years_of_experience() }} years of Drupal and PHP experience, I have a lot of knowledge that I use to help customers and their projects.</p>
|
||||
|
||||
{# 1st call to action #}
|
||||
|
||||
{% include 'button' with {
|
||||
position: 'centre',
|
||||
text: 'Book your call now',
|
||||
url: page.link,
|
||||
withArrow: true,
|
||||
} %}
|
||||
|
||||
<h2>Some things I can help you with</h2>
|
||||
|
||||
<ul>
|
||||
<li>How to approach a new project or task.</li>
|
||||
<li>PHP and Drupal fundamentals and best practices.</li>
|
||||
<li>Adding eCommerce functionality with Drupal Commerce.</li>
|
||||
<li>Upgrading Drupal websites from unsupported versions.</li>
|
||||
<li>Writing your first automated tests with PHPUnit or starting with test-driven development.</li>
|
||||
<li>Introducing static analysis or other code quality tools to your project.</li>
|
||||
<li>Adopting a utility-first CSS approach, e.g. Tailwind CSS, within a new or existing theme.</li>
|
||||
<li>Configuring continuous integration (CI) pipelines with GitHub Actions, GitLab CI or Bitbucket Pipelines.</li>
|
||||
<li>Automating tasks with Docker or Ansible.</li>
|
||||
<li>Help fixing a bug or some broken code.</li>
|
||||
<li>Reviewing your code and providing advice and suggestions.</li>
|
||||
</ul>
|
||||
|
||||
<p>In this 1-on-1 video call, I can help you answer questions in these areas or any others you may have.</p>
|
||||
|
||||
{% include 'button' with {
|
||||
position: 'centre',
|
||||
text: 'Book your call now',
|
||||
url: page.link,
|
||||
withArrow: true,
|
||||
} %}
|
||||
|
||||
{# Social proof #}
|
||||
|
||||
{% include 'testimonials' with { tag: 'call' } %}
|
||||
|
||||
{# Overcome objections #}
|
||||
|
||||
<h2>100% money-back guarantee!</h2>
|
||||
|
||||
<p>If you don't find the call valuable, just let me know, and I'll refund 100% of the cost.</p>
|
||||
|
||||
<h2>Frequently asked questions</h2>
|
||||
|
||||
{% for faq in page.faqs %}
|
||||
<li class="list-none">
|
||||
<h3 class="mt-0 text-lg">{{ faq.0 }}</h3>
|
||||
<p>{{ faq.1|raw }}</p>
|
||||
</li>
|
||||
{% endfor %}
|
||||
|
||||
{# Uniqueness #}
|
||||
|
||||
<h2>Who am I?</h2>
|
||||
|
||||
<ul>
|
||||
<li>I'm an Acquia-certified Drupal expert with {{ get_years_of_experience() }} years of professional development experience.</li>
|
||||
<li>I'm a former Drupal Association employee who was responsible for improving and maintaining Drupal.org.</li>
|
||||
<li>I'm a Drupal core contributor and maintain numerous Drupal projects, including the Override Node Options module, which is used on over 38,000 websites.</li>
|
||||
<li>I'm a multiple-time DrupalCon speaker who regularly presents talks and workshops at conferences and meetups.</li>
|
||||
</ul>
|
||||
|
||||
{# 2nd CTA #}
|
||||
|
||||
{% embed 'callout.html.twig' with {
|
||||
title: 'Ready to book your call?',
|
||||
} %}
|
||||
{% block callout_content %}
|
||||
{% include 'button.html.twig' with {
|
||||
text: 'Book your call now for £' ~ page.price|number_format ~ '',
|
||||
url: page.link,
|
||||
withArrow: true,
|
||||
} %}
|
||||
|
||||
<p class="mb-0">You can pay and reserve your time slot straight away. There are a limited number of available slots each month. If, after the call, you decide to do a longer engagement with me, the cost of this call will be deducted from that engagement.</p>
|
||||
{% endblock %}
|
||||
{% endembed %}
|
||||
|
||||
{# Urgency #}
|
||||
|
||||
<h2>Availability is limited</h2>
|
||||
|
||||
<p>I’m only available for a few 1-on-1 calls per month.</p>
|
||||
|
||||
<p>Scheduling is first come, first served, so the sooner you book your time slot, the sooner you will have the answers you need to move your project forward.</p>
|
||||
|
||||
{% endblock %}
|
10
source/_pages/contact.md
Normal file
10
source/_pages/contact.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
layout: page
|
||||
title: Contact Oliver
|
||||
---
|
||||
|
||||
The best way to get in touch with me is via <a href="mailto:{{ site.email }}">email</a>. I usually reply within one business day.
|
||||
|
||||
I'm also on [LinkedIn][linkedin].
|
||||
|
||||
[linkedin]: https://www.linkedin.com/in/opdavies
|
260
source/_pages/cv.txt
Normal file
260
source/_pages/cv.txt
Normal file
|
@ -0,0 +1,260 @@
|
|||
Oliver Davies (opdavies)
|
||||
oliver+cv@oliverdavies.uk
|
||||
|
||||
|
||||
Software Developer and Technical Lead. Open source advocate, contributor and
|
||||
maintainer. Public speaker and trainer.
|
||||
|
||||
Technical Skills
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
- Languages: PHP, SQL, HTML, CSS, JavaScript, Bash, Nix, Terraform
|
||||
- CMSes and Frameworks: Drupal (6+), Symfony (2+), Tailwind CSS, Vue.js,
|
||||
TypeScript, Stimulus
|
||||
- Tools: Git, PHPUnit, PHPStan, Behat, Jest, Docker, Ansible, Apache, Nginx,
|
||||
Caddy, MySQL, GitHub Actions
|
||||
- Platforms: Acquia, Platform.sh, Pantheon, Amazon AWS, DigitalOcean, Linode
|
||||
|
||||
|
||||
Professional Experience
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Interim Web Development Manager 2023-Present
|
||||
Transport for Wales
|
||||
|
||||
Drupal Development Consultant and Coach 2012-Present
|
||||
Oliver Davies Ltd
|
||||
|
||||
- Developed applications using Drupal, Symfony and Silex.
|
||||
|
||||
- Migrated sites to newer versions of Drupal (6 to 7, and 7 to 8).
|
||||
|
||||
- Provisioned and maintained Linux servers for clients.
|
||||
|
||||
- Introduced version control systems, automation and deployment
|
||||
processes to existing projects.
|
||||
|
||||
Lead Software Developer 2021-2023
|
||||
Transport for Wales
|
||||
|
||||
- Co-developed the tfw.wales and trc.cymru websites, consolidating
|
||||
legacy websites and transitioning from an outsourced team to
|
||||
in-house Developers.
|
||||
|
||||
- Introduced automated testing and test-driven development and static
|
||||
analysis into the development workflow.
|
||||
|
||||
- Created standardised environments using Docker and Docker Compose
|
||||
for use across the team and within continuous integration (CI)
|
||||
pipelines.
|
||||
|
||||
- Fixed accessibility issues to achieve WCAG 2.0 AA compliance.
|
||||
|
||||
- Technologies: PHP, Drupal, Vue.js, TypeScript, Docker, Git, Nix,
|
||||
Amazon Web Services, Acquia
|
||||
|
||||
Acting Technical Team Lead 2019-2020
|
||||
Inviqa
|
||||
|
||||
Senior Software Developer 2019-2021
|
||||
Inviqa
|
||||
|
||||
- Worked on and led a development team responsible for many Drupal 7
|
||||
and 8 projects.
|
||||
|
||||
- Augmented onto a client development team, co-developing an
|
||||
application using Drupal, Angular and Typescript.
|
||||
|
||||
- Part of the out-of-hours critical application support team,
|
||||
supporting applications including Drupal, Magento and Sylius.
|
||||
|
||||
- Certified Mental Health First Aider and part of the Wellbeing team.
|
||||
|
||||
Senior Drupal Developer 2017-2019
|
||||
Microserve
|
||||
|
||||
- Developed and maintained various Drupal 7 and 8 projects including
|
||||
custom modules and automated tests, such as integrating Drupal with
|
||||
third-party services.
|
||||
|
||||
- Improved the accessibility of various projects by working on
|
||||
front-end and theming-related tasks.
|
||||
|
||||
- Wrote custom migrations to import data from various sources into
|
||||
Drupal 8.
|
||||
|
||||
Senior Drupal Developer 2016-2017
|
||||
Appnovation
|
||||
|
||||
- Co-developed various Drupal 7 and 8 projects for UK, US and Canadian
|
||||
clients, including custom modules and themes.
|
||||
|
||||
- Provided technical input to pre-sales opportunities, including the
|
||||
company’s first UK Drupal 8 project and first FTSE 100 client.
|
||||
|
||||
Senior Drupal Developer 2015-2016
|
||||
CTI Digital
|
||||
|
||||
- Contributed to and helped support various existing Drupal 7 projects.
|
||||
|
||||
- Improved my Drupal 8 knowledge via self-guided learning, focussing on
|
||||
custom module development and data migration.
|
||||
|
||||
- Developed a prototype of a command-line application to generate and
|
||||
audit codebases, to reduce the onboarding time for Developers and
|
||||
ensure consistency across projects.
|
||||
|
||||
Senior Drupal Developer 2015
|
||||
Microserve
|
||||
|
||||
- Full-stack Drupal 7 development, focussing on custom module
|
||||
development, REST server integration via restws module, and data
|
||||
migration from Drupal 6.
|
||||
|
||||
- Updated and modernised a non-Drupal PHP platform to ensure its
|
||||
compatibility with their new Drupal 7 website, adding Composer to
|
||||
manage dependencies and Guzzle to perform HTTP requests to Drupal to
|
||||
trigger actions via REST.
|
||||
|
||||
Drupal.org Developer 2014-2015
|
||||
Drupal Association
|
||||
|
||||
- Worked on the Drupal.org website, its sub-sites and infrastructure,
|
||||
developing new tools and features whilst fixing bugs and issues.
|
||||
|
||||
- Monitored and maintained the Drupal.org testbot infrastructure during
|
||||
high traffic periods, ensuring that automated tests are able to run
|
||||
for patches submitted to Drupal.org.
|
||||
|
||||
- Fixed any issues that made Drupal.org a Drupal 8 release blocker,
|
||||
ensuring that there were no further delays in releasing Drupal 8.
|
||||
|
||||
Senior Drupal Developer 2013-2014
|
||||
Precedent
|
||||
|
||||
- Led a development team consisting of colleagues in other offices as
|
||||
well as an off-site client contractor. Completed an in-progress
|
||||
Drupal 7 project, adding missing functionality and fixing bugs.
|
||||
|
||||
- Created and shared a Vagrant and Puppet-based development environment
|
||||
to ensure consistency for Developers.
|
||||
|
||||
Application Developer 2012-2013
|
||||
Nomensa
|
||||
|
||||
- Developed custom Drupal 7 modules including an integration with
|
||||
CiviCRM.
|
||||
|
||||
- Completed front-end theme development work with a focus on
|
||||
accessibility, ensuring that it was WCAG 2.0 compliant.
|
||||
|
||||
- Worked alongside and mentored front-end Developers in Drupal theming
|
||||
on projects. Several of them would later become full-time Drupal
|
||||
Developers and Themers.
|
||||
|
||||
- Provisioned servers with a Nginx, PHP-FPM and MySQL stack, and
|
||||
deployed applications.
|
||||
|
||||
Freelance Web Developer 2007-2012
|
||||
Freelance
|
||||
|
||||
Drupal/PHP Developer 2011-2012
|
||||
Proctor + Stevenson
|
||||
|
||||
- Developed and co-developed new websites, including the agency’s first
|
||||
Drupal 7 client project. Provided ongoing support and maintenance of
|
||||
websites for existing clients.
|
||||
|
||||
- Architected and developed a Drupal 6 and Ubertcart project for a
|
||||
water services company, which processed residential and commercial
|
||||
property transactions until September 2020.
|
||||
|
||||
- Performed Linux server provisioning and configuration tasks for
|
||||
client websites.
|
||||
|
||||
Drupal Web Developer 2010-2011
|
||||
Horse & Country TV
|
||||
|
||||
- Maintained and supported the company’s Drupal 6 website as part of a
|
||||
two-person team.
|
||||
|
||||
- Re-architected and re-developed the Events section, adding Ubercart
|
||||
for paid events which added a new revenue stream for the company.
|
||||
|
||||
- Developed custom modules including the 'Now & Next' module which
|
||||
displayed the current and subsequent programmes on the channel.
|
||||
|
||||
|
||||
Additional Experience
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Bootcamp Mentor 2023-Present
|
||||
School of Code
|
||||
|
||||
- Mentoring coding bootcamp students, working with one-on-one mentees
|
||||
during the bootcamp as well as groups at in-person events such as hack
|
||||
days.
|
||||
|
||||
- Presented a session to current students and graduates at the
|
||||
TechConnect London event, organised by School of Code.
|
||||
|
||||
- Working with School of Code staff and other mentors to review and
|
||||
select students for upcoming cohorts.
|
||||
|
||||
Individual contributor 2012-Present
|
||||
https://github.com/opdavies
|
||||
|
||||
Maintaining and contributing to various open-source software projects.
|
||||
|
||||
Individual contributor 2008-Present
|
||||
https://www.drupal.org/u/opdavies
|
||||
|
||||
- Contributed code to Drupal core.
|
||||
- Maintained Drupal modules and themes, including the Override Node
|
||||
Options module since 2012, which is used on around 40,000 active
|
||||
Drupal websites (April 2024).
|
||||
- Multiple-time DrupalCon speaker, contribution day mentor and track
|
||||
committee member.
|
||||
- Board member of the Drupal England & Wales Association.
|
||||
- Former organiser of the Drupal Bristol user group and DrupalCamp
|
||||
Bristol conference.
|
||||
|
||||
Bootcamp Mentor 2021
|
||||
Drupal Career Online
|
||||
|
||||
Mentoring Drupal coding bootcamp students, organised by DrupalEasy.
|
||||
|
||||
Bootcamp Mentor 2018-2021
|
||||
DevelopMe_
|
||||
|
||||
Mentoring coding bootcamp students, learning PHP and JavaScript.
|
||||
|
||||
Co-organiser/Organiser 2015-2023
|
||||
PHP South West/PHP South Wales
|
||||
|
||||
- Co-organising PHP-related events in Bristol between 2015 and 2019.
|
||||
- Organising PHP-related events in Cardiff between 2018 and 2023.
|
||||
|
||||
|
||||
Certifications
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
- Acquia certified Drupal Developer (2017)
|
||||
- Acquia certified Drupal Front-End Specialist (2017)
|
||||
- Acquia certified Drupal Back-End Specialist (2017)
|
||||
- Acquia certified Drupal Cloud Pro (2018)
|
||||
- Platform.sh partner certification (2021)
|
||||
- Adult Mental Health First Aid - Training in Mind / St. John's Ambulance (2019)
|
||||
|
||||
|
||||
Interests
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
Open source software, Linux, self-hosting, running, martial arts.
|
||||
|
||||
|
||||
Certifications
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
References available upon request
|
||||
|
34
source/_pages/daily.md
Normal file
34
source/_pages/daily.md
Normal file
|
@ -0,0 +1,34 @@
|
|||
---
|
||||
layout: page
|
||||
title: Sign up for the Daily Drupaler Email List
|
||||
meta:
|
||||
title: The Daily Drupaler - Daily Software Development Thoughts and Tips | %site.name%
|
||||
description: |-
|
||||
Daily software development thoughts and tips by %site.name%.
|
||||
use: [daily_emails]
|
||||
---
|
||||
|
||||
{% block content %}
|
||||
Subscribe to my daily newsletter for software professionals on software development and delivery, Drupal, DevOps, community, and open-source.
|
||||
|
||||
{% include 'daily-email-form.html.twig' %}
|
||||
|
||||
<section>
|
||||
<h2>Still not sure?</h2>
|
||||
|
||||
<p>These are the emails I sent this week:</p>
|
||||
|
||||
<ul>
|
||||
{% for email in data.daily_emails[:7] %}
|
||||
<li><a href="{{ email.url }}">{{ email.title }}</a></li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</section>
|
||||
{% endblock %}
|
||||
|
||||
{% block content_bottom %}
|
||||
{% include 'testimonials.html.twig' with {
|
||||
tag: 'daily',
|
||||
title: 'What subscribers have said',
|
||||
} %}
|
||||
{% endblock %}
|
36
source/_pages/dcg.md
Normal file
36
source/_pages/dcg.md
Normal file
|
@ -0,0 +1,36 @@
|
|||
---
|
||||
layout: page
|
||||
title: DrupalCamp Ghent 2024
|
||||
---
|
||||
|
||||
{% block head_meta %}
|
||||
<meta name="robots" content="noindex">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
Thank you for attending my session at DrupalCamp Ghent.
|
||||
|
||||
You can view the slides and previous recordings of my [Test Driven Drupal][] and [Tailwind CSS][] talks on this website.
|
||||
|
||||
If you want to learn more, I released a video of the [Tailwind CSS workshop][workshop] I gave for DrupalCamp Florida, and I've created a [free 10-day email course][course] on automated testing in Drupal.
|
||||
|
||||
## Can we work together?
|
||||
|
||||
Automated testing, test-driven development and Tailwind CSS are some of my favourite subjects to teach.
|
||||
|
||||
If you want me to teach your team to do test-driven development or build UIs with Tailwind CSS, team training is included within my [unlimited monthly Drupal consulting][consulting].
|
||||
|
||||
## Stay in touch
|
||||
|
||||
The best way to stay in touch with me is my [email list] to which I send daily emails about Drupal and software development.
|
||||
|
||||
All emails are sent from my personal email address, so you can press reply and contact me directly.
|
||||
|
||||
[consulting]: /consulting
|
||||
[course]: /atdc
|
||||
[email list]: /daily
|
||||
[tailwind css]: /presentations/taking-flight-with-tailwind-css
|
||||
[test driven drupal]: /presentations/tdd-test-driven-drupal
|
||||
[workshop]: /daily/2024/01/22/tailwind-css-workshop-recording
|
||||
|
||||
{% endblock %}
|
40
source/_pages/drupal-london.md
Normal file
40
source/_pages/drupal-london.md
Normal file
|
@ -0,0 +1,40 @@
|
|||
---
|
||||
layout: page
|
||||
title: Drupal London
|
||||
---
|
||||
|
||||
{% block head_meta %}
|
||||
<meta name="robots" content="noindex">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
Thank you for attending my session for the Drupal London meetup.
|
||||
|
||||
You can [view the slides and previous recording][slides] of the talk on this website and [the example repository on GitHub][repo].
|
||||
|
||||
If you want to learn more, I released a [free 10-day email course][course] on automated testing in Drupal and [live stream on YouTube][youtube]. Most recently, [I contributed tests to the Content Access by Path module][video].
|
||||
|
||||
## Can we work together?
|
||||
|
||||
Drupal, automated testing and test-driven development are some of my favourite subjects to teach.
|
||||
|
||||
If you want me to teach your team to do test-driven development, team training is included within my [unlimited monthly Drupal consulting][consulting].
|
||||
|
||||
## Stay in touch
|
||||
|
||||
The best way to stay in touch with me is my [email list] to which I send daily emails about Drupal and software development.
|
||||
|
||||
All emails are sent from my personal email address, so you can press reply and contact me directly.
|
||||
|
||||
I also host the [Beyond Blocks podcast][podcast] where I discuss Drupal, PHP and other software-related topics with people.
|
||||
|
||||
[consulting]: /consulting
|
||||
[course]: /atdc
|
||||
[email list]: /daily
|
||||
[podcast]: /podcast
|
||||
[repo]: http://github.com/opdavies/drupal-london-meetup
|
||||
[slides]: /presentations/tdd-test-driven-drupal
|
||||
[video]: https://www.youtube.com/watch?v=XTpliKd47Lg
|
||||
[youtube]: https://www.youtube.com/@opdavies
|
||||
|
||||
{% endblock %}
|
86
source/_pages/drupal-upgrade.md
Normal file
86
source/_pages/drupal-upgrade.md
Normal file
|
@ -0,0 +1,86 @@
|
|||
---
|
||||
layout: page
|
||||
title: Are you stuck on Drupal 7, 8 or 9?
|
||||
button:
|
||||
text: Book your roadmap now
|
||||
url: https://buy.stripe.com/aEU4h0gBc4ro0p27sz
|
||||
---
|
||||
|
||||
{# Pain #}
|
||||
|
||||
Drupal 7 will be unsupported on the **5th of January 2025**.
|
||||
|
||||
Drupal 8 has been unsupported since **November 2021**, and Drupal 9 since **November 2023**.
|
||||
|
||||
Are you stuck on any of these versions?
|
||||
|
||||
* Do you need to upgrade your website before it reaches its end-of-life date and is no longer supported?
|
||||
* Are you worried about rebuilding your website and migrating your data to Drupal 10?
|
||||
* Is all of your business logic embedded within your Drupal code, making it hard to upgrade?
|
||||
* Do you rely on modules or themes that are no longer updated or don't exist for Drupal 10?
|
||||
|
||||
{# Dream #}
|
||||
|
||||
## What if you had a clear path how to upgrade your website?
|
||||
|
||||
* What if you had a recommended approach to upgrade your website to Drupal 10?
|
||||
* What if you knew about potential issues ahead of time?
|
||||
* What if you had a list of modules to use in Drupal 10, alternatives for any missing modules, and what functionality would need custom code?
|
||||
|
||||
{# Fix #}
|
||||
|
||||
## Drupal upgrade roadmap
|
||||
|
||||
An upgrade roadmap is a personalised audit of your Drupal website and includes details and actionable steps to upgrade it, including identifying potential blockers you might encounter.
|
||||
|
||||
{# 1st call to action #}
|
||||
|
||||
{% include 'button.html.twig' with {
|
||||
text: page.button.text ~ ' ',
|
||||
url: page.button.url,
|
||||
withArrow: true,
|
||||
} %}
|
||||
|
||||
## How does it work?
|
||||
|
||||
* After receiving payment, we will arrange an initial call to discuss your project.
|
||||
* You share your source code and provide access to your website.
|
||||
* I'll need access to the source code for your website. Ideally, this is via GitHub, GitLab, Bitbucket, or whatever online version control you currently use, but I can also audit a zip file of your Git repository.
|
||||
* I'll need a user account to access your website to review its configuration, such as content types, user roles, etc. You can delete this once the engagement is complete.
|
||||
* Alternatively, I can use an export of the database to get a local version of your site up and running. Ideally, this would be sanitised to remove personal information such as usernames, email addresses and passwords.
|
||||
* I'll send you the document once it's complete for you to review.
|
||||
* We'll arrange a follow-up call to go through it in detail and for you to ask any questions.
|
||||
|
||||
{# 2nd CTA #}
|
||||
|
||||
{% include 'button.html.twig' with {
|
||||
text: page.button.text,
|
||||
url: page.button.url,
|
||||
withArrow: true,
|
||||
} %}
|
||||
|
||||
{# Social proof #}
|
||||
|
||||
{% include 'testimonials.html.twig' %}
|
||||
|
||||
{# Overcome objections #}
|
||||
|
||||
{# Uniqueness #}
|
||||
|
||||
## Who am I?
|
||||
|
||||
* I'm an Acquia-certified Drupal expert with {{ get_years_of_experience() }} years of professional development experience.
|
||||
* I'm a former Drupal Association employee who was responsible for improving and maintaining Drupal.org.
|
||||
* I'm a Drupal core contributor and maintain numerous Drupal projects, including the Override Node Options module, which is used on over 38,000 websites.
|
||||
* I'm a multiple-time DrupalCon speaker who regularly presents talks and workshops at conferences and meetups.
|
||||
|
||||
{# Urgency #}
|
||||
|
||||
## Availability is limited
|
||||
|
||||
There will be no further extensions of Drupal 7 support, and I have limited availability due to the time required, so buy now to secure your place.
|
||||
|
||||
{% include 'button.html.twig' with {
|
||||
text: page.button.text ~ ' →',
|
||||
url: page.button.url,
|
||||
} %}
|
28
source/_pages/drupalcamp-ghent.md
Normal file
28
source/_pages/drupalcamp-ghent.md
Normal file
|
@ -0,0 +1,28 @@
|
|||
---
|
||||
layout: page
|
||||
title: DrupalCamp Ghent 2024
|
||||
---
|
||||
|
||||
{% block head_meta %}
|
||||
<meta name="robots" content="noindex">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
Thank you for attending my session at DrupalCamp Ghent.
|
||||
|
||||
You can view the slides and previous recordings of my [Test Driven Drupal](/talks/tdd-test-driven-drupal) and [Tailwind CSS](/talks/taking-flight-with-tailwind-css) talks on this website.
|
||||
|
||||
If you want to learn more, I released a video of the [Tailwind CSS workshop](/daily/2024/01/22/tailwind-css-workshop-recording) I gave for DrupalCamp Florida, and I've created a [free 10-day email course](/atdc) on automated testing in Drupal.
|
||||
|
||||
## Can we work together?
|
||||
|
||||
Automated testing, test-driven development and Tailwind CSS are some of my favourite subjects to teach.
|
||||
|
||||
If you want me to teach your team to do test-driven development or build UIs with Tailwind CSS, team training is included in my [unlimited monthly Drupal consulting](/consulting).
|
||||
|
||||
## Stay in touch
|
||||
|
||||
The best way to stay in touch with me is my [email list](/daily) to which I send daily emails about Drupal and software development.
|
||||
|
||||
All emails are sent from my personal email address, so you can press reply and contact me directly.
|
||||
{% endblock %}
|
89
source/_pages/drupalgive.md
Normal file
89
source/_pages/drupalgive.md
Normal file
|
@ -0,0 +1,89 @@
|
|||
---
|
||||
layout: page
|
||||
title: My Drupal Contributions
|
||||
modules:
|
||||
-
|
||||
name: Block ARIA Landmark Roles
|
||||
machine_name: block_aria_landmark_roles
|
||||
type: module
|
||||
usage: 1346
|
||||
stars: 16
|
||||
-
|
||||
name: Copyright Block
|
||||
machine_name: copyright_block
|
||||
type: module
|
||||
usage: 2514
|
||||
stars: 10
|
||||
-
|
||||
name: Feature Toggle Twig
|
||||
machine_name: feature_toggle_twig
|
||||
type: module
|
||||
-
|
||||
name: Layout Builder Extra Templates
|
||||
machine_name: override_node_options
|
||||
type: module
|
||||
usage: 325
|
||||
stars: 11
|
||||
-
|
||||
name: Null User
|
||||
machine_name: null_user
|
||||
type: module
|
||||
usage: 5
|
||||
stars: 4
|
||||
-
|
||||
name: System User
|
||||
machine_name: system_user
|
||||
type: module
|
||||
-
|
||||
name: Tailwind CSS Starter Kit
|
||||
machine_name: tailwindcss
|
||||
type: theme
|
||||
usage: 260
|
||||
---
|
||||
|
||||
[This is my profile page on Drupal.org](https://www.drupal.org/u/opdavies) and these are some of the projects I maintain:
|
||||
|
||||
<ul>
|
||||
{% for project in page.modules|sort((a, b) => b.usage <=> a.usage) %}
|
||||
<li>
|
||||
{{ project.type|capitalize }}:
|
||||
<a href="https://www.drupal.org/project/{{ project.machine_name }}">{{ project.name }}</a>
|
||||
{% if project.usage %}
|
||||
- {{ project.usage|number_format }} websites
|
||||
{%- if project.stars -%}
|
||||
, {{ project.stars }} {{ project.stars == 1 ? 'star' : 'stars' }}
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
## Example Projects on GitHub
|
||||
|
||||
- [Docker Example Drupal](https://github.com/opdavies/docker-example-drupal)
|
||||
- [Docker Example Drupal Commerce Kickstart](https://github.com/opdavies/docker-example-drupal-commerce-kickstart)
|
||||
- [Docker Example Drupal LocalGov](https://github.com/opdavies/docker-example-drupal-localgov)
|
||||
|
||||
## Events
|
||||
|
||||
- I was a speaker at DrupalCon Lille in October 2023.
|
||||
- I was a speaker at DrupalCon Europe 2020 (online).
|
||||
- I was a workshop trainer at DrupalCamp NYC 2020 (online).
|
||||
- I was a workshop trainer at DrupalCamp London 2020 (online).
|
||||
- I was a speaker at DrupalCon Amsterdam in October 2019.
|
||||
- I was a contribution day mentor at DrupalCon Vienna 2017.
|
||||
- I was a speaker at DrupalCamp Dublin 2017.
|
||||
- I was a speaker at DrupalCamp Bristol 2016.
|
||||
- I was an organiser of DrupalCamp Bristol (2016, 2017, 2019).
|
||||
- I was a contribution day mentor at DrupalCon Los Angeles and Barcelona 2015.
|
||||
- I was a speaker at DrupalCamp North 2015.
|
||||
- I was a speaker at DrupalCamp Brighton 2015.
|
||||
- I was a contribution day mentor at DrupalCon Amsterdam 2014.
|
||||
- I was a speaker at DrupalCamp London (2014, 2015, 2016, 2017, 2019).
|
||||
- I was a volunteer at DrupalCamp London 2014.
|
||||
- I was a contribution day mentor at DrupalCon Prague 2013.
|
||||
- I was an organiser of the South Wales Drupal user group (SWDUG) and Drupal Bristol user group.
|
||||
|
||||
## Other
|
||||
|
||||
- I'm a Board Member of the [Drupal England and Wales Association](https://drupal-england-wales.github.io) (DEW).
|
46
source/_pages/dto.md
Normal file
46
source/_pages/dto.md
Normal file
|
@ -0,0 +1,46 @@
|
|||
---
|
||||
layout: page
|
||||
title: Introduction to Automated Testing and Test-Driven Development with Drupal
|
||||
drupal_version: 10
|
||||
prices:
|
||||
early: 299
|
||||
full: 499
|
||||
is_early_bird: true
|
||||
next_date: 2024-02-23
|
||||
---
|
||||
|
||||
Are you a Drupal Developer who wants to learn about automated testing and test-driven development, or do you manage a development team that you'd like to train?
|
||||
|
||||
I've delivered large Drupal projects using automated tests and test-driven development for custom functionality, and maintain Drupal modules with thousands of installations whilst using their tests to ensure working code and prevent regressions.
|
||||
|
||||
I offer an interactive full-day workshop (previously presented at DrupalCamp London, and remotely for DrupalCamp NYC) that provides an introduction to automated testing in Drupal and how to utilise test-driven development - which I've updated specifically for Drupal {{ page.drupal_version }}.
|
||||
|
||||
## Contents
|
||||
|
||||
- What is automated testing, and why write tests?
|
||||
- What types of tests are available in Drupal?
|
||||
- Outside-in vs. inside-out testing.
|
||||
- Configuring Drupal and PHPUnit to run tests locally.
|
||||
- Exercise: writing tests for existing Drupal core functionality.
|
||||
- Exercise: adding tests to an existing custom module.
|
||||
- What is test-driven development?
|
||||
- Exercise: writing a new Drupal module from scratch with test-driven development.
|
||||
- Q&A
|
||||
|
||||
<hr />
|
||||
|
||||
## Dates and prices
|
||||
|
||||
The workshop is currently only available remotely, and the next available date is <span class="font-bold">{{ page.next_date|date('F jS, Y') }}</span>.
|
||||
|
||||
Seats are available at <span class="font-bold">{{ page.is_early_bird ? 'an early bird price of £' ~ page.prices.early : 'a price of £' ~ page.prices.full }}</span>, with a 10% discount for bulk orders of 5 or more seats.
|
||||
|
||||
{% include 'button.html.twig' with {
|
||||
text: 'Book your seat',
|
||||
url: 'https://buy.stripe.com/aEU9Bk2KmaPM3Be8wJ',
|
||||
withArrow: true,
|
||||
} %}
|
||||
|
||||
<hr />
|
||||
|
||||
{% include 'testimonials' with { tag: 'testing' } %}
|
BIN
source/_pages/favicon.ico
Normal file
BIN
source/_pages/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
35
source/_pages/glossary.html.twig
Normal file
35
source/_pages/glossary.html.twig
Normal file
|
@ -0,0 +1,35 @@
|
|||
---
|
||||
layout: page
|
||||
title: Glossary
|
||||
terms:
|
||||
-
|
||||
- Automated Testing
|
||||
-
|
||||
- CI pipeline
|
||||
-
|
||||
- Continuous integration
|
||||
- |
|
||||
The process of continuously integrating your code with other people's code, i.e. at least once a day.
|
||||
This is done by regularly pulling and merging everyone else's code with yours and pushing yours so it's available for others to do the same. This can also refer to CI pipelines and tools like GitHub Actions and GitLab CI.
|
||||
-
|
||||
- Continuous Delivery and Deployment
|
||||
-
|
||||
- Git
|
||||
-
|
||||
- PHPStan
|
||||
-
|
||||
- Static analysis
|
||||
-
|
||||
- Test-Driven Development
|
||||
-
|
||||
- Trunk-based Development
|
||||
-
|
||||
- Version control
|
||||
---
|
||||
|
||||
<dl>
|
||||
{% for term in page.terms if term.1 %}
|
||||
<dt>{{ term.0 }}</dt>
|
||||
<dd>{{ term.1 }}</dd>
|
||||
{% endfor %}
|
||||
</dl>
|
101
source/_pages/index.html.twig
Normal file
101
source/_pages/index.html.twig
Normal file
|
@ -0,0 +1,101 @@
|
|||
---
|
||||
layout: page
|
||||
permalink: /
|
||||
title: Oliver Davies - Drupal Developer, Consultant and Speaker
|
||||
meta:
|
||||
title: Drupal Development and Consulting by Oliver Davies
|
||||
urls:
|
||||
exploratory_call: https://savvycal.com/opdavies/drupal-consulting-exploratory-call
|
||||
---
|
||||
|
||||
{% block content %}
|
||||
|
||||
{# Pain #}
|
||||
|
||||
<ul>
|
||||
<li>Are bugs and errors on your Drupal website losing you customers?</li>
|
||||
<li>Are you stuck on an outdated or unsupported version of Drupal?</li>
|
||||
<li>Are you unable to efficiently change your website and spend your time searching for workarounds?</li>
|
||||
<li>Does it take too long to release new features and bug fixes?</li>
|
||||
<li>Are you considering switching to Drupal from your current CMS and wondering if it's the right choice?</li>
|
||||
</ul>
|
||||
|
||||
<!--
|
||||
- Do you need something added or fixed on your website but don't know where to start?
|
||||
- Do you want to enhance and upskill your in-house development team?
|
||||
- Is your website full of legacy code that no one understands or you don't use and that you still need to maintain?
|
||||
-->
|
||||
|
||||
<hr>
|
||||
|
||||
{# Solution #}
|
||||
|
||||
<h2>What can I do for you?</h2>
|
||||
|
||||
{# TODO: add more information about each of these. #}
|
||||
|
||||
<ul>
|
||||
<li><strong>Analysis & Audit</strong>. I can help you identify expensive bottlenecks, hidden issues, and potential problems with your site. I'll put together a detailed report with actionable next-steps on how to fix any issues.</li>
|
||||
<li><strong>Roadmap & Planning</strong>. We'll identify your goals and challenges, and I'll put together a custom roadmap to help you get there.</li>
|
||||
<li><strong>Implementation and Maintenance</strong>. I can build your project for you, or work with your engineering team to accelerate your progress.</li>
|
||||
<li><strong>Team Training</strong>. Give your team the skills they need to get more done. Grow, retain, and attract talented developers.</li>
|
||||
<li><strong>Ongoing Advisory</strong>. Throughout the duration of your project, I'll be available to review progress, answer questions, recommend tools and processes, share emerging best practices, and keep your project on the right track.</li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>You're already running my code in production</h2>
|
||||
|
||||
<p>I've contributed code to Drupal core and written popular contributed Drupal modules and themes, PHP and JavaScript libraries, and Tailwind CSS plugins.</p>
|
||||
|
||||
<p>For example, the Override Node Options module is used on around 40,000 active Drupal websites.</p>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>Here's some of my recent work</h2>
|
||||
|
||||
<ul>
|
||||
<li>I developed a Drupal module to integrate with a third-party translation provider, enabling automated translations of English-only content from XML feeds into different languages.</li>
|
||||
<li>I created an example eCommerce application using Drupal Commerce for an asset finance company for their presentation to a multinational eCommerce company.</li>
|
||||
<li>I migrated a membership portal for a UK health association from Drupal 7 to Drupal 10, migrating their content and users and rebuilding the required custom functionality.</li>
|
||||
<li>I presented workshops on automated testing and test-driven development at Drupal conferences.</li>
|
||||
<li>I assisted a UK consultancy in hiring their in-house Senior Drupal Developer by providing technical input for interviews and candidate feedback.</li>
|
||||
<li>I developed a Tailwind CSS-based theme for a multi-tenant Drupal application, delivering the theme scaffolding, build system, and initial components. I also trained and supported the in-house development team.</li>
|
||||
<li>I developed a Drupal Commerce application for an annual international photography competition that allows photographers to pay and submit their entries, including custom scoring functionality for jurors.</li>
|
||||
</ul>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>Get in touch</h2>
|
||||
|
||||
<p>Unlike working with large agencies, you'll <strong>only work directly with me</strong>. You won't be handed off sub-contractors, offshore teams or Junior Developers who are learning on the job.</p>
|
||||
|
||||
<p>I only give fixed prices so <strong>you'll know upfront how much my work will cost</strong> and all of my work is covered by a bug-free guarantee.</p>
|
||||
|
||||
|
||||
{% include 'button.html.twig' with {
|
||||
full_width: true,
|
||||
text: 'Click here to email Oliver',
|
||||
url: 'mailto:' ~ site.email,
|
||||
} %}
|
||||
|
||||
<hr>
|
||||
|
||||
{% include 'testimonials' with {
|
||||
limit: 5,
|
||||
tag: 'front',
|
||||
title: 'Kind words from clients and colleagues',
|
||||
} %}
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>Get in touch</h2>
|
||||
|
||||
<p>There’s no reason to wait. Drop me a line and I'll get back to you ASAP.</p>
|
||||
|
||||
{% include 'button.html.twig' with {
|
||||
full_width: true,
|
||||
text: 'Click here to email Oliver',
|
||||
url: 'mailto:' ~ site.email,
|
||||
} %}
|
||||
{% endblock %}
|
16
source/_pages/mob.md
Normal file
16
source/_pages/mob.md
Normal file
|
@ -0,0 +1,16 @@
|
|||
---
|
||||
layout: page
|
||||
title: An Introduction to Mob Programming
|
||||
---
|
||||
|
||||
* <https://leanpub.com/mobprogramming>
|
||||
* <https://tuple.app>
|
||||
* <https://mob.sh>
|
||||
* <https://www.jetbrains.com/code-with-me>
|
||||
* <https://code.visualstudio.com/learn/collaboration/live-share>
|
||||
|
||||
<div class="mt-10 space-y-8">
|
||||
{% include 'youtube-video' with { id: '28S4CVkYhWA' } %}
|
||||
{% include 'youtube-video' with { id: 'ri-35oHWIU8' } %}
|
||||
{% include 'youtube-video' with { id: 'jPLEbZLE3g8' } %}
|
||||
</div>
|
71
source/_pages/new.md
Normal file
71
source/_pages/new.md
Normal file
|
@ -0,0 +1,71 @@
|
|||
---
|
||||
layout: page
|
||||
title: Get Unlimited Drupal Consulting for a Fixed Monthly Price
|
||||
meta:
|
||||
title: Unlimited Drupal Consulting by Oliver Davies
|
||||
draft: true
|
||||
plans:
|
||||
-
|
||||
name: Standard
|
||||
price: 5000
|
||||
tagline: One concurrent request. Cancel anytime.
|
||||
features:
|
||||
- One request at a time.
|
||||
url: https://buy.stripe.com/8wM14OgBc2jg8Vy3cn
|
||||
-
|
||||
name: Pro
|
||||
price: 9000
|
||||
tagline: Two concurrent requests. Cancel anytime.
|
||||
features:
|
||||
- Two requests at a time.
|
||||
url: https://buy.stripe.com/9AQaFo0CeaPM3BecMY
|
||||
features:
|
||||
- Bug-free guarantee.
|
||||
- Delivery in days, not weeks.
|
||||
- Easy credit card or BACS payments.
|
||||
- Cancel at any time.
|
||||
---
|
||||
|
||||
{% block content %}
|
||||
|
||||
<div class="grid gap-8 md:grid-cols-2">
|
||||
{% for plan in page.plans %}
|
||||
<div>
|
||||
<h2>{{ plan.name }} - £{{ plan.price|number_format }}</h2>
|
||||
<div>
|
||||
<p>{{ plan.tagline }}</p>
|
||||
|
||||
<ul>
|
||||
{% for feature in page.features|merge(plan.features) %}
|
||||
<li>{{ feature }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
|
||||
<footer class="grid place-items-center">
|
||||
{% include 'button.html.twig' with {
|
||||
text: 'Register now<span class="sr-only"> for the ' ~ plan.name|lower ~ ' plan</span>',
|
||||
url: plan.url,
|
||||
withArrow: true,
|
||||
} %}
|
||||
</footer>
|
||||
</div>
|
||||
</div>
|
||||
{% endfor %}
|
||||
</div>
|
||||
|
||||
## What Does It Include?
|
||||
|
||||
## Looking for Something Else?
|
||||
|
||||
asdf
|
||||
{% endblock %}
|
||||
|
||||
{% block content_bottom %}
|
||||
<div class="space-y-12">
|
||||
{% include 'testimonials' with {
|
||||
limit: 5,
|
||||
tag: 'subscription',
|
||||
title: 'Kind words from clients',
|
||||
} %}
|
||||
</div>
|
||||
{% endblock %}
|
81
source/_pages/pair.html.twig
Normal file
81
source/_pages/pair.html.twig
Normal file
|
@ -0,0 +1,81 @@
|
|||
---
|
||||
layout: page
|
||||
title: Pair program with me
|
||||
price: 499
|
||||
link: https://savvycal.com/opdavies/pair
|
||||
---
|
||||
|
||||
{% block content %}
|
||||
|
||||
{# Pain #}
|
||||
|
||||
<p>Are you stuck adding a new feature or fixing a bug?</p>
|
||||
|
||||
<p>Do you need help starting a new Drupal module or theme?</p>
|
||||
|
||||
<p>Would you like another pair of eyes on your code, providing real-time suggestions and feedback rather than waiting for a code review?</p>
|
||||
|
||||
{# Dream #}
|
||||
|
||||
{# Fix #}
|
||||
|
||||
<h2>Book a pair programming session</h2>
|
||||
|
||||
<p>What if you could have a pair programming session with a Lead Developer and Drupal Expert with {numberOfYears} years of professional experience?</p>
|
||||
|
||||
<p>Book a 2-hour pair programming call, and we can work on your code together - adding new functionality, fixing bugs, writing tests for existing code, or something else.</p>
|
||||
|
||||
<p>Price: £{{ page.price|number_format }}</p>
|
||||
|
||||
{# 1st call to action #}
|
||||
|
||||
{% include 'button.html.twig' with {
|
||||
text: 'Book your session now',
|
||||
url: page.link,
|
||||
} %}
|
||||
|
||||
{# Social proof #}
|
||||
|
||||
{% include 'testimonials.html.twig' %}
|
||||
|
||||
{# Overcome objections #}
|
||||
|
||||
<h2>100% money-back guarantee!</h2>
|
||||
|
||||
<p>If you don't find the session valuable, just let me know, and I'll refund 100% of the cost.</p>
|
||||
|
||||
{# Uniqueness #}
|
||||
|
||||
<h2>Who am I?</h2>
|
||||
|
||||
<ul>
|
||||
<li>I'm an Acquia-certified Drupal expert with {{ get_years_of_experience() }} years of professional development experience.</li>
|
||||
<li>I'm a former Drupal Association employee who was responsible for improving and maintaining Drupal.org.</li>
|
||||
<li>I'm a Drupal core contributor and maintain numerous Drupal projects, including the Override Node Options module, which is used on over 38,000 websites.</li>
|
||||
<li>I'm a multiple-time DrupalCon speaker who regularly presents talks and workshops at conferences and meetups.</li>
|
||||
</ul>
|
||||
|
||||
{# 2nd CTA #}
|
||||
|
||||
{% embed 'callout.html.twig' with {
|
||||
title: 'Ready to book your session?',
|
||||
} %}
|
||||
{% block callout_content %}
|
||||
{% include 'button.html.twig' with {
|
||||
text: 'Book your session now for £' ~ page.price|number_format ~ ' ',
|
||||
url: page.link,
|
||||
withArrow: true,
|
||||
} %}
|
||||
|
||||
<p class="mb-0">You can pay and reserve your time slot straight away. There are a limited number of available slots each month. If, after the call, you decide to do a longer engagement with me, the cost of this call will be deducted from that engagement.</p>
|
||||
{% endblock %}
|
||||
{% endembed %}
|
||||
|
||||
{# Urgency #}
|
||||
|
||||
<h2>Availability is limited</h2>
|
||||
|
||||
<p>I’m only available for a few pair programming sessions per month.</p>
|
||||
<p>Scheduling is first come, first served, so the sooner you book your time slot, the sooner you will have the answers you need to move your project forward.</p>
|
||||
|
||||
{% endblock %}
|
38
source/_pages/phpberks.md
Normal file
38
source/_pages/phpberks.md
Normal file
|
@ -0,0 +1,38 @@
|
|||
---
|
||||
layout: page
|
||||
title: PHP Berkshire
|
||||
---
|
||||
|
||||
{% block head_meta %}
|
||||
<meta name="robots" content="noindex">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
Thank you for attending my Sculpin talk at PHP Berkshire.
|
||||
|
||||
[The slides and a previous recording](/presentations/building-static-websites-sculpin) are on the talk page.
|
||||
|
||||
To see an example of a Sculpin project, you can see [the source code for this website](https://github.com/opdavies/oliverdavies.uk), [my Zettlekasten](https://github.com/opdavies/zet.oliverdavies.uk) or [my demo for PHP South West](https://github.com/opdavies/phpsw-sculpin-demo).
|
||||
|
||||
If you want to try Sculpin, you can use [the Sculpin Skeleton project I created](https://github.com/opdavies/sculpin-skeleton) as a starting point for new projects.
|
||||
|
||||
## Can we work together?
|
||||
|
||||
As well as building static websites with Sculpin, I do consulting and advisory work using other PHP projects - namely, Drupal and Symfony.
|
||||
|
||||
I offer [unlimited monthly Drupal consulting](/consulting), [1-on-1 consultation calls](/call) and [pair programming sessions](/pair) to get people unstuck, and fixed prices (not estimates) for development work.
|
||||
|
||||
## Are you stuck on Drupal 7, 8 or 9?
|
||||
|
||||
Drupal 7 will be end-of-life and no longer supported as of the 5th of January, 2025.
|
||||
|
||||
Drupal 8 and 9 are already unsupported.
|
||||
|
||||
If you have an outdated Drupal website and want to know more about upgrading to Drupal 10, [book your upgrade roadmap](/drupal-upgrade) and I'll help you get there.
|
||||
|
||||
## Stay in touch
|
||||
|
||||
The best way to stay in touch with me is my [email list](/daily) to which I send daily emails about Drupal and software development.
|
||||
|
||||
All emails are sent from my personal email address, so you can press reply and contact me directly.
|
||||
{% endblock %}
|
32
source/_pages/podcast.md
Normal file
32
source/_pages/podcast.md
Normal file
|
@ -0,0 +1,32 @@
|
|||
---
|
||||
layout: page
|
||||
title: The Beyond Blocks podcast
|
||||
meta:
|
||||
description: A podcast about Drupal, PHP open-source and software development.
|
||||
use:
|
||||
- podcast_episodes
|
||||
---
|
||||
|
||||
{% block content_bottom %}{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
A podcast about Drupal, PHP, open-source, and related software development topics.
|
||||
Guests include people like [Matt Glaman](/podcast/1-retrofit), [Eirik Morland](/podcast/8-eirik-morland-violinist), [Tim Lehnen](/podcast/9-tim-lehnen), [Ryan Szrama](/podcast/13-ryan-szrama-centarro), [Sam Mortenson](/podcast/19-sam-mortenson) and [Jess Archer](/podcast/25-jess-archer-drush-laravel-prompts).
|
||||
|
||||
## Episodes {.sr-only}
|
||||
|
||||
{% for episode in data.podcast_episodes|reverse %}
|
||||
{% set episodeNumber = episode.url|trim('/')|split('/')|last|split('-')|first %}
|
||||
|
||||
<h3>Episode {{ episodeNumber }}: {{ episode.topic }} with {{ episode.guests|join(' and ') }}</h3>
|
||||
|
||||
<time datetime="{{ episode.date|date('Y-m-d') }}">{{ episode.date|date('F jS, Y') }}</time>
|
||||
|
||||
{{ episode.blocks.content|markdown }}
|
||||
|
||||
<a href="{{ episode.url|trim('/', 'right') }}" aria-label="Listen to episode {{ episodeNumber }}">
|
||||
Listen now
|
||||
→
|
||||
</a>
|
||||
{% endfor %}
|
||||
{% endblock %}
|
19
source/_pages/presentations.html.twig
Normal file
19
source/_pages/presentations.html.twig
Normal file
|
@ -0,0 +1,19 @@
|
|||
---
|
||||
layout: page
|
||||
title: Presentations
|
||||
use: [presentations]
|
||||
---
|
||||
|
||||
<p>Since September 2012, I have given {{ get_presentation_count(data.presentations) }} public talks and workshops at various conferences and meetups, in-person and remotely, on topics including PHP, Drupal, automated testing, Git, CSS, and systems administration.</p>
|
||||
|
||||
{% for presentation in data.presentations|sort((a, b) => a.events|last.date|date('U') > b.events|last.date|date('U') ? -1 : 1) %}
|
||||
<article>
|
||||
<div class="not-prose">
|
||||
<h2 class="text-xl font-bold">
|
||||
<a class="font-bold text-blue-primary dark:text-blue-400" href="{{ presentation.url|trim('/', 'right') }}">{{ presentation.title }}</a>
|
||||
</h2>
|
||||
</div>
|
||||
|
||||
<p>{{ presentation.description }}</p>
|
||||
</article>
|
||||
{% endfor %}
|
43
source/_pages/press.md
Normal file
43
source/_pages/press.md
Normal file
|
@ -0,0 +1,43 @@
|
|||
---
|
||||
layout: page
|
||||
title: Press Info
|
||||
---
|
||||
|
||||
The following information is provided as a cut-and-paste resource for conference organisers, media professionals, podcast hosts, and other interested parties.
|
||||
|
||||
Please feel free to use anything here as-is without checking with me first. If you have additional questions, you can <a href="mailto:{{ site.email }}">email me directly</a>.
|
||||
|
||||
## Short Bio
|
||||
|
||||
Oliver is a Software Developer and Drupal expert with {{ get_years_of_experience() }} years experience. He specialises in code quality, automated testing and test-driven development.
|
||||
|
||||
## Sample Topics
|
||||
|
||||
* Getting started in software development, Drupal, or open-source software.
|
||||
* Building your first Drupal website.
|
||||
* Drupal module and theme development.
|
||||
* Automated testing and test-driven development (TDD).
|
||||
* Static analysis in PHP applications.
|
||||
* Utility-first styling and Tailwind CSS.
|
||||
* Git and different ways to use it (continuous integration, trunk-based development).
|
||||
* Contributing to open-source software.
|
||||
|
||||
## Social Media and Elsewhere
|
||||
|
||||
* [Drupal.org][drupal]
|
||||
* [GitHub][]
|
||||
* [LinkedIn][]
|
||||
* [Twitter][]
|
||||
|
||||
## Physical Location
|
||||
|
||||
[Caerleon, Wales](https://www.google.co.uk/maps/place/Caerleon,+Newport)
|
||||
|
||||
## Photo
|
||||
|
||||

|
||||
|
||||
[drupal]: https://www.drupal.org/u/opdavies
|
||||
[github]: https://github.com/opdavies
|
||||
[linkedin]: https://www.linkedin.com/in/opdavies
|
||||
[twitter]: https://twitter.com/opdavies
|
114
source/_pages/pricing.md
Normal file
114
source/_pages/pricing.md
Normal file
|
@ -0,0 +1,114 @@
|
|||
---
|
||||
layout: page
|
||||
title: Products and Services
|
||||
products:
|
||||
-
|
||||
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 - 10-day email course
|
||||
description: |
|
||||
Register for my free 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 == 1 %}
|
||||
<strong>1 place remaining!</strong>
|
||||
{% elseif product.remainingPlaces > 1 %}
|
||||
<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 }}
|
||||
→
|
||||
</a>
|
||||
</footer>
|
||||
</article>
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
|
||||
{% block content_top %}
|
||||
{% include 'message.html.twig' %}
|
||||
{% endblock %}
|
49
source/_pages/search.html.twig
Normal file
49
source/_pages/search.html.twig
Normal file
|
@ -0,0 +1,49 @@
|
|||
---
|
||||
layout: page
|
||||
title: Search
|
||||
common_searches:
|
||||
- Drupal
|
||||
- Test-Driven Development
|
||||
- Automated testing
|
||||
- Refactoring
|
||||
- PHP
|
||||
- Tailwind CSS
|
||||
- Neovim
|
||||
- Git
|
||||
- Linux
|
||||
---
|
||||
|
||||
<div>
|
||||
<form
|
||||
class="flex items-center space-x-6"
|
||||
action="https://www.google.com/search"
|
||||
method="get"
|
||||
>
|
||||
<div class="flex-1">
|
||||
<input
|
||||
type="hidden"
|
||||
name="q"
|
||||
value="site:https://www.oliverdavies.uk"
|
||||
/>
|
||||
<input class="w-full" type="text" name="q" alt="search" />
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<input class="cursor-pointer button" type="submit" value="Search" />
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<aside>
|
||||
<h2>Common searches</h2>
|
||||
|
||||
<ul>
|
||||
{% for term in page.common_searches %}
|
||||
<li>
|
||||
<a href="https://duckduckgo.com/?q={{ term|replace({' ': '+'}) }}+site%3A{{ site.url|url_encode }}">
|
||||
{{ term }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</aside>
|
10
source/_pages/sfs.md
Normal file
10
source/_pages/sfs.md
Normal file
|
@ -0,0 +1,10 @@
|
|||
---
|
||||
layout: page
|
||||
title: Sculpin from Scratch
|
||||
---
|
||||
|
||||
Coming soon: a daily email course on building static websites with Sculpin.
|
||||
|
||||
If you're interested, why not [watch my Sculpin talk](/presentations/building-static-websites-sculpin) in the meantime or check out [the source code for this website](https://github.com/opdavies/oliverdavies.uk)?
|
||||
|
||||
If you want me to let you know once the course is ready, <a href="mailto:{{ site.email }}">send me an email and I'll add you to the list</a>.
|
23
source/_pages/sitemap.xml.twig
Normal file
23
source/_pages/sitemap.xml.twig
Normal file
|
@ -0,0 +1,23 @@
|
|||
---
|
||||
permalink: /sitemap.xml
|
||||
use:
|
||||
- daily_emails
|
||||
- pages
|
||||
- podcast_episodes
|
||||
- posts
|
||||
- presentations
|
||||
default_priorities:
|
||||
posts: '0.2'
|
||||
---
|
||||
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
|
||||
{% for content_type, content in data %}
|
||||
{% for item in content %}
|
||||
<url>
|
||||
<loc>{{ site.url }}{{ item.url|trim('/', 'right') }}</loc>
|
||||
<priority>{{ page.default_priorities[content_type]|default('0.5') }}</priority>
|
||||
</url>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</urlset>
|
32
source/_pages/speaker.md
Normal file
32
source/_pages/speaker.md
Normal file
|
@ -0,0 +1,32 @@
|
|||
---
|
||||
layout: page
|
||||
title: Speaker Information
|
||||
---
|
||||
|
||||
## Bio
|
||||
|
||||
Oliver is a Software Developer and Drupal Expert with {{ get_years_of_experience() }} years of experience. As well as consulting on large Drupal projects, Oliver helps Drupal Developers learn automated testing and test-driven development via a free email course and paid coaching and workshops. He regularly contributes to open-source software projects, including Drupal core.
|
||||
|
||||
## Photos
|
||||
|
||||
- <https://www.dropbox.com/s/say1muiqedik0l4/0188395_thumb.jpg>
|
||||
|
||||
## Some events that I've spoken at
|
||||
|
||||
- BlueConf 2019 (Cardiff, UK)
|
||||
- DrupalCamp Brighton 2015
|
||||
- DrupalCamp Bristol 2016
|
||||
- DrupalCamp Dublin 2017
|
||||
- DrupalCamp London (2014, 2015, 2016, 2017, 2019, 2020)
|
||||
- DrupalCamp North 2015 (Sunderland, UK)
|
||||
- DrupalCon Amsterdam 2019
|
||||
- DrupalCon Europe 2020 (Online)
|
||||
- DrupalCon Lille 2023
|
||||
- Nomad PHP
|
||||
- Norfolk Developers' Conference (nor(DEV):con) 2023
|
||||
- PHP North West 2017 (Manchester, UK - 10 year anniversary)
|
||||
- PHP South Coast 2016 (Portsmouth, UK)
|
||||
- PHP UK Conference 2018 (London, UK)
|
||||
- WordCamp Bristol 2019
|
||||
|
||||
I also [gave a number of talks remotely](/blog/speaking-remotely-during-lockdown) for various user groups and conferences during COVID-19.
|
31
source/_pages/sponsor.md
Normal file
31
source/_pages/sponsor.md
Normal file
|
@ -0,0 +1,31 @@
|
|||
---
|
||||
layout: page
|
||||
title: Sponsor me to work on Open Source Software
|
||||
---
|
||||
|
||||
I enjoy working with and on open source software.
|
||||
|
||||
I've been using PHP since 2007 and Drupal since 2008 and am an enthusiastic open source contributor.
|
||||
|
||||
Drupal core, Drupal.org, LocalGov Drupal and Drupal Commerce are some of the projects I've contributed to.
|
||||
|
||||
I maintain the popular Override Node Options module which is used on around 40,000 active Drupal websites and created a starterkit Drupal theme for Tailwind CSS.
|
||||
|
||||
There are lots of other examples on my [Drupal.org][0] and [GitHub][1] profiles.
|
||||
|
||||
I've found that companies want to contribute more, but are too busy.
|
||||
|
||||
Most projects have a custom module or library that was going to be contributed back, but it just hasn't happened yet.
|
||||
|
||||
## Why not sponsor a contributor?
|
||||
|
||||
If you don't have time to contribute, why not sponsor me to do it for you?
|
||||
|
||||
Whether it's contributing that module or library, adding a missing feature or fixing a bug in something you use, or you just want to sponsor me to work on open source, <a href="mailto:{{site.email}}?subject=Open source sponsorship">I'd love to hear from you</a>.
|
||||
|
||||
We can discuss how much time you want to sponsor and what you want me to focus on and I'll get to work.
|
||||
|
||||
You'll be mentioned on any relevant blog posts, live streams, issues and pull or merge requests, so everyone will know that you sponsored me and you'll get the kudos.
|
||||
|
||||
[0]: {{site.drupalorg.url}}
|
||||
[1]: {{site.github.url}}
|
9
source/_pages/testimonials.md
Normal file
9
source/_pages/testimonials.md
Normal file
|
@ -0,0 +1,9 @@
|
|||
---
|
||||
layout: page
|
||||
title: Testimonials
|
||||
---
|
||||
|
||||
{% include 'testimonials' with {
|
||||
limit: 0,
|
||||
title: 'All Testimonials',
|
||||
} %}
|
64
source/_pages/things-about-php.md
Normal file
64
source/_pages/things-about-php.md
Normal file
|
@ -0,0 +1,64 @@
|
|||
---
|
||||
layout: page
|
||||
title: Things you should know about PHP
|
||||
---
|
||||
|
||||
Thanks for attending my [Things you should know about PHP](/talks/things-you-should-know-about-php) talk.
|
||||
|
||||
I hope that you learned some things about PHP, its ecosystem, and its communities, and if you haven't tried using PHP yet, I'd encourage you to do so.
|
||||
|
||||
Here are links to the resources that I mention in the talk, plus a couple of extras.
|
||||
|
||||
## Resources
|
||||
|
||||
- [The PHP Foundation](https://thephp.foundation) - non-profit to support, advance, and develop the PHP language
|
||||
- [PHP-FIG](https://www.php-fig.org) - PHP Framework Interop Group
|
||||
- [Composer](https://getcomposer.org) - dependency manager
|
||||
- [Drupal](https://www.drupal.org) - content management system
|
||||
- [Jigsaw](https://jigsaw.tighten.co) - static site generator
|
||||
- [Laravel](https://laravel.com) - framework
|
||||
- [Nomad PHP](https://nomadphp.com) - online user group
|
||||
- [PHP official images on Docker Hub](https://hub.docker.com/_/php)
|
||||
- [PHPStan](https://phpstan.org) - static analysis tool
|
||||
- [PHPUnit](https://phpunit.de) - testing framework
|
||||
- [Pest](https://pestphp.com) - testing framework
|
||||
- [Psalm](https://psalm.dev) - static analysis tool
|
||||
- [Sculpin](khttps://sculpin.io) - static site generator
|
||||
- [WordPress](https://wordpress.org) - content management system
|
||||
- [php.net](https://www.php.net) - online documentation
|
||||
- [php[architect]](https://www.phparch.com) - online magazine
|
||||
|
||||
## Books
|
||||
|
||||
- [Laravel: Up & Running](https://www.oreilly.com/library/view/laravel-up/9781492041207)
|
||||
- [Symfony: The Fast Track](https://symfony.com/book)
|
||||
|
||||
## Videos
|
||||
|
||||
- [Codecourse](https://codecourse.com)
|
||||
- [How to Code Well](https://www.howtocodewell.net)
|
||||
- [Laracasts](https://laracasts.com)
|
||||
- [SymfonyCasts](https://symfonycasts.com)
|
||||
|
||||
## Podcasts
|
||||
|
||||
- [How to Code Well podcast](https://howtocodewell.fm)
|
||||
- [PHPUgly](https://www.phpugly.com)
|
||||
- [Talking Drupal](https://talkingdrupal.com)
|
||||
- [The Laravel Podcast](https://laravelpodcast.com)
|
||||
- [The PHP Roundtable](https://phproundtable.com)
|
||||
- [Voices of the elePHPant](https://voicesoftheelephpant.com)
|
||||
|
||||
## Can I help?
|
||||
|
||||
Do you want to introduce PHP to your company or team, or add one of these tools to your existing PHP application?
|
||||
|
||||
I offer consulting calls and services to reduce your onboarding time and get you up and running quicker and easier.
|
||||
|
||||
<div class="mt-6">
|
||||
{% include 'button.html.twig' with {
|
||||
text: 'Book your call ',
|
||||
url: '/call',
|
||||
withArrow: true,
|
||||
} %}
|
||||
</div>
|
26
source/_pages/welcome.md
Normal file
26
source/_pages/welcome.md
Normal file
|
@ -0,0 +1,26 @@
|
|||
---
|
||||
layout: page
|
||||
title: Welcome!
|
||||
meta:
|
||||
title: Welcome to my Daily Email list | %site.name%
|
||||
---
|
||||
|
||||
{% block head_meta %}
|
||||
<meta name="robots" content="noindex">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
Hi. Thank you for subscribing to my Daily Email list!
|
||||
|
||||
You'll soon start to get emails from me directly in your inbox. Every day.
|
||||
|
||||
The first might be later today!
|
||||
|
||||
Every email is sent from my personal email address, so if you have a question about any email, press reply, send it to me, and I'll personally respond.
|
||||
|
||||
Also, remember to check your inbox and confirm your email address to ensure you get my emails.
|
||||
|
||||
In the meantime, why not [go to the archive](/archive) and read some of my previous dailies?
|
||||
|
||||
Found this page by accident? [Consider joining the list](/daily).
|
||||
{% endblock %}
|
Loading…
Add table
Add a link
Reference in a new issue