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
|
@ -1,5 +1,5 @@
|
|||
---
|
||||
import { getCollection, getEntries, getEntry } from 'astro:content';
|
||||
import { getCollection } from 'astro:content';
|
||||
import _ from "lodash";
|
||||
|
||||
interface Props {
|
||||
|
@ -8,23 +8,26 @@ interface Props {
|
|||
|
||||
const names = _(Astro.props.names);
|
||||
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 && (
|
||||
<h2>What others have said</h2>
|
||||
|
||||
<div class="mt-6 space-y-14">
|
||||
{reversedTestimonials.map(testimonial => (
|
||||
{_(sortedTestimonials).map(({ data: { image, name, tagline, text } }) => (
|
||||
<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">
|
||||
<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">
|
||||
<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>
|
||||
)}
|
||||
</footer>
|
||||
|
|
|
@ -53,9 +53,10 @@ const talkCollection = defineCollection({
|
|||
const testimonialCollection = defineCollection({
|
||||
type: 'data',
|
||||
schema: z.object({
|
||||
date: z.string().optional(),
|
||||
image: z.string().or(z.null()),
|
||||
name: z.string(),
|
||||
tagline: z.string(),
|
||||
tagline: z.string().or(z.null()),
|
||||
text: z.string(),
|
||||
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
|
||||
title: Book a 1-on-1 consulting call
|
||||
link: https://savvycal.com/opdavies/consulting-call
|
||||
price: 350
|
||||
price: £350
|
||||
testimonials:
|
||||
- anonymous
|
||||
- mick-felton
|
||||
- michael-itkoff
|
||||
- huw-davies
|
||||
- scott-euser
|
||||
- michael-itkoff2
|
||||
- tom-evans
|
||||
---
|
||||
|
||||
import Button from "~/components/Button.astro";
|
||||
|
@ -20,21 +17,34 @@ import { numberOfYears } from '~/utils';
|
|||
## 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.
|
||||
- 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.
|
||||
- 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.
|
||||
- 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.
|
||||
|
||||
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" />
|
||||
|
||||
## 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?
|
||||
|
||||
- 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.
|
||||
|
||||
<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>
|
||||
</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>
|
||||
<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>
|
||||
|
||||
## Availability is limited
|
||||
|
||||
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…
Reference in a new issue