Compare commits
No commits in common. "main" and "start" have entirely different histories.
|
@ -1,27 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Do not edit this file. It is automatically generated by https://www.oliverdavies.uk/build-configs.
|
|
||||||
|
|
||||||
# Load the issue ID from an `.issue-id` file within the project and replace the
|
|
||||||
# `ISSUE_ID` placeholder within a Git commit message.
|
|
||||||
#
|
|
||||||
# For example, running `echo "OD-123" > .issue-id` will add `Refs: OD-123` to
|
|
||||||
# the commit message.
|
|
||||||
#
|
|
||||||
# This also works with multiple issue IDs in the same string, e.g.
|
|
||||||
# "OD-123 OD-456", or IDs on multiple lines.
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
PROJECT_DIR=$(git rev-parse --show-toplevel)
|
|
||||||
ISSUE_FILE="$PROJECT_DIR/.issue-id"
|
|
||||||
|
|
||||||
if [ -f "${ISSUE_FILE}" ]; then
|
|
||||||
ISSUE_IDS=$(cat "${ISSUE_FILE}" | tr '\n' ',' | tr ' ' ',' | sed 's/,$//' | sed 's/,/, /g')
|
|
||||||
|
|
||||||
if [ -n "${ISSUE_IDS}" ]; then
|
|
||||||
sed -i.bak "s/# Refs:/Refs: $ISSUE_IDS/" "$1"
|
|
||||||
fi
|
|
||||||
fi
|
|
14
.gitignore
vendored
|
@ -1,11 +1,15 @@
|
||||||
# Do not edit this file. It is automatically generated by https://www.oliverdavies.uk/build-configs.
|
# Do not edit this file. It is automatically generated by https://www.oliverdavies.uk/build-configs.
|
||||||
|
|
||||||
/.phpunit.result.cache
|
/*
|
||||||
/output_*/
|
|
||||||
/vendor/
|
|
||||||
|
|
||||||
/.direnv/
|
!/.gitignore
|
||||||
|
!/app/
|
||||||
|
!/build.yaml
|
||||||
|
!/composer.{json,lock}
|
||||||
|
!/justfile
|
||||||
|
!/source/
|
||||||
|
|
||||||
|
!/flake.{nix,lock}
|
||||||
|
|
||||||
!/assets/
|
!/assets/
|
||||||
/source/build/
|
/source/build/
|
||||||
/node_modules/
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
MD013: false
|
|
||||||
MD041: false
|
|
|
@ -1,17 +0,0 @@
|
||||||
# This file is used by editors and IDEs to unify coding standards
|
|
||||||
# @see http://EditorConfig.org
|
|
||||||
# @standards PHP: http://www.php-fig.org/psr/psr-2/
|
|
||||||
root = true
|
|
||||||
|
|
||||||
# Default configuration (applies to all file types)
|
|
||||||
[*]
|
|
||||||
charset = utf-8
|
|
||||||
end_of_line = lf
|
|
||||||
insert_final_newline = true
|
|
||||||
trim_trailing_whitespace = true
|
|
||||||
indent_size = 4
|
|
||||||
indent_style = space
|
|
||||||
|
|
||||||
# Markdown customizations
|
|
||||||
[*.md]
|
|
||||||
trim_trailing_whitespace = false
|
|
|
@ -1 +0,0 @@
|
||||||
use flake
|
|
|
@ -1,27 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Do not edit this file. It is automatically generated by https://www.oliverdavies.uk/build-configs.
|
|
||||||
|
|
||||||
# Load the issue ID from an `.issue-id` file within the project and replace the
|
|
||||||
# `ISSUE_ID` placeholder within a Git commit message.
|
|
||||||
#
|
|
||||||
# For example, running `echo "OD-123" > .issue-id` will add `Refs: OD-123` to
|
|
||||||
# the commit message.
|
|
||||||
#
|
|
||||||
# This also works with multiple issue IDs in the same string, e.g.
|
|
||||||
# "OD-123 OD-456", or IDs on multiple lines.
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
PROJECT_DIR=$(git rev-parse --show-toplevel)
|
|
||||||
ISSUE_FILE="$PROJECT_DIR/.issue-id"
|
|
||||||
|
|
||||||
if [ -f "${ISSUE_FILE}" ]; then
|
|
||||||
ISSUE_IDS=$(cat "${ISSUE_FILE}" | tr '\n' ',' | tr ' ' ',' | sed 's/,$//' | sed 's/,/, /g')
|
|
||||||
|
|
||||||
if [ -n "${ISSUE_IDS}" ]; then
|
|
||||||
sed -i.bak "s/# Refs:/Refs: $ISSUE_IDS/" "$1"
|
|
||||||
fi
|
|
||||||
fi
|
|
11
_finish/.gitignore
vendored
|
@ -1,11 +0,0 @@
|
||||||
# Do not edit this file. It is automatically generated by https://www.oliverdavies.uk/build-configs.
|
|
||||||
|
|
||||||
/.phpunit.result.cache
|
|
||||||
/output_*/
|
|
||||||
/vendor/
|
|
||||||
|
|
||||||
/.direnv/
|
|
||||||
|
|
||||||
!/assets/
|
|
||||||
/source/build/
|
|
||||||
/node_modules/
|
|
|
@ -1,2 +0,0 @@
|
||||||
MD013: false
|
|
||||||
MD041: false
|
|
|
@ -1,5 +0,0 @@
|
||||||
sculpin_content_types:
|
|
||||||
speakers:
|
|
||||||
permalink: /speaker/:basename/
|
|
||||||
posts:
|
|
||||||
enabled: false
|
|
|
@ -1,39 +0,0 @@
|
||||||
name: 'PHPSW'
|
|
||||||
locale: en
|
|
||||||
talks:
|
|
||||||
- title: Building Static Websites with PHP and Sculpin
|
|
||||||
speaker: Oliver Davies
|
|
||||||
date: 2024-02-14
|
|
||||||
- title: 'FPGA^2: An open-source FPGA'
|
|
||||||
speaker: Robin Hodson
|
|
||||||
date: 2024-02-14
|
|
||||||
- title: Introducing Domain Driven Design
|
|
||||||
speaker: Rob Allen
|
|
||||||
date: 2024-01-10
|
|
||||||
- title: Building Better TUIs (with PHP)
|
|
||||||
speaker: Dan Leech
|
|
||||||
date: 2023-11-08
|
|
||||||
- title: Thoughts on Ubiquitous Language
|
|
||||||
speaker: Rob Allen
|
|
||||||
date: 2023-11-08
|
|
||||||
- title: Testing Legacy
|
|
||||||
speaker: Mike Karthauser
|
|
||||||
date: 2023-11-08
|
|
||||||
- title: Building "Build Configs"
|
|
||||||
speaker: Oliver Davies
|
|
||||||
date: 2023-11-08
|
|
||||||
- title: Terraform from a dev’s perspective
|
|
||||||
speaker: Nigel Dunn
|
|
||||||
date: 2023-10-11
|
|
||||||
- title: What is TDD and why should I care?
|
|
||||||
speaker: Naomi Gotts
|
|
||||||
date: 2023-07-12
|
|
||||||
- title: Go for PHP
|
|
||||||
speaker: Dan Leech
|
|
||||||
date: 2023-02-08
|
|
||||||
- title: What's new in PHP 8.*
|
|
||||||
speaker: Derick Rethans
|
|
||||||
date: 2023-02-11
|
|
||||||
- title: Behaviour Driven Development (BDD) in Practice
|
|
||||||
speaker: Ciaran McNulty
|
|
||||||
date: 2022-09-14
|
|
|
@ -1,3 +0,0 @@
|
||||||
---
|
|
||||||
imports:
|
|
||||||
- sculpin_site.yml
|
|
|
@ -1,14 +0,0 @@
|
||||||
import type { Config } from 'tailwindcss'
|
|
||||||
|
|
||||||
export default {
|
|
||||||
content: ['./source/**/*.{html,md,twig}'],
|
|
||||||
theme: {
|
|
||||||
extend: {
|
|
||||||
fontFamily: {
|
|
||||||
sans: ['Inter', 'sans-serif'],
|
|
||||||
}
|
|
||||||
},
|
|
||||||
},
|
|
||||||
plugins: [],
|
|
||||||
} satisfies Config
|
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
name: phpsw-sculpin-demo
|
|
||||||
template: sculpin-site
|
|
||||||
parameters:
|
|
||||||
flake:
|
|
||||||
devshell:
|
|
||||||
packages:
|
|
||||||
- nodejs
|
|
||||||
- php81
|
|
||||||
- php81Packages.composer
|
|
||||||
git:
|
|
||||||
ignore:
|
|
||||||
- '!/assets/'
|
|
||||||
- '/source/build/'
|
|
||||||
experimental:
|
|
||||||
createInclusiveGitIgnoreFile: true
|
|
|
@ -1,10 +0,0 @@
|
||||||
{
|
|
||||||
"require": {
|
|
||||||
"sculpin/sculpin": "^3.0"
|
|
||||||
},
|
|
||||||
"config": {
|
|
||||||
"allow-plugins": {
|
|
||||||
"sculpin/sculpin-theme-composer-plugin": true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
3607
_finish/composer.lock
generated
|
@ -1,23 +0,0 @@
|
||||||
layout {
|
|
||||||
pane size=2 borderless=true {
|
|
||||||
plugin location="zellij:tab-bar"
|
|
||||||
}
|
|
||||||
|
|
||||||
pane split_direction="vertical" {
|
|
||||||
pane name="Editor" size="60%"
|
|
||||||
|
|
||||||
pane split_direction="horizontal" {
|
|
||||||
bash { args "-c" "vendor/bin/sculpin generate --server --watch"; }
|
|
||||||
bash { args "-c" "watch -n 1 tree output_dev"; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pane size=2 borderless=true {
|
|
||||||
plugin location="zellij:status-bar"
|
|
||||||
}
|
|
||||||
|
|
||||||
pane_template name="bash" {
|
|
||||||
command "bash"
|
|
||||||
start_suspended true
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,27 +0,0 @@
|
||||||
{
|
|
||||||
"nodes": {
|
|
||||||
"nixpkgs": {
|
|
||||||
"locked": {
|
|
||||||
"lastModified": 1706550542,
|
|
||||||
"narHash": "sha256-UcsnCG6wx++23yeER4Hg18CXWbgNpqNXcHIo5/1Y+hc=",
|
|
||||||
"owner": "NixOS",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"rev": "97b17f32362e475016f942bbdfda4a4a72a8a652",
|
|
||||||
"type": "github"
|
|
||||||
},
|
|
||||||
"original": {
|
|
||||||
"owner": "NixOS",
|
|
||||||
"ref": "nixos-unstable",
|
|
||||||
"repo": "nixpkgs",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": {
|
|
||||||
"inputs": {
|
|
||||||
"nixpkgs": "nixpkgs"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"root": "root",
|
|
||||||
"version": 7
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
# Do not edit this file. It is automatically generated by https://www.oliverdavies.uk/build-configs.
|
|
||||||
{
|
|
||||||
description = "A Nix Flake for phpsw-sculpin-demo";
|
|
||||||
|
|
||||||
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
||||||
|
|
||||||
outputs = { nixpkgs, ... }:
|
|
||||||
let
|
|
||||||
system = "x86_64-linux";
|
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
|
||||||
|
|
||||||
inherit (pkgs) mkShell;
|
|
||||||
in {
|
|
||||||
devShells.${system}.default =
|
|
||||||
mkShell { buildInputs = with pkgs; [ nodejs php81 php81Packages.composer ]; };
|
|
||||||
|
|
||||||
formatter.${system} = pkgs.nixfmt;
|
|
||||||
};
|
|
||||||
}
|
|
1260
_finish/package-lock.json
generated
|
@ -1,5 +0,0 @@
|
||||||
{
|
|
||||||
"dependencies": {
|
|
||||||
"tailwindcss": "^3.4.0"
|
|
||||||
}
|
|
||||||
}
|
|
43
_finish/run
|
@ -1,43 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Do not edit this file. It is automatically generated by https://www.oliverdavies.uk/build-configs.
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
PATH="${PATH}:./vendor/bin"
|
|
||||||
|
|
||||||
# Generate the site.
|
|
||||||
function generate {
|
|
||||||
local args=()
|
|
||||||
|
|
||||||
if [[ "${APP_ENV:-}" == "production" ]]; then
|
|
||||||
args=(--env="prod")
|
|
||||||
else
|
|
||||||
args=(--server --watch)
|
|
||||||
fi
|
|
||||||
|
|
||||||
sculpin generate "${args[@]}" "${@}"
|
|
||||||
}
|
|
||||||
|
|
||||||
function help {
|
|
||||||
printf "%s <task> [args]\n\nTasks:\n" "${0}"
|
|
||||||
|
|
||||||
compgen -A function | grep -v "^_" | cat -n
|
|
||||||
|
|
||||||
printf "\nExtended help:\n Each task has comments for general usage\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Start the project.
|
|
||||||
function start {
|
|
||||||
sculpin generate --server --watch "${@}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Include any local tasks.
|
|
||||||
[[ -e run.local ]] && source run.local
|
|
||||||
|
|
||||||
TIMEFORMAT="Task completed in %3lR"
|
|
||||||
time "${@:-help}"
|
|
||||||
|
|
||||||
# vim: ft=bash
|
|
|
@ -1,41 +0,0 @@
|
||||||
{% if speakers is not empty %}
|
|
||||||
<section>
|
|
||||||
<h2 class="text-3xl font-bold text-center">Speakers</h2>
|
|
||||||
|
|
||||||
<div class="mt-8">
|
|
||||||
<div class="grid grid-cols-2 gap-10 px-4 mx-auto max-w-sm md:grid-cols-3 md:max-w-md lg:grid-cols-4 lg:gap-8 lg:max-w-full xl:grid-cols-6">
|
|
||||||
{% set speakersAndDates = [] %}
|
|
||||||
|
|
||||||
{% for speaker in speakers %}
|
|
||||||
{% set talksForSpeaker = talks|default([])|filter(talk => talk.speaker == speaker.name) %}
|
|
||||||
{% set mostRecentTalk = talksForSpeaker|first %}
|
|
||||||
|
|
||||||
{% set speakersAndDates = speakersAndDates|merge([{
|
|
||||||
date: mostRecentTalk.date,
|
|
||||||
speaker,
|
|
||||||
}]) %}
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% set sortedSpeakers = speakersAndDates|sort((a, b) => b.date <=> a.date) %}
|
|
||||||
|
|
||||||
{% for speaker in sortedSpeakers|column('speaker') %}
|
|
||||||
<div>
|
|
||||||
<a href="{{ speaker.url }}" class="flex flex-col-reverse gap-3 items-center group">
|
|
||||||
<div class="text-center">
|
|
||||||
<p class="text-base group-hover:underline">{{ speaker.name }}</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<img
|
|
||||||
alt="Photo of {{ speaker.name }}"
|
|
||||||
class="object-cover flex-shrink-0 rounded-full shadow-lg size-20 lg:size-32 xl:size-24"
|
|
||||||
src="{{ speaker.imageUrl }}"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
{% endif %}
|
|
|
@ -1,13 +0,0 @@
|
||||||
<!DOCTYPE html>
|
|
||||||
<html lang="{{ site.locale|default('en') }}">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
||||||
<title>{{ site.name|default('Sculpin Skeleton') }}</title>
|
|
||||||
<link rel="stylesheet" href="/build/tailwind.css">
|
|
||||||
</head>
|
|
||||||
<body class="font-sans text-lg text-gray-800">
|
|
||||||
{% block body %}{% endblock %}
|
|
||||||
</body>
|
|
||||||
</html>
|
|
|
@ -1,9 +0,0 @@
|
||||||
{% extends 'app' %}
|
|
||||||
|
|
||||||
{% block body %}
|
|
||||||
<div class="p-10 mx-auto max-w-4xl">
|
|
||||||
{% block content_wrapper %}
|
|
||||||
{% block content %}{% endblock %}
|
|
||||||
{% endblock %}
|
|
||||||
</div>
|
|
||||||
{% endblock %}
|
|
|
@ -1,34 +0,0 @@
|
||||||
{% extends 'default' %}
|
|
||||||
|
|
||||||
{% block content_wrapper %}
|
|
||||||
<h1 class="text-3xl font-bold text-center md:text-left">{{ page.name }}</h1>
|
|
||||||
|
|
||||||
<div class="mt-6">
|
|
||||||
<img
|
|
||||||
alt="Photo of {{ page.name }}"
|
|
||||||
class="object-cover flex-shrink-0 rounded-full shadow-lg size-40"
|
|
||||||
src="{{ page.imageUrl }}"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mt-10">
|
|
||||||
<em>{{ block('content') }}</em>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% set talks = site.talks|filter(talk => talk.speaker == page.name) %}
|
|
||||||
{% if talks is not empty %}
|
|
||||||
<section class="mt-10">
|
|
||||||
<h2 class="text-2xl font-bold">Talks <span class="sr-only"> by {{ page.name }}</span></h2>
|
|
||||||
|
|
||||||
<div class="mt-6">
|
|
||||||
<ul class="pl-4 list-disc">
|
|
||||||
{% for talk in talks %}
|
|
||||||
<li>
|
|
||||||
<a class="hover:underline" href="#0">{{ talk.title }}</a>
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
{% endif %}
|
|
||||||
{% endblock %}
|
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
name: Ciaran McNulty
|
|
||||||
imageUrl: /images/ciaran.jpg
|
|
||||||
---
|
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
name: Dan Leech
|
|
||||||
imageUrl: /images/highres_257208698.jpeg
|
|
||||||
---
|
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
name: Dave Liddament
|
|
||||||
imageUrl: /images/highres_203797572.jpeg
|
|
||||||
---
|
|
||||||
|
|
||||||
Director and Developer at Lamp Bristol. PHP, Java and Python software developer.
|
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
name: Derick Rethans
|
|
||||||
imageUrl: /images/highres_276685584.jpeg
|
|
||||||
---
|
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
name: James Titcumb
|
|
||||||
imageUrl: /images/highres_134740252.jpeg
|
|
||||||
---
|
|
||||||
|
|
||||||
James is the founder of the UK based PHP Hampshire user group, a Zend Certified Engineer and Development Manager at Protected.co.uk.
|
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
name: Mike Karthauser
|
|
||||||
imageUrl: /images/highres_80709042.jpeg
|
|
||||||
---
|
|
||||||
|
|
||||||
Dev since '98. PHP since '03.
|
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
name: Naomi Gotts
|
|
||||||
imageUrl: /images/highres_311941362.jpeg
|
|
||||||
---
|
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
name: Nigel Dunn
|
|
||||||
imageUrl: /images/highres_131268052.jpeg
|
|
||||||
---
|
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
name: Oliver Davies
|
|
||||||
imageUrl: /images/highres_317091329.jpeg
|
|
||||||
---
|
|
||||||
|
|
||||||
Full Stack Software Consultant. Drupal and PHP expert.
|
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
name: Rob Allen
|
|
||||||
imageUrl: /images/highres_312615346.jpeg
|
|
||||||
---
|
|
||||||
|
|
||||||
PHP developer from Worcester.
|
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
name: Robin Hodson
|
|
||||||
imageUrl: /images/highres_243972257.jpeg
|
|
||||||
---
|
|
||||||
|
|
||||||
Ready to look for coding/hardware work post-lockdown, now largely recovered from stressful experiences. Accepted work from the government in September/October; currently realigning goals plus getting things I've been working on a bit more tangible.
|
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
name: Ryan Lee
|
|
||||||
imageUrl: /images/highres_273691940.jpeg
|
|
||||||
---
|
|
Before Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 1.7 MiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 758 KiB |
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 154 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 794 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 7.2 KiB |
|
@ -1,9 +0,0 @@
|
||||||
---
|
|
||||||
layout: default
|
|
||||||
use: [speakers]
|
|
||||||
---
|
|
||||||
|
|
||||||
{% include 'speakers/recent-speakers' with {
|
|
||||||
speakers: data.speakers,
|
|
||||||
talks: site.talks,
|
|
||||||
} %}
|
|
|
@ -1,5 +1,3 @@
|
||||||
sculpin_content_types:
|
sculpin_content_types:
|
||||||
speakers:
|
|
||||||
permalink: /speaker/:basename/
|
|
||||||
posts:
|
posts:
|
||||||
enabled: false
|
enabled: false
|
||||||
|
|
|
@ -1,39 +1,40 @@
|
||||||
name: 'PHPSW'
|
name: 'PHPSW'
|
||||||
locale: en
|
locale: en
|
||||||
talks:
|
|
||||||
- title: Building Static Websites with PHP and Sculpin
|
speakers:
|
||||||
speaker: Oliver Davies
|
-
|
||||||
date: 2024-02-14
|
name: Oliver Davies
|
||||||
- title: 'FPGA^2: An open-source FPGA'
|
imageUrl: https://secure.meetupstatic.com/photos/member/c/8/8/1/highres_317091329.jpeg
|
||||||
speaker: Robin Hodson
|
-
|
||||||
date: 2024-02-14
|
name: Robin Hodson
|
||||||
- title: Introducing Domain Driven Design
|
imageUrl: https://secure.meetupstatic.com/photos/member/2/f/e/1/highres_243972257.jpeg
|
||||||
speaker: Rob Allen
|
-
|
||||||
date: 2024-01-10
|
name: Rob Allen
|
||||||
- title: Building Better TUIs (with PHP)
|
imageUrl: https://secure.meetupstatic.com/photos/member/3/b/f/2/highres_312615346.jpeg
|
||||||
speaker: Dan Leech
|
-
|
||||||
date: 2023-11-08
|
name: Dan Leech
|
||||||
- title: Thoughts on Ubiquitous Language
|
imageUrl: https://secure.meetupstatic.com/photos/member/b/e/3/a/highres_257208698.jpeg
|
||||||
speaker: Rob Allen
|
-
|
||||||
date: 2023-11-08
|
name: Mike Karthauser
|
||||||
- title: Testing Legacy
|
imageUrl: https://secure.meetupstatic.com/photos/member/2/3/5/2/highres_80709042.jpeg
|
||||||
speaker: Mike Karthauser
|
-
|
||||||
date: 2023-11-08
|
name: Nigel Dunn
|
||||||
- title: Building "Build Configs"
|
imageUrl: https://secure.meetupstatic.com/photos/member/b/b/b/4/highres_131268052.jpeg
|
||||||
speaker: Oliver Davies
|
-
|
||||||
date: 2023-11-08
|
name: Naomi Gotts
|
||||||
- title: Terraform from a dev’s perspective
|
imageUrl: https://secure.meetupstatic.com/photos/member/5/5/2/highres_311941362.jpeg
|
||||||
speaker: Nigel Dunn
|
-
|
||||||
date: 2023-10-11
|
name: Ryan Lee
|
||||||
- title: What is TDD and why should I care?
|
imageUrl: https://secure.meetupstatic.com/photos/member/7/c/c/4/highres_273691940.jpeg
|
||||||
speaker: Naomi Gotts
|
-
|
||||||
date: 2023-07-12
|
name: James Titcumb
|
||||||
- title: Go for PHP
|
imageUrl: https://secure.meetupstatic.com/photos/member/9/d/3/c/highres_134740252.jpeg
|
||||||
speaker: Dan Leech
|
-
|
||||||
date: 2023-02-08
|
name: Derick Rethans
|
||||||
- title: What's new in PHP 8.*
|
imageUrl: https://secure.meetupstatic.com/photos/member/6/3/f/0/highres_276685584.jpeg
|
||||||
speaker: Derick Rethans
|
-
|
||||||
date: 2023-02-11
|
name: Dave Liddament
|
||||||
- title: Behaviour Driven Development (BDD) in Practice
|
imageUrl: https://secure.meetupstatic.com/photos/member/9/2/c/4/highres_203797572.jpeg
|
||||||
speaker: Ciaran McNulty
|
-
|
||||||
date: 2022-09-14
|
name: Ciaran McNulty
|
||||||
|
imageUrl: /images/ciaran.jpg
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
name: phpsw-sculpin-demo
|
|
||||||
template: sculpin-site
|
|
||||||
parameters:
|
|
||||||
flake:
|
|
||||||
devshell:
|
|
||||||
packages:
|
|
||||||
- nodejs
|
|
||||||
- php81
|
|
||||||
- php81Packages.composer
|
|
||||||
git:
|
|
||||||
ignore:
|
|
||||||
- '!/assets/'
|
|
||||||
- '/source/build/'
|
|
||||||
experimental:
|
|
||||||
createInclusiveGitIgnoreFile: true
|
|
18
build.yaml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
name: phpsw-sculpin-demo
|
||||||
|
type: sculpin
|
||||||
|
language: php
|
||||||
|
|
||||||
|
flake:
|
||||||
|
devshell:
|
||||||
|
packages:
|
||||||
|
- nodejs
|
||||||
|
- php81
|
||||||
|
- php81Packages.composer
|
||||||
|
|
||||||
|
git:
|
||||||
|
ignore:
|
||||||
|
- '!/assets/'
|
||||||
|
- '/source/build/'
|
||||||
|
|
||||||
|
experimental:
|
||||||
|
createInclusiveGitIgnoreFile: true
|
31
flake.nix
|
@ -1,19 +1,26 @@
|
||||||
# Do not edit this file. It is automatically generated by https://www.oliverdavies.uk/build-configs.
|
# Do not edit this file. It is automatically generated by https://www.oliverdavies.uk/build-configs.
|
||||||
|
|
||||||
{
|
{
|
||||||
description = "A Nix Flake for phpsw-sculpin-demo";
|
inputs = {
|
||||||
|
devshell.url = "github:numtide/devshell";
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
};
|
||||||
|
|
||||||
inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
outputs = inputs@{ flake-parts, ... }:
|
||||||
|
flake-parts.lib.mkFlake { inherit inputs; } {
|
||||||
|
imports = [ inputs.devshell.flakeModule ];
|
||||||
|
|
||||||
outputs = { nixpkgs, ... }:
|
systems = [ "x86_64-linux" ];
|
||||||
let
|
|
||||||
system = "x86_64-linux";
|
|
||||||
pkgs = nixpkgs.legacyPackages.${system};
|
|
||||||
|
|
||||||
inherit (pkgs) mkShell;
|
perSystem = { config, self', inputs', pkgs, system, ... }: {
|
||||||
in {
|
devshells.default = {
|
||||||
devShells.${system}.default =
|
packages = with pkgs; [
|
||||||
mkShell { buildInputs = with pkgs; [ nodejs php81 php81Packages.composer ]; };
|
"just"
|
||||||
|
"nodejs"
|
||||||
formatter.${system} = pkgs.nixfmt;
|
"php81"
|
||||||
|
"php81Packages.composer"
|
||||||
|
];
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
36
justfile
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
_default:
|
||||||
|
just --list
|
||||||
|
|
||||||
|
build-css:
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
args=()
|
||||||
|
|
||||||
|
if [[ "${NODE_ENV:-}" == "production" ]]; then
|
||||||
|
args=(--minify)
|
||||||
|
else
|
||||||
|
args=(--watch)
|
||||||
|
fi
|
||||||
|
|
||||||
|
npx tailwindcss \
|
||||||
|
--config assets/tailwind.config.ts \
|
||||||
|
--output source/build/tailwind.css "${args[@]}"
|
||||||
|
|
||||||
|
clean:
|
||||||
|
rm -fr output_*/ source/build/
|
||||||
|
|
||||||
|
generate *args:
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
args=()
|
||||||
|
|
||||||
|
if [[ "${APP_ENV:-}" == "production" ]]; then
|
||||||
|
args=(--env="prod")
|
||||||
|
else
|
||||||
|
args=(--server --watch)
|
||||||
|
fi
|
||||||
|
|
||||||
|
./vendor/bin/sculpin generate "${args[@]}" {{ args }}
|
||||||
|
|
||||||
|
start *args:
|
||||||
|
just generate {{ args }} \
|
||||||
|
& just build-css \
|
||||||
|
& wait
|
16
notes.txt
|
@ -1,16 +0,0 @@
|
||||||
Install dependencies:
|
|
||||||
|
|
||||||
composer install
|
|
||||||
npm install
|
|
||||||
|
|
||||||
Build the CSS:
|
|
||||||
|
|
||||||
./vendor/bin/sculpin generate -e prod
|
|
||||||
npx tailwindcss -c assets/tailwind.config.ts -o source/build/tailwind.css
|
|
||||||
NODE_ENV=production npx tailwindcss -c assets/tailwind.config.ts -o source/build/tailwind.css
|
|
||||||
|
|
||||||
Generate the site:
|
|
||||||
|
|
||||||
./vendor/bin/sculpin generate -e prod
|
|
||||||
|
|
||||||
rsync -avz output_prod ssh.oliverdavies.uk:~/phpsw-sculpin-demo
|
|
43
run
|
@ -1,43 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
# Do not edit this file. It is automatically generated by https://www.oliverdavies.uk/build-configs.
|
|
||||||
|
|
||||||
set -o errexit
|
|
||||||
set -o nounset
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
PATH="${PATH}:./vendor/bin"
|
|
||||||
|
|
||||||
# Generate the site.
|
|
||||||
function generate {
|
|
||||||
local args=()
|
|
||||||
|
|
||||||
if [[ "${APP_ENV:-}" == "production" ]]; then
|
|
||||||
args=(--env="prod")
|
|
||||||
else
|
|
||||||
args=(--server --watch)
|
|
||||||
fi
|
|
||||||
|
|
||||||
sculpin generate "${args[@]}" "${@}"
|
|
||||||
}
|
|
||||||
|
|
||||||
function help {
|
|
||||||
printf "%s <task> [args]\n\nTasks:\n" "${0}"
|
|
||||||
|
|
||||||
compgen -A function | grep -v "^_" | cat -n
|
|
||||||
|
|
||||||
printf "\nExtended help:\n Each task has comments for general usage\n"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Start the project.
|
|
||||||
function start {
|
|
||||||
sculpin generate --server --watch "${@}"
|
|
||||||
}
|
|
||||||
|
|
||||||
# Include any local tasks.
|
|
||||||
[[ -e run.local ]] && source run.local
|
|
||||||
|
|
||||||
TIMEFORMAT="Task completed in %3lR"
|
|
||||||
time "${@:-help}"
|
|
||||||
|
|
||||||
# vim: ft=bash
|
|
148
snippets.lua
|
@ -1,148 +0,0 @@
|
||||||
local fmt = require("luasnip.extras.fmt").fmt
|
|
||||||
local ls = require "luasnip"
|
|
||||||
|
|
||||||
local s = ls.snippet
|
|
||||||
local t = ls.text_node
|
|
||||||
|
|
||||||
ls.add_snippets("twig", {
|
|
||||||
s(
|
|
||||||
"sortdate",
|
|
||||||
fmt(
|
|
||||||
[[
|
|
||||||
{{% set speakersAndDates = [] %}}
|
|
||||||
|
|
||||||
{{% for speaker in speakers %}}
|
|
||||||
{{% set talksForSpeaker = talks|default([])|filter(talk =>> talk.speaker == speaker.name) %}}
|
|
||||||
|
|
||||||
{{% set mostRecentTalk = talksForSpeaker|first %}}
|
|
||||||
|
|
||||||
{{% set speakersAndDates = speakersAndDates|merge([{{
|
|
||||||
date: mostRecentTalk.date,
|
|
||||||
speaker,
|
|
||||||
}}]) %}}
|
|
||||||
{{% endfor %}}
|
|
||||||
|
|
||||||
{{% set sortedSpeakers = speakersAndDates|sort((a, b) => b.date <=> a.date) %}}
|
|
||||||
|
|
||||||
{{% for speaker in sortedSpeakers|column('speaker') %}}
|
|
||||||
]],
|
|
||||||
{}
|
|
||||||
)
|
|
||||||
),
|
|
||||||
|
|
||||||
s("sortname", { t "{% for speaker in site.speakers|sort((a, b) => a.name <=> b.name) %}" }),
|
|
||||||
|
|
||||||
s(
|
|
||||||
"speakerpage",
|
|
||||||
fmt(
|
|
||||||
[[
|
|
||||||
{{% block content_wrapper %}}
|
|
||||||
<h1 class="text-3xl font-bold text-center md:text-left">{{{{ page.name }}}}</h1>
|
|
||||||
|
|
||||||
<div class="mt-6">
|
|
||||||
<img
|
|
||||||
alt="Photo of {{{{ page.name }}}}"
|
|
||||||
class="object-cover flex-shrink-0 rounded-full shadow-lg size-40"
|
|
||||||
src="{{{{ page.imageUrl }}}}"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mt-10">
|
|
||||||
<em>{{{{ block('content') }}}}</em>
|
|
||||||
</div>
|
|
||||||
{{% endblock %}}
|
|
||||||
]],
|
|
||||||
{}
|
|
||||||
)
|
|
||||||
),
|
|
||||||
|
|
||||||
s(
|
|
||||||
"speaker",
|
|
||||||
fmt(
|
|
||||||
[[
|
|
||||||
<div>
|
|
||||||
<a href="#" class="flex flex-col-reverse gap-3 items-center group">
|
|
||||||
<div class="text-center">
|
|
||||||
<p class="text-base group-hover:underline">{{{{ speaker.name }}}}</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<img
|
|
||||||
alt="Photo of {{{{ speaker.name }}}}"
|
|
||||||
class="object-cover flex-shrink-0 rounded-full shadow-lg size-20 lg:size-32 xl:size-24"
|
|
||||||
src="{{{{ speaker.imageUrl }}}}" /> </div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
]],
|
|
||||||
{}
|
|
||||||
)
|
|
||||||
),
|
|
||||||
|
|
||||||
s(
|
|
||||||
"speakers",
|
|
||||||
fmt(
|
|
||||||
[[
|
|
||||||
<section>
|
|
||||||
<h2 class="text-3xl font-bold text-center">Speakers</h2>
|
|
||||||
|
|
||||||
<div class="mt-8">
|
|
||||||
<div class="grid grid-cols-2 gap-10 px-4 mx-auto max-w-sm md:grid-cols-3 md:max-w-md lg:grid-cols-4 lg:gap-8 lg:max-w-full xl:grid-cols-6">
|
|
||||||
{{% for speaker in site.speakers %}}
|
|
||||||
|
|
||||||
{{% endfor %}}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
]],
|
|
||||||
{}
|
|
||||||
)
|
|
||||||
),
|
|
||||||
})
|
|
||||||
|
|
||||||
ls.add_snippets("yaml", {
|
|
||||||
s(
|
|
||||||
"talks",
|
|
||||||
fmt(
|
|
||||||
[[
|
|
||||||
talks:
|
|
||||||
- title: Building Static Websites with PHP and Sculpin
|
|
||||||
speaker: Oliver Davies
|
|
||||||
date: 2024-02-14
|
|
||||||
- title: 'FPGA^2: An open-source FPGA'
|
|
||||||
speaker: Robin Hodson
|
|
||||||
date: 2024-02-14
|
|
||||||
- title: Introducing Domain Driven Design
|
|
||||||
speaker: Rob Allen
|
|
||||||
date: 2024-01-10
|
|
||||||
- title: Building Better TUIs (with PHP)
|
|
||||||
speaker: Dan Leech
|
|
||||||
date: 2023-11-08
|
|
||||||
- title: Thoughts on Ubiquitous Language
|
|
||||||
speaker: Rob Allen
|
|
||||||
date: 2023-11-08
|
|
||||||
- title: Testing Legacy
|
|
||||||
speaker: Mike Karthauser
|
|
||||||
date: 2023-11-08
|
|
||||||
- title: Building "Build Configs"
|
|
||||||
speaker: Oliver Davies
|
|
||||||
date: 2023-11-08
|
|
||||||
- title: Terraform from a dev’s perspective
|
|
||||||
speaker: Nigel Dunn
|
|
||||||
date: 2023-10-11
|
|
||||||
- title: What is TDD and why should I care?
|
|
||||||
speaker: Naomi Gotts
|
|
||||||
date: 2023-07-12
|
|
||||||
- title: Go for PHP
|
|
||||||
speaker: Dan Leech
|
|
||||||
date: 2023-02-08
|
|
||||||
- title: What's new in PHP 8.*
|
|
||||||
speaker: Derick Rethans
|
|
||||||
date: 2023-02-11
|
|
||||||
- title: Behaviour Driven Development (BDD) in Practice
|
|
||||||
speaker: Ciaran McNulty
|
|
||||||
date: 2022-09-14
|
|
||||||
]],
|
|
||||||
{}
|
|
||||||
)
|
|
||||||
),
|
|
||||||
})
|
|
|
@ -1,41 +0,0 @@
|
||||||
{% if speakers is not empty %}
|
|
||||||
<section>
|
|
||||||
<h2 class="text-3xl font-bold text-center">Speakers</h2>
|
|
||||||
|
|
||||||
<div class="mt-8">
|
|
||||||
<div class="grid grid-cols-2 gap-10 px-4 mx-auto max-w-sm md:grid-cols-3 md:max-w-md lg:grid-cols-4 lg:gap-8 lg:max-w-full xl:grid-cols-6">
|
|
||||||
{% set speakersAndDates = [] %}
|
|
||||||
|
|
||||||
{% for speaker in speakers %}
|
|
||||||
{% set talksForSpeaker = talks|default([])|filter(talk => talk.speaker == speaker.name) %}
|
|
||||||
{% set mostRecentTalk = talksForSpeaker|first %}
|
|
||||||
|
|
||||||
{% set speakersAndDates = speakersAndDates|merge([{
|
|
||||||
date: mostRecentTalk.date,
|
|
||||||
speaker,
|
|
||||||
}]) %}
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% set sortedSpeakers = speakersAndDates|sort((a, b) => b.date <=> a.date) %}
|
|
||||||
|
|
||||||
{% for speaker in sortedSpeakers|column('speaker') %}
|
|
||||||
<div>
|
|
||||||
<a href="{{ speaker.url }}" class="flex flex-col-reverse gap-3 items-center group">
|
|
||||||
<div class="text-center">
|
|
||||||
<p class="text-base group-hover:underline">{{ speaker.name }}</p>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<img
|
|
||||||
alt="Photo of {{ speaker.name }}"
|
|
||||||
class="object-cover flex-shrink-0 rounded-full shadow-lg size-20 lg:size-32 xl:size-24"
|
|
||||||
src="{{ speaker.imageUrl }}"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
</a>
|
|
||||||
</div>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
{% endif %}
|
|
|
@ -2,8 +2,6 @@
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<div class="p-10 mx-auto max-w-4xl">
|
<div class="p-10 mx-auto max-w-4xl">
|
||||||
{% block content_wrapper %}
|
{% block content %}{% endblock %}
|
||||||
{% block content %}{% endblock %}
|
|
||||||
{% endblock %}
|
|
||||||
</div>
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -1,34 +0,0 @@
|
||||||
{% extends 'default' %}
|
|
||||||
|
|
||||||
{% block content_wrapper %}
|
|
||||||
<h1 class="text-3xl font-bold text-center md:text-left">{{ page.name }}</h1>
|
|
||||||
|
|
||||||
<div class="mt-6">
|
|
||||||
<img
|
|
||||||
alt="Photo of {{ page.name }}"
|
|
||||||
class="object-cover flex-shrink-0 rounded-full shadow-lg size-40"
|
|
||||||
src="{{ page.imageUrl }}"
|
|
||||||
/>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="mt-10">
|
|
||||||
<em>{{ block('content') }}</em>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
{% set talks = site.talks|filter(talk => talk.speaker == page.name) %}
|
|
||||||
{% if talks is not empty %}
|
|
||||||
<section class="mt-10">
|
|
||||||
<h2 class="text-2xl font-bold">Talks <span class="sr-only"> by {{ page.name }}</span></h2>
|
|
||||||
|
|
||||||
<div class="mt-6">
|
|
||||||
<ul class="pl-4 list-disc">
|
|
||||||
{% for talk in talks %}
|
|
||||||
<li>
|
|
||||||
<a class="hover:underline" href="#0">{{ talk.title }}</a>
|
|
||||||
</li>
|
|
||||||
{% endfor %}
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
</section>
|
|
||||||
{% endif %}
|
|
||||||
{% endblock %}
|
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
name: Ciaran McNulty
|
|
||||||
imageUrl: /images/ciaran.jpg
|
|
||||||
---
|
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
name: Dan Leech
|
|
||||||
imageUrl: /images/highres_257208698.jpeg
|
|
||||||
---
|
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
name: Dave Liddament
|
|
||||||
imageUrl: /images/highres_203797572.jpeg
|
|
||||||
---
|
|
||||||
|
|
||||||
Director and Developer at Lamp Bristol. PHP, Java and Python software developer.
|
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
name: Derick Rethans
|
|
||||||
imageUrl: /images/highres_276685584.jpeg
|
|
||||||
---
|
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
name: James Titcumb
|
|
||||||
imageUrl: /images/highres_134740252.jpeg
|
|
||||||
---
|
|
||||||
|
|
||||||
James is the founder of the UK based PHP Hampshire user group, a Zend Certified Engineer and Development Manager at Protected.co.uk.
|
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
name: Mike Karthauser
|
|
||||||
imageUrl: /images/highres_80709042.jpeg
|
|
||||||
---
|
|
||||||
|
|
||||||
Dev since '98. PHP since '03.
|
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
name: Naomi Gotts
|
|
||||||
imageUrl: /images/highres_311941362.jpeg
|
|
||||||
---
|
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
name: Nigel Dunn
|
|
||||||
imageUrl: /images/highres_131268052.jpeg
|
|
||||||
---
|
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
name: Oliver Davies
|
|
||||||
imageUrl: /images/highres_317091329.jpeg
|
|
||||||
---
|
|
||||||
|
|
||||||
Full Stack Software Consultant. Drupal and PHP expert.
|
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
name: Rob Allen
|
|
||||||
imageUrl: /images/highres_312615346.jpeg
|
|
||||||
---
|
|
||||||
|
|
||||||
PHP developer from Worcester.
|
|
|
@ -1,6 +0,0 @@
|
||||||
---
|
|
||||||
name: Robin Hodson
|
|
||||||
imageUrl: /images/highres_243972257.jpeg
|
|
||||||
---
|
|
||||||
|
|
||||||
Ready to look for coding/hardware work post-lockdown, now largely recovered from stressful experiences. Accepted work from the government in September/October; currently realigning goals plus getting things I've been working on a bit more tangible.
|
|
|
@ -1,4 +0,0 @@
|
||||||
---
|
|
||||||
name: Ryan Lee
|
|
||||||
imageUrl: /images/highres_273691940.jpeg
|
|
||||||
---
|
|
Before Width: | Height: | Size: 9.5 KiB |
Before Width: | Height: | Size: 32 KiB |
Before Width: | Height: | Size: 1.7 MiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 758 KiB |
Before Width: | Height: | Size: 49 KiB |
Before Width: | Height: | Size: 154 KiB |
Before Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 794 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 7.2 KiB |
|
@ -1,9 +0,0 @@
|
||||||
---
|
|
||||||
layout: default
|
|
||||||
use: [speakers]
|
|
||||||
---
|
|
||||||
|
|
||||||
{% include 'speakers/recent-speakers' with {
|
|
||||||
speakers: data.speakers,
|
|
||||||
talks: site.talks,
|
|
||||||
} %}
|
|
5
source/index.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
layout: default
|
||||||
|
---
|
||||||
|
|
||||||
|
Hello, PHPSW!
|