Initial commit

main
Jack Baty 2023-10-10 16:55:25 -04:00
commit 636b0a4cc4
913 changed files with 185972 additions and 0 deletions

21
.editorconfig Normal file
View File

@ -0,0 +1,21 @@
[*.{css,scss,less,js,json,ts,sass,html,hbs,mustache,phtml,html.twig,md,yml}]
charset = utf-8
indent_style = space
indent_size = 2
end_of_line = lf
trim_trailing_whitespace = true
insert_final_newline = true
[*.md]
indent_size = 4
trim_trailing_whitespace = false
[site/templates/**.php]
indent_size = 2
[site/snippets/**.php]
indent_size = 2
[package.json,.{babelrc,editorconfig,eslintrc,lintstagedrc,stylelintrc}]
indent_style = space
indent_size = 2

52
.gitignore vendored Normal file
View File

@ -0,0 +1,52 @@
# System files
# ------------
Icon
.DS_Store
# Temporary files
# ---------------
/media/*
!/media/index.html
# Lock files
# ---------------
.lock
# Editors
# (sensitive workspace files)
# ---------------------------
*.sublime-workspace
/.vscode
/.idea
# -------------SECURITY-------------
# NEVER publish these files via Git!
# -------------SECURITY-------------
# Cache Files
# ---------------
/site/cache/*
!/site/cache/index.html
# Accounts
# ---------------
/site/accounts/*
!/site/accounts/index.html
# Sessions
# ---------------
/site/sessions/*
!/site/sessions/index.html
# License
# ---------------
/site/config/.license
/site/plugins/*

67
.htaccess Normal file
View File

@ -0,0 +1,67 @@
# Kirby .htaccess
# revision 2023-07-22
# rewrite rules
<IfModule mod_rewrite.c>
# enable awesome urls. i.e.:
# http://yourdomain.com/about-us/team
RewriteEngine on
# make sure to set the RewriteBase correctly
# if you are running the site in a subfolder;
# otherwise links or the entire site will break.
#
# If your homepage is http://yourdomain.com/mysite,
# set the RewriteBase to:
#
# RewriteBase /mysite
# In some environments it's necessary to
# set the RewriteBase to:
#
# RewriteBase /
# block files and folders beginning with a dot, such as .git
# except for the .well-known folder, which is used for Let's Encrypt and security.txt
RewriteRule (^|/)\.(?!well-known\/) index.php [L]
# block all files in the content folder from being accessed directly
RewriteRule ^content/(.*) index.php [L]
# block all files in the site folder from being accessed directly
RewriteRule ^site/(.*) index.php [L]
# block direct access to Kirby and the Panel sources
RewriteRule ^kirby/(.*) index.php [L]
# make site links work
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*) index.php [L]
</IfModule>
# pass the Authorization header to PHP
SetEnvIf Authorization "(.+)" HTTP_AUTHORIZATION=$1
# compress text file responses
<IfModule mod_deflate.c>
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/javascript
AddOutputFilterByType DEFLATE application/json
AddOutputFilterByType DEFLATE application/javascript
AddOutputFilterByType DEFLATE application/x-javascript
</IfModule>
# set security headers in all responses
<IfModule mod_headers.c>
# serve files as plain text if the actual content type is not known
# (hardens against attacks from malicious file uploads)
Header set Content-Type "text/plain" "expr=-z %{CONTENT_TYPE}"
Header set X-Content-Type-Options "nosniff"
</IfModule>

18
Caddyfile Normal file
View File

@ -0,0 +1,18 @@
localhost:8000 {
tls internal
# Add trailing slash for directory requests
@canonicalPath {
file {path}/index.php
not path */
}
redir @canonicalPath {http.request.orig_uri.path}/ 308
# If the requested file does not exist, try index files
@indexFiles file {
try_files {path} {path}/index.php index.php
split_path .php
}
rewrite @indexFiles {file_match.relative}
php_fastcgi 127.0.0.1:9000
file_server
}

32
Makefile Normal file
View File

@ -0,0 +1,32 @@
SERVER_HOST=custom-fslm@deploy.us1.frbit.com
SERVER_DIR=/srv/app/custom-fslm/htdocs
PUBLIC_DIR=/Users/jbaty/sites/blog-kirby/
TARGET=Fortrabbit
.POSIX:
.PHONY: checkpoint deploy
checkpoint:
git add .
git diff-index --quiet HEAD || git commit -m "Publish checkpoint"
deploy: checkpoint
git push
@echo "\033[0;32mDeploying updates to $(TARGET)...\033[0m"
rsync -v -rz \
--checksum \
--delete \
--no-perms \
--exclude content/ \
--exclude media/ \
--exclude Caddyfile \
--exclude .git/ \
--exclude .htaccess \
--exclude Makefile \
--filter=':- .gitignore' \
--exclude .gitignore.swp \
--exclude .git/ \
$(PUBLIC_DIR) $(SERVER_HOST):$(SERVER_DIR)
open raycast://confetti

42
README.md Normal file
View File

@ -0,0 +1,42 @@
<img src="http://getkirby.com/assets/images/github/starterkit.jpg" width="300">
**Kirby: the CMS that adapts to any project, loved by developers and editors alike.**
The Starterkit is a full-blown Kirby installation with a lot of example content, blueprints, templates and more.
It is ideal for new users to explore many of Kirby's options and get to know the Panel.
You can learn more about Kirby at [getkirby.com](https://getkirby.com).
<img src="http://getkirby.com/assets/images/github/starterkit-screen.png" />
### Try Kirby for free
You can try Kirby and the Starterkit on your local machine or on a test server as long as you need to make sure it is the right tool for your next project. … and when youre convinced, [buy your license](https://getkirby.com/buy).
The Starterkit is a demo of basic Kirby features. It's not recommended to be used "as is" in production. Please, follow our documentation closely for more features and guides on how to build secure, high-quality websites with Kirby.
While Kirby as the CMS software itself requires you to purchase a license, we consider the files primarily connected to this Starterkit (assets, templates, snippets...) free to use under the MIT license. Feel free to start building your own project with them.
### Get going
Read our guide on [how to get started with Kirby](https://getkirby.com/docs/guide/quickstart).
You can download the latest version of the Starterkit from https://download.getkirby.com/.
If you are familiar with Git, you can clone Kirby's Starterkit repository from Github.
git clone https://github.com/getkirby/starterkit.git
## What's Kirby?
- **[getkirby.com](https://getkirby.com)** Get to know the CMS.
- **[Try it](https://getkirby.com/try)** Take a test ride with our online demo. Or download one of our kits to get started.
- **[Documentation](https://getkirby.com/docs/guide)** Read the official guide, reference and cookbook recipes.
- **[Issues](https://github.com/getkirby/kirby/issues)** Report bugs and other problems.
- **[Feedback](https://feedback.getkirby.com)** You have an idea for Kirby? Share it.
- **[Forum](https://forum.getkirby.com)** Whenever you get stuck, don't hesitate to reach out for questions and support.
- **[Discord](https://chat.getkirby.com)** Hang out and meet the community.
- **[YouTube](https://youtube.com/kirbyCasts)** - Watch the latest video tutorials visually with Bastian.
- **[Mastodon](https://mastodon.social/@getkirby)** Spread the word.
- **[Instagram](https://www.instagram.com/getkirby/)** Share your creations: #madewithkirby.
---
© 2009-2022 Bastian Allgeier
[getkirby.com](https://getkirby.com) · [License agreement](https://getkirby.com/license)

464
assets/css/index.css Normal file
View File

@ -0,0 +1,464 @@
* {
margin: 0;
padding: 0;
}
:root {
--padding: 1.5rem;
--color-black: #000;
--color-white: #fff;
--color-grey: #777;
--color-light: #efefef;
--color-text: var(--color-black);
--color-text-grey: var(--color-grey);
--color-background: var(--color-white);
--color-code-light-grey: #cacbd1;
--color-code-comment: #a9aaad;
--color-code-white: #c5c9c6;
--color-code-red: #d16464;
--color-code-orange: #de935f;
--color-code-yellow: #f0c674;
--color-code-green: #a7bd68;
--color-code-aqua: #8abeb7;
--color-code-blue: #7e9abf;
--color-code-purple: #b294bb;
--font-family-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
--font-family-mono: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
}
html {
font-family: var(--font-family-sans);
color: var(--color-text);
background: var(--color-background);
}
img {
max-width: 100%;
}
body {
padding: var(--padding);
max-width: 70rem;
margin: 0 auto;
}
.main {
max-width: 45rem;
margin: auto;
}
article {
max-width: 45rem;
margin: auto;
}
li {
list-style: none;
}
a {
color: currentColor;
text-decoration: none;
}
button {
font: inherit;
background: none;
border: 0;
color: currentColor;
cursor: pointer;
}
strong, b {
font-weight: 600;
}
small {
font-size: inherit;
color: var(--color-text-grey);
}
.bg-light {
background-color: var(--color-light);
}
.color-grey {
color: var(--color-text-grey);
}
.header {
position: relative;
display: flex;
flex-wrap: wrap;
justify-content: space-between;
margin-right: -1rem;
margin-left: -1rem;
margin-bottom: 4rem;
}
.logo {
padding: 1rem;
display: flex;
align-items: center;
font-weight: 600;
cursor: pointer;
}
.menu {
display: flex;
}
.menu a {
padding: 1rem;
display: block;
}
.menu a[aria-current] {
text-decoration: underline;
}
.social {
display: flex;
padding: 0 .5rem;
}
.social a {
padding: 1rem .5rem;
}
.section {
padding: 3rem 0;
}
.grid {
--columns: 12;
--gutter: 3rem;
display: grid;
grid-gap: var(--gutter);
grid-template-columns: 1fr;
}
.grid > .column {
margin-bottom: var(--gutter);
}
.autogrid {
--gutter: 3rem;
--min: 10rem;
display: grid;
grid-gap: var(--gutter);
grid-template-columns: repeat(auto-fit, minmax(var(--min), 1fr));
grid-auto-flow: dense;
}
h1, h2, h3, h4, h5, h6 {
font-size: inherit;
font-weight: inherit;
line-height: inherit;
}
.text {
line-height: 1.5em;
}
.text a {
color: blue;
text-decoration: underline;
}
.text a:visited {
color: blueviolet;
}
.text :first-child {
margin-top: 0;
}
.text :last-child {
margin-bottom: 0;
}
.text p,
.text ul,
.text ol {
margin-bottom: 1.5rem;
}
.text ul,
.text ol {
margin-left: 1rem;
}
.text ul p,
.text ol p {
margin-bottom: 0;
}
.text ul > li {
list-style: disc;
}
.text ol > li {
list-style: decimal;
}
.text ul ol,
.text ul ul,
.text ol ul,
.text ol ol {
margin-bottom: 0;
}
.text h1,
.h1,
.intro {
font-size: 2rem;
margin-bottom: 3rem;
line-height: 1.25em;
}
.h1 p {
font-size: 0.9em;
}
.text h2,
.h2 {
font-size: 1.25rem;
font-weight: 600;
margin-bottom: 1.25rem;
}
.text h3,
.h3 {
font-weight: 600;
}
.text .codeblock {
display: grid;
}
.text code {
font-family: var(--font-family-mono);
font-size: 0.8em;
background: var(--color-light);
padding: 0 .5rem;
display: inline-block;
color: var(--color-black);
}
.text pre {
margin: 3rem 0;
background: var(--color-black);
color: var(--color-white);
padding: 1.5rem;
overflow-x: scroll;
overflow-y: hidden;
line-height: 1.5rem;
}
.text pre code {
padding: 0;
background: none;
color: inherit;
}
.text hr {
margin: 6rem 0;
}
.text dt {
font-weight: 600;
}
.text blockquote {
font-size: 1.25rem;
line-height: 1.325em;
border-left: 2px solid var(--color-black);
padding-left: 1rem;
margin: 3rem 0;
max-width: 35rem;
}
.text blockquote footer {
font-size: .875rem;
font-style: italic;
}
.text figure {
margin: 3rem 0;
}
.text figcaption {
padding-top: .75rem;
color: var(--color-text-grey);
}
hr {
border: 0;
background: currentColor;
height: 2px;
width: 1.5rem;
margin: 3rem auto;
}
.align-center {
text-align: center;
}
.intro {
max-width: 40rem;
}
.intro *:not(:last-child) {
margin-bottom: 1em;
}
.cta {
background: var(--color-black);
color: var(--color-white);
display: inline-flex;
justify-content: center;
padding: .75rem 1.5rem;
border: 4px solid var(--color-white);
outline: 2px solid var(--color-black);
}
.box {
background: var(--color-light);
padding: 1.5rem;
border: 4px solid var(--color-white);
outline: 2px solid var(--color-light);
}
.video,
.img {
position: relative;
display: block;
--w: 1;
--h: 1;
padding-bottom: calc(100% / var(--w) * var(--h));
background: var(--color-black);
}
.img img,
.video iframe {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
border: 0;
}
.img[data-contain] img {
object-fit: contain;
}
.img-caption,
.video-caption {
padding-top: .75rem;
line-height: 1.5em;
}
.footer {
padding: 9rem 0 6rem;
line-height: 1.5em;
}
.footer:before {
content: "";
display: block;
width: 1.5rem;
height: 1px;
background: var(--color-black);
margin-bottom: 1.5rem;
}
.footer h2 {
font-weight: 600;
margin-bottom: .75rem;
}
.footer ul,
.footer p {
color: var(--color-text-grey);
}
.footer p {
max-width: 15rem;
font-size: 11px;
}
.footer a:hover {
color: var(--color-text);
}
.map {
--w: 2;
--h: 1;
padding-bottom: calc(100% / var(--w) * var(--h));
position: relative;
overflow: hidden;
background: var(--color-black);
}
.map iframe {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
border: 0;
}
.margin-s {
margin-bottom: .75rem;
}
.margin-m {
margin-bottom: 1.5rem;
}
.margin-l {
margin-bottom: 3rem;
}
.margin-xl {
margin-bottom: 4.5rem;
}
.margin-xxl {
margin-bottom: 6rem;
}
@media screen and (min-width: 60rem) {
body {
--padding: 3rem;
}
.grid {
grid-template-columns: repeat(12, 1fr);
}
.grid > .column {
grid-column: span var(--columns);
}
}
.pagination {
display: flex;
padding-top: 6rem;
}
.pagination > span {
color: var(--color-text-grey);
}
.pagination > * {
padding: .5rem;
width: 3rem;
text-align: center;
border: 2px solid currentColor;
margin-right: 1.5rem;
}
.pagination > a:hover {
background: var(--color-black);
color: var(--color-white);
border-color: var(--color-black);
}
ul.post li .post-excerpt {
margin-bottom: 2em;
padding-bottom: 2em;
/* border-bottom: 1px solid var(--color-text-grey); */
}
.post-excerpt {
line-height: 1.5em;
max-width: 45rem;
margin: 0 auto;
}
.post-excerpt header {
margin-bottom: 1.5rem;
}
.post-excerpt figure {
margin-bottom: .5rem;
}
.post-excerpt-title {
font-weight: 600;
font-size: 1.5em;
}
.post-excerpt-title:hover {
text-decoration: underline;
}
.post-excerpt-date {
color: var(--color-text-grey);
font-size: 0.9em;
display: block;
margin-bottom: 2em;
}
nav.blog-prevnext h2.post-excerpt-title,
nav.blog-prevnext .post-excerpt-date
{
font-size: 0.9em;
}

1
assets/css/lightbox.css Normal file
View File

@ -0,0 +1 @@
.basicLightbox{position:fixed;display:flex;justify-content:center;align-items:center;top:0;left:0;width:100%;height:100vh;background:rgba(0,0,0,.8);opacity:.01;transition:opacity .4s ease;z-index:1000;will-change:opacity}.basicLightbox--visible{opacity:1}.basicLightbox__placeholder{max-width:100%;-webkit-transform:scale(.9);transform:scale(.9);transition:-webkit-transform .4s ease;transition:transform .4s ease;transition:transform .4s ease,-webkit-transform .4s ease;z-index:1;will-change:transform}.basicLightbox__placeholder>iframe:first-child:last-child,.basicLightbox__placeholder>img:first-child:last-child,.basicLightbox__placeholder>video:first-child:last-child{display:block;position:absolute;top:0;right:0;bottom:0;left:0;margin:auto;max-width:95%;max-height:95%}.basicLightbox__placeholder>iframe:first-child:last-child,.basicLightbox__placeholder>video:first-child:last-child{pointer-events:auto}.basicLightbox__placeholder>img:first-child:last-child,.basicLightbox__placeholder>video:first-child:last-child{width:auto;height:auto}.basicLightbox--iframe .basicLightbox__placeholder,.basicLightbox--img .basicLightbox__placeholder,.basicLightbox--video .basicLightbox__placeholder{width:100%;height:100%;pointer-events:none}.basicLightbox--visible .basicLightbox__placeholder{-webkit-transform:scale(1);transform:scale(1)}

136
assets/css/prism.css Normal file
View File

@ -0,0 +1,136 @@
/* PrismJS 1.19.0
https://prismjs.com/download.html#themes=prism-tomorrow&languages=markup+css+clike+javascript+json+markup-templating+php+yaml */
/**
* prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML
* Based on https://github.com/chriskempson/tomorrow-theme
* @author Rose Pritchard
*/
code[class*="language-"],
pre[class*="language-"] {
color: var(--color-code-white);
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
font-size: 1em;
text-align: left;
white-space: pre;
word-spacing: normal;
word-break: normal;
word-wrap: normal;
line-height: 1.5;
-moz-tab-size: 4;
-o-tab-size: 4;
tab-size: 4;
-webkit-hyphens: none;
-moz-hyphens: none;
-ms-hyphens: none;
hyphens: none;
}
/* Code blocks */
pre[class*="language-"] {
padding: 1rem;
margin: 0 0;
overflow: auto;
}
/* ----- Syntax Highlighting (Prism.js) ------------------------------------ */
.token.punctuation {
color: var(--color-code-light-grey);
}
.token.comment,
.token.doctype {
color: var(--color-code-comment);
}
.token.tag,
.token.markup,
.token.variable,
.token.this,
.token.selector,
.token.key,
.token.kirbytag-bracket,
.token.prolog,
.token.delimiter {
color: var(--color-code-red);
}
.token.constant,
.token.number,
.token.boolean,
.token.boolean.important,
.token.attr-name,
.token.kirbytag-attr,
.token.kirbytag-name,
.token.entity,
.token.bold,
.token.bold > .punctuation {
color: var(--color-code-orange);
}
.token.keyword,
.token.italic,
.token.italic > .punctuation {
color: var(--color-code-purple);
}
.token.function {
color: var(--color-code-blue);
}
.token.operator,
.token.title {
color: var(--color-code-aqua);
}
.token.string,
.token.attr-value,
.token.attr-value .punctuation,
.token.list.punctuation {
color: var(--color-code-green);
}
.token.scope,
.token.class-name,
.token.property,
.token.url {
color: var(--color-code-yellow);
}
/**
* 1. Markdown list bullet.
*/
.token.title,
.token.kirbytag-bracket,
.token.list.punctuation /* 1 */ {
font-weight: 700;
}
.token.title .punctuation {
color: inherit;
}
/**
* 1. Markdown bold text
*/
.token.bold /* 1 */ {
font-weight: bold;
}
.token.italic {
font-style: italic;
}
.codeblock {
background: var(--color-black);
}
.codeblock figcaption {
color: var(--color-code-white);
padding: .5rem 1rem;
font-family: var(--font-family-mono);
border-bottom: 1px solid #333;
}

View File

@ -0,0 +1,8 @@
.contact {
padding: 3rem;
border: 2px solid #000;
margin-top: 4rem;
}
.contact .h1 {
margin-bottom: 1.5rem;
}

View File

@ -0,0 +1,15 @@
.album-gallery {
line-height: 0;
columns: 1;
column-gap: 1.5rem;
}
.album-gallery li {
display: block;
margin-bottom: 1.5rem;
break-inside: avoid;
}
@media screen and (min-width: 60rem) {
.album-gallery {
columns: 2;
}
}

View File

@ -0,0 +1,108 @@
.main {
max-width: 45rem;
margin: auto;
}
.home-grid {
display: grid;
list-style: none;
grid-gap: 1.5rem;
line-height: 0;
grid-template-columns: repeat(1, 1fr);
grid-auto-flow: dense;
}
.home-grid li {
position: relative;
--cols: 1;
--rows: 1;
overflow: hidden;
background: #000;
line-height: 0;
}
.home-grid li:first-child {
--cols: 2;
--rows: 2;
}
.home-grid li:nth-child(5) {
--cols: 2;
}
.home-grid li:nth-child(6) {
--rows: 2;
}
.home-grid li:nth-child(7) {
--cols: 2;
}
.home-grid a {
display: block;
height: 10rem;
}
.home-grid img {
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
width: 100%;
height: 100%;
object-fit: cover;
transition: all .3s;
}
.home-grid figcaption {
display: flex;
align-items: center;
justify-content: center;
position: absolute;
color: #fff;
top: 0;
right: 0;
bottom: 0;
left: 0;
line-height: 1;
text-align: center;
background: rgba(0,0,0, .5);
}
@media screen and (min-width: 45em) {
.home-grid {
grid-template-columns: repeat(3, 1fr);
}
.home-grid li {
grid-column-start: span var(--cols);
grid-row-start: span var(--rows);
}
.home-grid a {
padding-bottom: 52.65%;
}
}
.home .post-title {
font-size: 0.85em;
}
.recent-posts {
margin-top: 2rem;
padding-top: 1rem;
}
.recent-posts h2 {
margin-bottom: 1rem;
font-size: 1rem;
font-weight: 600;
}
.recent-posts li a:hover {
text-decoration: underline;
}
.recent-posts li {
margin: 4px;
}
.more-posts {
margin-top: 15px;
font-weight: 600;
width: 90%;
text-align: right;
}

View File

@ -0,0 +1,28 @@
.post-header {
padding-top: 3rem;
margin-bottom: 3rem;
}
.post-footer {
padding: 6rem 0;
}
.post-date {
color: var(--color-text-grey);
}
.post-tags {
display: flex;
margin-bottom: 1.5rem;
}
.post-tags li {
margin-right: .5rem;
}
.post-tags a {
padding: .5rem 1rem;
display: block;
background: var(--color-light);
}
.post-tags a:hover {
background: var(--color-black);
color: var(--color-white);
}

1
assets/icons/discord.svg Normal file
View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" class="icon icon-discord" viewBox="0 0 16 16"><path d="M6.552,6.712a.891.891,0,0,0,0,1.776A.852.852,0,0,0,7.368,7.6.847.847,0,0,0,6.552,6.712Zm2.92,0a.891.891,0,1,0,.816.888A.852.852,0,0,0,9.472,6.712Z"></path> <path d="M13.36,0H2.64A1.644,1.644,0,0,0,1,1.648V12.464a1.644,1.644,0,0,0,1.64,1.648h9.072l-.424-1.48,1.024.952.968.9L15,16V1.648A1.644,1.644,0,0,0,13.36,0ZM10.272,10.448S9.984,10.1,9.744,9.8a2.524,2.524,0,0,0,1.448-.952,4.578,4.578,0,0,1-.92.472,5.265,5.265,0,0,1-1.16.344A5.6,5.6,0,0,1,7.04,9.656a6.716,6.716,0,0,1-1.176-.344,4.683,4.683,0,0,1-.912-.472,2.488,2.488,0,0,0,1.4.944c-.24.3-.536.664-.536.664a2.9,2.9,0,0,1-2.44-1.216A10.713,10.713,0,0,1,4.528,4.568a3.956,3.956,0,0,1,2.248-.84l.08.1a5.4,5.4,0,0,0-2.1,1.048s.176-.1.472-.232a6.008,6.008,0,0,1,1.816-.5.788.788,0,0,1,.136-.016A6.769,6.769,0,0,1,8.792,4.1a6.521,6.521,0,0,1,2.408.768A5.324,5.324,0,0,0,9.208,3.856l.112-.128a3.956,3.956,0,0,1,2.248.84A10.713,10.713,0,0,1,12.72,9.232,2.924,2.924,0,0,1,10.272,10.448Z" /></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 16 16"><g class="nc-icon-wrapper" fill="#111111"><circle fill="#111111" cx="12.145" cy="3.892" r="0.96"/> <path data-color="color-2" d="M8,12c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S10.206,12,8,12z M8,6C6.897,6,6,6.897,6,8 s0.897,2,2,2s2-0.897,2-2S9.103,6,8,6z"/> <path fill="#111111" d="M12,16H4c-2.056,0-4-1.944-4-4V4c0-2.056,1.944-4,4-4h8c2.056,0,4,1.944,4,4v8C16,14.056,14.056,16,12,16z M4,2C3.065,2,2,3.065,2,4v8c0,0.953,1.047,2,2,2h8c0.935,0,2-1.065,2-2V4c0-0.935-1.065-2-2-2H4z"/></g></svg>

After

Width:  |  Height:  |  Size: 578 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" class="icon icon-mastodon" viewBox="0 0 16 16"><path d="M14.943 3.935c-.215-1.591-1.612-2.845-3.268-3.088-.28-.041-1.338-.19-3.79-.19h-.019c-2.453 0-2.979.148-3.258.19-1.61.236-3.08 1.363-3.437 2.973-.172.793-.19 1.672-.158 2.478.045 1.157.054 2.311.16 3.463.073.765.2 1.524.382 2.27.339 1.38 1.711 2.53 3.056 2.998 1.44.488 2.988.57 4.472.234.163-.038.325-.081.484-.131.36-.114.783-.241 1.093-.465a.036.036 0 0 0 .015-.027v-1.116a.033.033 0 0 0-.041-.031c-.951.225-1.925.338-2.902.336-1.682 0-2.134-.792-2.264-1.122a3.463 3.463 0 0 1-.196-.884.032.032 0 0 1 .04-.033c.935.224 1.893.337 2.855.336.231 0 .461 0 .693-.006.967-.027 1.986-.076 2.938-.26l.067-.015c1.501-.286 2.93-1.184 3.075-3.458.005-.09.018-.938.018-1.03.001-.316.103-2.24-.015-3.422Zm-2.31 5.674h-1.578V5.772c0-.808-.339-1.22-1.028-1.22-.758 0-1.138.488-1.138 1.45v2.1H7.32v-2.1c0-.962-.38-1.45-1.138-1.45-.686 0-1.029.412-1.03 1.22v3.837H3.577V5.656c0-.808.208-1.45.623-1.926.429-.474.991-.718 1.689-.718.808 0 1.418.308 1.825.924l.393.655.393-.655c.407-.616 1.017-.924 1.823-.924.698 0 1.26.244 1.69.718.415.475.623 1.117.623 1.926l-.002 3.953Z"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

4
assets/icons/youtube.svg Normal file
View File

@ -0,0 +1,4 @@
<svg width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
<title>YouTube</title>
<path d="M15.8 4.8c-.2-1.3-.8-2.2-2.2-2.4C11.4 2 8 2 8 2s-3.4 0-5.6.4C1 2.6.3 3.5.2 4.8 0 6.1 0 8 0 8s0 1.9.2 3.2c.2 1.3.8 2.2 2.2 2.4C4.6 14 8 14 8 14s3.4 0 5.6-.4c1.4-.3 2-1.1 2.2-2.4C16 9.9 16 8 16 8s0-1.9-.2-3.2zM6 11V5l5 3-5 3z"/>
</svg>

After

Width:  |  Height:  |  Size: 339 B

7
assets/js/index.js Normal file
View File

@ -0,0 +1,7 @@
// Lightbox
Array.from(document.querySelectorAll("[data-lightbox]")).forEach(element => {
element.onclick = (e) => {
e.preventDefault();
basicLightbox.create(`<img src="${element.href}">`).show();
};
});

1
assets/js/lightbox.js Normal file
View File

@ -0,0 +1 @@
!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).basicLightbox=e()}}(function(){return function i(c,u,a){function s(n,e){if(!u[n]){if(!c[n]){var t="function"==typeof require&&require;if(!e&&t)return t(n,!0);if(l)return l(n,!0);var o=new Error("Cannot find module '"+n+"'");throw o.code="MODULE_NOT_FOUND",o}var r=u[n]={exports:{}};c[n][0].call(r.exports,function(e){return s(c[n][1][e]||e)},r,r.exports,i,c,u,a)}return u[n].exports}for(var l="function"==typeof require&&require,e=0;e<a.length;e++)s(a[e]);return s}({1:[function(e,n,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.create=t.visible=void 0;var u=function(e){var n=1<arguments.length&&void 0!==arguments[1]&&arguments[1],t=document.createElement("div");return t.innerHTML=e.trim(),!0===n?t.children:t.firstChild},a=function(e,n){var t=e.children;return 1===t.length&&t[0].tagName===n},c=function(e){return null!=(e=e||document.querySelector(".basicLightbox"))&&!0===e.ownerDocument.body.contains(e)};t.visible=c;t.create=function(e,o){var r=function(e,n){var t=u('\n\t\t<div class="basicLightbox '.concat(n.className,'">\n\t\t\t<div class="basicLightbox__placeholder" role="dialog"></div>\n\t\t</div>\n\t')),o=t.querySelector(".basicLightbox__placeholder");e.forEach(function(e){return o.appendChild(e)});var r=a(o,"IMG"),i=a(o,"VIDEO"),c=a(o,"IFRAME");return!0===r&&t.classList.add("basicLightbox--img"),!0===i&&t.classList.add("basicLightbox--video"),!0===c&&t.classList.add("basicLightbox--iframe"),t}(e=function(e){var n="string"==typeof e,t=e instanceof HTMLElement==1;if(!1===n&&!1===t)throw new Error("Content must be a DOM element/node or string");return!0===n?Array.from(u(e,!0)):"TEMPLATE"===e.tagName?[e.content.cloneNode(!0)]:Array.from(e.children)}(e),o=function(){var e=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};if(null==(e=Object.assign({},e)).closable&&(e.closable=!0),null==e.className&&(e.className=""),null==e.onShow&&(e.onShow=function(){}),null==e.onClose&&(e.onClose=function(){}),"boolean"!=typeof e.closable)throw new Error("Property `closable` must be a boolean");if("string"!=typeof e.className)throw new Error("Property `className` must be a string");if("function"!=typeof e.onShow)throw new Error("Property `onShow` must be a function");if("function"!=typeof e.onClose)throw new Error("Property `onClose` must be a function");return e}(o)),n=function(e){return!1!==o.onClose(i)&&(t=function(){if("function"==typeof e)return e(i)},(n=r).classList.remove("basicLightbox--visible"),setTimeout(function(){return!1===c(n)||n.parentElement.removeChild(n),t()},410),!0);var n,t};!0===o.closable&&r.addEventListener("click",function(e){e.target===r&&n()});var i={element:function(){return r},visible:function(){return c(r)},show:function(e){return!1!==o.onShow(i)&&(n=r,t=function(){if("function"==typeof e)return e(i)},document.body.appendChild(n),setTimeout(function(){requestAnimationFrame(function(){return n.classList.add("basicLightbox--visible"),t()})},10),!0);var n,t},close:n};return i}},{}]},{},[1])(1)});

11
assets/js/prism.js Normal file

File diff suppressed because one or more lines are too long

40
composer.json Normal file
View File

@ -0,0 +1,40 @@
{
"name": "getkirby/starterkit",
"description": "Kirby Starterkit",
"type": "project",
"keywords": [
"kirby",
"cms",
"starterkit"
],
"authors": [
{
"name": "Bastian Allgeier",
"email": "bastian@getkirby.com",
"homepage": "https://getkirby.com"
}
],
"homepage": "https://getkirby.com",
"support": {
"email": "support@getkirby.com",
"issues": "https://github.com/getkirby/starterkit/issues",
"forum": "https://forum.getkirby.com",
"source": "https://github.com/getkirby/starterkit"
},
"require": {
"php": ">=8.0.0 <8.3.0",
"getkirby/cms": "^3.8"
},
"config": {
"allow-plugins": {
"getkirby/composer-installer": true
},
"optimize-autoloader": true
},
"scripts": {
"start": [
"Composer\\Config::disableProcessTimeout",
"@php -S localhost:8000 kirby/router.php"
]
}
}

View File

@ -0,0 +1,29 @@
Title: Using Zotero as a bookmarking and read-later service
----
Summary:
----
Text: [{"content":{"text":"Im almost certainly using [Zotero](https://www.zotero.org/) wrong.\n\nInstead of for citations and research, Im using Zotero as a bookmarking tool and read-later service, and its working really well. Is no one else doing this?\n\nIve used many tools meant for saving links for later, from del.icio.us to Pinboard to Instapaper to Pocket to Raindrop. All of them are fine. Some focus on social bookmarking, some on archiving, some are meant as “read later” services. And all of them are prettier than Zotero. And yet…\n\nI installed Zotero while tinkering with an Org mode note-taking workflow. Soon after, I installed the “Save to Zotero” Safari extension and started using that instead of my usual “Save to Pinboard” bookmarklet, just for something different. I was surprised to find that this has become my default.\n\nFor free, I get smart metadata parsing and tagging along with old-school hierarchical organization. I get full-page offline snapshots and sync. I get PDF annotation and storage. Oh, and I get citation management I can use if I ever want to sound smarter than I am.\n\nIts only been a month or two, but it feels like I have a good start on building a nicely-organized reference library as a byproduct of bookmarking things to read later."},"id":"3cc71939-8e4f-4c71-87be-7872e352de1a","isHidden":false,"type":"markdown"}]
----
Cover:
----
Date: 2021-06-16 09:05:00
----
Author: - user://47otCWXT
----
Tags: Tech
----
Uuid: j3MwbwGXWE0KN337

View File

@ -0,0 +1 @@
Uuid: wVJWIg1r3zOO2c6h

View File

@ -0,0 +1,29 @@
Title: The Daily Notes Dilemma
----
Summary: You see, I have this wiki, and for a couple of years, I have written a new entry in it (nearly) every day. These "daily notes" have been interspersed and interlinked with the rest of the wiki's content. It works, but I don't love it.
----
Text: [{"content":{"text":"**TL;DR**: [daily.baty.net](https://daily.baty.net/).\n\nYou see, I have [a nice wiki](https://rl.baty.net/), and for a couple of years, I have written a new entry in it (nearly) every day. These “daily notes” have been interspersed and interlinked with the rest of the wikis content. It works, but I dont love it.\n\nWriting in [TiddlyWiki](https://tiddlywiki.com/) is fine. Its super easy, but its also a little clunky, which quickly becomes friction. And the experience for visitors is weird if youre not familiar with TiddlyWiki. Also, theres no RSS feed. I sometimes consider this a feature, because its nice writing freely and knowing its not “going anywhere”. On the other hand, if I were someone wanting to follow along with me, Id want a damn RSS feed.\n\nSo, I periodically waffle between writing my daily posts on the wiki and on a “real” blog. One thing that has kept me in the wiki is that I can easily link things from my daily notes posts to the more permanent entries. This helps build a network of links. I love the _idea_ of all this linking back and forth, but in practice, its not as useful as Id hoped. TiddlyWiki works better when each distinct idea or thing is created as a separate “tiddler”. Ill create a new tiddler about something, link to that something, and then transclude the tiddler in that days daily. And then I almost never actually _take advantage of_ all that work. So why bother? I mean, its not as if Im trying to build some sort of [Zettlekasten](https://en.wikipedia.org/wiki/Zettelkasten) here.\n\nI love writing in [Emacs](https://www.gnu.org/software/emacs/) and keeping everything [formatted as Org-mode files](https://ox-hugo.scripter.co/). I like [Hugo](https://gohugo.io/) for blogging and I like the way the rendered site looks. TiddlyWiki is easier overall but Emacs/Org/Hugo is more fun for me and I believe it results in a nicer experience for visitors.\n\nAll that to say Im once again back to using a “real” blog for my daily notes. Ive committed enough to this that Ive added a link in the navigation here. You can follow along at [daily.baty.net](https://daily.baty.net/).\n\nAn RSS feed for daily.baty.net is available both [on its own](https://daily.baty.net/index.xml) and as part of my [Everything Feed](https://baty.net/everything)."},"id":"096a37da-a475-4b13-807b-65fe1eda1a21","isHidden":false,"type":"markdown"}]
----
Cover:
----
Date: 2022-02-26 11:40:00
----
Author:
----
Tags: Blogging, Notetaking, TiddlyWiki
----
Uuid: IQnzrJ1tzNuEnhIu

View File

@ -0,0 +1 @@
Uuid: eMzqGpRuhm37KoAc

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

View File

@ -0,0 +1,9 @@
Caption:
----
Uuid: ntcR3D4Ns2LUfjP4
----
Template: blocks/image

View File

@ -0,0 +1,29 @@
Title: Back to Org-roam (from Denote)
----
Summary: Using both Org-roam and Denote for my notes is not sustainable. I had to make a call one way or the other.
----
Text: [{"content":{"text":"**Update**: I think Org-roam is the right answer for most people, but I could not resist the simplicity and lack of dependencies of Denote, so I am back in Denote as of June, 2023.\n\nUsing both [Org-roam](https://www.orgroam.com/) and [Denote](https://protesilaos.com/emacs/denote) for my notes is not sustainable. I had to make a call one way or the other.\n\nI went with Org-roam.\n\nThis is a bit disappointing because I prefer the _philosophy_ of Denote. I like that Denote is agnostic about file types (I can mix and match Markdown and Org-mode files, for example). I like that it forces a consistent file naming scheme. I like that it doesnt depend on Org-mode features or any other complex dependencies. I like that it doesnt try to do too much, but is easily extensible. Plus, Im not trying to build some sort of zettelkasten or anything, so simple is preferable.\n\nBut, I keep finding things in Org-roam that I “need”. I use aliases all the time. I like to use several tags on a file, but dont want them all in the file name. I like the full-featured daily notes functions. I like the ability to extract a heading out to a new roam file. Or I can use org-roam-refile to move a heading to another file in the Org-roam directory. Im sure I could find ways to handle some of these things in Denote, but with Org-roam I get them out of the box.\n\nWhat I really like in Org-roam, and have come to rely on, is the ability to have individual Org headings become their own independent roam nodes. For a while, I thought this added unnecessary complexity, but it turns out to be super useful. For example, I have a books.org file, with each book as its own heading. (See [Book logging in Emacs](https://baty.net/2022/book-logging-in-emacs)). Since moving this file into Org-roam, Ive turned each books heading into its own node, making it easier to search for a book or to link between the book and its author note or a concept note. And I can still create summary tables within the books.org file.\n\nThen theres the Graph. I make fun of the Graph because it really is mostly useless, but dammit its fun to poke around in."},"id":"3f60b9db-f2de-4dde-a6e7-63a684944596","isHidden":false,"type":"markdown"},{"content":{"location":"kirby","image":["file://ntcR3D4Ns2LUfjP4"],"src":"","alt":"Org-roam graph","caption":"","link":"","ratio":"","crop":"false"},"id":"9fc94739-fd63-4fa9-850c-35a7728d1a32","isHidden":false,"type":"image"},{"content":{"text":"Add Org-roams larger ecosystem to the above list, and the decision to keep my notes in Org-roam becomes hard to argue with. Im slowly moving my Denote notes back into Org-roam and fixing links, etc.\n\nI dont know why Im so sentimental about Denote. Not using it makes me a little sad. [Prot](https://protesilaos.com/) is brilliant and I like the way he thinks. Denote is a terrific, smart, simple Emacs package, but right now Org-roam makes more sense for my notes."},"id":"7ad680c3-086d-47df-88a3-7d721e85e2fd","isHidden":false,"type":"markdown"}]
----
Cover:
----
Date: 2023-03-16 08:45:00
----
Author: - user://47otCWXT
----
Tags: Emacs, Orgmode
----
Uuid: VLWHmhdoJgQ8Fjxa

View File

@ -0,0 +1 @@
Uuid: YZEjiuk2PZ7wDXOg

Binary file not shown.

After

Width:  |  Height:  |  Size: 296 KiB

View File

@ -0,0 +1,13 @@
Sort: 1
----
Caption:
----
Uuid: 5eS6B8LC8BmZ1Mrq
----
Template: blocks/image

View File

@ -0,0 +1,29 @@
Title: The Emergent Task Planner
----
Summary:
----
Text: [{"content":{"text":"<p>DSri Seahs (Formerly David Seah) Emergent Task Planner (ETP) is a paper-based planning tool that I used from 2012 through 2018. Heres an example from 10 years ago today:</p>"},"id":"072206cc-c97a-4ee6-9b31-211ba91f8f5b","isHidden":false,"type":"text"},{"content":{"location":"kirby","image":["file://5eS6B8LC8BmZ1Mrq"],"src":"","alt":"","caption":"Emergent Task Planner, Aug 21, 2013","link":"","ratio":"","crop":"false"},"id":"8a3077a5-6482-433d-9c0e-b5c1dc25fcb5","isHidden":false,"type":"image"},{"content":{"text":"<p>Lately Ive been using a yellow legal pad on my desk instead of my usual A5 notebook. I like having the extra room, but theres no real structure built in, so I also use the little Hobonichi Techo for listing a few important tasks for the day.</p><p>While organizing some files on my laptop this weekend, I ran into a folder full of scanned ETP pages and was reminded how effective they can be at time blocking, planning, and miscellaneous record keeping. Ive been feeling a bit overwhelmed when staring at the computer, so Im going to try the ETPs for daily planning again.</p><p>I used to use pre-printed ETP pads but I see theyre not currently available, however theres a downloadable PDF on <a href=\"https://davidseah.com/node/the-emergent-task-planner/\" rel=\"noreferrer\">DSris Website</a>.</p><p>If youre a fan of analog planning tools, I very much recommend you give the Emergent Task Planner a try.</p>"},"id":"ec50d1b8-d6b3-4068-b3b6-837973819f25","isHidden":false,"type":"text"}]
----
Cover:
----
Date: 2023-08-21 09:05:00
----
Author: - user://47otCWXT
----
Tags: Analog, Workflow
----
Uuid: AjDWvmTl7pUUw7tu

View File

@ -0,0 +1,29 @@
Title: Using both Denote and Org-roam
----
Summary: Denotes claim to fame is simplicity and structured file naming. Org-roam is great for daily notes, heading-level linking, and the cool visual graph.
----
Text: [{"content":{"text":"[Denote](https://protesilaos.com/emacs/denote) and [Org-roam](https://orgroam.com/) are both great Emacs packages for taking notes. Ive used each of them extensively and have [waffled between them](https://baty.net/2023/back-to-org-roam/) regularly. I started wondering if it makes sense to use _both_. It does!.\n\nDenotes claim to fame is simplicity and structured file naming. Org-roam is great for daily notes, heading-level linking, and the cool visual graph.\n\nIve sometimes felt (probably irrationally) icky about using Org-roam because of its dependency on external sqlite libraries. Now, with Emacs 29+, sqlite is built in, so I feel better about it.\n\nWhat I wanted was Org-roams features with Denotes naming conventions, so I installed both packages. The trick to making it seamless was to adjust the default Org-roam template so that it creates files with the proper names. Heres how Ive done that."},"id":"1de12f25-9c7a-40e4-8ec4-4cd92a004184","isHidden":false,"type":"markdown"},{"content":{"code":"(setq org-roam-capture-templates\n '((\"d\" \"default\" plain \"%?\"\n :target\n (file+head \"%<%Y%m%dT%H%M%S>--${slug}.org\" \":PROPERTIES:\\n:ID: %<%Y%m%dT%H%M%S>\\n:END:\\n#+title: ${title}\\n#+date: [%<%Y-%m-%d %a %H:%S>]\\n#+filetags: \\n#+identifier: %<%Y%m%dT%H%M%S>\\n\\n\")\n :immediate-finish t\n :unnarrowed t)))","language":"lisp"},"id":"19a4a11d-6bbb-40b5-84dc-78284841b068","isHidden":false,"type":"code"},{"content":{"text":"I had been using GUIDs for the ID: property but here Ive switched to IDs based on datestamps so they match the “identifier”. Im not sure this is a great idea. You may also notice that Im not bothering with tagging here. I dont always use tags, anyway, so I dont feel the need to complicate the capture process. Besides, when I do want to add tags I can use `denote-keywords-add` and Denote adds to the filetags property and updates the filename automatically. This is one of the nice things about having both packages available.\n\nIf I want to rename/tag a bunch of files at once, I can use the `denote-dired-*` commands. Any time the database gets out of whack when doing this, I just run `org-roam-db-sync` and were back in action.\n\nOne other bonus is that all of my original Denote links (e.g. denote:ABC123) still work so I havent bothered converting everything to use Orgs id: style links. In order to include my Denote files in Org-roams database, I did need to add an ID: property to the top of each of them. Fortunately, I use the ID property for org-download/org-attach so most of them already had IDs.\n\nUsing both Denote and Org-roam seems to be working fine. Am I missing anything that might cause issues later?"},"id":"db98140a-71d9-4d3b-9187-e8bd19ab2653","isHidden":false,"type":"markdown"}]
----
Cover:
----
Date: 2023-08-23 08:50:00
----
Author: - user://47otCWXT
----
Tags: Emacs, Denote, Orgmode
----
Uuid: gOyLQ62bY4jdYS8d

View File

@ -0,0 +1 @@
Uuid: IrxEdVLaLvc6Ynxl

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

View File

@ -0,0 +1,9 @@
Caption:
----
Uuid: f1LrDEdFmKElTY8w
----
Template: blocks/image

View File

@ -0,0 +1,29 @@
Title: An attempt at file management
----
Summary: The systems that work best for me are the ones that fit my brain naturally. My brain works with digital files the same way it works with physical files. It likes folders. I use five six top-level buckets:
----
Text: [{"content":{"text":"<p>I keep a lot of files in a lot of folders, but Im inconsistent in how I organize them. This means I too frequently have trouble finding things, so Ive made another attempt at fixing the problem.</p><p>Ive tried all the popular “systems”. From <a href=\"https://fortelabs.com/blog/para/\" rel=\"noreferrer\">PARA</a> to ACCESS to <a href=\"https://johnnydecimal.com/\" rel=\"noreferrer\">Johnny Decim</a><a href=\"https://notes.baty.net/Notes/Johnny+Decimal\" rel=\"noreferrer\">al</a>, but everything has felt either too prescriptive or too loose. And they all felt like I was living in someone elses space. I dont want to memorize or check the “rulebook” to figure out where I should put something.</p><p>The systems that work best for me are the ones that fit my brain naturally. My brain works with digital files the same way it works with physical files. It likes folders. I use five six top-level buckets:</p><p><strong>Inbox</strong>  New stuff that needs to be filed. Can come from anywhere, but I know it should be kept and saved <em>somewhere</em>.</p><p><strong>Desk</strong>  This is where I keep my working files. Current projects, temporary stuff, and anything else I want within easy reach.</p><p><strong>File Cabinet</strong>  When Im finished with a project, I move things here. Anything I dont need day-to-day, but may need to look up reasonably quickly. Recent receipts, software serial numbers, etc.</p><p><strong>The Attic</strong>  Things Ill probably not need, but one never knows, so I put them in the Attic. The Attic is for long-term storage of things I want to keep. Tax papers, auto maintenance records for cars I no longer have, etc.</p><p><strong>Deep Space</strong>  This is new. Deep Space is where I put things Im sure Ill never need but cant bring myself to throw away. My gas bill from 2007? Its waiting out there in Deep Space. A letter I wrote to some company 10 years ago? Same. Its a just-in-case for just in case.</p><p><strong>Library</strong>  This is for things other people have written: Blog posts, ebooks, research articles, quotes, clippings, etc.</p><p>I keep everything except Deep Space files in DEVONthink. I use three distinct DEVONthink databases: “Jack” (because I couldnt come up with a better name), which holds my <strong>Inbox</strong>, <strong>Desk</strong>, and <strong>File Cabinet</strong> files. I keep “<strong>The Attic</strong>” and “<strong>Library</strong>” as separate libraries because they tend to grow forever and its easier to sync, backup, and manage them separately.</p><p></p>"},"id":"6db37095-08a9-42dd-b775-dc7a47303873","isHidden":false,"type":"text"},{"content":{"location":"kirby","image":["file://f1LrDEdFmKElTY8w"],"src":"","alt":"","caption":"","link":"","ratio":"","crop":"false"},"id":"056cdb9a-fe2e-4e26-8ce3-27f894c21ee9","isHidden":false,"type":"image"},{"content":{"text":"<p><strong>Deep Space</strong> files are kept in a folder on my Mac Mini file server. Everything is backed up as part of my <a href=\"https://notes.baty.net/Notes/My+Personal+Backup+System\" rel=\"noreferrer\">My Personal Backup System</a>.</p><p>Within each of the folders, I use whatever organization scheme that makes sense.</p>"},"id":"6cda8e3f-250f-480e-862b-5a0663bac1c9","isHidden":false,"type":"text"},{"content":{"text":"<ul><li>“01 Desk” contains a “Projects” folder and some loose bits I want quick access to.</li><li>“02 File Cabinet” uses a simple version of&nbsp;<a href=\"https://notes.baty.net/Notes/Johnny+Decimal\" rel=\"noreferrer\">Johnny Decimal</a>, but I break the rules all the time.</li><li>“Library” is full of topic-based folders like “Environment”, “Technology”, “Politics”, and “Photography”.</li><li>“The Attic” and “Deep Space” are jumbled messes of folders and crap, just like a real attic.</li></ul>"},"id":"ae0572dd-561f-4e28-9bce-fe496c700ce9","isHidden":false,"type":"list"},{"content":{"text":"<p>Its been pointed out that this is very PARA-esque. This is true, theres a similar “flow” to things. My Archive is deeper, maybe. Maybe I should give it a catchy name and sell courses and ebooks! 😆.</p><p>Anyway, this structure is a slightly refined version of what Ive always done naturally, before getting sucked into “Productivity YouTube”. Ive formalized it a bit, but its what makes sense, so perhaps Ill stick with it this time.</p>"},"id":"e58c85e1-b569-4989-bfa2-50038884d506","isHidden":false,"type":"text"}]
----
Cover:
----
Date: 2023-09-30 18:00:00
----
Author: - user://47otCWXT
----
Tags: Workflow
----
Uuid: ZsmKp1xvuKUq33IU

View File

@ -0,0 +1 @@
Uuid: vP9RHF1zKFhC2rNC

View File

@ -0,0 +1,29 @@
Title: Thursday, October 05, 2023
----
Summary:
----
Text: [{"content":{"text":"Look, I know I keep waffling on where to post things, and Im sorry about that. There are simply too many good, viable options for writing things and putting them online.\n\nEarlier today I wrote about using [Tinderbox for blogging](https://daily.baty.net/posts/2023/10/05/Tinderbox-for-blogging.html). Now, Im writing this in WordPress Hugo, using its Gutenberg editor Emacs, which I very much dislike love. Thing is, WordPress is a good answer to the question, “If one was forced to choose a single tool for publishing all of my writing, what should it be?” Its probably the _best_ answer, but hoo-boy, how disappointing.\n\nWordPress has everything one could need for publishing. It works well enough for anything. It has search, comments, stats, a massive ecosystem of plugins and information, good hosting options, etc. But dammit its still WordPress. Its still overwrought. It continues to drift further from its blogging roots (full-site editing, blech!). And I swear, if I see one more “Upgrade to Premium!” notice in the dashboard Im going to (╯°□°)╯︵ ┻━┻.\n\nFor grins, suppose that I just talked myself out of WordPress. What are my options?\n\n1. **Hugo**. Powerful, fast, flexible, well-supported, and I have lots of experience with it. Lots of themes. Currently running [baty.net](https://baty.net/). Free.\n2. **Tinderbox**. Weird and wonderful. Infinitely flexible. Expensive (but Ill pay for it whether I use it for blogging or not, so moot). Markdown is possible but requires swimming upstream. Difficult and fragile for blogging (at least for me it is). No themes or ecosystem around blogging to speak of. Im on my own.\n3. **Blot.im**. Simple. Super easy posting. Depends on Dropbox (or some other sync tool). Inexpensive. Well-supported by the developer (but only one developer). Can be slow. Im not in control of the hosting environment.\n4. **Micro.blog**. Great service. Easy to post. Sometimes unreliable. Nice set of tangential services. Uses Hugo under the hood, but Im not in control over the server environment. Posts end up in the Micro.blog timeline, and I sometimes dont want that. Great cross-posting. The editor is too basic, making longer posts less fun to write.\n5. **Kirby**. Probably great, but Im not going there yet.\n\nAfter writing all this, it became obvious. Im going back all-in with Hugo here at baty.net. Im even going to try once again to post my daily notes here. Imagine what I can do if stop having to maintain multiple systems and just make writing and publishing baty.net as seamless as possible."},"id":"63bb70f0-f686-456e-8ed4-fce26d2247b4","isHidden":false,"type":"markdown"}]
----
Cover:
----
Date: 2023-10-05 08:55:00
----
Author: - user://47otCWXT
----
Tags: Journal
----
Uuid: fno4HoNAFs6qBFaS

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

View File

@ -0,0 +1,9 @@
Caption:
----
Uuid: eTPTn6uMxMZMhqfI
----
Template: blocks/image

View File

@ -0,0 +1,25 @@
Title: Images in Hugo RSS feeds
----
Text: [{"content":{"text":"By default, when showing full content in Hugos RSS feeds, image links from posts using page bundles dont work. If that means nothing to you, maybe skip this one.\n\nIve “solved” the same broken image problem at least 3 times when moving my blog to Hugo, so I thought Id write it down for once.\n\nThe problem begins with the fact that Hugos built in RSS template uses the posts Summary rather than its Content. The only way around this is to override the built-in template with a version that replaces…\n\n`<description>{{ .Summary | html }}</description>`\n\nwith...\n\n`<description>{{ .Content | html }}</description>`\n\nSeems like that should be doable out of the box, but nope, so I copy/paste/edit.\n\nFor posts with images, especially if they have more than one, I like to use Hugos [page bundles](https://gohugo.io/content-management/page-bundles/) features. This offers advantages such as the ability to use relative paths for images. If I put a “portrait.jpg” file in the posts folder, I can reference it using `src=\"portrait.jpg\"` and Hugo figures it all out. Except in the RSS feeds. The image URLs end up relative, which make no sense in RSS. To fix this, I create my own short code for “figure”. To differentiate it from any built-in or theme-specific figure short codes, I named mine “bfigure” (mnemonic: “bundle figure”). Its cobbled together from a dozen old forum and blog posts (that I didnt record, sorry), and it looks like this:"},"id":"6bab1f67-5e00-4494-a7c0-56efdb993377","isHidden":false,"type":"markdown"},{"content":{"code":"{{ $imgname := .Get \"src\" }}\n{{ $title := .Get \"title\" }}\n{{ $caption := .Get \"caption\" }}\n{{ $alttext := default $caption (.Get \"alt\") }}\n{{ $width := .Get \"width\" }}\n{{ $height := .Get \"height\" }}\n{{ $img := $.Page.Resources.GetMatch $imgname }}\n{{ $class := .Get \"class\" }}\n<figure>\n\t<img src=\"{{ $img.Permalink }}\" \n\t alt=\"{{ $alttext }}\"\n\t {{ with $width }} width=\"{{ $width }}\"{{ end }}\n\t {{ with $height }} height=\"{{ $height }}\"{{ end }}\n\t {{ with $class }} class=\"{{ $class }}\"{{ end }}/>\n\t{{ with $caption }}<figcaption>\n\t\t{{ with $title }}<strong>{{ $title }}</strong>{{ end }}\n\t\t{{ with $caption }}<p>{{ $caption }}</p>{{ end }}\n\t</figcaption>{{ end }}\n</figure>","language":"html"},"id":"a92bc41c-1cf5-4d44-9943-646fe3e6cc03","isHidden":false,"type":"code"},{"content":{"text":"Call it like this (spaces added so it renders here correctly):\n\n`{{ < bfigure src=\"photo.jpg\" caption=\"This is a caption\" > }}`\n\nThis covers everything I might need for rendering a figure element. I almost always include a caption, but sometimes get lazy and forget the Alt attribute (sorry!), so Ive made this so that if I dont include Alt, it gets set to the caption.\n\nHeres a test. If you can see this via RSS youll know it worked."},"id":"719b256a-8bf7-4088-a0a0-02758fc17083","isHidden":false,"type":"markdown"},{"content":{"location":"kirby","image":["file://eTPTn6uMxMZMhqfI"],"src":"","alt":"","caption":"Photo from a recent walk","link":"","ratio":"","crop":"false"},"id":"bcc597d6-1488-4d4e-abb8-916f452f7bca","isHidden":false,"type":"image"},{"content":{"text":"<p>This does not do srcsets, so Ill have to get to that later.</p><p>If yall know of a cleaner way to do this, Im all ears.</p>"},"id":"118c49ad-e1e3-4adc-992b-8eff7e40c71e","isHidden":false,"type":"text"}]
----
Cover:
----
Date: 2023-10-06 14:05:00
----
Author: - user://47otCWXT
----
Tags: Hugo, Blogging
----
Uuid: vgqLyJ2633mqmiiD

View File

@ -0,0 +1,25 @@
Title: Creating new Hugo posts using Emacs but with an option to use bundles
----
Text: [{"content":{"text":"<p>I create two disinct types of posts here: Regular posts and Journal posts. Each has its own set of metadata and different formats for filenames, so I have two similiar-but-different lisp functions for creating new posts using Emacs. This works fine.</p><p>Journal posts take advantage of Hugos page bundle features, so they go in a bundle like so:</p>"},"id":"08a6f28f-6ede-4b25-bf7e-4a0c39078628","isHidden":false,"type":"text"},{"content":{"location":"kirby","image":["file://YA5lZa3HLNdVKDdU"],"src":"","alt":"Image of file tree in Kirby content folder","caption":"","link":"","ratio":"","crop":"false"},"id":"090ea8d5-2f81-4635-8bfb-da5ff718c0b2","isHidden":false,"type":"image"},{"content":{"text":"<p>Regular posts, though, either go in a bundle or can be just standalone Markdown files if there are no images in the post. This means that each time I create a new post, I have to choose whether is should be in new-post.md or /new-post/index.md.</p><p>Now, I usually have no qualms about copying and pasting code when its easier and unlikely to cause issues down the road. As Rob Pike said, “A little copying is better than a little dependency.” In this case, though, it felt wrong to simply duplicate the function in order to only change the file name.</p><p>My brain doesnt get along with Lisp, but Im using Emacs so thats what I have to work with. My solution was to add a yes-or-no prompt asking if the new post should be a Bundle, and then create the file based on the response. I fumbled around with this for at least an hour before finally finding something that worked. I have no idea if its the best way to do this. Or even if its a <em>good</em> way to do it, but here it is:</p>"},"id":"296370bc-7c88-4922-bd3e-05635325174b","isHidden":false,"type":"text"},{"content":{"code":";; Create new hugo post\n;; h/t Jeremy Friesen https://takeonrules.com/2021/05/20/emacs-function-to-rename-hugo-blog-post/\n(defun jab/hugo-new-post (title &optional)\n \"Create new blog post for TITLE.\"\n (interactive \"sTitle: \")\n\n (let* ((slug (s-dashed-words title))\n\t (default-directory (concat \"~/sites/blog/content/posts/\"\n\t\t\t\t (format-time-string \"%Y/%m-%B/\")))\n\t (fpath (if (y-or-n-p \"Make Bundle?\")\n\t\t ;; If y create directory using slug and add index.md to path\n\t\t (progn\n\t\t (make-directory (concat default-directory (format-time-string \"%Y-%m-%d-\") slug \"/\"))\n\t\t (concat default-directory (format-time-string \"%Y-%m-%d-\") slug \"/index.md\"))\n\t\t ;; Otherwise just use the slug for the filename\n\t\t (progn\n\t\t (concat default-directory (format-time-string \"%Y-%m-%d-\") slug \".md\")))))\n \n (write-region (concat\n \"---\"\n \"\\ntitle: '\" title \"'\"\n \"\\ndate: \" (format-time-string \"%Y-%m-%d %H:%M:%S %z\")\n \"\\nslug: \" slug\n \"\\ncategories: [\\\"\\\"]\"\n \"\\ntags: [\\\"\\\"]\"\n \"\\nsummary: \"\n \"\\ndraft: true\"\n \"\\n---\\n\")\n nil (expand-file-name fpath) nil nil nil t)\n (find-file (expand-file-name fpath))))","language":"lisp"},"id":"623c1c18-823c-470d-99bd-adb8d4695399","isHidden":false,"type":"code"}]
----
Cover:
----
Date: 2023-10-07 13:15:00
----
Author: - user://47otCWXT
----
Tags: Emacs, Hugo
----
Uuid: YdLRi6FEiDV31WXK

Binary file not shown.

After

Width:  |  Height:  |  Size: 175 KiB

View File

@ -0,0 +1,9 @@
Caption:
----
Uuid: YA5lZa3HLNdVKDdU
----
Template: blocks/image

Binary file not shown.

After

Width:  |  Height:  |  Size: 339 KiB

View File

@ -0,0 +1,13 @@
Sort: 1
----
Caption:
----
Uuid: yRyRHKBPPB37rTQl
----
Template: blocks/image

View File

@ -0,0 +1,29 @@
Title: Monday, October 9, 2023
----
Summary: Kirby, mostly
----
Text: [{"content":{"location":"kirby","image":["file://yRyRHKBPPB37rTQl"],"src":"","alt":"","caption":"Alice and Gail relaxing on the floor of my office","link":"","ratio":"","crop":"false"},"id":"4cc9f118-e1f2-48e7-b18f-a48d2b0c6ab4","isHidden":false,"type":"image"},{"content":{"text":"I lean too often on a multitude of mediums, techniques, and visuals as a distraction to being brave in just one.","citation":"Jeremy Mann"},"id":"0a8e2e32-0f67-4626-984a-f6ab6bcc1bae","isHidden":false,"type":"quote"},{"content":{"text":"<p>I've spent another day building a site using Kirby CMS. I started with the completely empty \"plainkit\" version but have been pulling stuff over from the full demo as needed. Turns out I need a lot of stuff from there. I may have been better off starting with the full demo and deleting things I <em>don't</em> need. Oh well.</p>"},"id":"3a3b21e2-bfda-4bc9-acac-3951b28f0bdc","isHidden":false,"type":"text"}]
----
Cover:
----
Date: 2023-10-09 12:40:00
----
Author: - user://47otCWXT
----
Tags: Journal
----
Uuid: Pu9Eqvd4WYLRQ65O

View File

@ -0,0 +1,29 @@
Title: Baty.net is running Kirby CMS
----
Summary: Remember that time I swore I'd stop changing blogging platforms here? Yeah, well, I lied.
----
Text: [{"content":{"text":"<p>Remember that time I swore I'd stop changing blogging platforms here? Yeah, well, I lied. </p><p>It was only late last week when I decided to once again consolidate my blogs around a single domain. Baty.net has been running Hugo for quite a while, so I just fired that up again, migrated some content, <a href=\"https://baty.net/posts/2023/10/creating-new-hugo-posts-using-emacs\">wrote a little Lisp helper</a>, and figured I was done.</p><p>Then, I read some blog posts about how great <a href=\"https://getkirby.com\">Kirby CMS</a> is and was suddenly determined to try it myself. So I did. You're soaking in it (damn you, <a href=\"https://kevquirk.com/migrating-this-blog-to-kirby\">@kev</a>!).</p><p>I grabbed the Kirby \"starter kit\" and gutted it a <s>little</s> lot. It's so far from finished that there's no way I should have deployed it, but I'm impatient. If I had to wait until it was perfect it would never get done. So please forgive any rough edges, design oddness, or weird behavior.</p><p>I will post some details of the process once the dust settles.</p><p></p><p></p><p></p><p></p><p></p>"},"id":"02de610b-9b9d-4466-8d27-a4fcb82eb485","isHidden":false,"type":"text"}]
----
Cover:
----
Date: 2023-10-10 16:45:00
----
Author:
----
Tags: Blogging, Kirby
----
Uuid: J5op7KWPDTZLWknF

View File

@ -0,0 +1,29 @@
Title: Tuesday, October 10, 2023
----
Summary: (link: https://baty.net/posts/2023/10/kirby-it-is text: Baty.net is running Kirby), so that's kind of big news around here today.
----
Text: [{"content":{"text":"<p><a href=\"https://baty.net/posts/2023/10/kirby-it-is\">Baty.net is running Kirby</a>, so that's kind of big news around here today. I've decided to run it with the <a href=\"https://getkirby.com/releases/4.0\">Kirby 4 beta</a>. Why relearn a bunch of stuff in a month or two, right? Here we go.</p>"},"id":"47dc3a2a-19c0-4bcb-8bd5-7b8ee6f48989","isHidden":false,"type":"text"}]
----
Cover:
----
Date: 2023-10-10 11:45:00
----
Author: - user://47otCWXT
----
Tags: Journal
----
Uuid: muBy0BGcxE6Hu2kc

View File

@ -0,0 +1,5 @@
Text:
----
Uuid: 2a0F7pXknaodPn06

View File

@ -0,0 +1 @@
Uuid: Wxyw0MY28E1OhUts

View File

@ -0,0 +1,5 @@
Title: Posts
----
Uuid: ZWZVZSlNpA6VJzXZ

Binary file not shown.

After

Width:  |  Height:  |  Size: 945 KiB

View File

@ -0,0 +1,13 @@
Sort: 1
----
Caption:
----
Uuid: 6hfEMa5G4lpoQOIy
----
Template: image

Binary file not shown.

After

Width:  |  Height:  |  Size: 252 KiB

View File

@ -0,0 +1,13 @@
Sort: 3
----
Caption:
----
Uuid: hCWpdIllDTWBC8Sd
----
Template: image

Binary file not shown.

After

Width:  |  Height:  |  Size: 822 KiB

View File

@ -0,0 +1,13 @@
Sort: 4
----
Caption:
----
Uuid: i1TrBsanhfYR3csn
----
Template: image

Binary file not shown.

After

Width:  |  Height:  |  Size: 776 KiB

View File

@ -0,0 +1,13 @@
Sort: 5
----
Caption:
----
Uuid: GVr3l2xk1CI4vL48
----
Template: image

Binary file not shown.

After

Width:  |  Height:  |  Size: 835 KiB

View File

@ -0,0 +1,13 @@
Sort: 2
----
Caption:
----
Uuid: E1pi6gZqgsw6eSMa
----
Template: image

View File

@ -0,0 +1,25 @@
Title: Landscape
----
Cover:
----
Headline:
----
Subheadline: Not a lot of portraits here
----
Text: <p>I don't normally seek out landscape photos, but if I see something beautiful, I try to capture it.</p>
----
Tags: landscape, nature
----
Uuid: PjvoKxwSNH1m9vjC

View File

@ -0,0 +1,29 @@
Title: Animals
----
Cover: - file://XN55HBnxPhVT6EQV
----
Headline: Photos of Animals
----
Subheadline: Mostly my dog
----
Text:
----
Tags: animals
----
Description: What does the fox say?
----
Uuid: WHgrILxhRV80ZFb2

Binary file not shown.

After

Width:  |  Height:  |  Size: 832 KiB

View File

@ -0,0 +1,29 @@
Caption: Teefs
----
Alt:
----
Photographer:
----
License:
----
Link:
----
Sort: 1
----
Uuid: mnKEPOPx0oZ8nDY8
----
Template: image

View File

@ -0,0 +1,5 @@
Title: Photos
----
Uuid: EgfXk155nyUvqqA1

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

View File

@ -0,0 +1,9 @@
Caption:
----
Uuid: QWhpLAicSBbJkBVl
----
Template: blocks/image

36
content/3_about/about.txt Normal file
View File

@ -0,0 +1,36 @@
Title: About
----
Text: [{"content":{"location":"kirby","image":["file://QWhpLAicSBbJkBVl"],"src":"","alt":"","caption":"","link":"","ratio":"","crop":"false"},"id":"28c3b141-b651-49b1-8f99-81751751e38f","isHidden":false,"type":"image"},{"content":{"text":"<p>Project/product manager, developer, and founding partner at Fusionary Media (1995-2020). We sold the company in 2020 and Im now looking for my next thing. Im good at Agile process, requirements, user experience, documentation, and product/project management. If theres anything you think I could do for you, <a rel='\\\"noreferrer\\\"'>hire me</a>. Ive been at this for a long time. I enjoy working with both clients and dev teams.</p><p>I love photography, writing, and tinkering with web technologies.</p>"},"id":"4a04cdc9-220b-488d-a3a2-e4486341fae4","isHidden":false,"type":"text"}]
----
Headline: About Jack
----
Address: Jack Baty<br>Ada, MI USA
----
Email: jack@baty.net
----
Phone: (616) 822-5800
----
Social:
-
platform: Instagram
url: https://instagram.com/jackbatyphoto
-
platform: Mastodon
url: https://social.lol/@jbaty
----
Uuid: D1yCxHPlHzgzBJI5

BIN
content/3_about/table.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@ -0,0 +1,25 @@
Caption:
----
Alt: A very clean white room with a small table and a chair in front of it. It's very minimalistic.
----
Photographer:
----
License:
----
Link:
----
Template: blocks/image
----
Uuid: iLoBxXECUjInnSGg

BIN
content/3_about/team.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 KiB

View File

@ -0,0 +1,25 @@
Caption:
----
Alt: Three women sit at a desk with their laptops. They are chatting and laughing.
----
Photographer:
----
License:
----
Link:
----
Template: blocks/image
----
Uuid: 8RxIAFzJekgWfpFn

BIN
content/3_about/writing.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 168 KiB

View File

@ -0,0 +1,25 @@
Caption:
----
Alt: A table with a notebook, a coffee mug and a croissant from above. A women is taking notes.
----
Photographer:
----
License:
----
Link:
----
Template: blocks/image
----
Uuid: mHEVVr6xtDc3gIip

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,29 @@
Title: ✨ Hire Me
----
Text:
I co-founded a [successful digital studio](https://fusionary.com/) in 1995. We sold the company in 2020, and Ive been on a well-earned sabbatical since May, 2021.
**Its time to get back to work.**
I am most comfortable in a digital project or engineering management role. I have extensive technical experience, so I enjoy working with engineering teams and helping them build things and solve problems. Im good at managing digital products, understanding customer needs, and have led many large and small digital projects to successful completion.
I love helping customers with goals and requirements, and then working with development teams to make those things happen. Im a fanatic about usability. I take a pragmatic approach to development, using the most useful components of agile methods.
Ive worked with companies like **Steelcase**, **GM**, **Major League Baseball**, **HealthcareSource**, and dozens more. All of them would recommend me as part of the team working on their projects.
I believe that project documentation and communication are paramount, and I can write documentation as well as communicate project goals, requirements, and progress.
I am honest, reliable, inventive, and fun to work with. Im serious when I need to be.
Download my resume: **[Jack Baty Resume.pdf](https://baty.net/downloads/JackBatyResume.pdf)**
Theres much more to say, so please drop me a line. Id love to chat.
**[✉️ Contact me](mailto:jack@baty.net?subject=re:Hire%20Me)**
----
Uuid: oVmmR9h6SoeekkBJ

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

9
content/error/error.txt Normal file
View File

@ -0,0 +1,9 @@
Title: Error
----
Text: This page cannot be found 😱
----
Uuid: dRz7d31JoFrPuWkG

BIN
content/favicon-16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
content/favicon-32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

BIN
content/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

13
content/home/home.txt Normal file
View File

@ -0,0 +1,13 @@
Title: Home
----
Headline: Hi! I'm Jack Baty 👋
----
Subheadline: Director of Unspecified Services
----
Uuid: wljMYhm0m3e9QOwC

BIN
content/mstile-150x150.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

View File

@ -0,0 +1,192 @@
<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 20010904//EN"
"http://www.w3.org/TR/2001/REC-SVG-20010904/DTD/svg10.dtd">
<svg version="1.0" xmlns="http://www.w3.org/2000/svg"
width="300.000000pt" height="300.000000pt" viewBox="0 0 300.000000 300.000000"
preserveAspectRatio="xMidYMid meet">
<metadata>
Created by potrace 1.14, written by Peter Selinger 2001-2017
</metadata>
<g transform="translate(0.000000,300.000000) scale(0.100000,-0.100000)"
fill="#000000" stroke="none">
<path d="M1940 2774 c0 -10 -8 -26 -17 -36 -19 -21 -27 -52 -11 -42 7 5 8 2 2
-7 -9 -14 -10 -19 -13 -39 0 -5 -7 -10 -14 -10 -8 0 -24 -11 -36 -24 -29 -31
-81 -29 -117 5 -21 20 -27 21 -35 9 -9 -12 -10 -12 -5 3 4 12 0 20 -12 23 -9
3 -25 10 -35 15 -10 5 -23 7 -29 3 -6 -4 -8 -3 -4 4 6 9 -23 25 -49 27 -5 0
-10 7 -10 15 0 19 -61 50 -97 50 -15 0 -52 -9 -82 -21 -38 -14 -77 -20 -123
-19 -196 4 -184 6 -223 -39 -20 -23 -44 -41 -56 -41 -37 0 -86 -43 -119 -104
-17 -32 -55 -80 -83 -106 -34 -32 -52 -56 -52 -71 0 -29 -50 -130 -61 -124
-15 10 -48 -47 -59 -101 -7 -30 -27 -87 -47 -126 -27 -56 -33 -78 -28 -104 3
-19 0 -53 -6 -76 -17 -60 -11 -112 17 -166 13 -25 24 -54 24 -64 0 -11 5 -28
10 -39 9 -16 14 -17 32 -8 11 6 40 9 64 6 24 -2 48 0 55 7 9 8 10 8 5 -1 -4
-7 -2 -13 3 -13 6 0 11 -5 11 -11 0 -5 -4 -8 -8 -5 -5 3 -7 -9 -4 -27 4 -31 3
-31 -12 -11 -17 23 -96 50 -121 41 -17 -7 -20 -39 -5 -65 5 -9 16 -56 24 -104
9 -55 22 -99 36 -118 29 -41 5 -39 -32 3 l-28 32 11 -30 c5 -16 21 -40 34 -53
13 -12 31 -45 39 -72 20 -66 66 -132 121 -171 25 -18 45 -36 45 -40 0 -4 27
-27 60 -51 66 -48 65 -47 87 -138 17 -72 20 -235 4 -254 -7 -9 -7 -16 1 -24 9
-9 7 -12 -10 -12 -12 0 -22 -5 -22 -10 0 -20 28 -65 59 -94 25 -24 33 -27 46
-16 12 10 15 10 15 0 0 -8 3 -10 6 -7 4 4 1 13 -6 22 -7 9 -10 18 -6 22 3 3 6
1 6 -5 0 -7 8 -12 18 -12 13 0 14 2 4 9 -11 7 -11 9 2 14 9 4 16 1 17 -6 0 -7
4 -3 8 8 5 11 6 36 4 55 -4 27 -2 31 6 20 8 -12 11 -5 12 30 1 41 2 43 9 15 6
-24 8 -26 9 -7 1 15 7 22 22 22 11 0 18 4 14 9 -9 16 36 25 46 10 8 -12 11
-12 18 1 6 8 13 11 17 7 4 -4 0 -13 -9 -20 -12 -8 -14 -16 -7 -27 8 -12 10
-12 10 5 1 17 2 17 11 -4 7 -18 6 -27 -3 -33 -8 -5 -9 -8 -2 -8 7 0 14 -12 17
-28 3 -15 13 -52 22 -82 9 -30 23 -81 30 -113 12 -53 53 -132 64 -122 2 3 -1
10 -6 17 -11 14 -9 92 2 120 4 9 4 21 2 25 -3 5 -2 15 4 23 6 11 9 12 9 2 0
-7 4 -11 8 -8 11 6 7 80 -8 161 -6 33 -12 68 -13 78 -1 9 -5 17 -9 17 -4 0 -5
7 -2 15 4 9 0 16 -7 16 -8 1 0 5 16 9 25 6 26 8 7 9 -20 1 -21 3 -11 23 12 22
12 22 20 3 7 -18 8 -18 8 -2 1 10 6 15 11 12 6 -3 10 1 10 9 0 22 32 36 83 36
64 0 67 13 5 26 l-53 10 40 18 c30 13 64 17 138 15 54 -1 101 1 104 5 11 10
34 7 48 -8 8 -7 11 -17 7 -20 -19 -19 -43 -158 -42 -240 1 -54 -2 -86 -8 -82
-5 3 -17 -5 -26 -19 -10 -15 -12 -26 -5 -30 5 -4 7 -15 4 -26 -4 -10 -2 -27 4
-36 10 -17 11 -16 17 5 5 18 9 20 20 11 11 -9 14 -7 15 7 1 11 3 33 5 49 10
89 15 124 23 165 5 25 8 47 5 49 -2 2 11 23 28 47 22 31 34 41 40 32 5 -10 8
-8 8 5 0 13 9 17 41 17 40 0 41 1 35 27 -5 23 -4 25 4 11 17 -28 30 -21 30 17
0 29 -3 33 -17 28 -17 -7 -17 -5 -2 17 10 16 18 57 22 110 3 55 14 110 31 156
32 89 33 114 1 148 -26 28 -33 70 -13 82 6 4 8 3 4 -4 -8 -13 25 -25 48 -16
12 5 16 0 16 -16 0 -16 -4 -20 -15 -16 -8 3 -15 1 -15 -4 0 -6 14 -10 30 -10
23 0 30 5 30 19 0 32 19 35 57 8 l35 -25 33 19 c31 18 42 19 145 10 89 -7 123
-6 166 5 158 41 244 134 244 261 l0 58 -49 2 c-27 2 -86 16 -132 33 -82 31
-109 32 -109 8 0 -7 -10 -31 -22 -53 -15 -28 -22 -61 -24 -112 -1 -40 -5 -77
-9 -83 -9 -15 -106 -12 -139 5 -34 18 -70 20 -60 4 11 -18 -18 -28 -63 -22
-33 4 -44 2 -48 -10 -4 -9 -14 -13 -26 -10 -10 3 -19 0 -19 -6 0 -13 -47 -5
-68 12 -9 7 -19 4 -34 -9 -12 -11 -18 -13 -14 -6 7 12 -9 17 -48 13 -11 -1
-28 7 -39 16 -11 10 -17 12 -13 6 11 -19 -48 -20 -70 -2 -6 5 -14 6 -17 2 -4
-3 -7 -2 -7 4 0 6 -18 10 -39 9 -29 0 -47 6 -64 22 -18 17 -38 24 -76 25 -28
1 -51 -1 -51 -5 0 -14 -59 -19 -79 -7 -17 11 -23 10 -40 -5 -11 -10 -27 -16
-34 -13 -9 3 -19 -4 -25 -18 -13 -28 -47 -24 -55 7 -7 25 26 61 42 45 14 -14
15 11 2 32 -5 7 -6 25 -2 39 6 23 13 26 61 29 29 2 61 10 70 18 23 21 109 20
116 0 5 -12 10 -13 20 -4 8 6 21 8 31 4 10 -5 26 -7 35 -6 9 1 22 -8 29 -20 6
-13 20 -32 30 -43 11 -11 19 -29 19 -40 0 -17 2 -18 10 -6 8 12 10 10 10 -10
1 -25 1 -25 13 -4 7 12 20 20 30 18 14 -2 17 3 14 24 -4 34 -27 82 -39 82 -4
0 -8 6 -8 14 0 7 -21 23 -47 34 -43 18 -68 20 -239 18 -171 -1 -194 -3 -212
-19 -12 -11 -26 -16 -33 -11 -8 4 -10 3 -5 -4 4 -7 -4 -23 -18 -37 -15 -14
-26 -34 -27 -43 0 -10 -3 -12 -6 -4 -6 16 -23 15 -23 -2 0 -21 26 -40 36 -25
9 15 43 -27 44 -53 0 -20 29 -58 44 -58 5 0 17 -7 27 -16 11 -10 27 -14 41
-11 13 4 26 5 29 4 3 -1 13 6 23 16 10 9 23 17 31 17 7 0 15 5 17 12 3 8 27
11 74 10 104 -3 140 -13 149 -42 3 -10 25 -26 49 -35 27 -11 48 -26 55 -42 7
-14 14 -23 18 -19 3 3 14 -4 25 -16 10 -12 28 -22 41 -24 12 -1 25 -3 30 -3
24 -3 -22 -111 -69 -159 -46 -48 -131 -101 -174 -108 -19 -4 -39 -10 -45 -14
-5 -4 -21 -10 -34 -13 -17 -4 -24 -1 -28 13 -3 10 -11 16 -18 14 -7 -3 -32 4
-56 15 -24 11 -70 29 -101 40 -107 37 -170 97 -231 221 -23 47 -45 87 -48 90
-4 3 -10 22 -14 42 -4 21 -11 35 -16 32 -5 -3 -9 4 -9 15 0 10 -5 21 -11 23
-6 2 -12 20 -14 40 -2 21 -6 42 -10 48 -10 16 -25 1 -18 -17 6 -15 5 -15 -8
-3 -8 7 -15 21 -15 29 2 49 -17 150 -27 144 -6 -4 -8 0 -4 10 4 10 2 17 -4 17
-7 0 -9 -10 -5 -23 4 -17 1 -24 -9 -24 -8 0 -14 5 -13 11 2 7 -1 12 -6 13 -16
2 -25 27 -14 34 14 9 17 23 22 118 3 65 2 73 -10 56 -22 -29 -24 -14 -4 27 9
20 20 48 24 63 5 21 11 25 28 19 11 -3 18 -2 15 3 -3 5 2 9 12 9 19 0 24 -36
7 -48 -23 -16 16 -7 54 12 21 11 46 17 54 14 9 -3 16 -2 16 4 0 19 115 35 160
22 32 -9 60 -3 33 7 -15 5 -18 33 -4 33 5 0 17 -7 26 -16 15 -16 16 -14 9 22
-8 46 -21 74 -34 74 -6 0 -10 7 -10 15 0 8 -8 19 -19 24 -24 13 -112 20 -131
10 -8 -4 -35 -15 -60 -25 -55 -23 -72 -38 -64 -58 5 -12 0 -16 -18 -16 -16 0
-29 -9 -38 -25 -7 -14 -17 -25 -21 -25 -13 0 -39 43 -39 66 0 12 -10 25 -24
32 -22 10 -24 8 -31 -24 -3 -20 -10 -32 -16 -28 -11 6 -9 29 6 69 7 20 7 20
-9 0 -16 -19 -16 -17 -14 26 2 26 9 52 16 58 9 9 12 9 12 -1 0 -9 3 -9 10 2 5
8 10 11 10 6 0 -5 14 8 30 29 17 21 30 44 30 51 0 7 9 16 20 19 11 4 17 11 14
17 -5 7 -2 8 5 3 9 -5 7 -13 -8 -29 -12 -12 -21 -32 -21 -44 0 -18 6 -22 34
-22 19 0 37 4 40 9 3 5 29 20 58 35 91 46 122 66 142 93 11 15 14 23 8 19 -7
-4 -12 -1 -12 10 0 12 6 15 22 11 12 -4 27 -2 34 4 7 6 75 12 151 15 76 3 157
9 181 15 24 5 48 6 54 3 7 -4 8 -3 4 4 -5 8 6 11 37 8 47 -3 83 -25 192 -113
65 -53 129 -158 122 -200 -2 -12 0 -20 4 -17 5 3 9 1 9 -5 0 -5 8 -12 18 -14
9 -2 7 -3 -5 -2 -12 1 -24 -4 -27 -12 -8 -20 -7 -25 3 -19 5 3 9 -5 9 -18 0
-13 4 -46 10 -72 25 -112 25 -125 2 -131 -15 -4 -18 -9 -10 -18 6 -7 10 -17 9
-21 -4 -17 14 -89 27 -109 13 -20 13 -69 1 -81 -3 -3 -3 -12 -1 -19 3 -8 -5
-19 -18 -27 -25 -14 -25 -16 -34 -123 l-7 -71 47 1 47 0 0 70 c-1 39 2 87 5
109 6 37 8 38 39 33 31 -5 32 -4 43 45 14 60 15 109 2 165 -6 24 -6 52 -1 65
5 14 3 45 -6 82 -14 63 -29 90 -44 80 -5 -3 -9 2 -9 10 0 9 5 16 10 16 7 0 6
8 -2 23 -7 12 -14 29 -15 37 -4 23 -31 152 -39 184 -10 44 -28 73 -57 96 -15
12 -45 47 -68 80 -22 32 -47 61 -55 64 -8 3 -14 12 -14 20 0 7 -7 16 -15 20
-8 3 -14 0 -12 -7 1 -7 -7 -12 -18 -12 -12 0 -19 6 -17 14 2 11 0 12 -10 3 -9
-7 -19 -7 -28 -2 -13 8 -12 12 3 27 15 16 19 16 27 3 9 -13 10 -13 10 1 0 9
13 29 30 45 33 32 38 52 15 60 -18 7 -10 24 11 24 8 0 14 -6 14 -14 0 -8 3
-17 8 -19 13 -9 9 67 -5 81 -11 11 -13 11 -13 -4z m-757 -444 c-3 -12 -8 -19
-11 -16 -5 6 5 36 12 36 2 0 2 -9 -1 -20z m22 -220 c3 -6 -1 -7 -9 -4 -18 7
-21 14 -7 14 6 0 13 -4 16 -10z m-29 -12 c4 -6 3 -8 -3 -5 -6 4 -13 -2 -16
-13 -3 -11 -11 -20 -19 -19 -10 0 -10 2 0 6 6 2 12 9 12 14 0 6 -4 7 -10 4 -5
-3 -10 -2 -10 4 0 5 8 12 18 14 9 3 18 5 19 6 1 0 5 -4 9 -11z m104 -48 c19
-10 44 -28 55 -41 13 -16 14 -19 3 -11 -33 26 -143 13 -200 -24 -46 -29 -54
-30 -61 -4 -4 14 4 25 29 41 19 11 40 26 47 32 42 39 62 40 127 7z m-427 -160
c3 -11 1 -18 -4 -14 -5 3 -9 12 -9 20 0 20 7 17 13 -6z m1841 -346 c17 -7 22
-54 6 -54 -5 0 -9 -3 -9 -7 4 -25 -3 -34 -23 -31 -31 4 -39 65 -12 85 21 15
18 15 38 7z m-1914 -54 c0 -5 6 -10 13 -10 8 0 19 -12 26 -27 7 -16 24 -46 39
-67 19 -27 23 -41 15 -43 -7 -3 -13 -9 -13 -14 0 -4 7 -6 15 -3 10 4 15 0 15
-12 -1 -25 -76 -81 -120 -89 -32 -5 -39 -2 -80 40 -42 44 -45 51 -51 118 -4
40 -3 76 1 81 9 9 15 7 60 -19 28 -16 28 -16 33 14 5 30 47 58 47 31z m350
-200 c11 -22 17 -40 13 -40 -5 0 -16 18 -25 40 -21 52 -14 52 12 0z m-99 -69
c7 11 9 11 9 -2 0 -9 -7 -19 -15 -23 -11 -4 -15 2 -14 22 1 19 3 22 6 8 4 -15
7 -16 14 -5z m934 -177 c-1 -25 -7 -49 -12 -53 -6 -3 -12 -13 -15 -21 -3 -10
-6 -6 -10 11 -4 21 24 109 35 109 2 0 3 -21 2 -46z m-403 -206 c10 0 20 -3 23
-9 4 -5 11 -9 16 -9 6 0 7 5 4 10 -10 17 3 11 30 -12 35 -30 31 -42 -10 -35
-19 3 -35 2 -35 -4 0 -5 -4 -9 -10 -9 -5 0 -10 7 -10 15 0 8 -6 12 -15 9 -9
-4 -16 3 -21 20 -3 14 -10 23 -15 20 -5 -3 -9 0 -9 6 0 8 7 9 18 5 9 -4 25 -7
34 -7z m133 -48 c3 -5 -1 -10 -9 -10 -9 0 -16 5 -16 10 0 6 4 10 9 10 6 0 13
-4 16 -10z m282 -72 c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z
m-47 -29 c0 -6 -4 -7 -10 -4 -5 3 -10 11 -10 16 0 6 5 7 10 4 6 -3 10 -11 10
-16z m-863 -106 c1 -36 1 -37 -6 -8 -6 26 -5 45 3 45 1 0 2 -17 3 -37z m13
-154 c0 -4 3 -15 6 -24 4 -10 2 -15 -7 -13 -28 6 -40 45 -14 45 8 0 15 -4 15
-8z m-33 -74 c0 -8 -4 -12 -9 -9 -5 3 -6 10 -3 15 9 13 12 11 12 -6z m720 -57
c-3 -8 -6 -5 -6 6 -1 11 2 17 5 13 3 -3 4 -12 1 -19z"/>
<path d="M723 1409 c-20 -20 -15 -57 7 -69 27 -15 35 7 18 49 -10 26 -15 30
-25 20z"/>
<path d="M1945 2635 c-3 -8 -7 -22 -10 -31 -5 -14 -3 -15 9 -5 8 7 12 20 9 28
-5 12 -3 14 7 8 9 -5 11 -4 6 3 -10 16 -16 15 -21 -3z"/>
<path d="M1723 2153 c-7 -3 -13 -12 -14 -21 0 -11 -2 -12 -6 -4 -7 17 -30 15
-37 -4 -3 -9 -11 -12 -18 -8 -8 5 -9 2 -5 -9 3 -10 2 -17 -3 -17 -6 0 -10 -9
-10 -20 0 -11 7 -20 15 -20 8 0 15 -3 15 -7 0 -5 11 -21 24 -36 23 -26 27 -28
62 -18 26 7 40 7 44 0 4 -5 35 -12 69 -14 42 -3 71 -12 88 -25 46 -36 48 -21
3 20 -26 23 -55 40 -70 41 -46 1 -125 9 -137 14 -7 2 -15 0 -18 -5 -4 -6 -13
-10 -21 -10 -14 0 -14 2 0 15 11 12 93 35 122 35 1 0 10 7 19 16 14 15 19 14
53 -12 20 -15 40 -32 43 -37 4 -5 10 4 14 22 4 20 11 29 18 24 7 -3 1 6 -12
20 -14 15 -27 27 -29 27 -3 0 3 -9 12 -19 12 -13 14 -21 6 -26 -5 -3 -8 -11
-5 -16 10 -15 -9 -9 -33 10 -13 12 -20 25 -16 35 4 10 1 16 -9 16 -8 0 -17 4
-19 10 -1 5 -14 11 -28 14 -14 2 -25 5 -25 7 0 4 -80 6 -92 2z"/>
<path d="M960 2105 c0 -8 2 -15 4 -15 2 0 6 7 10 15 3 8 1 15 -4 15 -6 0 -10
-7 -10 -15z"/>
<path d="M1453 2010 c-16 -38 -27 -50 -49 -55 -47 -11 -54 -14 -54 -26 0 -6 7
-9 14 -6 16 6 76 -19 88 -37 5 -7 8 -4 8 7 0 10 -7 17 -17 17 -14 0 -12 5 10
26 15 14 32 22 39 18 8 -5 9 -2 5 9 -4 11 1 20 13 27 25 13 26 32 3 28 -10 -2
-18 3 -19 10 -1 6 -2 17 -3 22 -3 23 -18 7 -38 -40z"/>
<path d="M1966 2017 c3 -10 9 -15 12 -12 3 3 0 11 -7 18 -10 9 -11 8 -5 -6z"/>
<path d="M2020 2014 c0 -13 18 -39 24 -34 2 3 -2 14 -10 24 -8 11 -14 16 -14
10z"/>
<path d="M1680 1942 c0 -6 6 -17 13 -24 20 -21 10 -96 -17 -123 -13 -13 -26
-21 -30 -18 -3 3 -11 2 -18 -4 -21 -16 -42 -9 -55 17 -7 14 -22 33 -35 43 -22
18 -23 18 -39 -2 -9 -11 -18 -18 -21 -16 -2 3 -21 7 -41 9 -29 4 -40 1 -52
-17 -29 -42 -11 -93 35 -97 42 -4 50 -1 43 16 -6 17 -15 19 103 -32 28 -12 43
-13 66 -5 26 9 31 8 35 -9 4 -15 11 -19 25 -14 13 4 18 2 14 -4 -3 -6 -2 -13
4 -17 5 -3 10 1 10 10 0 8 6 18 14 21 8 3 12 12 9 21 -3 8 -1 18 5 22 7 4 15
28 18 54 6 41 5 47 -9 41 -18 -7 -47 17 -47 38 0 8 3 9 8 3 9 -13 32 -17 32
-6 0 5 -7 11 -15 15 -8 3 -15 14 -15 24 0 10 -9 29 -20 42 -11 13 -20 18 -20
12z"/>
<path d="M1000 1910 c0 -5 9 -10 21 -10 11 0 17 -4 14 -10 -4 -6 1 -7 11 -3
14 5 13 8 -7 19 -29 16 -39 17 -39 4z"/>
<path d="M1477 1886 c-3 -8 0 -16 7 -19 6 -3 13 4 13 14 2 22 -12 25 -20 5z"/>
<path d="M1916 1627 c3 -10 9 -15 12 -12 3 3 0 11 -7 18 -10 9 -11 8 -5 -6z"/>
<path d="M1850 1588 c0 -7 5 -20 10 -28 8 -12 10 -11 10 7 0 12 -4 25 -10 28
-5 3 -10 0 -10 -7z"/>
<path d="M1941 1584 c0 -11 3 -14 6 -6 3 7 2 16 -1 19 -3 4 -6 -2 -5 -13z"/>
<path d="M2237 1532 c-27 -30 -20 -40 28 -40 47 1 52 7 35 39 -13 24 -42 25
-63 1z"/>
<path d="M2230 1368 c0 -4 7 -8 15 -8 8 0 15 4 15 8 0 5 -7 9 -15 9 -8 0 -15
-4 -15 -9z"/>
<path d="M2071 1214 c0 -11 3 -14 6 -6 3 7 2 16 -1 19 -3 4 -6 -2 -5 -13z"/>
<path d="M1557 458 c-6 -20 7 -68 18 -68 4 0 15 5 26 10 23 13 26 40 4 40 -8
0 -15 6 -15 14 0 23 -27 27 -33 4z"/>
<path d="M1615 460 c-3 -5 -2 -10 4 -10 5 0 13 5 16 10 3 6 2 10 -4 10 -5 0
-13 -4 -16 -10z"/>
<path d="M1075 300 c3 -5 8 -10 11 -10 2 0 4 5 4 10 0 6 -5 10 -11 10 -5 0 -7
-4 -4 -10z"/>
<path d="M1664 236 c-10 -8 -16 -17 -13 -21 11 -10 59 6 59 21 0 18 -21 18
-46 0z"/>
<path d="M825 210 c8 -27 35 -63 42 -56 3 3 -7 22 -22 43 -21 30 -25 33 -20
13z"/>
<path d="M748 154 c-5 -4 -8 -16 -8 -28 0 -14 3 -17 11 -9 6 6 9 19 7 28 -1 9
-6 13 -10 9z"/>
<path d="M668 143 c7 -3 16 -2 19 1 4 3 -2 6 -13 5 -11 0 -14 -3 -6 -6z"/>
<path d="M881 123 c7 -12 15 -20 18 -17 3 2 -3 12 -13 22 -17 16 -18 16 -5 -5z"/>
<path d="M630 63 c0 -43 5 -41 13 5 4 18 2 32 -3 32 -6 0 -10 -16 -10 -37z"/>
<path d="M726 71 c-16 -17 -16 -19 2 -23 13 -4 18 1 20 18 2 29 0 29 -22 5z"/>
<path d="M905 70 c4 -14 9 -35 12 -47 3 -13 10 -23 15 -23 11 0 2 34 -19 70
l-14 25 6 -25z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -0,0 +1,9 @@
Title: Sandbox
----
Test:
----
Uuid: 7hq2RUkhwEOtnUSh

1
content/site.txt Normal file
View File

@ -0,0 +1 @@
Title: Baty.net

BIN
favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

5
index.php Normal file
View File

@ -0,0 +1,5 @@
<?php
require __DIR__ . '/kirby/bootstrap.php';
echo (new Kirby)->render();

24
kirby/.editorconfig Normal file
View File

@ -0,0 +1,24 @@
# This file is for unifying the coding style for different editors and IDEs
# editorconfig.org
# PHP PSR-12 Coding Standards
# https://www.php-fig.org/psr/psr-12/
root = true
[*]
charset = utf-8
end_of_line = lf
indent_style = tab
indent_size = 2
trim_trailing_whitespace = true
[*.php]
indent_size = 4
insert_final_newline = true
[*.yml]
indent_style = space
[*.md]
trim_trailing_whitespace = false

99
kirby/CONTRIBUTING.md Normal file
View File

@ -0,0 +1,99 @@
# Contributing
:+1::tada: First off, yes, you can contribute and thanks already for taking the time if you do! :tada::+1:
## How we organize code
To keep track of different states of our code (current release, bugfixes, features) we use branches:
| Branch | Used for | PRs allowed? |
| ----------- | ------------------------------------------------------------------------ | --------------------------- |
| `main` | Latest released version | - |
| `develop` | Working branch for next release, e.g. `3.7.x` | ✅ |
| `fix/*` | Temporary branches for single patch | - |
| `feature/*` | Temporary branches for single feature | - |
| `release/*` | Pre-releases in testing before they are merged into `main` when released | only during release testing |
We will review all pull requests (PRs) to `develop` and merge them if accepted, once an appropriate version is upcoming. Please understand that this might not be the immediate next release and might take some time.
## How you can contribute
### Report a bug
When you find a bug, the first step to fixing it is to help us understand and reproduce the bug as best as possible. When you create a bug report, please include as many details as possible. Fill out [the template](https://github.com/getkirby/kirby/issues/new?template=bug_report.md) because the requested information helps us resolve issues so much faster.
### Bug fixes
For bug fixes, please create a new branch following the name scheme: `fix/issue_number-bug-x`, e.g. `fix/234-this-nasty-bug`. Limit bug fix PRs to a single bug. **Do not mix multiple bug fixes in a single PR.** This will make it easier for us to review the fix and merge it.
- Always send bug fix PRs against the `develop` branchnot `main`.
- Add a helpful description of what the PR does if it is not 100% self-explanatory.
- Every bug fix should include a [unit test](#tests) to avoid future regressions. Let us know if you need help with that.
- Make sure your code [style](#style) matches ours and includes [comments/in-code documentation](#documentation).
- Make sure your branch is up to date with the latest state on the `develop` branch. [Rebase](https://help.github.com/articles/about-pull-request-merges/) changes before you send the PR.
- Please *don't* commit updated dist files in the `panel/dist` folder to avoid merge conflicts. We only build the dist files on release. Your branch should only contain changes to the source files.
### Features
For features create a new branch following the name scheme: `feature/issue_number-feature-x`, e.g. `feature/123-awesome-function`. Our [feedback platform](https://feedback.getkirby.com) can be a good source of highly requested features. Maybe your feature idea already exists and you can get valuable feedback from other Kirby users. Focus on a single feature per PR. Don't mix features!
- Always send feature PRs against the `develop` branchnot `main`.
- Add a helpful description of what the PR does.
- New features should include [unit tests](#tests). Let us know if you need help with that.
- Make your code [style](#style) matches ours and includes [comments/in-code documentation](#documentation).
- Make sure your branch is up to date with the latest state on the `develop` branch. [Rebase](https://help.github.com/articles/about-pull-request-merges/) changes before you send the PR.
- Please *don't* commit updated dist files in the `panel/dist` folder to avoid merge conflicts. We only build the dist files on release. Your branch should only contain changes to the source files.
We try to bundle features in our major releases, e.g. `3.x`. That is why we might only review and, if accepted, merge your PR once an appropriate release is upcoming. Please understand that we cannot merge all feature ideas or that it might take a while. Check out the [roadmap](https://roadmap.getkirby.com) to see upcoming releases.
### Translations
We are really happy about any help with translations. Please do not directly translate JSON files, though. We use a service called Transifex to handle [all translations](https://translation.getkirby.com/). Create an account there and send us a request to join our translator group. Additionally, also send an email to <support@getkirby.com>. Unfortunately, we don't get notified properly about new translator requests.
## How we write code
### Style
#### Backend (PHP)
We use [PHP CS Fixer](https://github.com/FriendsOfPHP/PHP-CS-Fixer) to ensure a consistent style for our PHP code. It is mainly based on [PSR-12](https://www.php-fig.org/psr/psr-12/). [Install PHP CS Fixer globally](https://github.com/FriendsOfPHP/PHP-CS-Fixer#globally-composer) via Composer and then run `composer fix` in the `kirby` folder to check for inconsistencies and fix them. Our automated PR checks will fail if there are code style issues with your code.
#### Frontend/Panel (JavaScript, Vue)
We use [Prettier](https://prettier.io) to ensure a consistent style for our JavaScript and Vue code. After running `npm install` in the `kirby/panel` folder, you can run `npm run format` to check for inconsistencies and fix them. We also use [ESLint](https://eslint.org) which you can use by running `npm run lint` and/or `npm run lint:fix`.
### Documentation
In-code documentation and comments help us understand each other's code - or our own code after some months. Especially when matters get more complicated, we try to add a lot of comments to explain what the code does or why we implemented it like this. Even better than good comments is good code that is easy to understand.
#### Backend (PHP)
We use PHP [DocBlocks](https://docs.phpdoc.org/guide/references/phpdoc/basic-syntax.html#what-is-a-docblock) for classes and methods.
#### Frontend/Panel (JavaScript, Vue)
We use [JSDoc](https://jsdoc.app) for documenting JavaScript code, especially for [Vue components](https://vue-styleguidist.github.io/docs/Documenting.html).
#### Public documentation
We also document Kirby on the Kirby website at <https://getkirby.com>. However we recommend to wait with writing public documentation until the feature PR is merged. If you don't know where the documentation for a feature best belongs, don't worry. We can take care of writing the docs.
### Tests
Unit and integration tests help us prevent regressions when we make changes to the code. Every bug fix should also add a unit test for the fixed bug to make sure we won't re-introduce the same problem later down the road. Every new feature should be accompanied by unit tests to protect it from breaking through future changes.
#### Backend (PHP)
We use [PHPUnit](https://phpunit.de) for unit test for our PHP code. You can find all existing tests in the [`kirby/tests` subfolders](https://github.com/getkirby/kirby/tree/main/tests). Take a look to see how we usually structure our tests.
#### Frontend/Panel (JavaScript, Vue)
The Panel doesn't have extensive test coverage yet. That's an area we are still trying to improve.
We use [vitest](https://vitest.dev) for unit tests for JavaScript and Vue components - `.test.js` files next to the actual JavaScript/Vue file.
## And last…
Let us know [in the forum](https://forum.getkirby.com) if you have questions.
**And once more: thank you!** :+1::tada:

222
kirby/LICENSE.md Normal file
View File

@ -0,0 +1,222 @@
# Kirby License Agreement
Published: March 21, 2023
Source: https://getkirby.com/license/2023-03-21
## About this Agreement
While Kirby's source code is publicly available, Kirby is **not free**. To use Kirby in production, you need to [purchase a license](https://getkirby.com/buy).
This End User License Agreement (the **"Agreement"**) is fundamental to the relationship between you and us. Therefore we recommend to read this Agreement carefully before you download, install or use Kirby.
If you do not agree to this Agreement, please do not download, install or use Kirby. Installation or use of Kirby signifies that you have read, understood, and agreed to be bound by this Agreement.
## Definitions
Before we get started with the conditions of the Agreement, let's define the terms that will be used throughout it:
- When we refer to **"You"**, we mean the licensee. Before purchasing Kirby, that's the individual or company that has downloaded and/or installed Kirby for a Development Installation, Private Installation or Extension Demo. When used for a Public Site, the licensee is the individual or company that has purchased the Kirby license. If you work on a client project and have purchased the Kirby license for your client, you (and _not_ the client) are the licensee.
- When we refer to **"We"**/**"Us"**/**"Our"**, we mean the licensor, the Content Folder GmbH & Co. KG. You can find Our company and contact information on Our [contact page](https://getkirby.com/contact).
- A **"Website"** is a single Kirby project that is defined by its domain name and root directory (e.g. `https://sub.example.com` or `https://example.com/example/`). Each (sub)domain and root directory is a separate Website, even if the projects are related in any way. Exception: If You use the cross-domain multi-language feature with the same `content` folder, these domains count as the same Website.
You may use Kirby as a headless backend or as a static site generator. In these cases the Website is defined by the domain and root directory of the user- or visitor-facing frontend(s).
- A **"Development Installation"** is a Website that is installed purely for the purposes of development and client preview. It must only be accessible by a restricted number of users (like on a personal computer, on a server in a network with restricted access or when protecting a staging website with a password that only a restricted number of users know).
- A **"Private Installation"** is a Website that is installed purely for personal use. It must only be accessible by You and Your family.
- An **"Extension Demo"** is a Website with the single purpose to showcase a free or commercial Kirby theme or Kirby plugin, as long as that Website only contains demo content. If the showcased extension is a Kirby theme, the demo content must be exactly as shipped with the theme. Demos for Kirby plugins may _not_ contain any additional content that is not needed to showcase the plugin in use.
- A **"Public Site"** is a Website that is _neither_ a Development Installation, a Private Installation nor an Extension Demo.
- An **"Update"** is defined as a Kirby release which adds smaller new features, minor functionality enhancements or bug fixes. This class of release is identified by the change of the revision to the right of the first decimal point, e.g. 3.1 to 3.2, 3.X.1 to 3.X.2 or 3.X.X.1 to 3.X.X.2.
- An **"Upgrade"** is a major Kirby release which incorporates major new features or enhancements that increase the core functionality of Kirby to a larger extent. This class of release is identified by the change of the revision to the left of the first decimal point, e.g. 3.X to 4.0.
- The **"Source Code"** is defined as the contents of all files that are provided with Kirby and that make Kirby work. This includes (but is not limited to) all PHP, JavaScript, JSON, HTML and CSS files as well as all related image and other media files.
Every time you see one of these capitalized terms in the following text, it has the meaning that has been explained above.
## Usage for a Public Site
Installing Kirby on or using it for a Public Site requires a [paid license](https://getkirby.com/buy).
As Kirby is software and software is intangible, We don't sell it as such. Instead, this Agreement grants a license for each purchase to install and use a single instance of Kirby on a **specific Website**. Additional Kirby licenses must be purchased in order to install and use Kirby on **additional Websites**.
The license is **non-exclusive** (meaning that You are not the only one who We will issue a license) and **generally non-transferable** (meaning that the one who purchases the license is the licensee).
On request, We will **transfer** a license to anyone who is also allowed to buy Kirby licenses by law and this Agreement. The new licensee will take over all rights and obligations of this Agreement from You at the moment We confirm the license transfer.
We will also **reassign** a license to another Website domain and root directory of Your choice, provided that You confirm that the previous Website is no longer in operation and will not be operated with the same license in the future.
If you need to transfer your Kirby license to another individual or company (for example to your client or a new agency) or reassign it to a different project, please get in touch directly at <support@getkirby.com>.
A license is valid for all Updates of the same major Kirby release. We reserve the right to charge an **upgrade fee for Upgrade releases**. Whether a release is an Update or Upgrade is at Our sole discretion.
## Order Process
Our order process is conducted by Our online reseller [Paddle.com](https://paddle.com). Paddle.com is the Merchant of Record for all Our orders. Paddle provides all customer service inquiries and handles returns.
## Free Licenses
Kirby can be used **for free in the following cases**.
Please note that the restrictions and all other clauses of this Agreement also apply to free licenses. You may especially _not_ alter or circumvent the licensing features.
### Usage for a Development Installation
We believe that it should be possible to test and evaluate software before having to purchase a license. Also, We understand that a web project first needs to be built in a protected environment before it can be published.
Therefore, installing and using Kirby on a personal computer (like a desktop PC, notebook or tablet) or server for a Development Installation is **free** for as long as You need.
The usage of Kirby in production (with the intention to handle production data or content) is _never_ considered a Development Installation, even in internal apps or systems.
### Usage for a Private Installation
You may also install and use Kirby for **free** in Private Installations as long as they are not accessible by anyone except You and Your family.
Our [definition](#definitions) of a Private Installation allows the following use cases:
- Private sites for personal use, for example:
- Apps for You personally (like a personal diary)
- Apps for You as a freelancer (like a bookkeeping, invoicing or project management app)
- Apps for Your family (like a private photo gallery)
- Experimental local Kirby setups for Your personal use (for example to try out Kirby features)
However, the following use cases are _not_ covered and need a **[paid license](#usage-for-a-public-site)**:
- Intranets for companies, authorities or organizations, no matter if on a local or public server
- (Internal) apps for teams or entire companies, authorities or organizations
- Websites that are accessible by the public, even for personal/non-commercial purposes
- Use of Kirby as a local CMS for a static or headless site without a license for the frontend domain(s)
### Usage for an Extension Demo
Extension Demos are not real Websites. We want to encourage you to build and showcase your themes and plugins.
Therefore, You may **operate Extension Demos without purchasing a license**.
Please note that this does _not_ apply to store fronts or other types of sites used to promote free or commercial themes or plugins. If such a site is built with Kirby as well, it is a Public Site and needs a **[paid license](#usage-for-a-public-site)**.
## Restrictions
### Legal Restrictions
You may only use Kirby in a manner that complies with any and all **applicable laws** in the jurisdictions in which You use Kirby. Please respect all applicable restrictions concerning **privacy and intellectual property rights**.
### Making Copies
You may make **copies of Kirby** in any machine readable form solely for the **following purposes**, provided that You reproduce Kirby in its original form and with all proprietary notices on the copy:
- when deploying a Website to a server,
- when developing a Website on a personal computer or server,
- when working on code contributions to Kirby or
- as a backup.
You may _not_ reproduce Kirby or its Source Code, in whole or in part, for **any other purpose**.
### Modification of the Source Code
You may **alter, modify or extend the Source Code** for Your own use or with the intention to contribute Your changes back to Kirby. You may also **commission a third party** to perform those modifications for You.
However You may _not_:
- **alter or circumvent the licensing features**, including (but not limited to) the license validation and payment prompts or
- **resell, redistribute or transfer** the modified or derivative version.
Please note that We **can't provide technical support** for modified or derivative versions of the Source Code.
### Your Relationship to Third Parties
You are generally _not_ allowed to **sell, assign, license, disclose, distribute, or otherwise transfer or make available** Kirby or its Source Code, in whole or in part, in any form to any third parties.
The following cases are exempted from this restriction:
- Kirby licenses may be transferred to a new licensee by requesting the transfer from Us ([see above](#usage-for-a-public-site)).
- You may create Websites for third parties (e.g. as an agency or freelancer for a client). Together with this Website, You may bill Your client for the used Kirby license. You may also include the license price in a flat rate. Please note that the licensee in both of these cases is still You unless You request to transfer the license to Your client. If Your price exceeds the price You paid to Us, You need to give Your client the option to purchase the license directly from Us.
- You may make Kirby available to customers via a Software-as-a-Service (SaaS) offering, provided You ensure that each Website has a valid Kirby license purchased either by You or Your customer. If multiple customers share a Website, each customer needs at least one license. Your offering _must not_ appear to be provided or officially endorsed by Us.
- You may make a Kirby installation available to employees or partners of You or Your Website client. You may also disclose and distribute Kirbys Source Code to Your client together with the source code of the Website You created for them.
- You may disclose the Source Code to individuals or companies that are involved in the development or operation of Your Website (e.g. agencies, design or development freelancers, hosting providers or administrators).
E.g. the following cases are explicitly **_not_ allowed**:
- Selling, licensing or distributing a new product based on Kirby that modifies or hides Kirbys identity as a Content Management System (CMS)
- Forking Kirby and selling the modified version ([see above](#restrictions__modification-of-the-source-code))
- Buying licenses in bulk and reselling them in your own shop
- Bundling or including Kirbys Source Code in the publication and/or distribution of a Websites source code or a (free or paid) theme or plugin (please use Git submodules or Composer or provide a link to Our repository or website instead)
### Disallowed Uses
The following uses of Kirby are _not_ covered by this Agreement and will result in the termination of the license:
- Direct or indirect use of Kirby in **critical infrastructure** (e.g. water and energy services, public health, financial services, public security services) or **high-risk environments** (e.g. handling of harmful or dangerous materials). The use in Websites without connection to core processes is allowed.
- Use of Kirby for Websites that contain **misinformation, hate speech or discriminating content** based on age, gender, gender identity, race, sexuality, religion, nationality, serious illnesses or disabilities, no matter who authored this content. Misinformation is defined as content that is false or misleading and may lead to significant risk of physical or societal harm.
- Use of Kirby by **companies or individuals who**:
- lobby for, promote, derive a majority of income from or are significantly invested in:
- the production of tobacco or weapons,
- any prison or jail operated for profit,
- any action or facility that supports or contributes to:
- gambling, adversely addictive behaviours or
- deforestation.
- lobby against, or derive a majority of income from actions that discourage or frustrate:
- peace,
- access to the rights set out in the Universal Declaration of Human Rights and the Convention on the Rights of the Child,
- peaceful assembly and association (including worker associations),
- a safe environment or action to curtail the use of fossil fuels or to prevent climate change or
- democratic processes.
### Other Restrictions
You may also _not_:
- **extract parts of the Source Code** for use in other programs or projects (unless the code file in question is explicitly licensed under the terms of the MIT license) or
- **remove or alter any proprietary notices** on Kirby.
## Technical Support
Technical support is **provided as described on Our website** at <https://getkirby.com>. **No representations or guarantees** are made regarding the response time in which support questions are answered, however We will do Our best to respond quickly.
We reserve the right to **limit technical support for free licenses**.
## Refund Policy
We offer a **14-day**, money back refund policy if Kirby didn't work out for Your project.
If you need a refund, please get in touch directly at <support@getkirby.com>.
## No Warranty
KIRBY IS OFFERED ON AN **"AS-IS" BASIS** AND **NO WARRANTY**, EITHER EXPRESSED OR IMPLIED, IS GIVEN. WE EXPRESSLY DISCLAIM ALL WARRANTIES OF ANY KIND, WHETHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. YOU ASSUME ALL RISK ASSOCIATED WITH THE QUALITY, PERFORMANCE, INSTALLATION AND USE OF KIRBY INCLUDING, BUT NOT LIMITED TO, THE RISKS OF PROGRAM ERRORS, DAMAGE TO EQUIPMENT, LOSS OF DATA OR SOFTWARE PROGRAMS, OR UNAVAILABILITY OR INTERRUPTION OF OPERATIONS. **YOU ARE SOLELY RESPONSIBLE** FOR DETERMINING THE APPROPRIATENESS OF USE OF KIRBY AND ASSUME ALL RISKS ASSOCIATED WITH ITS USE. THIS PARAGRAPH ALSO APPLIES TO YOU IF YOU ARE NOT THE LICENSEE (E.G. IF YOU USE KIRBY WHILE SOMEONE ELSE IS THE LICENSEE).
## Term, Termination and Modification
You may **indefinitely use** all Kirby versions that are covered by Your license under this Agreement until either party **terminates this Agreement** as described in this section.
**You** may terminate the Agreement at any time.
**We** may only terminate the Agreement if You or any individual or company who works with Kirby or uses it on Your behalf has violated or failed to comply with terms of this Agreement. If Your compliance with the Agreement can be restored by fixing the violation or non-compliance, We will first contact You with information on the specific term that was violated or not complied with and will allow reasonable time of at least 14 days before We will decide on a license termination. Should We be in the position to terminate a license according to this paragraph, other or all licenses granted to You may be terminated for the same reason(s) at the same time or at any later date.
Termination takes effect upon notice to the other party in textual form (via email or letter). Upon termination, the specified **licenses granted to You will terminate**, and You will **immediately uninstall and cease all use** of Kirby. If not all licenses are terminated, You may continue to use Kirby for the Websites with active licenses. The sections entitled "No Warranty", "Indemnification" and "Limitation of Liability" will **survive any termination** of this Agreement.
We may **modify Kirby and this Agreement** with notice to You either via email or by publishing content on the Kirby website at https://getkirby.com, including but not limited to changing the functionality or appearance of Kirby. Any such modification will **become binding on You** unless You terminate this Agreement. Changes to this Agreement that constrain Your rights to a great extent will only become effective with Your approval in textual or electronic form.
## Indemnification
By accepting the Agreement, you **agree to indemnify and otherwise hold harmless** Us as well as Our officers, employees, agents, subsidiaries, affiliates and other partners from any direct, indirect, incidental, special, consequential or exemplary damages arising out of, relating to, or resulting from your use of Kirby or any other matter relating to Kirby. This paragraph also applies to you if you are not the licensee (e.g. if you use Kirby while someone else is the licensee).
## Limitation of Liability
YOU EXPRESSLY UNDERSTAND AND AGREE THAT **WE SHALL NOT BE LIABLE** FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL OR EXEMPLARY DAMAGES, INCLUDING BUT NOT LIMITED TO, DAMAGES FOR LOSS OF PROFITS, GOODWILL, USE, DATA OR OTHER INTANGIBLE LOSSES (EVEN IF WE HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES). SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF THE LIMITATION OR EXCLUSION OF LIABILITY FOR INCIDENTAL OR CONSEQUENTIAL DAMAGES. ACCORDINGLY, **SOME OF THE ABOVE LIMITATIONS MAY NOT APPLY TO YOU**. **IN NO EVENT WILL OUR TOTAL CUMULATIVE DAMAGES EXCEED** THE FEES YOU PAID TO US UNDER THIS AGREEMENT IN THE MOST RECENT TWELVE-MONTH PERIOD. THIS PARAGRAPH ALSO APPLIES TO YOU IF YOU ARE NOT THE LICENSEE (E.G. IF YOU USE KIRBY WHILE SOMEONE ELSE IS THE LICENSEE).
## All Rights Reserved
Bastian Allgeier **owns all rights**, title and interest to Kirby (including all intellectual property rights) and **reserves all rights to Kirby** that are not expressly granted in this Agreement.
## Applicable Law & Place of Jurisdiction
1. For all disputes arising out of or in connection with this Agreement, the courts competent for Neckargemünd, Germany, shall have exclusive jurisdiction. However, We shall have the choice to file lawsuits against You before the courts competent for Your place of business.
2. If You reside in Germany, para. 1 shall only apply if You are a merchant, a legal entity under public law or a special fund under public law.
3. If You don't reside in Germany, but in a different member state of the European Union, para. 1 shall only apply if You are not a consumer under Art. 17 of the regulation (EU) No. 1215/2012. In that case, You shall be entitled to file actions against Us either at Our place of business or at the courts competent at the place where You usually reside. We, on the other hand, are only entitled to bring proceedings against You in the courts of the Member State in which You are domiciled.
4. If You neither reside in Germany nor in a member state of the EU, the applicability of para. 1 remains unaffected.
## Severability Clause
Should any provision of this Agreement be or become invalid, void or unenforceable, in whole or in part, at present or in the future, this shall not affect the validity of the remaining provisions of this Agreement. The same shall apply if a gap requiring supplementation arises after conclusion of this Agreement. The parties shall replace the invalid, void or unenforceable provision or gap requiring filling by a valid provision which in its legal or economic content takes account of the invalid, void provision and the overall content of the agreement. § Section 139 of the German Civil Code (partial invalidity) is expressly waived.
## Questions?
Due to Kirby's flexibility, you may have special use cases or requirements that don't fit this Agreement.
If that's the case or if you have any questions, feel free to get in touch: <support@getkirby.com>. We are happy to think outside the box and find custom license solutions for your creative application of Kirby.

47
kirby/README.md Normal file
View File

@ -0,0 +1,47 @@
[<img src="https://getkirby.com/assets/images/github/kirby.jpg" width="300">](https://getkirby.com)
[![Release](https://img.shields.io/github/v/release/getkirby/kirby)](https://github.com/getkirby/kirby/releases/latest)
[![CI Status](https://img.shields.io/github/actions/workflow/status/getkirby/kirby/ci.yml?branch=main&label=CI)](https://github.com/getkirby/kirby/actions?query=workflow%3ACI+branch%3Amain)
[![Coverage Status](https://img.shields.io/codecov/c/gh/getkirby/kirby?token=ROZ2RVA0OF)](https://codecov.io/gh/getkirby/kirby)
[![Downloads](https://img.shields.io/packagist/dt/getkirby/cms?color=red)](https://github.com/getkirby/kirby/releases/latest)
**Kirby: the CMS that adapts to any project, loved by developers and editors alike.**
With Kirby, you build your own ideal interface. Combine forms, galleries, articles, spreadsheets and more into an amazing editing experience. You can learn more about Kirby at [getkirby.com](https://getkirby.com).
This is Kirby's core application folder. Get started with one of the following repositories instead:
- [Starterkit](https://github.com/getkirby/starterkit)
- [Plainkit](https://github.com/getkirby/plainkit)
<img src="https://getkirby.com/assets/images/github/kirby-screen.png" />
### Try Kirby for free
Kirby is not free software. However, you can try Kirby and the Starterkit on your local machine or on a test server as long as you need to make sure it is the right tool for your next project. … and when youre convinced, [buy your license](https://getkirby.com/buy).
### Contribute
**Found a bug?**
Please post all bugs as individual reports in our [issue tracker](https://github.com/getkirby/kirby/issues).
**Suggest a feature**
If you have ideas for a feature or enhancement for Kirby, please use our [feedback platform](https://feedback.getkirby.com).
**Translations, bug fixes, code contributions ...**
Read about how to contribute to the development in our [contributing guide](/CONTRIBUTING.md).
## What's Kirby?
- **[getkirby.com](https://getkirby.com)** Get to know the CMS.
- **[Try it](https://getkirby.com/try)** Take a test ride with our online demo. Or download one of our kits to get started.
- **[Documentation](https://getkirby.com/docs/guide)** Read the official guide, reference and cookbook recipes.
- **[Issues](https://github.com/getkirby/kirby/issues)** Report bugs and other problems.
- **[Feedback](https://feedback.getkirby.com)** You have an idea for Kirby? Share it.
- **[Forum](https://forum.getkirby.com)** Whenever you get stuck, don't hesitate to reach out for questions and support.
- **[Discord](https://chat.getkirby.com)** Hang out and meet the community.
- **[YouTube](https://youtube.com/kirbyCasts)** - Watch the latest video tutorials visually with Bastian.
- **[Mastodon](https://mastodon.social/@getkirby)** Spread the word.
- **[Instagram](https://www.instagram.com/getkirby/)** Share your creations: #madewithkirby.
---
© 2009-2023 Bastian Allgeier
[getkirby.com](https://getkirby.com) · [License agreement](https://getkirby.com/license)

3
kirby/SECURITY.md Normal file
View File

@ -0,0 +1,3 @@
# Security Policy
Please see the [Security Policy on the Kirby website](https://getkirby.com/security) for a list of the currently supported Kirby versions and of past security incidents as well as for information on how to report security vulnerabilities in the Kirby core or in the Panel.

83
kirby/assets/whoops.css Normal file
View File

@ -0,0 +1,83 @@
body {
background: #efefef;
font: normal normal 400 12px/1.5 -apple-system, BlinkMacSystemFont, Segoe UI,
Roboto, Helvetica, Arial, sans-serif;
}
.left-panel {
background: transparent;
}
header {
background-color: #313740;
}
.exc-title-primary {
color: hsl(0, 71%, 55%);
}
.frame.active {
color: hsl(0, 71%, 55%);
box-shadow: inset -5px 0 0 0 #d16464;
}
.frame:not(.active):hover {
background: rgba(203, 215, 229, 0.5);
}
.rightButton {
color: #999;
box-shadow: inset 0 0 0 1px #777;
border-radius: 0;
}
.rightButton:hover {
box-shadow: inset 0 0 0 1px #555;
color: #777;
}
.details-heading {
color: #7e9abf;
font-weight: 500;
}
.frame-code {
background: #000;
}
pre.code-block,
code.code-block,
.frame-args.code-block,
.frame-args.code-block samp {
background: #16171a;
}
.linenums li.current {
background: transparent;
}
.linenums li.current.active {
background: rgba(209, 100, 100, 0.3);
}
pre .atv,
code .atv,
pre .str,
code .str {
color: #a7bd68;
}
pre .tag,
code .tag {
color: #d16464;
}
pre .kwd,
code .kwd {
color: #8abeb7;
}
pre .atn,
code .atn {
color: #de935f;
}

36
kirby/bootstrap.php Normal file
View File

@ -0,0 +1,36 @@
<?php
/**
* Validate the PHP version to already
* stop at older or too recent versions
*/
if (
version_compare(PHP_VERSION, '8.0.0', '>=') === false ||
version_compare(PHP_VERSION, '8.3.0', '<') === false
) {
die(include __DIR__ . '/views/php.php');
}
if (is_file($autoloader = dirname(__DIR__) . '/vendor/autoload.php')) {
/**
* Always prefer a site-wide Composer autoloader
* if it exists, it means that the user has probably
* installed additional packages
*
* @psalm-suppress MissingFile
*/
include $autoloader;
} elseif (is_file($autoloader = __DIR__ . '/vendor/autoload.php')) {
/**
* Fall back to the local autoloader if that exists
*
* @psalm-suppress MissingFile
*/
include $autoloader;
} else {
/**
* If neither one exists, don't bother searching;
* it's a custom directory setup and the users need to
* load the autoloader themselves
*/
}

Some files were not shown because too many files have changed in this diff Show More