Compare commits

...

No commits in common. "main" and "lume" have entirely different histories.
main ... lume

204 changed files with 756 additions and 2229 deletions

View File

@ -1 +0,0 @@
{"public":{"images":{}}}

View File

@ -1 +0,0 @@
{}

View File

@ -1 +0,0 @@
{"taxonomy":{"tags":["athena-framework","bot","crystal","fediverse","mastodon","n8n","programming","project"]}}

24
.gitignore vendored
View File

@ -1,21 +1,3 @@
# build output _site
dist/ _cache
# generated types deno.lock
.astro/
# dependencies
node_modules/
# logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
# environment variables
.env
.env.production
# macOS-specific files
.DS_Store

View File

@ -1,4 +0,0 @@
{
"recommendations": ["astro-build.astro-vscode", "unifiedjs.vscode-mdx"],
"unwantedRecommendations": []
}

11
.vscode/launch.json vendored
View File

@ -1,11 +0,0 @@
{
"version": "0.2.0",
"configurations": [
{
"command": "./node_modules/.bin/astro dev",
"name": "Development server",
"request": "launch",
"type": "node-terminal"
}
]
}

View File

@ -1,4 +1,8 @@
{ {
"[markdown]": { "deno.enable": true,
"deno.lint": true,
"deno.unstable": true,
"deno.suggest.imports.hosts": {
"https://deno.land": true
} }
} }

10
404.yml Normal file
View File

@ -0,0 +1,10 @@
layout: layouts/error.njk
title: "404: Page Not Found"
description: |
Sorry, the page you are looking for could not be found.
content:
title: "Error 404:<br /><span>Page Not</span> Found"
description: Sorry, the page you are looking for could not be found.
button:
title: Return Home

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 Óscar Otero
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,68 +0,0 @@
# Astro Starter Kit: Blog
```sh
npm create astro@latest -- --template blog
```
[![Open in StackBlitz](https://developer.stackblitz.com/img/open_in_stackblitz.svg)](https://stackblitz.com/github/withastro/astro/tree/latest/examples/blog)
[![Open with CodeSandbox](https://assets.codesandbox.io/github/button-edit-lime.svg)](https://codesandbox.io/p/sandbox/github/withastro/astro/tree/latest/examples/blog)
[![Open in GitHub Codespaces](https://github.com/codespaces/badge.svg)](https://codespaces.new/withastro/astro?devcontainer_path=.devcontainer/blog/devcontainer.json)
> 🧑‍🚀 **Seasoned astronaut?** Delete this file. Have fun!
![blog](https://github.com/withastro/astro/assets/2244813/ff10799f-a816-4703-b967-c78997e8323d)
Features:
- ✅ Minimal styling (make it your own!)
- ✅ 100/100 Lighthouse performance
- ✅ SEO-friendly with canonical URLs and OpenGraph data
- ✅ Sitemap support
- ✅ RSS Feed support
- ✅ Markdown & MDX support
## 🚀 Project Structure
Inside of your Astro project, you'll see the following folders and files:
```text
├── public/
├── src/
│   ├── components/
│   ├── content/
│   ├── layouts/
│   └── pages/
├── astro.config.mjs
├── README.md
├── package.json
└── tsconfig.json
```
Astro looks for `.astro` or `.md` files in the `src/pages/` directory. Each page is exposed as a route based on its file name.
There's nothing special about `src/components/`, but that's where we like to put any Astro/React/Vue/Svelte/Preact components.
The `src/content/` directory contains "collections" of related Markdown and MDX documents. Use `getCollection()` to retrieve posts from `src/content/blog/`, and type-check your frontmatter using an optional schema. See [Astro's Content Collections docs](https://docs.astro.build/en/guides/content-collections/) to learn more.
Any static assets, like images, can be placed in the `public/` directory.
## 🧞 Commands
All commands are run from the root of the project, from a terminal:
| Command | Action |
| :------------------------ | :----------------------------------------------- |
| `npm install` | Installs dependencies |
| `npm run dev` | Starts local dev server at `localhost:4321` |
| `npm run build` | Build your production site to `./dist/` |
| `npm run preview` | Preview your build locally, before deploying |
| `npm run astro ...` | Run CLI commands like `astro add`, `astro check` |
| `npm run astro -- --help` | Get help using the Astro CLI |
## 👀 Want to learn more?
Check out [our documentation](https://docs.astro.build) or jump into our [Discord server](https://astro.build/chat).
## Credit
This theme is based off of the lovely [Bear Blog](https://github.com/HermanMartinus/bearblog/).

205
_components/fire.njk Normal file
View File

@ -0,0 +1,205 @@
<div class="fire">
<div class="flame"></div>
<div class="flame"></div>
<div class="flame"></div>
<div class="flame"></div>
<div class="flame"></div>
<div class="flame"></div>
<div class="flame"></div>
<div class="flame"></div>
<div class="flame"></div>
<div class="flame"></div>
<div class="flame"></div>
<div class="flame"></div>
<div class="flame"></div>
<div class="flame"></div>
<div class="flame"></div>
</div>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" class="fire-effect" width="0" height="0">
<defs>
<filter id="fire-blur">
<feGaussianBlur in="SourceGraphic" stdDeviation="10" result="blur" />
<feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 18 -7" result="goo" />
<feBlend in="SourceGraphic" in2="fire-blur" />
</filter>
</defs>
</svg>
<style>
.fire {
position: relative;
width: 12em;
height: 12em;
overflow: hidden;
border-radius: 100%;
filter: url(#fire-blur);
}
.flame,
.flame::after {
position: absolute;
border-radius: 100%;
animation-fill-mode: backwards;
animation-duration: 1.2s;
animation-timing-function: cubic-bezier(0.5, 0.07, 0.64, 1);
animation-iteration-count: infinite;
}
.flame {
left: 12%;
bottom: 0;
width: 5em;
height: 5em;
background: hsl(0deg, 70%, 60%);
animation-name: firecircle;
will-change: transform;
}
.flame::after {
content: "";
top: 0;
left: 0;
width: 100%;
height: 100%;
background-color: hsl(50deg, 100%, 80%);
animation-name: fireafter;
will-change: opacity;
opacity: 0;
}
.flame:nth-child(1),
.flame:nth-child(1)::after {
animation-delay: 0.14s;
}
.flame:nth-child(1) {
margin-left: 0.8em;
margin-bottom: -1em;
}
.flame:nth-child(2),
.flame:nth-child(2)::after {
animation-delay: 0.28s;
}
.flame:nth-child(2) {
margin-left: 1.1em;
margin-bottom: -1.8em;
}
.flame:nth-child(3),
.flame:nth-child(3)::after {
animation-delay: 0.42s;
}
.flame:nth-child(3) {
margin-left: 3.8em;
margin-bottom: -1.8em;
}
.flame:nth-child(4),
.flame:nth-child(4)::after {
animation-delay: 0.56s;
}
.flame:nth-child(4) {
margin-left: 1.8em;
margin-bottom: -2.1em;
}
.flame:nth-child(5),
.flame:nth-child(5)::after {
animation-delay: 0.7s;
}
.flame:nth-child(5) {
margin-left: 3.8em;
margin-bottom: -2.1em;
}
.flame:nth-child(6),
.flame:nth-child(6)::after {
animation-delay: 0.84s;
}
.flame:nth-child(6) {
margin-left: 3.3em;
margin-bottom: -1em;
}
.flame:nth-child(7),
.flame:nth-child(7)::after {
animation-delay: 0.98s;
}
.flame:nth-child(7) {
margin-left: 4em;
margin-bottom: -2.2em;
}
.flame:nth-child(8),
.flame:nth-child(8)::after {
animation-delay: 1.12s;
}
.flame:nth-child(8) {
margin-left: 0.1em;
margin-bottom: -1.5em;
}
.flame:nth-child(9),
.flame:nth-child(9)::after {
animation-delay: 1.26s;
}
.flame:nth-child(9) {
margin-left: 4.2em;
margin-bottom: -2em;
}
.flame:nth-child(10),
.flame:nth-child(10)::after {
animation-delay: 1.4s;
}
.flame:nth-child(10) {
margin-left: 1.8em;
margin-bottom: -2.2em;
}
.flame:nth-child(11),
.flame:nth-child(11)::after {
animation-delay: 1.54s;
}
.flame:nth-child(11) {
margin-left: 3.8em;
margin-bottom: -2.2em;
}
.flame:nth-child(12),
.flame:nth-child(12)::after {
animation-delay: 1.68s;
}
.flame:nth-child(12) {
margin-left: 0.2em;
margin-bottom: -2em;
}
.flame:nth-child(13),
.flame:nth-child(13)::after {
animation-delay: 1.82s;
}
.flame:nth-child(13) {
margin-left: 0.1em;
margin-bottom: -2.1em;
}
.flame:nth-child(14),
.flame:nth-child(14)::after {
animation-delay: 1.96s;
}
.flame:nth-child(14) {
margin-left: 2.1em;
margin-bottom: -2.1em;
}
.flame:nth-child(15),
.flame:nth-child(15)::after {
animation-delay: 2.1s;
}
.flame:nth-child(15) {
margin-left: 0.9em;
margin-bottom: -1.6em;
}
@keyframes firecircle {
0% {
transform: translateY(0) scale(1);
}
100% {
transform: translateY(-11em) scale(0);
}
}
@keyframes fireafter {
0% {
opacity: 0;
}
100% {
opacity: 1;
}
}
</style>

35
_config.ts Normal file
View File

@ -0,0 +1,35 @@
import lume from "lume/mod.ts";
import prism from "lume/plugins/prism.ts";
import inline from "lume/plugins/inline.ts";
import resolveUrls from "lume/plugins/resolve_urls.ts";
import esbuild from "lume/plugins/esbuild.ts";
import imagick from "lume/plugins/imagick.ts";
import minifyHTML from "lume/plugins/minify_html.ts";
import sitemap from "lume/plugins/sitemap.ts";
import windi from "lume/plugins/windi_css.ts";
const site = lume(
{
location: new URL("https://watzon.tech"),
server: {
page404: "/404/",
},
},
);
site
.ignore("README.md")
.ignore("scripts")
.copy("static", ".")
.use(prism())
.use(windi())
.use(inline())
.use(esbuild({
extensions: [".js"],
}))
.use(resolveUrls())
.use(imagick())
.use(sitemap())
.use(minifyHTML());
export default site;

View File

@ -0,0 +1,52 @@
<!DOCTYPE html>
<html lang="en" data-theme="light">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ title }} - Lume</title>
<meta name="supported-color-schemes" content="light dark">
<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin="anonymous">
<link rel="dns-prefetch" href="https://cdn.jsdelivr.net" crossorigin="anonymous">
<link rel="stylesheet" href="/styles/main.windi.css">
<script src="/main.js" type="module"></script>
<meta property="og:type" content="website">
<meta property="og:title" content="{{ title }}">
<meta property="og:url" content="{{ url | url(true) }}">
<meta property="og:description" content="{{ description | md(true) | striptags }}">
<meta property="og:image" content="{{ "/avatar.png" | url(true) }}">
<meta name="twitter:title" content="{{ title }}">
<meta name="twitter:description" content="{{ description | md(true) | striptags }}">
<meta name="twitter:site" content="@_watzon">
<meta name="twitter:card" content="summary">
<meta name="twitter:image" content="{{ "/avatar.png" | url(true) }}">
<meta name="theme-color" content="#fff" media="(prefers-color-scheme: light)">
<meta name="theme-color" content="#141b1f" media="(prefers-color-scheme: dark)">
<script>
if (
localStorage.getItem('color-theme') === 'dark' ||
(!('color-theme' in localStorage) &&
window.matchMedia('(prefers-color-scheme: dark)').matches)
) {
document.documentElement.classList.add('dark');
} else {
document.documentElement.classList.remove('dark');
}
</script>
</head>
<body>
{% include "templates/navbar.njk" %}
<div>
{{ content | safe }}
</div>
{% include "templates/footer.njk" %}
</body>
</html>

View File

@ -0,0 +1,20 @@
---
layout: ./base.njk
page_css: error.css
---
<div class="error">
<h1>{{ content.title | safe }}</h1>
<figure class="error-fire">
{{ comp.fire() | safe }}
</figure>
{{ content.description | md | safe }}
<a href="{{ '/' | url }}">
<button type="button" class="button is-primary is-big">
{{ content.button.title }}
</button>
</a>
</div>

View File

@ -0,0 +1,130 @@
---
layout: ./base.njk
page_css: landing.css
---
<div class="landing">
<header class="landing-header">
<h1>{{ header.title | safe }}</h1>
<figure class="landing-header-fire">
{{ comp.fire() | safe }}
</figure>
<div class="landing-install">
{{ install.title | md | safe }}
<div class="landing-install-code">
<pre><code>{{ install.code }}</code></pre>
<a class="landing-install-cta" href="{{ install.url }}" aria-label="Continue to Getting Started">
<img src="/icons/arrow-right.svg" inline>
</a>
</div>
<a href="https://deno.land/x/lume"><img src="https://shield.deno.dev/x/lume" alt="deno.land/x/lume" width="144" height="20"></a>
</div>
</header>
<section class="landing-usage">
{% for block in usage %}
<div class="landing-usage-text">
<h2>{{ block.title }}</h2>
{{ block.description | md | safe }}
</div>
<div class="landing-usage-code">
{{ block.code | md | safe }}
</div>
{% endfor %}
</section>
<ul class="landing-features">
{% for feature in features %}
<li>
<img src="{{ feature.img }}" inline>
<h3>{{ feature.title }}</h3>
{{ feature.description | md | safe }}
</li>
{% endfor %}
</ul>
<section class="landing-examples">
<header class="landing-examples-header">
<h2>{{ examples.title }}</h2>
<lume-carousel-controls target="#examples" class="lume-carousel-buttons">
<button value="prev" class="button is-secondary has-icon" aria-label="Previous examples">
<img src="/icons/arrow-left.svg" inline>
</button>
<button value="next" class="button is-secondary has-icon" aria-label="Next examples">
<img src="/icons/arrow-right.svg" inline>
</button>
</lume-carousel-controls>
</header>
<lume-carousel role="region" aria-label="Showcase" tabindex="0" class="landing-examples-sites" id="examples">
{% set showcase = search.page("url=/showcase/") %}
{% for site in showcase.data.sites | selectattr("img") | slice(8) %}
<a href="{{ site.url }}" title="{{ site.title }}" class="site-image">
<img src="{{ site.img }}" alt="{{ site.title }}" width="300" height="200">
</a>
{% endfor %}
<a href="{{ examples.more.href }}" class="landing-examples-cta">{{ examples.more.text }}</a>
</lume-carousel>
</section>
<section class="landing-testimonials">
<h2>{{ testimonials.title }}</h2>
<ul class="landing-testimonials-quotes">
{% for item in testimonials.quotes %}
<li>
{% if item.cover %}
<figure class="landing-testimonials-video">
<a href="{{ item.url }}">
<img src="{{ item.cover }}" alt="{{ item.text }}" width="300" height="200">
</a>
<figcaption class="landing-testimonial-caption">
<img src="{{ item.avatar }}" srcset="{{ item.avatar }}, {{ item.avatar | replace(".webp", "@2x.webp") }} 2x" width="50" height="50" alt="{{ item.author }}">
<a href="{{ item.url }}">
<strong>{{ item.author }}</strong>
<time>{{ item.date }}</time>
</a>
</figcaption>
</figure>
{% else %}
<blockquote class="landing-testimonials-quote">
{{ item.text | md | safe }}
<cite class="landing-testimonial-caption">
<img src="{{ item.avatar }}" srcset="{{ item.avatar }}, {{ item.avatar | replace(".webp", "@2x.webp") }} 2x" width="50" height="50" alt="{{ item.author }}">
<a href="{{ item.url }}">
<strong>{{ item.author }}</strong>
<time>{{ item.date }}</time>
</a>
</cite>
</blockquote>
{% endif %}
</li>
{% endfor %}
</ul>
</section>
<section class="landing-suppport">
<h2>{{ support.title }}</h2>
<ul class="landing-support-sponsors">
{% for sponsor in support.sponsors %}
<li>
<a href="{{ sponsor.url }}" title="{{ sponsor.name }}">
<img src="{{ sponsor.img }}" srcset="{{ sponsor.img }}, {{ sponsor.img | replace(".webp", "@2x.webp") }} 2x" height="100" width="100" alt="{{ sponsor.name }}">
</a>
</li>
{% endfor %}
</ul>
<div class="landing-support-contribute">
<h3>{{ support.contribute.title }}</h3>
{{ support.contribute.description | md | safe }}
</div>
</section>
</div>

View File

@ -0,0 +1,4 @@
<div class="footer-container">
<footer class="footer">
</footer>
</div>

View File

@ -0,0 +1,26 @@
<nav class="bg-white shadow dark:bg-gray-800">
<div class="container flex items-center justify-center p-6 mx-auto text-gray-600 capitalize dark:text-gray-300">
<a href="#" class="text-gray-800 transition-colors duration-300 transform dark:text-gray-200 border-b-2 border-blue-500 mx-1.5 sm:mx-6">home</a>
<a href="#" class="border-b-2 border-transparent hover:text-gray-800 transition-colors duration-300 transform dark:hover:text-gray-200 hover:border-blue-500 mx-1.5 sm:mx-6">features</a>
<a href="#" class="border-b-2 border-transparent hover:text-gray-800 transition-colors duration-300 transform dark:hover:text-gray-200 hover:border-blue-500 mx-1.5 sm:mx-6">pricing</a>
<a href="#" class="border-b-2 border-transparent hover:text-gray-800 transition-colors duration-300 transform dark:hover:text-gray-200 hover:border-blue-500 mx-1.5 sm:mx-6">blog</a>
<a href="#" class="border-b-2 border-transparent hover:text-gray-800 transition-colors duration-300 transform dark:hover:text-gray-200 hover:border-blue-500 mx-1.5 sm:mx-6">
<svg class="w-4 h-4 fill-current" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" clip-rule="evenodd" d="M1 11.9554V12.0446C1.01066 14.7301 1.98363 17.1885 3.59196 19.0931C4.05715 19.6439 4.57549 20.1485 5.13908 20.5987C5.70631 21.0519 6.31937 21.4501 6.97019 21.7853C7.90271 22.2656 8.91275 22.6165 9.97659 22.8143C10.5914 22.9286 11.2243 22.9918 11.8705 22.9993C11.9136 22.9998 11.9567 23 11.9999 23C15.6894 23 18.9547 21.1836 20.9502 18.3962C21.3681 17.8125 21.7303 17.1861 22.0291 16.525C22.6528 15.1448 22.9999 13.613 22.9999 12C22.9999 8.73978 21.5816 5.81084 19.3283 3.79653C18.8064 3.32998 18.2397 2.91249 17.6355 2.55132C15.9873 1.56615 14.0597 1 11.9999 1C11.888 1 11.7764 1.00167 11.6653 1.00499C9.99846 1.05479 8.42477 1.47541 7.0239 2.18719C6.07085 2.67144 5.19779 3.29045 4.42982 4.01914C3.7166 4.69587 3.09401 5.4672 2.58216 6.31302C2.22108 6.90969 1.91511 7.54343 1.6713 8.20718C1.24184 9.37631 1.00523 10.6386 1 11.9554ZM20.4812 15.0186C20.8171 14.075 20.9999 13.0588 20.9999 12C20.9999 9.54265 20.0151 7.31533 18.4186 5.6912C17.5975 7.05399 16.5148 8.18424 15.2668 9.0469C15.7351 10.2626 15.9886 11.5603 16.0045 12.8778C16.7692 13.0484 17.5274 13.304 18.2669 13.6488C19.0741 14.0252 19.8141 14.487 20.4812 15.0186ZM15.8413 14.8954C16.3752 15.0321 16.904 15.22 17.4217 15.4614C18.222 15.8346 18.9417 16.3105 19.5723 16.8661C18.0688 19.2008 15.5151 20.7953 12.5788 20.9817C13.5517 20.0585 14.3709 18.9405 14.972 17.6514C15.3909 16.7531 15.678 15.8272 15.8413 14.8954ZM13.9964 12.6219C13.9583 11.7382 13.7898 10.8684 13.5013 10.0408C10.6887 11.2998 7.36584 11.3765 4.35382 9.97197C4.01251 9.81281 3.68319 9.63837 3.36632 9.44983C3.12787 10.2584 2.99991 11.1142 2.99991 12C2.99991 13.9462 3.61763 15.748 4.6677 17.2203C6.83038 14.1875 10.3685 12.4987 13.9964 12.6219ZM6.047 18.7502C7.77258 16.059 10.7714 14.5382 13.8585 14.6191C13.723 15.3586 13.4919 16.093 13.1594 16.8062C12.3777 18.4825 11.1453 19.805 9.67385 20.6965C8.31043 20.3328 7.07441 19.6569 6.047 18.7502ZM11.9999 3C13.7846 3 15.4479 3.51946 16.847 4.41543C16.2113 5.54838 15.3593 6.4961 14.368 7.23057C13.3472 5.57072 11.8752 4.16433 10.027 3.21692C10.6619 3.07492 11.3222 3 11.9999 3ZM8.80619 4.84582C10.4462 5.61056 11.7474 6.80659 12.6379 8.23588C10.3464 9.24654 7.64722 9.30095 5.19906 8.15936C4.83384 7.98905 4.48541 7.79735 4.15458 7.58645C4.91365 6.24006 6.00929 5.10867 7.32734 4.30645C7.82672 4.44058 8.32138 4.61975 8.80619 4.84582Z" fill="currentColor"/></svg>
</a>
<theme-toggle>
<button id="theme-toggle" type="button" class="border-b-2 border-transparent hover:text-gray-800 transition-colors duration-300 transform dark:hover:text-gray-200 hover:border-blue-500 mx-1.5 sm:mx-6" aria-label="darkMode mode button">
<svg id="theme-toggle-dark-icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-5 h-5 sm:w-6 sm:h-6 hidden">
<path stroke-linecap="round" stroke-linejoin="round" d="M21.752 15.002A9.718 9.718 0 0118 15.75c-5.385 0-9.75-4.365-9.75-9.75 0-1.33.266-2.597.748-3.752A9.753 9.753 0 003 11.25C3 16.635 7.365 21 12.75 21a9.753 9.753 0 009.002-5.998z"></path>
</svg>
<svg id="theme-toggle-light-icon" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="w-5 h-5 sm:w-6 sm:h-6 hidden">
<path stroke-linecap="round" stroke-linejoin="round" d="M12 3v2.25m6.364.386l-1.591 1.591M21 12h-2.25m-.386 6.364l-1.591-1.591M12 18.75V21m-4.773-4.227l-1.591 1.591M5.25 12H3m4.227-4.773L5.636 5.636M15.75 12a3.75 3.75 0 11-7.5 0 3.75 3.75 0 017.5 0z"></path>
</svg>
</button>
</theme-toggle>
</div>
</nav>

View File

@ -1,18 +0,0 @@
import { defineConfig } from 'astro/config';
import icon from "astro-icon";
import mdx from '@astrojs/mdx';
import sitemap from '@astrojs/sitemap';
import tailwind from "@astrojs/tailwind";
import vue from "@astrojs/vue";
// https://astro.build/config
export default defineConfig({
site: 'https://watzon.tech',
integrations: [mdx(), sitemap(), tailwind(), icon({
include: {
mdi: ['*'],
ic: ['*']
}
}), vue()]
});

BIN
bun.lockb

Binary file not shown.

36
deno.json Normal file
View File

@ -0,0 +1,36 @@
{
"importMap": "import_map.json",
"compilerOptions": {
"lib": [
"dom",
"dom.iterable",
"dom.asynciterable",
"deno.ns",
"deno.unstable"
]
},
"tasks": {
"build": "deno task lume",
"serve": "deno task lume -s",
"lume": "echo \"import 'lume/cli.ts'\" | deno run --unstable -A -"
},
"lint": {
"files": {
"exclude": [
"./_site"
]
},
"rules": {
"tags": [
"recommended"
]
}
},
"fmt": {
"files": {
"exclude": [
"./_site"
]
}
}
}

View File

@ -1,116 +0,0 @@
{
"$schema": "https://frontmatter.codes/frontmatter.schema.json",
"frontMatter.framework.id": "astro",
"frontMatter.preview.host": "http://localhost:4321",
"frontMatter.content.publicFolder": "public",
"frontMatter.content.pageFolders": [
{
"title": "blog",
"path": "[[workspace]]/src/content/posts"
},
{
"title": "projects",
"path": "[[workspace]]/src/content/projects"
}
],
"frontMatter.taxonomy.contentTypes": [
{
"name": "default",
"pageBundle": false,
"previewPath": "'posts'",
"filePrefix": null,
"clearEmpty": true,
"fields": [
{
"title": "Title",
"name": "title",
"type": "string",
"single": true
},
{
"title": "Description",
"name": "description",
"type": "string"
},
{
"title": "Author",
"name": "author",
"type": "string",
"single": true
},
{
"title": "Publishing date",
"name": "pubDate",
"type": "datetime",
"default": "{{now}}",
"isPublishDate": true
},
{
"title": "Hero image",
"name": "heroImage",
"type": "image",
"isPreviewImage": true
},
{
"title": "Tags",
"name": "tags",
"type": "tags"
}
]
},
{
"name": "project",
"pageBundle": false,
"previewPath": "'projects'",
"filePrefix": null,
"clearEmpty": true,
"fields": [
{
"title": "Name",
"name": "name",
"type": "string",
"single": true
},
{
"title": "Description",
"name": "description",
"type": "string"
},
{
"title": "URL",
"name": "url",
"type": "string"
},
{
"title": "Publishing date",
"name": "pubDate",
"type": "datetime",
"default": "{{now}}",
"isPublishDate": true
},
{
"title": "Hero image",
"name": "heroImage",
"type": "image",
"isPreviewImage": true
},
{
"title": "Tags",
"name": "tags",
"type": "tags"
},
{
"title": "Featured",
"name": "featured",
"type": "boolean"
},
{
"title": "Link only",
"name": "linkOnly",
"type": "boolean"
}
]
}
]
}

5
import_map.json Normal file
View File

@ -0,0 +1,5 @@
{
"imports": {
"lume/": "https://deno.land/x/lume@v1.13.0/"
}
}

5
index.njk Normal file
View File

@ -0,0 +1,5 @@
---
layout: layouts/base.njk
title: Chris Watson - Full Stack Engineer, 3D Printing Enthusiast, and Open Sourcerer
description: Personal website for Chris Watson, also known as @watzon most places.
---

19
main.js Normal file
View File

@ -0,0 +1,19 @@
import CodeExample from "./scripts/components/code_example.js";
import ThemeToggle from "./scripts/components/theme_toggle.js";
customElements.define("code-examples", CodeExample);
customElements.define("theme-toggle", ThemeToggle);
// For testing purpose of CSP middleware
const userAgentString = navigator.userAgent;
const chromeAgent = userAgentString.indexOf("Chrome") > -1;
if (chromeAgent) {
const observer = new ReportingObserver((reports) => {
for (const report of reports) {
console.log(report.type, report.url, report.body);
}
}, { buffered: true });
observer.observe();
}

6
netlify.toml Normal file
View File

@ -0,0 +1,6 @@
[build]
publish = "_site"
command = """
curl -fsSL https://deno.land/x/install/install.sh | sh && \
/opt/buildhome/.deno/bin/deno task build \
"""

View File

@ -1,32 +0,0 @@
{
"name": "watzon-tech",
"type": "module",
"version": "0.0.1",
"scripts": {
"dev": "astro dev",
"start": "astro dev",
"build": "astro check && astro build",
"preview": "astro preview",
"astro": "astro"
},
"dependencies": {
"@astrojs/check": "^0.3.1",
"@astrojs/mdx": "^2.0.0",
"@astrojs/rss": "^4.0.1",
"@astrojs/sitemap": "^3.0.3",
"@astrojs/tailwind": "^5.0.3",
"@astrojs/vue": "^4.0.2",
"@octokit/rest": "^20.0.2",
"astro": "^4.0.3",
"tailwindcss": "^3.0.24",
"typescript": "^5.3.3",
"vue": "^3.2.30"
},
"devDependencies": {
"@iconify-json/arcticons": "^1.1.85",
"@iconify-json/ic": "^1.1.16",
"@iconify-json/mdi": "^1.1.60",
"@iconify/icons-arcticons": "^1.2.77",
"astro-icon": "next"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 949 B

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