Updated a lot
@@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
$title = 'About';
|
$title = 'About';
|
||||||
|
$description = "The self bleeds into creation.";
|
||||||
include $_SERVER['DOCUMENT_ROOT'] . '/includes/head.php';
|
include $_SERVER['DOCUMENT_ROOT'] . '/includes/head.php';
|
||||||
?>
|
?>
|
||||||
<body class="bg-[#0a0a0a] text-white min-h-screen">
|
<body class="bg-[#0a0a0a] text-white min-h-screen">
|
||||||
@@ -7,9 +8,16 @@ include $_SERVER['DOCUMENT_ROOT'] . '/includes/head.php';
|
|||||||
|
|
||||||
<main class="pt-16">
|
<main class="pt-16">
|
||||||
<div class="max-w-3xl mx-auto px-4 sm:px-6 py-12">
|
<div class="max-w-3xl mx-auto px-4 sm:px-6 py-12">
|
||||||
<h1 class="text-2xl font-semibold mb-12">About</h1>
|
<h1 class="text-2xl font-semibold mb-8">About</h1>
|
||||||
<div class="space-y-5 text-neutral-300 leading-relaxed text-sm">
|
<div class="space-y-5 text-neutral-300 leading-relaxed text-base">
|
||||||
<p>I'm sistav, I host this site.</p>
|
<p>Welcome to sistav.com,</p>
|
||||||
|
<p>I'm Sistav, assuming you haven't figured that out already.</p>
|
||||||
|
<p>I'm a developer. I like Linux, Counter-Strike, and BMWs. I don't do web development very often, but I don't mind it for my own domain, it's quite fun trying to figure out what fits best.</p>
|
||||||
|
<p>I bought this domain to sit on. Eventually it became something more. The site was down for a year or two but in February 2026 I found the time to rebuild it.</p>
|
||||||
|
<p>The site has and always will be changing. I hope it brings you as much joy as it brings me. I like to think of it as a never ending expression of the person I am at the time</p>
|
||||||
|
<p>Feel free to contact me, about the site, something written on it, or anything else.</p>
|
||||||
|
<p>All The Best,</p>
|
||||||
|
<p>Sistav</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|||||||
@@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"projects": [
|
||||||
|
{
|
||||||
|
"title": "MonKEYS",
|
||||||
|
"url": "https://monkeys.sistav.com",
|
||||||
|
"note": "Finally, a use for monkey labour."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
Before Width: | Height: | Size: 469 KiB After Width: | Height: | Size: 469 KiB |
|
Before Width: | Height: | Size: 319 KiB After Width: | Height: | Size: 319 KiB |
|
Before Width: | Height: | Size: 6.2 MiB After Width: | Height: | Size: 6.2 MiB |
|
Before Width: | Height: | Size: 14 MiB After Width: | Height: | Size: 14 MiB |
|
Before Width: | Height: | Size: 581 KiB After Width: | Height: | Size: 581 KiB |
|
Before Width: | Height: | Size: 2.0 MiB After Width: | Height: | Size: 2.0 MiB |
|
Before Width: | Height: | Size: 6.5 MiB After Width: | Height: | Size: 6.5 MiB |
|
Before Width: | Height: | Size: 6.4 MiB After Width: | Height: | Size: 6.4 MiB |
|
Before Width: | Height: | Size: 1.4 MiB After Width: | Height: | Size: 1.4 MiB |
|
Before Width: | Height: | Size: 354 KiB After Width: | Height: | Size: 354 KiB |
|
After Width: | Height: | Size: 18 KiB |
@@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
$title = 'Contact';
|
$title = 'Contact';
|
||||||
|
$description = 'The wise man does not hide. He simply waits to be found.';
|
||||||
include $_SERVER['DOCUMENT_ROOT'] . '/includes/head.php';
|
include $_SERVER['DOCUMENT_ROOT'] . '/includes/head.php';
|
||||||
?>
|
?>
|
||||||
<body class="bg-[#0a0a0a] text-white min-h-screen">
|
<body class="bg-[#0a0a0a] text-white min-h-screen">
|
||||||
@@ -8,37 +9,37 @@ include $_SERVER['DOCUMENT_ROOT'] . '/includes/head.php';
|
|||||||
<main class="pt-16">
|
<main class="pt-16">
|
||||||
<div class="max-w-3xl mx-auto px-4 sm:px-6 py-12">
|
<div class="max-w-3xl mx-auto px-4 sm:px-6 py-12">
|
||||||
<h1 class="text-2xl mb-4">Contact</h1>
|
<h1 class="text-2xl mb-4">Contact</h1>
|
||||||
<p class="text-neutral-300 text-sm mb-16 text-center">Get in touch. Feel free to send me gifs.</p>
|
<p class="text-neutral-300 text-base mb-16 text-center">Get in touch. Feel free to send me gifs.</p>
|
||||||
<ul class="space-y-4">
|
<ul class="space-y-5">
|
||||||
<li>
|
<li>
|
||||||
<a href="mailto:admin@sistav.com" class="group">
|
<a href="mailto:admin@sistav.com" class="group">
|
||||||
<span class="flex items-baseline gap-2">
|
<span class="flex items-baseline gap-2">
|
||||||
<span class="text-neutral-300 text-sm group-hover:text-white transition-colors">Email</span>
|
<span class="text-neutral-300 text-base group-hover:text-white transition-colors">Email</span>
|
||||||
<span class="text-neutral-500 text-xs">admin@sistav.com</span>
|
<span class="text-neutral-400 text-base">admin@sistav.com</span>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="https://github.com/sistav" target="_blank" rel="noopener" class="group">
|
<a href="https://github.com/sistav" target="_blank" rel="noopener" class="group">
|
||||||
<span class="flex items-baseline gap-2">
|
<span class="flex items-baseline gap-2">
|
||||||
<span class="text-neutral-300 text-sm group-hover:text-white transition-colors">GitHub</span>
|
<span class="text-neutral-300 text-base group-hover:text-white transition-colors">GitHub</span>
|
||||||
<span class="text-neutral-500 text-xs">sistav</span>
|
<span class="text-neutral-400 text-base">sistav</span>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="https://fosstodon.org/@Sistav" target="_blank" rel="noopener" class="group">
|
<a href="https://fosstodon.org/@Sistav" target="_blank" rel="noopener" class="group">
|
||||||
<span class="flex items-baseline gap-2">
|
<span class="flex items-baseline gap-2">
|
||||||
<span class="text-neutral-300 text-sm group-hover:text-white transition-colors">Mastodon</span>
|
<span class="text-neutral-300 text-base group-hover:text-white transition-colors">Mastodon</span>
|
||||||
<span class="text-neutral-500 text-xs">@Sistav</span>
|
<span class="text-neutral-400 text-base">@Sistav</span>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a href="https://twitter.com/NotSistav" target="_blank" rel="noopener" class="group">
|
<a href="https://twitter.com/NotSistav" target="_blank" rel="noopener" class="group">
|
||||||
<span class="flex items-baseline gap-2">
|
<span class="flex items-baseline gap-2">
|
||||||
<span class="text-neutral-300 text-sm group-hover:text-white transition-colors">Twitter</span>
|
<span class="text-neutral-300 text-base group-hover:text-white transition-colors">Twitter</span>
|
||||||
<span class="text-neutral-500 text-xs">@NotSistav</span>
|
<span class="text-neutral-400 text-base">@NotSistav</span>
|
||||||
</span>
|
</span>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -4,4 +4,6 @@ if (empty($gif_files)) { http_response_code(404); exit; }
|
|||||||
|
|
||||||
$file = basename($gif_files[array_rand($gif_files)]);
|
$file = basename($gif_files[array_rand($gif_files)]);
|
||||||
|
|
||||||
|
header('Cache-Control: no-store, no-cache, must-revalidate');
|
||||||
|
header('Pragma: no-cache');
|
||||||
header('Location: https://sistav.com/assets/gifs/' . rawurlencode($file), true, 302);
|
header('Location: https://sistav.com/assets/gifs/' . rawurlencode($file), true, 302);
|
||||||
@@ -3,12 +3,15 @@
|
|||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
<title><?= isset($title) ? htmlspecialchars($title) . ' — sistav.com' : 'sistav.com' ?></title>
|
<title><?= isset($title) ? htmlspecialchars($title) : 'sistav.com' ?></title>
|
||||||
|
<?php if (isset($description)): ?>
|
||||||
|
<meta name="description" content="<?= htmlspecialchars($description) ?>">
|
||||||
|
<?php endif; ?>
|
||||||
<link rel="icon" href="/assets/favicon/favicon.ico" sizes="any">
|
<link rel="icon" href="/assets/favicon/favicon.ico" sizes="any">
|
||||||
<link rel="apple-touch-icon" href="/assets/favicon/apple-touch-icon.png">
|
<link rel="apple-touch-icon" href="/assets/favicon/apple-touch-icon.png">
|
||||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||||
<link href="https://fonts.googleapis.com/css2?family=DM+Serif+Display&display=swap" rel="stylesheet">
|
<link href="https://api.fontshare.com/v2/css?f[]=clash-display@400,500,600,700&f[]=satoshi@400,500,600,700&display=swap" rel="stylesheet">
|
||||||
<script src="https://cdn.tailwindcss.com"></script>
|
<script src="https://cdn.tailwindcss.com"></script>
|
||||||
<script>
|
<script>
|
||||||
tailwind.config = {
|
tailwind.config = {
|
||||||
@@ -21,21 +24,21 @@
|
|||||||
</script>
|
</script>
|
||||||
<style>
|
<style>
|
||||||
/* Global text softening */
|
/* Global text softening */
|
||||||
body { color: #e6dfd8 !important; background-color: #0b0a09 !important; }
|
body { color: #e6dfd8 !important; background-color: #0b0a09 !important; font-family: 'Satoshi', sans-serif !important; }
|
||||||
|
|
||||||
/* Headings */
|
/* Headings */
|
||||||
h1 {
|
h1 {
|
||||||
font-family: 'DM Serif Display', Georgia, serif !important;
|
font-family: 'ClashDisplay-Variable', sans-serif !important;
|
||||||
font-weight: 400 !important;
|
font-weight: 400 !important;
|
||||||
font-size: 2.25rem !important;
|
font-size: 2rem !important;
|
||||||
color: #e6dfd8;
|
color: #e6dfd8;
|
||||||
letter-spacing: -0.01em;
|
letter-spacing: 0.05em;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
article h2 {
|
article h2 {
|
||||||
font-family: inherit !important;
|
font-family: 'Satoshi', sans-serif !important;
|
||||||
font-weight: 400 !important;
|
font-weight: 400 !important;
|
||||||
font-size: 0.75rem !important;
|
font-size: 1rem !important;
|
||||||
color: #d4d4d4 !important;
|
color: #d4d4d4 !important;
|
||||||
letter-spacing: 0.1em !important;
|
letter-spacing: 0.1em !important;
|
||||||
text-transform: uppercase !important;
|
text-transform: uppercase !important;
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ $_nav_pages = [
|
|||||||
?>
|
?>
|
||||||
<nav class="fixed top-0 left-0 right-0 z-50 bg-[#0a0a0a] border-b border-[#1c1c1c]">
|
<nav class="fixed top-0 left-0 right-0 z-50 bg-[#0a0a0a] border-b border-[#1c1c1c]">
|
||||||
<div class="max-w-5xl mx-auto px-4 sm:px-6 flex items-center justify-between h-16">
|
<div class="max-w-5xl mx-auto px-4 sm:px-6 flex items-center justify-between h-16">
|
||||||
<a href="/" class="text-base font-semibold tracking-wide">sistav.com</a>
|
<a href="/" style="font-family: 'Satoshi', sans-serif; font-size: 1.2rem; font-weight: 600; letter-spacing: 0.02em;">sistav.com</a>
|
||||||
|
|
||||||
<div class="hidden md:flex items-center gap-8 text-base">
|
<div class="hidden md:flex items-center gap-8 text-lg">
|
||||||
<?php foreach ($_nav_pages as $href => $label): ?>
|
<?php foreach ($_nav_pages as $href => $label): ?>
|
||||||
<a href="<?= $href ?>" class="<?= _nav_active($href) ? '' : 'text-neutral-400 hover:text-[#e6dfd8]' ?> transition-colors duration-150"><?= $label ?></a>
|
<a href="<?= $href ?>" class="<?= _nav_active($href) ? '' : 'text-neutral-400 hover:text-[#e6dfd8]' ?> transition-colors duration-150"><?= $label ?></a>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
<?php
|
<?php
|
||||||
|
$description = 'Always changing. Always here.';
|
||||||
$gif_files = glob($_SERVER['DOCUMENT_ROOT'] . '/assets/gifs/*.gif');
|
$gif_files = glob($_SERVER['DOCUMENT_ROOT'] . '/assets/gifs/*.gif');
|
||||||
$gifs = array_map(fn($f) => '/assets/gifs/' . basename($f), $gif_files);
|
$gifs = array_map(fn($f) => '/assets/gifs/' . basename($f), $gif_files);
|
||||||
$default = !empty($gifs) ? $gifs[0] : '';
|
$default = !empty($gifs) ? $gifs[0] : '';
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
$title = 'Links';
|
$title = 'Links';
|
||||||
|
$description = 'Links.';
|
||||||
include $_SERVER['DOCUMENT_ROOT'] . '/includes/head.php';
|
include $_SERVER['DOCUMENT_ROOT'] . '/includes/head.php';
|
||||||
|
|
||||||
$data = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/assets/data/links.json'), true);
|
$data = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/assets/data/links.json'), true);
|
||||||
@@ -10,13 +11,13 @@ $categories = $data['categories'] ?? [];
|
|||||||
|
|
||||||
<main class="pt-16">
|
<main class="pt-16">
|
||||||
<div class="max-w-3xl mx-auto px-4 sm:px-6 py-12">
|
<div class="max-w-3xl mx-auto px-4 sm:px-6 py-12">
|
||||||
<h1 class="text-2xl font-semibold mb-4">Links</h1>
|
<h1 class="text-2xl font-semibold mb-6">Links</h1>
|
||||||
<p class="text-neutral-300 text-sm mb-16 text-center">A collection of interesting and useful websites.</p>
|
<p class="text-neutral-300 text-lg mb-16 text-center">A collection of interesting and useful websites.</p>
|
||||||
|
|
||||||
<div class="space-y-12">
|
<div class="space-y-12">
|
||||||
<?php foreach ($categories as $cat): ?>
|
<?php foreach ($categories as $cat): ?>
|
||||||
<section>
|
<section>
|
||||||
<h2 class="text-xs text-neutral-300 uppercase tracking-widest mb-5"><?= htmlspecialchars($cat['name']) ?></h2>
|
<h2 class="text-base text-neutral-300 uppercase tracking-widest mb-5"><?= htmlspecialchars($cat['name']) ?></h2>
|
||||||
<ul class="space-y-4">
|
<ul class="space-y-4">
|
||||||
<?php foreach ($cat['links'] as $link):
|
<?php foreach ($cat['links'] as $link):
|
||||||
$domain = preg_replace('/^www\./', '', parse_url($link['url'], PHP_URL_HOST));
|
$domain = preg_replace('/^www\./', '', parse_url($link['url'], PHP_URL_HOST));
|
||||||
@@ -24,11 +25,11 @@ $categories = $data['categories'] ?? [];
|
|||||||
<li>
|
<li>
|
||||||
<a href="<?= htmlspecialchars($link['url']) ?>" target="_blank" rel="noopener" class="group">
|
<a href="<?= htmlspecialchars($link['url']) ?>" target="_blank" rel="noopener" class="group">
|
||||||
<span class="flex items-baseline gap-2">
|
<span class="flex items-baseline gap-2">
|
||||||
<span class="text-neutral-300 text-sm group-hover:text-white transition-colors"><?= htmlspecialchars($link['title']) ?></span>
|
<span class="text-neutral-300 text-base group-hover:text-white transition-colors"><?= htmlspecialchars($link['title']) ?></span>
|
||||||
<span class="text-neutral-500 text-xs"><?= $domain ?></span>
|
<span class="text-neutral-400 text-base"><?= $domain ?></span>
|
||||||
</span>
|
</span>
|
||||||
<?php if (!empty($link['note'])): ?>
|
<?php if (!empty($link['note'])): ?>
|
||||||
<span class="block text-neutral-500 text-xs mt-0.5"><?= htmlspecialchars($link['note']) ?></span>
|
<span class="block text-neutral-400 text-base mt-0.5"><?= htmlspecialchars($link['note']) ?></span>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
$title = 'Log';
|
$title = 'Log';
|
||||||
|
$description = "A running tab of what I've been into.";
|
||||||
include $_SERVER['DOCUMENT_ROOT'] . '/includes/head.php';
|
include $_SERVER['DOCUMENT_ROOT'] . '/includes/head.php';
|
||||||
|
|
||||||
$data = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/assets/data/log.json'), true);
|
$data = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/assets/data/log.json'), true);
|
||||||
@@ -11,24 +12,24 @@ $fields = ['listening', 'watching', 'reading', 'working on', 'thinking'];
|
|||||||
|
|
||||||
<main class="pt-16">
|
<main class="pt-16">
|
||||||
<div class="max-w-3xl mx-auto px-4 sm:px-6 py-12">
|
<div class="max-w-3xl mx-auto px-4 sm:px-6 py-12">
|
||||||
<h1 class="text-2xl font-semibold mb-4">Log</h1>
|
<h1 class="text-2xl font-semibold mb-6">Log</h1>
|
||||||
<p class="text-neutral-300 text-sm mb-16 text-center">What I've been doing recently. Don't expect this to be updated recently</p>
|
<p class="text-neutral-300 text-lg mb-16 text-center">What I've been spending my time on. It's most likely not upto date.</p>
|
||||||
|
|
||||||
<div class="space-y-12">
|
<div class="space-y-12">
|
||||||
<?php if (empty($entries)): ?>
|
<?php if (empty($entries)): ?>
|
||||||
<p class="text-neutral-700 text-sm">Nothing yet.</p>
|
<p class="text-neutral-700 text-base">Nothing yet.</p>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
|
|
||||||
<?php foreach ($entries as $entry): ?>
|
<?php foreach ($entries as $entry): ?>
|
||||||
<article>
|
<article>
|
||||||
<h2 class="mb-5"><?= htmlspecialchars($entry['title']) ?></h2>
|
<h2 class="text-xl text-neutral-300 uppercase tracking-widest mb-5"><?= htmlspecialchars($entry['title']) ?></h2>
|
||||||
<p class="text-[#a3a3a3] text-xs font-mono mb-6"><?= date('F j, Y', strtotime($entry['date'])) ?></p>
|
<p class="text-[#a3a3a3] text-sm font-mono mb-6"><?= date('F j, Y', strtotime($entry['date'])) ?></p>
|
||||||
<dl class="space-y-3">
|
<dl class="space-y-3">
|
||||||
<?php foreach ($fields as $field): ?>
|
<?php foreach ($fields as $field): ?>
|
||||||
<?php if (!empty($entry[$field])): ?>
|
<?php if (!empty($entry[$field])): ?>
|
||||||
<div class="grid grid-cols-[90px_1fr] gap-4">
|
<div class="grid grid-cols-[110px_1fr] gap-4">
|
||||||
<dt class="text-neutral-500 text-xs"><?= $field ?></dt>
|
<dt class="text-neutral-400 text-base"><?= $field ?></dt>
|
||||||
<dd class="text-neutral-200 text-sm"><?= htmlspecialchars($entry[$field]) ?></dd>
|
<dd class="text-neutral-200 text-base"><?= htmlspecialchars($entry[$field]) ?></dd>
|
||||||
</div>
|
</div>
|
||||||
<?php endif; ?>
|
<?php endif; ?>
|
||||||
<?php endforeach; ?>
|
<?php endforeach; ?>
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
$title = 'Projects';
|
$title = 'Projects';
|
||||||
|
$description = "He who calls his work done has mistaken the horizon for a wall.";
|
||||||
|
$data = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/assets/data/projects.json'), true);
|
||||||
|
$projects = $data['projects'] ?? [];
|
||||||
include $_SERVER['DOCUMENT_ROOT'] . '/includes/head.php';
|
include $_SERVER['DOCUMENT_ROOT'] . '/includes/head.php';
|
||||||
?>
|
?>
|
||||||
<body class="bg-[#0a0a0a] text-white min-h-screen">
|
<body class="bg-[#0a0a0a] text-white min-h-screen">
|
||||||
@@ -7,18 +10,23 @@ include $_SERVER['DOCUMENT_ROOT'] . '/includes/head.php';
|
|||||||
|
|
||||||
<main class="pt-16">
|
<main class="pt-16">
|
||||||
<div class="max-w-3xl mx-auto px-4 sm:px-6 py-12">
|
<div class="max-w-3xl mx-auto px-4 sm:px-6 py-12">
|
||||||
<h1 class="text-2xl font-semibold mb-12">Projects</h1>
|
<h1 class="text-2xl font-semibold mb-6">Projects</h1>
|
||||||
|
<p class="text-neutral-300 text-lg mb-12 text-center">He who mistakes completion for mastery has learned only the shape of his own ignorance.</p>
|
||||||
|
|
||||||
<div class="space-y-6">
|
<div class="space-y-6">
|
||||||
<a href="https://monkeys.sistav.com" target="_blank" rel="noopener noreferrer" class="group block border border-[#1c1c1c] hover:border-[#333] bg-[#0f0f0f] hover:bg-[#111] transition-colors p-6">
|
<?php foreach ($projects as $project): ?>
|
||||||
|
<a href="<?= htmlspecialchars($project['url']) ?>" class="group block border border-[#1c1c1c] hover:border-[#333] bg-[#060606] hover:bg-[#0d0d0d] transition-colors p-6">
|
||||||
<div class="flex items-start justify-between gap-4">
|
<div class="flex items-start justify-between gap-4">
|
||||||
<div>
|
<div>
|
||||||
<h2 class="text-base font-semibold mb-1 group-hover:text-[#e6dfd8] transition-colors">MonKEYS</h2>
|
<h2 class="text-sm font-semibold mb-1 group-hover:text-[#e6dfd8] transition-colors"><?= htmlspecialchars($project['title']) ?></h2>
|
||||||
<p class="text-neutral-400 text-sm leading-relaxed">Finally, a use for monkey labour.</p>
|
<?php if (!empty($project['note'])): ?>
|
||||||
|
<p class="text-neutral-400 text-base leading-relaxed"><?= htmlspecialchars($project['note']) ?></p>
|
||||||
|
<?php endif; ?>
|
||||||
</div>
|
</div>
|
||||||
<span class="text-neutral-600 text-xs shrink-0 mt-1">monkeys.sistav.com ↗</span>
|
<span class="text-neutral-400 text-base shrink-0 mt-1"><?= htmlspecialchars(parse_url($project['url'], PHP_URL_HOST)) ?></span>
|
||||||
</div>
|
</div>
|
||||||
</a>
|
</a>
|
||||||
|
<?php endforeach; ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</main>
|
</main>
|
||||||
|
|||||||