View Source

The actual code behind this page. No minification. No transpilation. What you see is what runs.

↓ Download PHP edition
about.php 55 lines
<?php
require_once __DIR__ . '/includes/config.php';
$pageTitle = 'About — dispelled.ca';
$currentPage = 'about';
require_once __DIR__ . '/includes/header.php';
?>
<h1 class="page-title">About</h1>
 
<div class="prose-block">
<p>
<strong>dispelled.ca</strong> is a personal homepage and news aggregator for a small Canadian household.
It pulls RSS feeds from across the open source, security, and tech world and presents them in a single clean stream.
</p>
<p>
The site is a retro PHP edition with zero JavaScript.
Pure HTML, pure CSS, rendered server-side — fast, accessible, and works on anything.
</p>
<p>
Everything is built and iterated on in the open using Replit and Claude.
Every feature, bug fix, and feed addition happens in real time.
</p>
</div>
 
<h2 class="section-subtitle">Stack</h2>
<div class="info-grid">
<?php
$stack = [
'Frontend' => 'PHP + vanilla CSS (zero JS)',
'API server' => 'Node.js + Express 5',
'Weather' => 'Open-Meteo (free, no key)',
'News feeds' => 'RSS via rss-parser',
'Community' => 'Reddit public RSS feeds',
'GitHub data' => 'GitHub public search API',
'Stocks' => 'TradingView embedded widget',
'Hosting' => 'Replit',
'Built with' => 'Claude (Anthropic)',
];
foreach ($stack as $label => $value): ?>
<div class="info-card">
<p class="info-label"><?= htmlspecialchars($label) ?></p>
<p class="info-value"><?= htmlspecialchars($value) ?></p>
</div>
<?php endforeach ?>
</div>
 
<h2 class="section-subtitle">News Sources</h2>
<ul class="source-list">
<?php foreach (['Slashdot','Ars Technica','Hacker News','The Register','Phoronix','LWN.net','EFF','Krebs on Security'] as $s): ?>
<li><span class="source-arrow">›</span> <?= htmlspecialchars($s) ?></li>
<?php endforeach ?>
</ul>
 
<?php require_once __DIR__ . '/includes/footer.php'; ?>