chore: replace Sculpin with Astro
3
.github/workflows/ci.yml
vendored
|
@ -27,9 +27,6 @@ jobs:
|
||||||
username: ${{ github.actor }}
|
username: ${{ github.actor }}
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
password: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
- run: cp .env.example .env
|
|
||||||
working-directory: ./website
|
|
||||||
|
|
||||||
- run: |
|
- run: |
|
||||||
just push-images ${{ github.sha }}
|
just push-images ${{ github.sha }}
|
||||||
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
/workspace.yml
|
|
|
@ -1,29 +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
|
|
||||||
|
|
||||||
[docker-compose.yaml,Dockerfile]
|
|
||||||
indent_size = 2
|
|
||||||
|
|
||||||
[*.pcss]
|
|
||||||
indent_size = 2
|
|
||||||
|
|
||||||
[{postcss,tailwind,webpack}.config.js]
|
|
||||||
indent_size = 2
|
|
||||||
|
|
||||||
[tools/tailwindcss/**/*.js]
|
|
||||||
indent_size = 2
|
|
|
@ -1,31 +0,0 @@
|
||||||
COMPOSE_PROJECT_NAME=oliverdavies-uk
|
|
||||||
|
|
||||||
# The volume to store the generated output files.
|
|
||||||
#
|
|
||||||
# For development, an anonymous volume should be sufficient as the generated
|
|
||||||
# files don't need to be accessible locally.
|
|
||||||
#
|
|
||||||
# For production, you may want to output the files into a directory so that
|
|
||||||
# they can be served by a web server like Apache or Nginx.
|
|
||||||
#DOCKER_OUTPUT_VOLUME=./output_dev:/app/output_dev
|
|
||||||
#DOCKER_OUTPUT_VOLUME=./output_prod:/app/output_prod
|
|
||||||
DOCKER_OUTPUT_VOLUME=/app/output_dev
|
|
||||||
|
|
||||||
# The environment to generate the site for (e.g. dev or prod).
|
|
||||||
# SCULPIN_ENV=prod
|
|
||||||
# NODE_ENV=production
|
|
||||||
SCULPIN_ENV=dev
|
|
||||||
NODE_ENV=development
|
|
||||||
|
|
||||||
# The port on which to serve the site if the --server option is specified.
|
|
||||||
#SCULPIN_PORT=80
|
|
||||||
SCULPIN_PORT=8000
|
|
||||||
|
|
||||||
# The default URL to use if one hasn't been specified in the environment's
|
|
||||||
# configuration file.
|
|
||||||
#SCULPIN_URL=https://example.com
|
|
||||||
SCULPIN_URL=http://localhost
|
|
||||||
|
|
||||||
# Any additional arguments to pass to the "sculpin generate" command.
|
|
||||||
#SCULPIN_GENERATE_ARGS=
|
|
||||||
SCULPIN_GENERATE_ARGS="--output-dir=/output/html --server --watch"
|
|
28
website/.gitignore
vendored
|
@ -1,8 +1,20 @@
|
||||||
/.env
|
# build output
|
||||||
/.phpunit.cache
|
dist/
|
||||||
/build/
|
.output/
|
||||||
/docker-compose.override.yaml
|
|
||||||
/output/
|
# dependencies
|
||||||
/output_*/
|
node_modules/
|
||||||
/source/build/
|
|
||||||
/vendor/
|
# logs
|
||||||
|
npm-debug.log*
|
||||||
|
yarn-debug.log*
|
||||||
|
yarn-error.log*
|
||||||
|
pnpm-debug.log*
|
||||||
|
|
||||||
|
|
||||||
|
# environment variables
|
||||||
|
.env
|
||||||
|
.env.production
|
||||||
|
|
||||||
|
# macOS-specific files
|
||||||
|
.DS_Store
|
||||||
|
|
|
@ -1,76 +1,38 @@
|
||||||
FROM node:14-alpine AS assets
|
FROM node:14-bullseye-slim AS base
|
||||||
|
|
||||||
ARG NODE_ENV="production"
|
ARG NODE_ENV="production"
|
||||||
ARG SCULPIN_ENV="prod"
|
ARG SCULPIN_ENV="prod"
|
||||||
ENV NODE_ENV="${NODE_ENV}" \
|
ENV NODE_ENV="${NODE_ENV}" \
|
||||||
PATH="${PATH}:/node_modules/.bin" \
|
PATH="${PATH}:/node_modules/.bin" \
|
||||||
SCULPIN_ENV="${SCULPIN_ENV}" \
|
|
||||||
USER="node"
|
USER="node"
|
||||||
|
|
||||||
RUN apk add --no-cache bash
|
WORKDIR /app
|
||||||
|
|
||||||
WORKDIR /app/assets
|
|
||||||
|
|
||||||
RUN mkdir -p /node_modules \
|
RUN mkdir -p /node_modules \
|
||||||
&& chown node:node -R /app /node_modules
|
&& chown node:node -R /app /node_modules
|
||||||
|
|
||||||
|
###
|
||||||
|
|
||||||
|
FROM base AS build
|
||||||
|
|
||||||
USER node
|
USER node
|
||||||
|
|
||||||
COPY --chown=node:node assets/*yarn* assets/package.json ./
|
COPY --chown=node:node *yarn* package.json ./
|
||||||
|
|
||||||
RUN yarn install && yarn cache clean
|
RUN yarn install && yarn cache clean
|
||||||
|
|
||||||
COPY --chown=node:node . ..
|
COPY --chown=node:node . .
|
||||||
|
|
||||||
RUN if [ "${NODE_ENV}" != "development" ]; then \
|
RUN if [ "${NODE_ENV}" != "development" ]; then \
|
||||||
../run yarn:build:css && ../run yarn:build:js; \
|
yarn build; \
|
||||||
else mkdir -p /app/build; fi
|
else mkdir -p /app/build; fi
|
||||||
|
|
||||||
CMD ["bash"]
|
CMD ["bash"]
|
||||||
|
|
||||||
###
|
###
|
||||||
|
|
||||||
FROM opdavies/sculpin-serve AS app
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
RUN mkdir /output \
|
|
||||||
&& chown sculpin:sculpin -R /output
|
|
||||||
|
|
||||||
###
|
|
||||||
|
|
||||||
FROM app AS build
|
|
||||||
|
|
||||||
ENV PATH=$PATH:/app/vendor/bin/phpunit
|
|
||||||
|
|
||||||
COPY tools/docker/images/app/root /
|
|
||||||
|
|
||||||
WORKDIR /app
|
|
||||||
|
|
||||||
USER sculpin
|
|
||||||
|
|
||||||
COPY --chown=sculpin:sculpin composer.* ./
|
|
||||||
|
|
||||||
RUN composer install --no-dev
|
|
||||||
|
|
||||||
COPY --chown=sculpin:sculpin app app
|
|
||||||
COPY --chown=sculpin:sculpin source source
|
|
||||||
COPY --chown=sculpin:sculpin src src
|
|
||||||
|
|
||||||
RUN sculpin generate --env prod --output-dir /output/html
|
|
||||||
|
|
||||||
COPY --chown=sculpin:sculpin . .
|
|
||||||
COPY --chown=sculpin:sculpin --from=assets /app/build build
|
|
||||||
|
|
||||||
ENTRYPOINT ["/usr/bin/docker-entrypoint.sh"]
|
|
||||||
|
|
||||||
CMD ["bash"]
|
|
||||||
|
|
||||||
###
|
|
||||||
|
|
||||||
FROM alpine AS production
|
FROM alpine AS production
|
||||||
|
|
||||||
COPY --from=build /output/html /app
|
COPY --from=build /app/dist /app
|
||||||
COPY --from=assets /app/build /app/build
|
|
||||||
|
|
||||||
CMD ["sh"]
|
CMD ["bash"]
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
declare(strict_types=1);
|
|
||||||
|
|
||||||
use Opdavies\Sculpin\Bundle\GistEmbedBundle\SculpinGistEmbedBundle;
|
|
||||||
use Opdavies\Sculpin\Bundle\TwigMarkdownBundle\SculpinTwigMarkdownBundle;
|
|
||||||
use Sculpin\Bundle\SculpinBundle\HttpKernel\AbstractKernel;
|
|
||||||
|
|
||||||
final class SculpinKernel extends AbstractKernel
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* {@inheritdoc}
|
|
||||||
*/
|
|
||||||
protected function getAdditionalSculpinBundles(): array
|
|
||||||
{
|
|
||||||
return [
|
|
||||||
SculpinGistEmbedBundle::class,
|
|
||||||
SculpinTwigMarkdownBundle::class,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
sculpin_content_types:
|
|
||||||
daily_emails:
|
|
||||||
permalink: archive/:year/:month/:day/:basename/
|
|
||||||
pages:
|
|
||||||
permalink: /:basename/
|
|
||||||
posts:
|
|
||||||
permalink: blog/:basename/
|
|
||||||
taxonomies: [tags]
|
|
||||||
projects:
|
|
||||||
layout: default
|
|
||||||
permalink: projects/:basename/
|
|
||||||
talks:
|
|
||||||
permalink: talks/:basename/
|
|
||||||
|
|
||||||
services:
|
|
||||||
App\TwigExtension\TalkExtension:
|
|
||||||
tags:
|
|
||||||
- { name: twig.extension }
|
|
|
@ -1,75 +0,0 @@
|
||||||
name: Oliver Davies
|
|
||||||
description: Drupal Developer and Consultant
|
|
||||||
locale: en-GB
|
|
||||||
|
|
||||||
avatar:
|
|
||||||
path: "/images/social-avatar.jpg"
|
|
||||||
|
|
||||||
drupalorg:
|
|
||||||
name: opdavies
|
|
||||||
url: 'https://www.drupal.org/u/%drupalorg.name%'
|
|
||||||
|
|
||||||
email: oliver@oliverdavies.uk
|
|
||||||
|
|
||||||
experience:
|
|
||||||
start_year: 2007
|
|
||||||
|
|
||||||
github:
|
|
||||||
gist:
|
|
||||||
url: 'https://gist.github.com/%github.name%'
|
|
||||||
name: opdavies
|
|
||||||
url: 'https://github.com/%github.name%'
|
|
||||||
|
|
||||||
linkedin:
|
|
||||||
name: opdavies
|
|
||||||
url: 'https://www.linkedin.com/in/%linkedin.name%'
|
|
||||||
|
|
||||||
menus:
|
|
||||||
footer:
|
|
||||||
- title: About
|
|
||||||
href: /
|
|
||||||
is_active: '^//$'
|
|
||||||
|
|
||||||
- title: Blog
|
|
||||||
href: /blog
|
|
||||||
is_active: '^/blog/?'
|
|
||||||
|
|
||||||
- title: Talks
|
|
||||||
href: /talks
|
|
||||||
is_active: '^/talks/?'
|
|
||||||
- title: Recommendations
|
|
||||||
href: /recommendations
|
|
||||||
|
|
||||||
- title: Daily list
|
|
||||||
href: /daily
|
|
||||||
main: []
|
|
||||||
|
|
||||||
packagist:
|
|
||||||
name: opdavies
|
|
||||||
url: 'https://packagist.org/packages/%packagist.name%'
|
|
||||||
|
|
||||||
plausible:
|
|
||||||
domain: ~
|
|
||||||
|
|
||||||
savvycal:
|
|
||||||
name: opdavies
|
|
||||||
url: 'https://savvycal.com/%savvycal.name%'
|
|
||||||
|
|
||||||
speakerdeck:
|
|
||||||
name: opdavies
|
|
||||||
url: 'https://speakerdeck.com/%speakerdeck.name%'
|
|
||||||
|
|
||||||
twitter:
|
|
||||||
name: opdavies
|
|
||||||
url: 'https://twitter.com/%twitter.name%'
|
|
||||||
|
|
||||||
work:
|
|
||||||
company:
|
|
||||||
name: Transport for Wales
|
|
||||||
url: https://tfw.wales
|
|
||||||
role: Lead Software Developer
|
|
||||||
|
|
||||||
youtube:
|
|
||||||
channel:
|
|
||||||
id: UCkeK0qF9HHUPQH_fvn4ghqQ
|
|
||||||
url: 'https://www.youtube.com/channel/%youtube.channel.id%'
|
|
|
@ -1,8 +0,0 @@
|
||||||
---
|
|
||||||
imports:
|
|
||||||
- sculpin_site.yml
|
|
||||||
|
|
||||||
plausible:
|
|
||||||
domain: 'oliverdavies.uk'
|
|
||||||
|
|
||||||
url: https://www.oliverdavies.uk
|
|
|
@ -1,29 +0,0 @@
|
||||||
const esbuild = require("esbuild");
|
|
||||||
|
|
||||||
let minify = false;
|
|
||||||
let sourcemap = true;
|
|
||||||
let watch_fs = true;
|
|
||||||
|
|
||||||
if (process.env.NODE_ENV === "production") {
|
|
||||||
minify = true;
|
|
||||||
sourcemap = false;
|
|
||||||
watch_fs = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const watch = watch_fs && {
|
|
||||||
onRebuild(error) {
|
|
||||||
if (error) console.error("[watch] build failed", error);
|
|
||||||
else console.log("[watch] build finished");
|
|
||||||
},
|
|
||||||
};
|
|
||||||
console.log(watch);
|
|
||||||
|
|
||||||
esbuild.build({
|
|
||||||
entryPoints: ["./js/app.js"],
|
|
||||||
outfile: "/app/build/app.js",
|
|
||||||
bundle: true,
|
|
||||||
minify: minify,
|
|
||||||
sourcemap: sourcemap,
|
|
||||||
watch: watch,
|
|
||||||
plugins: [],
|
|
||||||
});
|
|
|
@ -1,19 +0,0 @@
|
||||||
import "focus-visible";
|
|
||||||
import bash from "highlight.js/lib/languages/bash";
|
|
||||||
import hljs from "highlight.js/lib/core";
|
|
||||||
import ini from "highlight.js/lib/languages/ini";
|
|
||||||
import javascript from "highlight.js/lib/languages/javascript";
|
|
||||||
import php from "highlight.js/lib/languages/php";
|
|
||||||
import yaml from "highlight.js/lib/languages/yaml";
|
|
||||||
|
|
||||||
hljs.registerLanguage("bash", bash);
|
|
||||||
hljs.registerLanguage("ini", ini);
|
|
||||||
hljs.registerLanguage("javascript", javascript);
|
|
||||||
hljs.registerLanguage("php", php);
|
|
||||||
hljs.registerLanguage("yaml", yaml);
|
|
||||||
|
|
||||||
document.addEventListener("DOMContentLoaded", (event) => {
|
|
||||||
document.querySelectorAll("pre code").forEach((element) => {
|
|
||||||
hljs.highlightElement(element);
|
|
||||||
});
|
|
||||||
});
|
|
|
@ -1,22 +0,0 @@
|
||||||
{
|
|
||||||
"private": true,
|
|
||||||
"scripts": {
|
|
||||||
"build:css": "./run yarn:build:css"
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@tailwindcss/aspect-ratio": "^0.2.0",
|
|
||||||
"@tailwindcss/forms": "^0.2.1",
|
|
||||||
"@tailwindcss/typography": "^0.4.0",
|
|
||||||
"alpinejs": "^2.3.5",
|
|
||||||
"autoprefixer": "^10.2.5",
|
|
||||||
"elliptic": ">=6.5.3",
|
|
||||||
"esbuild": "^0.14.10",
|
|
||||||
"focus-visible": "^5.1.0",
|
|
||||||
"highlight.js": "^10.4.1",
|
|
||||||
"lodash": ">=4.17.19",
|
|
||||||
"postcss": "^8.2.1",
|
|
||||||
"postcss-easy-import": "^3.0.0",
|
|
||||||
"postcss-nested": "^5.0.5",
|
|
||||||
"tailwindcss": "2"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,10 +0,0 @@
|
||||||
module.exports = {
|
|
||||||
plugins: {
|
|
||||||
'postcss-easy-import': {
|
|
||||||
extensions: ['.css', '.pcss']
|
|
||||||
},
|
|
||||||
tailwindcss: {},
|
|
||||||
'postcss-nested': {},
|
|
||||||
autoprefixer: {}
|
|
||||||
}
|
|
||||||
}
|
|
15
website/astro.config.mjs
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
import { defineConfig } from 'astro/config';
|
||||||
|
import alpinejs from "@astrojs/alpinejs";
|
||||||
|
import tailwind from "@astrojs/tailwind";
|
||||||
|
|
||||||
|
import mdx from "@astrojs/mdx";
|
||||||
|
|
||||||
|
// https://astro.build/config
|
||||||
|
export default defineConfig({
|
||||||
|
integrations: [alpinejs(), tailwind({
|
||||||
|
config: {
|
||||||
|
applyBaseStyles: false
|
||||||
|
}
|
||||||
|
}), mdx()],
|
||||||
|
site: 'https://www.oliverdavies.uk',
|
||||||
|
});
|
|
@ -1,50 +0,0 @@
|
||||||
{
|
|
||||||
"name": "opdavies/sculpin-skeleton",
|
|
||||||
"description": "A skeleton Sculpin site.",
|
|
||||||
"license": "MIT",
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Oliver Davies",
|
|
||||||
"email": "oliver@oliverdavies.uk",
|
|
||||||
"homepage": "https://www.oliverdavies.uk"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"require": {
|
|
||||||
"illuminate/collections": "^8.55",
|
|
||||||
"nesbot/carbon": "^2.52",
|
|
||||||
"opdavies/sculpin-gist-embed-bundle": "^0.1.0",
|
|
||||||
"opdavies/sculpin-twig-markdown-bundle": "^0.2.0",
|
|
||||||
"sculpin/sculpin": "^3.0"
|
|
||||||
},
|
|
||||||
"scripts": {
|
|
||||||
"dev": "composer run-script generate",
|
|
||||||
"generate": "sculpin generate --clean --no-interaction",
|
|
||||||
"prod": "composer run-script generate -- --env prod",
|
|
||||||
"watch": "composer run-script --timeout=0 generate -- --server --watch"
|
|
||||||
},
|
|
||||||
"config": {
|
|
||||||
"sort-packages": true
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"phpstan/phpstan": "^0.12.98",
|
|
||||||
"phpunit/phpunit": "^9.5"
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"psr-4": {
|
|
||||||
"App\\": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload-dev": {
|
|
||||||
"psr-4": {
|
|
||||||
"App\\Tests\\": "tests/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"extra": {
|
|
||||||
"violinist": {
|
|
||||||
"one_pull_request_per_package": 1,
|
|
||||||
"run_scripts": 0,
|
|
||||||
"bundled_packages": {},
|
|
||||||
"blacklist": []
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
6293
website/composer.lock
generated
|
@ -1,20 +0,0 @@
|
||||||
x-assets: &default-assets
|
|
||||||
build:
|
|
||||||
context: "."
|
|
||||||
target: "assets"
|
|
||||||
env_file:
|
|
||||||
- ".env"
|
|
||||||
restart: "${DOCKER_RESTART_POLICY:-unless-stopped}"
|
|
||||||
stop_grace_period: "3s"
|
|
||||||
tty: true
|
|
||||||
volumes:
|
|
||||||
- ".:/app"
|
|
||||||
|
|
||||||
services:
|
|
||||||
css:
|
|
||||||
<<: *default-assets
|
|
||||||
command: "../run yarn:build:css"
|
|
||||||
|
|
||||||
js:
|
|
||||||
<<: *default-assets
|
|
||||||
command: "../run yarn:build:js"
|
|
|
@ -1,22 +0,0 @@
|
||||||
services:
|
|
||||||
app:
|
|
||||||
build:
|
|
||||||
context: .
|
|
||||||
target: build
|
|
||||||
image: "ghcr.io/opdavies/oliverdavies.uk-web:${DOCKER_TAG:-latest}"
|
|
||||||
command: "sculpin generate --clean --no-interaction --url ${SCULPIN_URL:-http://localhost} --env ${SCULPIN_ENV:-dev} ${SCULPIN_GENERATE_ARGS}"
|
|
||||||
volumes:
|
|
||||||
- .:/app
|
|
||||||
tty: true
|
|
||||||
expose:
|
|
||||||
- 8000
|
|
||||||
networks:
|
|
||||||
- web
|
|
||||||
labels:
|
|
||||||
- "traefik.docker.network=traefik_proxy"
|
|
||||||
- "traefik.http.routers.oliverdavies.rule=Host(`oliverdavies.docker.localhost`)"
|
|
||||||
|
|
||||||
networks:
|
|
||||||
web:
|
|
||||||
external:
|
|
||||||
name: traefik_proxy
|
|
|
@ -1,21 +0,0 @@
|
||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
readonly DRAFTS_DIR="${HOME}/Code/Personal/oliverdavies.uk/source/_posts"
|
|
||||||
|
|
||||||
if [[ $# -eq 0 ]]; then
|
|
||||||
grep -lr "draft: true" "${DRAFTS_DIR}" | cut -d"/" -f9- | tr ".md" "" | sort
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
readonly DRAFTS_FILE="${*}.md"
|
|
||||||
readonly DRAFTS_PATH="${DRAFTS_DIR}/${DRAFTS_FILE// /-}"
|
|
||||||
|
|
||||||
echo $DRAFTS_PATH
|
|
||||||
if [[ -e "${DRAFTS_PATH}" ]]; then
|
|
||||||
eval "${EDITOR}" "${DRAFTS_PATH}"
|
|
||||||
else
|
|
||||||
touch "${DRAFTS_PATH}"
|
|
||||||
fi
|
|
29
website/package.json
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
{
|
||||||
|
"name": "@example/basics",
|
||||||
|
"type": "module",
|
||||||
|
"version": "0.0.1",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"dev": "astro dev",
|
||||||
|
"start": "astro dev",
|
||||||
|
"build": "astro build",
|
||||||
|
"preview": "astro preview",
|
||||||
|
"astro": "astro"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@astrojs/alpinejs": "^0.1.2",
|
||||||
|
"@astrojs/mdx": "^0.11.4",
|
||||||
|
"@astrojs/rss": "^1.0.2",
|
||||||
|
"@astrojs/tailwind": "^2.0.2",
|
||||||
|
"@tailwindcss/aspect-ratio": "^0.4.2",
|
||||||
|
"@tailwindcss/forms": "^0.5.3",
|
||||||
|
"@tailwindcss/nesting": "^0.0.0-insiders.565cd3e",
|
||||||
|
"@tailwindcss/typography": "^0.5.7",
|
||||||
|
"@types/alpinejs": "^3.0.0",
|
||||||
|
"alpinejs": "^3.0.0",
|
||||||
|
"astro": "^1.4.5",
|
||||||
|
"lodash": "^4.17.21",
|
||||||
|
"postcss-import": "^15.0.0",
|
||||||
|
"tailwindcss": "^3.0.24"
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +0,0 @@
|
||||||
parameters:
|
|
||||||
level: max
|
|
||||||
paths:
|
|
||||||
- src
|
|
|
@ -1,26 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
||||||
xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.5/phpunit.xsd"
|
|
||||||
bootstrap="vendor/autoload.php"
|
|
||||||
cacheResultFile=".phpunit.cache/test-results"
|
|
||||||
executionOrder="depends,defects"
|
|
||||||
beStrictAboutCoversAnnotation="true"
|
|
||||||
beStrictAboutOutputDuringTests="true"
|
|
||||||
beStrictAboutTodoAnnotatedTests="true"
|
|
||||||
failOnRisky="true"
|
|
||||||
failOnWarning="true"
|
|
||||||
colors="true"
|
|
||||||
verbose="true">
|
|
||||||
<testsuites>
|
|
||||||
<testsuite name="default">
|
|
||||||
<directory>tests</directory>
|
|
||||||
</testsuite>
|
|
||||||
</testsuites>
|
|
||||||
|
|
||||||
<coverage cacheDirectory=".phpunit.cache/code-coverage"
|
|
||||||
processUncoveredFiles="true">
|
|
||||||
<include>
|
|
||||||
<directory suffix=".php">src</directory>
|
|
||||||
</include>
|
|
||||||
</coverage>
|
|
||||||
</phpunit>
|
|
8
website/postcss.config.cjs
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
module.exports = {
|
||||||
|
plugins: {
|
||||||
|
'postcss-import': {},
|
||||||
|
'tailwindcss/nesting': {},
|
||||||
|
tailwindcss: {},
|
||||||
|
autoprefixer: {}
|
||||||
|
}
|
||||||
|
}
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 15 KiB |
13
website/public/favicon.svg
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 36 36">
|
||||||
|
<path fill="#000" d="M22.25 4h-8.5a1 1 0 0 0-.96.73l-5.54 19.4a.5.5 0 0 0 .62.62l5.05-1.44a2 2 0 0 0 1.38-1.4l3.22-11.66a.5.5 0 0 1 .96 0l3.22 11.67a2 2 0 0 0 1.38 1.39l5.05 1.44a.5.5 0 0 0 .62-.62l-5.54-19.4a1 1 0 0 0-.96-.73Z"/>
|
||||||
|
<path fill="url(#gradient)" d="M18 28a7.63 7.63 0 0 1-5-2c-1.4 2.1-.35 4.35.6 5.55.14.17.41.07.47-.15.44-1.8 2.93-1.22 2.93.6 0 2.28.87 3.4 1.72 3.81.34.16.59-.2.49-.56-.31-1.05-.29-2.46 1.29-3.25 3-1.5 3.17-4.83 2.5-6-.67.67-2.6 2-5 2Z"/>
|
||||||
|
<defs>
|
||||||
|
<linearGradient id="gradient" x1="16" x2="16" y1="32" y2="24" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop stop-color="#000"/>
|
||||||
|
<stop offset="1" stop-color="#000" stop-opacity="0"/>
|
||||||
|
</linearGradient>
|
||||||
|
</defs>
|
||||||
|
<style>
|
||||||
|
@media (prefers-color-scheme:dark){:root{filter:invert(100%)}}
|
||||||
|
</style>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 873 B |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 33 KiB After Width: | Height: | Size: 33 KiB |
Before Width: | Height: | Size: 36 KiB After Width: | Height: | Size: 36 KiB |
Before Width: | Height: | Size: 530 KiB After Width: | Height: | Size: 530 KiB |
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 141 KiB After Width: | Height: | Size: 141 KiB |
Before Width: | Height: | Size: 811 KiB After Width: | Height: | Size: 811 KiB |
Before Width: | Height: | Size: 854 KiB After Width: | Height: | Size: 854 KiB |
Before Width: | Height: | Size: 257 KiB After Width: | Height: | Size: 257 KiB |
Before Width: | Height: | Size: 285 KiB After Width: | Height: | Size: 285 KiB |
Before Width: | Height: | Size: 97 KiB After Width: | Height: | Size: 97 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 106 KiB After Width: | Height: | Size: 106 KiB |
Before Width: | Height: | Size: 884 KiB After Width: | Height: | Size: 884 KiB |
Before Width: | Height: | Size: 275 KiB After Width: | Height: | Size: 275 KiB |
Before Width: | Height: | Size: 249 KiB After Width: | Height: | Size: 249 KiB |
Before Width: | Height: | Size: 323 KiB After Width: | Height: | Size: 323 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
Before Width: | Height: | Size: 40 KiB After Width: | Height: | Size: 40 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 42 KiB After Width: | Height: | Size: 42 KiB |
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 74 KiB After Width: | Height: | Size: 74 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 24 KiB After Width: | Height: | Size: 24 KiB |
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 281 KiB After Width: | Height: | Size: 281 KiB |
Before Width: | Height: | Size: 236 KiB After Width: | Height: | Size: 236 KiB |
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 37 KiB |
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 27 KiB After Width: | Height: | Size: 27 KiB |
Before Width: | Height: | Size: 213 KiB After Width: | Height: | Size: 213 KiB |
Before Width: | Height: | Size: 392 KiB After Width: | Height: | Size: 392 KiB |
Before Width: | Height: | Size: 71 KiB After Width: | Height: | Size: 71 KiB |
Before Width: | Height: | Size: 160 KiB After Width: | Height: | Size: 160 KiB |
Before Width: | Height: | Size: 54 KiB After Width: | Height: | Size: 54 KiB |
Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 114 KiB |
Before Width: | Height: | Size: 94 KiB After Width: | Height: | Size: 94 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 39 KiB After Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 176 KiB After Width: | Height: | Size: 176 KiB |
Before Width: | Height: | Size: 50 KiB After Width: | Height: | Size: 50 KiB |
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 35 KiB |
Before Width: | Height: | Size: 250 KiB After Width: | Height: | Size: 250 KiB |
Before Width: | Height: | Size: 482 KiB After Width: | Height: | Size: 482 KiB |
Before Width: | Height: | Size: 539 KiB After Width: | Height: | Size: 539 KiB |
Before Width: | Height: | Size: 165 KiB After Width: | Height: | Size: 165 KiB |
Before Width: | Height: | Size: 25 KiB After Width: | Height: | Size: 25 KiB |
Before Width: | Height: | Size: 20 KiB After Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 652 KiB After Width: | Height: | Size: 652 KiB |
Before Width: | Height: | Size: 51 KiB After Width: | Height: | Size: 51 KiB |
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
Before Width: | Height: | Size: 21 KiB After Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 9.2 KiB After Width: | Height: | Size: 9.2 KiB |
Before Width: | Height: | Size: 65 KiB After Width: | Height: | Size: 65 KiB |
Before Width: | Height: | Size: 220 KiB After Width: | Height: | Size: 220 KiB |
Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 218 KiB |