Move pages, remove the page content type
This commit is contained in:
parent
371a596cd9
commit
e4a779fc45
36 changed files with 5 additions and 5 deletions
|
@ -1,22 +0,0 @@
|
|||
---
|
||||
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.'
|
||||
} %}
|
||||
|
||||
{{ parent() }}
|
||||
{% endblock %}
|
|
@ -1,47 +0,0 @@
|
|||
---
|
||||
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 %}
|
|
@ -1 +0,0 @@
|
|||
Subproject commit f31e5c4364890b2a31b3acd961f78565ad822de9
|
|
@ -1,23 +0,0 @@
|
|||
---
|
||||
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 %}
|
|
@ -1,27 +0,0 @@
|
|||
---
|
||||
title: Introduction to 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' } %}
|
||||
|
||||
{{ parent() }}
|
||||
</div>
|
||||
{% endblock %}
|
|
@ -1,29 +0,0 @@
|
|||
---
|
||||
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 %}
|
|
@ -1,31 +0,0 @@
|
|||
---
|
||||
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 %}
|
|
@ -1,37 +0,0 @@
|
|||
---
|
||||
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 %}
|
|
@ -1,77 +0,0 @@
|
|||
---
|
||||
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.
|
|
@ -1,125 +0,0 @@
|
|||
---
|
||||
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 %}
|
||||
|
||||
{% import "_macros" as macros %}
|
||||
|
||||
{# <h2>Who is this for?</h2> #}
|
||||
|
||||
{# Pain #}
|
||||
|
||||
{# Dream #}
|
||||
|
||||
{# Fix #}
|
||||
|
||||
<p>As a professional Software Developer and Consultant with {{ macros.yearsOfExperience }} 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 {{ macros.yearsOfExperience }} 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 %}
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
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
|
|
@ -1,35 +0,0 @@
|
|||
---
|
||||
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',
|
||||
} %}
|
||||
|
||||
{{ parent() }}
|
||||
{% endblock %}
|
|
@ -1,35 +0,0 @@
|
|||
---
|
||||
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]: /archive/2024/01/22/tailwind-css-workshop-recording
|
||||
|
||||
{% endblock %}
|
|
@ -1,39 +0,0 @@
|
|||
---
|
||||
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 %}
|
|
@ -1,87 +0,0 @@
|
|||
---
|
||||
title: Are you stuck on Drupal 7, 8 or 9?
|
||||
button:
|
||||
text: Book your roadmap now
|
||||
url: https://buy.stripe.com/aEU4h0gBc4ro0p27sz
|
||||
---
|
||||
|
||||
{% import "_macros" as macros %}
|
||||
|
||||
{# 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 {{ macros.yearsOfExperience }} 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,
|
||||
} %}
|
|
@ -1,27 +0,0 @@
|
|||
---
|
||||
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](/archive/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 %}
|
|
@ -1,88 +0,0 @@
|
|||
---
|
||||
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).
|
|
@ -1,45 +0,0 @@
|
|||
---
|
||||
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' } %}
|
|
@ -1,34 +0,0 @@
|
|||
---
|
||||
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>
|
|
@ -1,236 +0,0 @@
|
|||
---
|
||||
title: Unlimited Drupal Consulting for a Fixed Monthly Price
|
||||
permalink: /
|
||||
meta:
|
||||
title: Unlimited Drupal Consulting by Oliver Davies
|
||||
supported_version: 10
|
||||
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.
|
||||
faqs:
|
||||
-
|
||||
- Which versions of Drupal do you work on?
|
||||
- |-
|
||||
I only work on the latest supported version of Drupal core, which is currently Drupal %supported_version%.
|
||||
|
||||
If you have an application that uses an older version, I'm happy to give you a custom fixed-price proposal to upgrade to Drupal %supported_version%.
|
||||
-
|
||||
- Does this include maintenance tasks, such as updating Drupal core and contrib modules and themes?
|
||||
- |-
|
||||
Yes, updates are included and will need to be prioritised along with other requests.
|
||||
|
||||
My suggestion is to do them regularly to reduce the risk of an update breaking your application.
|
||||
-
|
||||
- Do you work with Drupal Commerce?
|
||||
- |-
|
||||
Yes, I have a lot of experience with Drupal Commerce and have used it for [various types of e-commerce applications](/archive/2024/03/19/drupal-commerce-not-just-for-selling-t-shirts-and-hats).
|
||||
-
|
||||
- Is there a limit to how many requests I can have?
|
||||
- |-
|
||||
No. Once you're subscribed, you can add as many tasks to your queue as you'd like, and they'll be delivered one-by-one.
|
||||
|
||||
You can move requests around and set your own project priority to ensure your most important tasks are finished first.
|
||||
-
|
||||
- How fast will I receive my completed requests?
|
||||
- |-
|
||||
Of course no two user stories or requests are the same, and some take longer than others.
|
||||
|
||||
However, you'll typically start getting code back from me within days of submitting an active request.
|
||||
|
||||
Software development is an iterative process, so I will break big projects into smaller tasks and start sending work-in-progress for review, feedback, and iteration.
|
||||
-
|
||||
- Who are the Developers?
|
||||
- |-
|
||||
I am! I won't pass your work to Junior Developers or offshore teams. You work directly with me. Always.
|
||||
-
|
||||
- How do I request tasks?
|
||||
- |-
|
||||
After subscribing, you'll need to give me access to your GitLab or GitHub repository and issues board. From there, assign as many tasks to me as you like, in priority order.
|
||||
-
|
||||
- What if I don't like how something turned out?
|
||||
- |-
|
||||
Development is an iterative process. Unlike an agency that will charge you extra for change orders, you get unlimited revisions until you're happy with the work.
|
||||
-
|
||||
- What if I only have a single request?
|
||||
- |-
|
||||
Your subscription renews on a monthly basis. If you only have a single request, you are free to cancel your subscription after the first month.
|
||||
|
||||
You can always renew again in the future, if you have a new request!
|
||||
-
|
||||
- How does the bug free guarantee work?
|
||||
- |-
|
||||
If you discover a bug in any code I delivered, for up to 6 months after the end of your subscription, I will fix it for free.
|
||||
-
|
||||
- Will you attend our daily stand-ups, or other recurring meetings?
|
||||
- |-
|
||||
No. To guard your time and mine, and to make your subscription as effective as possible, all communication is handled asynchronously via task requests, email, and/or Slack. If an occasional task requires some synchronous planning, we can schedule such calls on an as-needed basis.
|
||||
-
|
||||
- Do you have a refund policy?
|
||||
- |-
|
||||
Yes, of course. If you're unhappy with my work for any reason during your first month of service, just say the word, and I'll give you a full refund. No questions asked.
|
||||
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 #}
|
||||
|
||||
<p>In less time than it takes to post on a job board, and for a fraction of the cost, get <strong>unlimited access to a certified Drupal development expert</strong>, core contributor and multiple-time DrupalCon speaker for a fixed monthly fee. No surprises. Cancel anytime.</p>
|
||||
|
||||
<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>What does it include?</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>
|
||||
|
||||
{# TODO: I don't want people to book an advisory call before an advisory call or pair programming session. #}
|
||||
|
||||
<h2>Looking for something else?</h2>
|
||||
|
||||
<p>I also offer fixed-scope consulting engagements and one-time advisory calls. <a href="https://savvycal.com/opdavies/drupal-consulting-exploratory-call">Book a short exploratory call</a> to see if we'd be a good match.</p>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>How it works</h2>
|
||||
|
||||
<h3>Make as many requests as you like</h3>
|
||||
|
||||
<p>Unlimited user stories. Unlimited tasks. Unlimited repos. Unlimited services.</p>
|
||||
|
||||
<h3>You set the priority</h3>
|
||||
|
||||
<p>You decide what's most important. Change priorities at any time.</p>
|
||||
|
||||
<h3>Get code in days, not weeks</h3>
|
||||
|
||||
<p>I work on one active request at a time, and start shipping code in days. Bigger projects will be broken down into smaller parts.</p>
|
||||
|
||||
<h3>Satisfaction guaranteed</h3>
|
||||
|
||||
<p>Great software is an iterative process. I'll keep iterating with you until you're completely happy with the results.</p>
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>Subscription benefits</h2>
|
||||
|
||||
<p>When you subscribe, you gain access to a number of unique benefits.</p>
|
||||
|
||||
<h3>Fixed monthly rate</h3>
|
||||
|
||||
<p>No surprises. No missed quotes. No surprise invoices. Pay the same price each month.</p>
|
||||
|
||||
<h3>Speedy delivery</h3>
|
||||
|
||||
<p>I work in small increments, so you'll begin seeing valuable code changes in mere days.</p>
|
||||
|
||||
<h3>Quality guaranteed</h3>
|
||||
|
||||
<p>High quality code that just works. Or I fix it, for free!</p>
|
||||
|
||||
<hr>
|
||||
|
||||
{% embed 'callout.html.twig' with {
|
||||
title: 'Ready to get started?',
|
||||
} %}
|
||||
{% block callout_content %}
|
||||
<p><strong>Only one spot left.</strong> Book your spot now.</p>
|
||||
|
||||
{% include "subscription-plans" with { plans: page.plans } %}
|
||||
{% endblock %}
|
||||
{% endembed %}
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>Book a free call</h2>
|
||||
|
||||
<p>And we'll figure out what's best for you.</p>
|
||||
|
||||
{% include 'button' with {
|
||||
text: 'Get in touch',
|
||||
type: 'secondary',
|
||||
url: 'https://savvycal.com/opdavies/drupal-consulting-exploratory-call',
|
||||
withArrow: true,
|
||||
} %}
|
||||
|
||||
<hr>
|
||||
|
||||
{% include 'testimonials' with {
|
||||
limit: 5,
|
||||
tag: 'subscription',
|
||||
title: 'Kind words from clients',
|
||||
} %}
|
||||
|
||||
<hr>
|
||||
|
||||
<h2>Frequently asked questions</h2>
|
||||
|
||||
{% for faq in page.faqs %}
|
||||
<h3>{{ faq.0 }}</h3>
|
||||
|
||||
{{ faq.1|markdown }}
|
||||
{% endfor %}
|
||||
|
||||
<hr>
|
||||
|
||||
{% include 'testimonials' with {
|
||||
tag: 'subscription',
|
||||
offset: 5,
|
||||
title: 'More kind words from clients and colleagues',
|
||||
} %}
|
||||
|
||||
{# TODO: add daily subscription form #}
|
||||
|
||||
{% include 'drupal-association' %}
|
||||
{% endblock %}
|
|
@ -1,15 +0,0 @@
|
|||
---
|
||||
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>
|
|
@ -1,70 +0,0 @@
|
|||
---
|
||||
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 %}
|
|
@ -1,82 +0,0 @@
|
|||
---
|
||||
title: Pair program with me
|
||||
price: 499
|
||||
link: https://savvycal.com/opdavies/pair
|
||||
---
|
||||
|
||||
{% block content %}
|
||||
|
||||
{% import "_macros" as macros %}
|
||||
|
||||
{# 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 {{ macros.yearsOfExperience }} 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 %}
|
|
@ -1,37 +0,0 @@
|
|||
---
|
||||
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 %}
|
|
@ -1,35 +0,0 @@
|
|||
---
|
||||
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.0 }}
|
||||
</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 %}
|
|
@ -1,21 +0,0 @@
|
|||
---
|
||||
title: Presentations
|
||||
use: [presentations]
|
||||
---
|
||||
|
||||
{% set today = 'today'|date('U') %}
|
||||
{% set presentation_count = data.presentations|reduce((count, presentation) => count + (presentation.events|filter(e => e.date|date('U') < today)|length), 0) %}
|
||||
|
||||
<p>Since September 2012, I have given {{ presentation_count }} 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 %}
|
|
@ -1,44 +0,0 @@
|
|||
---
|
||||
title: Press Info
|
||||
---
|
||||
|
||||
{% import "_macros" as macros %}
|
||||
|
||||
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 {{ macros.yearsOfExperience }} 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
|
|
@ -1,113 +0,0 @@
|
|||
---
|
||||
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 %}
|
|
@ -1,50 +0,0 @@
|
|||
---
|
||||
title: Search
|
||||
common_searches:
|
||||
- Drupal
|
||||
- Test-Driven Development
|
||||
- Automated testing
|
||||
- Refactoring
|
||||
- PHP
|
||||
- Tailwind CSS
|
||||
- Ansible
|
||||
- Ansistrano
|
||||
- Neomvim
|
||||
- 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://www.google.com/search?q=site%3Awww.oliverdavies.uk+%22{{ term }}%22">
|
||||
{{ term }}
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</aside>
|
|
@ -1,9 +0,0 @@
|
|||
---
|
||||
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>.
|
|
@ -1,33 +0,0 @@
|
|||
---
|
||||
title: Speaker Information
|
||||
---
|
||||
|
||||
{% import "_macros" as macros %}
|
||||
|
||||
## Bio
|
||||
|
||||
Oliver is a Software Developer and Drupal Expert with {{ macros.yearsOfExperience }} 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.
|
|
@ -1,8 +0,0 @@
|
|||
---
|
||||
title: Testimonials
|
||||
---
|
||||
|
||||
{% include 'testimonials' with {
|
||||
limit: 0,
|
||||
title: 'All Testimonials',
|
||||
} %}
|
|
@ -1,63 +0,0 @@
|
|||
---
|
||||
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>
|
|
@ -1,25 +0,0 @@
|
|||
---
|
||||
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