docs: update the Call page
Update the Call page with some updated text and some product-specific testimonials.
This commit is contained in:
parent
7c36c93917
commit
e2f57eaf92
5 changed files with 52 additions and 33 deletions
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
import { getCollection, getEntries, getEntry } from 'astro:content';
|
import { getCollection } from 'astro:content';
|
||||||
import _ from "lodash";
|
import _ from "lodash";
|
||||||
|
|
||||||
interface Props {
|
interface Props {
|
||||||
|
@ -8,23 +8,26 @@ interface Props {
|
||||||
|
|
||||||
const names = _(Astro.props.names);
|
const names = _(Astro.props.names);
|
||||||
const testimonials = await getCollection('testimonial', ({ id }) => names.includes(id));
|
const testimonials = await getCollection('testimonial', ({ id }) => names.includes(id));
|
||||||
const reversedTestimonials = _(testimonials).reverse()
|
const sortedTestimonials = _(testimonials)
|
||||||
|
.sort((a, b) => new Date(a.date) < new Date(b.date))
|
||||||
|
.reverse()
|
||||||
|
.value();
|
||||||
---
|
---
|
||||||
|
|
||||||
{testimonials && (
|
{testimonials && (
|
||||||
<h2>What others have said</h2>
|
<h2>What others have said</h2>
|
||||||
|
|
||||||
<div class="mt-6 space-y-14">
|
<div class="mt-6 space-y-14">
|
||||||
{reversedTestimonials.map(testimonial => (
|
{_(sortedTestimonials).map(({ data: { image, name, tagline, text } }) => (
|
||||||
<article>
|
<article>
|
||||||
<blockquote class="mt-4" set:html={testimonial.data.text} />
|
<blockquote class="mt-4" set:html={text} />
|
||||||
|
|
||||||
<footer class="flex items-center space-x-4 space-x-reverse">
|
<footer class="flex items-center space-x-4 space-x-reverse">
|
||||||
<span class="text-base">{testimonial.data.name} - {testimonial.data.tagline}</span>
|
<span class="text-base">{name}{tagline && (<> - {tagline}</>)}</span>
|
||||||
|
|
||||||
{testimonial.data.image && (
|
{image && (
|
||||||
<span class="order-first not-prose">
|
<span class="order-first not-prose">
|
||||||
<img width="50" height="50" class="rounded-full border w-15 h-15" src={`/images/recommendations/${testimonial.data.image}`} />
|
<img width="50" height="50" class="rounded-full border w-15 h-15" src={`/images/recommendations/${image}`} />
|
||||||
</span>
|
</span>
|
||||||
)}
|
)}
|
||||||
</footer>
|
</footer>
|
||||||
|
|
|
@ -53,9 +53,10 @@ const talkCollection = defineCollection({
|
||||||
const testimonialCollection = defineCollection({
|
const testimonialCollection = defineCollection({
|
||||||
type: 'data',
|
type: 'data',
|
||||||
schema: z.object({
|
schema: z.object({
|
||||||
|
date: z.string().optional(),
|
||||||
image: z.string().or(z.null()),
|
image: z.string().or(z.null()),
|
||||||
name: z.string(),
|
name: z.string(),
|
||||||
tagline: z.string(),
|
tagline: z.string().or(z.null()),
|
||||||
text: z.string(),
|
text: z.string(),
|
||||||
url: z.string().or(z.null()),
|
url: z.string().or(z.null()),
|
||||||
}),
|
}),
|
||||||
|
|
8
src/content/testimonial/michael-itkoff2.json
Normal file
8
src/content/testimonial/michael-itkoff2.json
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
{
|
||||||
|
"name": "Michael Itkoff",
|
||||||
|
"tagline": "Cofounder",
|
||||||
|
"url": "https://www.daylightbooks.org",
|
||||||
|
"text": "<p>Ollie handled the tech support issues efficiently and effectively, leaving time at the end for further troubleshooting and follow up. Much appreciated!</p>",
|
||||||
|
"image": "",
|
||||||
|
"date": "2023-07-13"
|
||||||
|
}
|
9
src/content/testimonial/tom-evans.json
Normal file
9
src/content/testimonial/tom-evans.json
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "Tom Evans",
|
||||||
|
"tagline": null,
|
||||||
|
"text": "<p>I had the opportunity and good fortune to work with Oliver solving two problems that I was having on a Drupal Commerce site. I have done several Drupal sites using UberCart, but since it is deprecated, I chose to use Commerce. I had searched, posted to forums, and other normal means to find answers to my problems, to no response and to no avail.</p><p>I got a referral to Oliver and scheduled an appointment to discuss the problems on a Zoom call. After showing him via screen share where I was stumped, he offered different approaches to what I was doing, which I was fine with as long as it worked.</p><p>Once we solved the first problem, I was really elated and then focused on the second one, which was an easier fix. So in a short period of time, both problems were fixed and tested.</p><p>I found Oliver was affable and easy to work with. He has a strong work ethic and a desire to solve problems for his customers and can recommend working with him. I think one of his strengths is to find alternative solutions to problems.</p>",
|
||||||
|
"image": null,
|
||||||
|
"url": null,
|
||||||
|
"date": "2023-07-14"
|
||||||
|
}
|
|
@ -2,13 +2,10 @@
|
||||||
layout: ~/layouts/PageLayout.astro
|
layout: ~/layouts/PageLayout.astro
|
||||||
title: Book a 1-on-1 consulting call
|
title: Book a 1-on-1 consulting call
|
||||||
link: https://savvycal.com/opdavies/consulting-call
|
link: https://savvycal.com/opdavies/consulting-call
|
||||||
price: 350
|
price: £350
|
||||||
testimonials:
|
testimonials:
|
||||||
- anonymous
|
- michael-itkoff2
|
||||||
- mick-felton
|
- tom-evans
|
||||||
- michael-itkoff
|
|
||||||
- huw-davies
|
|
||||||
- scott-euser
|
|
||||||
---
|
---
|
||||||
|
|
||||||
import Button from "~/components/Button.astro";
|
import Button from "~/components/Button.astro";
|
||||||
|
@ -20,21 +17,34 @@ import { numberOfYears } from '~/utils';
|
||||||
## Who is this for?
|
## Who is this for?
|
||||||
*/}
|
*/}
|
||||||
|
|
||||||
## What I can help you with
|
As a professional Software Developer and Consultant with over {numberOfYears} years of Drupal and PHP experience, I have a lot of knowledge that I use to help customers and their projects.
|
||||||
|
|
||||||
|
## Some things I can help you with
|
||||||
|
|
||||||
- How to approach a new project or task.
|
- How to approach a new project or task.
|
||||||
- Writing your first automated tests or starting with test-driven development.
|
- PHP and Drupal fundamentals and best practices.
|
||||||
|
- Adding eCommerce functionality with Drupal Commerce.
|
||||||
|
- Upgrading Drupal websites from unsupported versions.
|
||||||
|
- Writing your first automated tests with PHPUnit or starting with test-driven development.
|
||||||
- Introducing static analysis or other code quality tools to your project.
|
- Introducing static analysis or other code quality tools to your project.
|
||||||
|
- Adopting a utility-first CSS approach, e.g. Tailwind CSS, within a new or existing theme.
|
||||||
|
- Configuring continuous integration (CI) pipelines with GitHub Actions, GitLab CI or Bitbucket Pipelines.
|
||||||
- Automating tasks with Docker or Ansible.
|
- Automating tasks with Docker or Ansible.
|
||||||
- Help to fix a bug or some broken code.
|
- Help fixing a bug or some broken code.
|
||||||
- Reviewing your code and providing advice and suggestions.
|
- Reviewing your code and providing advice and suggestions.
|
||||||
|
|
||||||
In this 1-on-1 video call, I can help you answer questions in these areas or any others you may have.
|
In this 1-on-1 video call, I can help you answer questions in these areas or any others you may have.
|
||||||
|
|
||||||
Price: £{frontmatter.price}
|
Price: {frontmatter.price}
|
||||||
|
|
||||||
<Button href={frontmatter.link} text="Book your call now" />
|
<Button href={frontmatter.link} text="Book your call now" />
|
||||||
|
|
||||||
|
## 100% money back guarantee!
|
||||||
|
|
||||||
|
If you don’t find the call valuable, just let me know and I’ll refund 100% of the cost.
|
||||||
|
|
||||||
|
<Testimonials names={frontmatter.testimonials} />
|
||||||
|
|
||||||
## Who am I?
|
## Who am I?
|
||||||
|
|
||||||
- I'm an Acquia-certified Drupal expert with over {numberOfYears} years of development experience.
|
- I'm an Acquia-certified Drupal expert with over {numberOfYears} years of development experience.
|
||||||
|
@ -43,25 +53,13 @@ Price: £{frontmatter.price}
|
||||||
- I'm a multiple-time DrupalCon speaker who regularly presents talks and workshops at conferences and meetups.
|
- I'm a multiple-time DrupalCon speaker who regularly presents talks and workshops at conferences and meetups.
|
||||||
|
|
||||||
<Callout title="Ready to book your call?">
|
<Callout title="Ready to book your call?">
|
||||||
<Button href={frontmatter.link} text={`Book now for £${frontmatter.price}`} />
|
<Button href={frontmatter.link} text={`Book now for ${frontmatter.price}`} />
|
||||||
|
|
||||||
<p class="mb-0">You can pay and reserve your time slot straight away. There are a few open slots each month. If, after this call, you decide to do a longer engagement with me, the cost of this call will be deducted from that engagement.</p>
|
<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>
|
||||||
</Callout>
|
|
||||||
|
|
||||||
## 100% money back guarantee!
|
|
||||||
|
|
||||||
If you don’t find the call valuable, just let me know and I’ll refund 100% of the cost.
|
|
||||||
|
|
||||||
<Testimonials names={frontmatter.testimonials} />
|
|
||||||
|
|
||||||
<Callout title="Ready to book your call?">
|
|
||||||
<Button href={frontmatter.link} text={`Book now for £${frontmatter.price}`} />
|
|
||||||
|
|
||||||
<p class="mb-0">You can pay and reserve your time slot straight away. There are a few open slots each month. If, after this call, you decide to do a longer engagement with me, the cost of this call will be deducted from that engagement.</p>
|
|
||||||
</Callout>
|
</Callout>
|
||||||
|
|
||||||
## Availability is limited
|
## Availability is limited
|
||||||
|
|
||||||
I’m only available for a few 1-on-1 calls per month.
|
I’m only available for a few 1-on-1 calls per month.
|
||||||
|
|
||||||
Scheduling is first come, first served, so the sooner you book your call, the sooner you will have the answers you need to move your project forward.
|
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.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue