Update file extensions

This commit is contained in:
Oliver Davies 2017-07-11 01:08:32 +01:00
parent 364e2d887f
commit 91e638397d
35 changed files with 840 additions and 0 deletions

View file

@ -0,0 +1,9 @@
<div class="availability panel panel-default">
<div class="panel-heading">Availability</div>
<div class="panel-body">
{% for key, availability in site.availability %}
{% include 'availability/' ~ availability with { value: key } %}
{% endfor %}
</div>
</div>

View file

@ -0,0 +1,6 @@
<p>
<i class="fa fa-thumbs-o-up text-warning"></i>
{{ value == 'full' ? 'Currently have limited full-time capacity' }}
{{ value == 'part' ? 'Currently have limited part-time capacity' }}
</p>

View file

@ -0,0 +1,6 @@
<p>
<i class="fa fa-thumbs-o-down text-danger"></i>
{{ value == 'full' ? 'Currently no spare full-time capacity.' }}
{{ value == 'part' ? 'Currently no spare part-time capacity.' }}
</p>

View file

@ -0,0 +1,6 @@
<p>
<i class="fa fa-thumbs-o-up text-success"></i>
{{ value == 'full' ? 'Currently have available full-time capacity' }}
{{ value == 'part' ? 'Currently have available part-time capacity' }}
</p>

View file

@ -0,0 +1,26 @@
<div class="panel badges text-center">
<a class="badge--da-member" href="https://assoc.drupal.org/membership" title="Im a Drupal Association member.">
<img
src="{{ site.images_url }}/assets/images/da-individual-member.png"
alt="Drupal Association Individual Member"
width="152"
>
</a>
<a href="http://drupalcores.com/#{{ site.drupalorg.name }}">
<img
alt="I built Drupal 8 with hand holding a wrench on blue background"
src="{{ site.images_url }}/assets/images/drupal-8.jpg"
/>
</a>
<img
src="{{ site.images_url }}/assets/images/badges/acquia-certified-developer-drupal-8.png"
alt="Acquia Certified Developer - Drupal 8 Exam Badge"
height="147" width="147"
/>
<a href="http://conference.phpnw.org.uk/phpnw17">
<img src="{{ site.images_url }}/assets/images/badges/phpnw17.png" alt="">
</a>
</div>

View file

View file

@ -0,0 +1,12 @@
<div class="meetups">
<h2>Things that I organise</h2>
<ul>
{% for meetup in site.meetups %}
<li class="meetups--{{ meetup.name|lower|replace({ ' ': '-' }) }}">
<a href="{{ meetup.url }}" title="{{ meetup.name }}">
<img src="{{ site.images_url }}/assets/images/meetups/{{ meetup.logo }}" alt="{{ meetup.name }}">
</a>
</li>
{% endfor %}
</ul>
</div>

View file

@ -0,0 +1,41 @@
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="{{ site.url }}/">{{ site.title }}</a>
</div>
<div id="navbar" class="collapse navbar-collapse" role="navigation">
<ul class="nav navbar-nav">
<li class="{{ page.url == '/.' ? 'active' }}">
<a href="/">About</a>
</li>
<li class="{{ page.url == '/experience' ? 'active' }}">
<a href="/experience">Experience</a>
</li>
<li class="{{ page.url == '/testimonials' ? 'active' }}">
<a href="/testimonials">Testimonials</a>
</li>
<li class="{{ page.url == '/talks' or '/talks/' in page.url ? 'active' }}">
<a href="/talks">Talks</a>
</li>
<li class="{{ page.url == '/blog' or '/blog/' in page.url ? 'active' }}">
<a href="/blog">Blog</a>
</li>
<li class="{{ page.url == '/contact' or '/contact/' in page.url ? 'active' }}">
<a href="/contact">Contact</a>
</li>
</ul>
</div>{# .nav-collapse #}
</div>
</nav>

View file

@ -0,0 +1,46 @@
<meta property="og:url" content="{{ site.url }}{{ page.url }}">
<meta property="og:title" content="{{ og.title ? og.title|raw : page.title|raw }}"/>
{% if og.description %}
<meta property="og:description" content="{{ og.description|raw }}"/>
{% endif %}
{% if og.type %}
<meta property="og:type" content="{{ og.type }}"/>
{% endif %}
{% if og.image and og.image.url %}
<meta property="og:image" content="{{ site.url }}{{ og.image.url }}"/>
{% if og.image.type %}
<meta property="og:image:type" content="{{ og.image.type }}"/>
{% endif %}
{% if og.image.width %}
<meta property="og:image:width" content="{{ og.image.width }}"/>
{% endif %}
{% if og.image.height %}
<meta property="og:image:height" content="{{ og.image.height }}"/>
{% endif %}
{% else %}
<meta property="og:image" content="{{ site.url }}{{ site.avatar.url }}"/>
<meta property="og:image:height" content="327"/>
<meta property="og:image:type" content="image/jpg">
<meta property="og:image:width" content="327"/>
{% endif %}
{% if og.title %}
{% if og.image %}
<meta name="twitter:card" content="summary_large_image"/>
<meta name="twitter:image:src" content="{{ site.url }}{{ og.image.url }}">
{% else %}
<meta name="twitter:card" content="summary"/>
<meta name="twitter:image:src" content="{{ site.url }}{{ site.avatar.url }}">
{% endif %}
<meta name="twitter:creator" content="@{{ site.twitter.name }}"/>
<meta name="twitter:title" content="{{ og.title|raw }}"/>
<meta name="twitter:text:description" content="{{ og.description|raw }}"/>
<meta name="twitter:site" content="@{{ site.twitter.name }}"/>
{% endif %}
{% if page.hide_page %}
<meta name="robots" content="no-index, no-follow">
{% endif %}

View file

@ -0,0 +1,7 @@
<div class="about-author">
<h2>About the Author</h2>
<img src="{{ site.images_url }}{{ site.avatar.url }}" alt="Picture of Oliver" class="img-circle">
<p>Oliver Davies is a Web Developer, System Administrator and Drupal specialist based in the UK. He is a {{ site.work.role }} at <a href="{{ site.companies[site.work.company].url }}">{{ site.companies[site.work.company].name }}</a> and also provides freelance consultancy services for Drupal websites, PHP applications and Linux servers.</p>
</div>

View file

@ -0,0 +1,3 @@
<p class="post-feedback" style="font-style: italic">
<b>Have feedback on this post?</b> <a href="mailto:{{ site.email }}?subject=Feedback: {{ page.title }}">Email me</a> or <a href="https://twitter.com/intent/tweet?text=@{{ site.twitter.name }}&url={{ site.url }}{{ page.url|url_encode }}">send me a tweet</a>.
</p>

View file

@ -0,0 +1,4 @@
{% set title_tag = title_tag|default('h1') %}
<{{ title_tag }}>{{ page.title }}</{{ title_tag }}>
<p class="posted">{{ page.date|date('jS F Y') }}</p>

View file

@ -0,0 +1,17 @@
<div class="post-pager is-flex">
{% if page.previous_post %}
<div class="is-half">
<a href="{{ page.previous_post.url }}">
&laquo; {{ page.previous_post.title }}
</a>
</div>
{% endif %}
{% if page.next_post %}
<div class="is-half text-right">
<a href="{{ page.next_post.url }}">
{{ page.next_post.title }} &raquo;
</a>
</div>
{% endif %}
</div>

View file

@ -0,0 +1,11 @@
{% if page.related -%}
<h2>Related Posts</h2>
<ul>
{% for relate in page.related -%}
<li>
<a href="{{ relate.source.url }}">{{ relate.title }}</a>
</li>
{% endfor %}
</ul>
{%- endif %}

View file

@ -0,0 +1,8 @@
{% if page.tags %}
<p class="tags">
Tags:
{% for tag in page.tags %}
<a href="{{ site.url }}/blog/tags/{{ tag|url_encode(true) }}">{{ tag }}</a>{% if not loop.last %}, {% endif %}
{% endfor %}
</p>
{% endif %}

View file

@ -0,0 +1,18 @@
{% if data.posts and page.url != '/blog' %}
<div class="latest-posts panel panel-default">
<div class="latest-posts__heading panel-heading">Latest blog posts</div>
<ul class="list-group">
{% for post in data.posts|slice(0, site.latest_posts) %}
<li class="post list-group-item">
<span class="post__title">
<a href="{{ post.url }}">
{{ post.title }}
</a>
</span> -
<span class="post__date">{{ post.date|date(site.default_date_format) }}</span>
</li>
{% endfor %}
</ul>
</div>
{% endif %}

View file

@ -0,0 +1,21 @@
{% if page.company %}
{% set company = site.companies[page.company] %}
<div class="project-company {{ company.logo ? 'has-logo' : 'no-logo' }}">
<h2>Built {{ page.freelance ? 'for' : 'whilst at' }}</h2>
{% if company.logo %}
{% set name = '<img src="/assets/images/experience/' ~ company.logo ~ '" alt="' ~ company.name ~ '">' %}
{% else %}
{% set name = company.name %}
{% endif %}
{% if company.url %}
<a href="{{ company.url }}" title="{{ company.name }}">
{{ name|raw }}
</a>
{% else %}
{{ name|raw }}
{% endif %}
</div>
{% endif %}

View file

@ -0,0 +1,3 @@
{% if page.image -%}
<img src="/assets/images/projects/{{ page.image.name ?: page.image }}" alt="{{ page.image.alt }}">
{%- endif %}

View file

@ -0,0 +1,11 @@
{% if page.skills %}
<div class="project--skills">
<h2>Skills</h2>
<ul>
{% for item in page.skills|sort %}
<li>{{ site.skills[item].title }}</li>
{% endfor %}
</ul>
</div>
{% endif %}

View file

@ -0,0 +1,5 @@
{% if page.website %}
<a class="project-website btn btn-primary" href="{{ page.website }}">
View the website
</a>
{% endif %}

View file

@ -0,0 +1,11 @@
<ul class="skills-list is-flex flex-wrap list-style-none">
{% for skill in skills %}
<li class="skill">
<img
class="skill-image"
src="/assets/images/skills/{{ skill.image }}"
title="{{ skill.name }}"
alt="{{ skill.name }} logo">
</li>
{% endfor %}
</ul>

View file

@ -0,0 +1,13 @@
<h2>Skills</h2>
<p>I regularly use:</p>
{% include 'skills-list' with { skills: site.skills[0] } %}
<p>I am also familiar with:</p>
{% include 'skills-list' with { skills: site.skills[1] } %}
<p>I would like to do more:</p>
{% include 'skills-list' with { skills: site.skills[2] } %}

View file

@ -0,0 +1 @@
<script async class="speakerdeck-embed" data-id="{{ data_id }}" data-ratio="1.29456384323641" src="//speakerdeck.com/assets/embed.js"></script>

View file

@ -0,0 +1,81 @@
<div class="table-responsive">
<table class="table table-striped talks-table">
<thead>
<tr>
<th style="width: 20%">Date</th>
{% if not talk_page %}
<th style="width: 40%">Talk</th>
{% endif %}
<th>Event</th>
{% if not upcoming %}
<th style="width: 10%">Feedback</th>
{% endif %}
</tr>
</thead>
<tbody>
{% for row in events %}
{% set talk = false %}
{% set key = row.date.talk.id ?: row.date.talk %}
{% for item in row.talks if key == item.filename|split('.')|first %}
{% set talk = item %}
{% endfor %}
<tr>
<td class="vertical-middle">
{{ row.date.date|date(row.date.fuzzy_date ? 'F Y' : 'j F Y') }}
{% if row.date.time %}
<small class="display-block">{{ row.date.time }}</small>
{% endif %}
</td>
{% if not talk_page %}
<td>
{% if row.date.talk.title is defined %}
{{ row.date.talk.title }}
{% else %}
<a href="{{ talk.url }}">{{ talk.title }}</a>
{% endif %}
<small class="display-block">
{{ row.date.talk.type ?: talk.type }}
</small>
</td>
{% endif %}
<td class="vertical-middle">
{% if row.event.website %}
<a href="{{ row.event.website }}">
{{ row.event.name }}
</a>
{% else %}
{{ row.event.name }}
{% endif %}
<small class="display-block">
{{ row.event.location }}
</small>
</td>
{% if not upcoming %}
<td class="vertical-middle">
{% if row.date.feedback %}
<a
href="{{ row.date.feedback }}"
class="btn btn-primary"
title="Read or leave feedback for this talk"
>
<i class="fa fa-comment-o"></i> joind.in
</a>
{% endif %}
</td>
{% endif %}
</tr>
{% endfor %}
</tbody>
</table>
</div>

View file

@ -0,0 +1,5 @@
<p>
<blockquote class="twitter-tweet" data-cards="hidden" lang="en">
{{ content|raw }}
</blockquote>
</p>

View file

@ -0,0 +1,68 @@
<!DOCTYPE html>
<html class="no-js" lang="en-GB">
<head>
<title>{% if page.url == '/.' %}{{ site.subtitle }} | {{ site.title }}{% else %}{{ page.title }} | {{ site.title }}{% endif %}</title>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
{% if page.meta.description %}
<meta name="description" content="{{ page.meta.description|e('html') }}">
{% endif %}
{% include 'og' with { og: page.meta.og } %}
<link rel="stylesheet" href="{{ site.url }}/assets/css/main.css">
{% block stylesheets '' %}
{% for size in site.apple_touch_icon_sizes %}
<link rel="apple-touch-icon" href="{{ site.avatar.url }}?s={{ size }}" sizes="{{ size }}x{{ size }}">
{% endfor %}
{% for size in site.favicon_sizes %}
<link rel="icon" href="{{ site.avatar.url }}?s={{ size }}" sizes="{{ size }}x{{ size }}">
{% endfor %}
</head>
<body class="{{ page.blocks.body_classes }}">
{% include 'nav' %}
<div class="container">
<div class="row">
<main class="col-md-9">
{% block content_top %}{% endblock %}
{% block content_wrapper %}{% block content %}{% endblock %}{% endblock %}
{% block content_bottom %}{% endblock %}
</main>
{% block sidebar_wrapper %}
<div class="col-md-3">
{% block sidebar %}
{% include 'badges' %}
{% include 'availability' %}
{% include 'posts/latest' %}
{# {% include 'skills' %} #}
{% endblock %}
</div>
{% endblock %}
</div>{# .row #}
</div>{# .container #}
<footer class="container">
<p class="copyright">
&copy; 2010-{{ 'now'|date('Y') }} {{ site.title }}. Built with <a href="https://sculpin.io">Sculpin</a>.
</p>
{% include 'meetups' %}
</footer>
<script src="{{ site.url }}/assets/js/site.js"></script>
{% if site.google_analytics_tracking_id %}
<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', '{{ site.google_analytics_tracking_id }}', 'auto'); ga('send', 'pageview');</script>
{% endif %}
{% block scripts '' %}
</body>
</html>

View file

@ -0,0 +1,5 @@
{% extends 'default' %}
{% block content_top %}
<h1>{{ page.title }}</h1>
{% endblock %}

View file

@ -0,0 +1,17 @@
{% extends 'default' %}
{% block content_wrapper %}
{% include 'post/header' %}
{% block content %}{% endblock %}
{# {% include 'post/feedback' %} #}
{# {% include 'post/related' %} #}
{% include 'post/tags' %}
{% include 'post/pager' %}
{% include 'post/about-author' %}
{% endblock %}
{% block stylesheets %}
<link rel="stylesheet" href="{{ site.url }}/assets/css/blog-post.css">
{% endblock %}

View file

@ -0,0 +1,17 @@
{% extends 'page' %}
{% block body_classes 'page--project' %}
{% block content_wrapper %}
{% include 'project/image' %}
{% block content %}{% endblock %}
{% include 'project/website' %}
{% include 'project/skills' %}
{% include 'project/company' %}
{% endblock %}
{% block stylesheets %}
<link rel="stylesheet" href="{{ site.url }}/assets/css/project.css">
{% endblock %}

View file

@ -0,0 +1,9 @@
<!DOCTYPE html>
{% spaceless %}
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="refresh" content="0;url={{ page.destination.url }}" />
</head>
</html>
{% endspaceless %}

View file

@ -0,0 +1,56 @@
{% extends 'default' %}
{% block body_classes 'talk talk-full' %}
{% block content_top %}
<h1>{{ page.title }}</h1>
{% endblock %}
{% block content_wrapper %}
<div class="talk-description">
{% block content %}{% endblock %}
</div>
{% if page.slides.embed %}
<div class="talk-slides">
<h2>Slides</h2>
<div class="presentation">
{{ page.slides.embed|raw }}
</div>{# .presentation #}
</div>{# .talk-slides #}
{% endif %}
{% if page.video.embed %}
<div class="talk-video">
<h2>Video</h2>
<div class="embed-container">
{{ page.video.embed|raw }}
</div>
</div>{# .talk-video #}
{% endif %}
<div class="talk-events">
<h2>Events</h2>
{% set events = [] %}
{% for date in site.events.dates %}
{% set key = (date.talk.id is defined) ? date.talk.id : date.talk %}
{% set talk = (page.id is defined) ? page.id : page.url|split('/')|last %}
{% if key == talk %}
{% set events = events|merge([{
date: date,
event: site.events.events[date.event],
}]) %}
{% endif %}
{% endfor %}
{% include 'talks-table' with {
events: events,
talk_page: true,
} %}
</div>{# .talk-events #}
{% endblock %}
{% block stylesheets %}
<link rel="stylesheet" href="{{ site.url }}/assets/css/talk.css">
{% endblock %}

43
source/contact.html.twig Normal file
View file

@ -0,0 +1,43 @@
---
title: Contact
layout: page
use: [posts]
---
{% block content %}
<p>To send me an email, complete the form below.</p>
<form action="https://formspree.io/{{ site.email }}" method="POST">
<div class="form__name form-group">
<label for="name">Name</label>
<input type="text" class="form-control" name="name" required>
</div>
<div class="form__email form-group">
<label for="email">Email</label>
<input type="email" class="form-control" name="email" required>
</div>
<div class="form__subject form-group">
<label for="subject">Subject</label>
<input type="text" class="form-control" name="subject" required>
</div>
<div class="form__message form-group">
<label for="message">Message</label>
<textarea name="message" class="form-control" rows="5" required></textarea>
</div>
<div class="form__actions">
<button class="btn btn-primary" type="submit">
<i class="fa fa-send"></i>
Send email
</button>
</div>
<input type="hidden" name="_next" value="{{ site.url }}/contact-thanks/" />
<input type="text" name="_gotcha" style="display: none" />
</form>
{% endblock %}
{% block body_classes 'page--contact' %}

145
source/experience.html.twig Normal file
View file

@ -0,0 +1,145 @@
---
layout: default
title: Experience
experiences:
- company: microserve
location: Bristol, England
role: Senior Drupal Developer
start: March 2017
end: ~
description: ~
- company: freelance
location: Remote
role: 'Web Developer & System Administrator'
start: 2007
end: ~
featured: true
description: |
Working on Drupal and Symfony development, maintenance and support projects in my spare time.
Administration of Debian, Ubuntu and CentOS servers, and configuration using Puppet, or more recently, Ansible.
- company: appnovation
location: Cardiff, Wales
role: Senior Drupal Developer
start: May 2016
end: March 2017
description: |
Drupal 7 and 8 site building, custom module development and theming.
Part of various pre-sales teams, including the companys first UK Drupal 8 project and first FTSE 100 client.
- company: cti
role: Lead Drupal Developer
location: Remote
start: November 2015
end: May 2016
description: |
Working on various Drupal 7 projects for clients including Greater London Authority (http://www.london.gov.uk), British Land and British Council, as well as various retainer contracts.
Working on internal Drupal 8 learning initiatives, focussing on custom module development and data migration.
Initial development of a CLI application for generating new and auditing existing codebases to ensure consistency across projects. This uses various Symfony components - mainly the Console and Filesystem components.
- company: microserve
location: Bristol, England
role: Senior Drupal Developer
start: July 2015
end: November 2015
description: |
Full-stack Drupal development, focussing on data migration.
Lead Developer of the [road.cc](http://road.cc) rebuild project onto Drupal 7, including working with non-Drupal PHP applications and utilising of Symfony components, and interacting with Drupal via REST.
Community and contribution advocate.
- company: drupal_association
role: Drupal.org Developer
location: Remote
start: 2014
end: July 2015
description: |
Maintaining and improving Drupal.org - the home of the Drupal community.
Speaking at user groups and DrupalCamps to promote the Drupal Association.
- company: precedent
location: Cardiff, Wales
role: Senior Drupal Developer
start: 2013
end: 2014
description: |
Drupal 7 website development, including site building, theming, module development, data migration and server configuration.
- company: nomensa
location: Bristol, England
role: 'Contract Drupal Developer / Application Developer & System Administrator'
start: 2012
end: 2013
description: |
Drupal 7 website development and Linux server administration.
I originally started as a contractor, and later took a staff role.
- company: proctors
location: Bristol, England
role: 'PHP Developer'
start: 2011
end: 2012
description: |
Website development, mainly with Drupal and PHP, including the agencys first Drupal 7 project.
- company: horse_country
location: Cwmbran, Wales
role: Web Developer
start: 2010
end: 2011
description: |
Maintaining and adding new features to the Horse & Country TV website (Drupal 6).
use: [posts]
redirect:
- services/
- work/
---
{% block content %}
<h1>Experience</h1>
{% for experience in page.experiences %}
{% set company = site.companies[experience.company] %}
<div class="experience-item{% if company.logo %} has-logo{% endif %}">
{% if company.logo %}
<div class="experience-item-logo">
<img src="{{ site.images_url }}/assets/images/experience/{{ company.logo }}" alt="{{ company.name }} logo">
</div>
{% endif %}
<div class="experience-item-inner">
<h2>{{ company.name }}</h2>
{% if company.url -%}
<a class="experience-item-website" href="{{ company.url }}">
{{- company.url -}}
</a>
{%- endif %}
<div class="experience-item-role">
{{- experience.role }} from {{ experience.start }} to {{ experience.end|default('Present') -}}
{%- if experience.location %} ({{ experience.location }}){% endif %}.
</div>
{% if experience.description %}
<div class="experience-item-description">
{{ experience.description|markdown }}
</div>
{% endif %}
</div>{# /.inner #}
</div>
{% endfor %}
{% endblock %}
{% block stylesheets %}
<link rel="stylesheet" href="{{ site.url }}/assets/css/experience.css">
{% endblock %}

14
source/projects.html.twig Normal file
View file

@ -0,0 +1,14 @@
---
layout: page
title: Projects
use: [projects, posts]
redirect:
- portfolio/
---
<ul>
{% for project in data.projects|reverse %}
<li>{% spaceless %}
<a href="{{ project.url }}">{{ project.title }}</a>
{% endspaceless %}</li>
{% endfor %}
</ul>

View file

@ -0,0 +1,95 @@
---
layout: default
title: Testimonials
testimonials:
- name: Chris Jarvis
image: chris-jarvis.jpg
role: Developer at [Microserve](https://microserve.io)
text: |
Oliver is an amazing colleague, he's professional, full of knowledge and I could not recommend him more.</p>
- name: Josh Mitchell
role: CTO at the [Drupal Association](https://assoc.drupal.org)
image: josh-mitchell.png
text: |
Oliver is a skilled Drupal developer with a passion for the Drupal community. As his direct supervisor, I was able to watch Oliver grow with the Drupal Association and contribute an amazing amount of effort and integrity to all of his work.
Everything we have thrown at Oliver, he has approached with an open and flexible mind that has allowed him to work on a wide range of projects and features for Drupal products.
- name: Holly Ross
role: Executive Director at the [Drupal Association](https://assoc.drupal.org)
image: holly-ross.png
text: |
Oliver has been an outstanding contributor to the Drupal Association team. He is a talented developer who writes great code and applies his curiosity and love of learning to every project. He is also a fantastic team member, who gives to the team as much as he gets.
Oliver is the embodiment of everything good about the Drupal community.
- name: Léonie Watson
role: Director of Accessibility at [Nomensa](http://www.nomensa.com)
image: leonie-watson.jpg
text: |
Oliver is a flexible and hardworking developer, with a terrific knowledge of Drupal. He promotes accessibility best practice within the Drupal community, and is always happy to share his knowledge with other people.
- name: James Chapman
role: Director at [Development Done Right](http://www.developmentdoneright.co.uk)
image: james-chapman.png
text: |
We used Oliver on a number of occasions throughout 2012 and I have to say we've been delighted with his work. His skills working with Drupal are excellent particularly with custom module development and we wouldnt hesitate to recommend him others.
- name: Daniel Easterbrook
role: Digital Strategy Consultant
text: |
Oliver is seasoned Drupal and all round highly skilled and experienced web developer. I have worked with Oliver on an important project where he was reliable, prompt and ensured strict client deadline delivery and confidentiality at all times.
- name: Brian Hartwell
role: Interactive Creative Director
text: |
Oliver was great to work with. He has expert knowledge with Drupal and delivered exactly what we were looking for on time. He's understanding, friendly and easy to get along with. I would enjoy working with him again in the future.
- name: Marlon Duncanson
role: Brand & Web Specialist
text: |
Oliver is a great guy and really easy to work with. He really goes the extra mile to make sure the project is done properly. I would recommend him and will not hesitate to use him again in future.
- name: Brian Healy
image: brian-healy.png
role: Director of Business Development at [Tincan](http://tincan.co.uk)
text: |
Oliver was fantastic to work with - pro-active and highly responsive, he worked well remotely and as part of a project team. His understanding of the project requirement(s) and ability to translate it into working code was essential and he delivered.
- name: Ed Welsby
image: ed-welsby.png
role: Senior Developer at [Proctor & Stevenson](http://www.proctors.co.uk)
text: |
Oliver was great to work with, he has a solid knowledge of the various aspects of web development and never minded helping me out with Linux commands!
use: [posts]
---
{% block content %}
<h1>Testimonials</h1>
{% for testimonial in page.testimonials %}
{% set company = testimonial.company %}
<article class="testimonial">
<h2 class="testimonial__name">{{ testimonial.name }}</h2>
{% if testimonial.image %}
<img class="testimonial__image pull-right img-circle" src="{{ site.url }}/assets/images/testimonials/{{ testimonial.image }}" alt="{{ testimonial.name }}"/>
{% endif %}
{% if testimonial.role %}
<div class="testimonial__role">
{{ testimonial.role|markdown}}
</div>
{% endif %}
{{ testimonial.text|markdown }}
</article>
{% endfor %}
{% endblock %}
{% block body_classes 'page--testimonials' %}
{% block stylesheets %}
<link rel="stylesheet" href="{{ site.url }}/assets/css/testimonials.css">
{% endblock %}