Files
www/htdocs/index.html
T
2026-10-31 15:11:21 -04:00

329 lines
24 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="en">
<!--#include virtual="/common/header.html" -->
<body>
<!--#include virtual="/common/topnav.html" -->
<main id="main-content">
<section class="hero" aria-labelledby="hero-title">
<div class="hero-inner">
<p class="eyebrow">Eric Meehan · Musician &amp; engineer</p>
<h1 id="hero-title">Music. Places.<br>Things worth making.</h1>
<p class="hero-copy">I make music and films, build open-source projects, and host games. My camera comes along for the places I visit and the musicians I meet.</p>
<div class="hero-actions">
<a class="button button-primary" href="#films">Watch the films</a>
<a class="button button-secondary" href="#music">Explore the music</a>
<a class="quiet-link" href="#projects">Explore my projects</a>
<a class="quiet-link" href="#gaming">Find a game to play</a>
</div>
<p class="hero-note">Made in Raleigh and wherever curiosity takes me. Published on my own open-source-powered corner of the internet.</p>
</div>
<div class="hero-art" aria-hidden="true">
<span class="orbit orbit-one"></span>
<span class="orbit orbit-two"></span>
<span class="orbit orbit-three"></span>
<span class="orbit-core">eom<br>.dev</span>
</div>
</section>
<section class="section intro-section" id="work" aria-labelledby="work-title">
<div class="section-heading">
<p class="eyebrow">One creative life, a few ways in</p>
<h2 id="work-title">Explore the work.</h2>
<p>Films, music, open-source projects, and games: four ways into what I make and share.</p>
</div>
<div class="path-grid">
<article class="path-card path-play">
<p class="card-kicker">Out in the world</p>
<h3>Films &amp; places</h3>
<p>Travel, unexpected detours, and musicians performing out in public. A reason to get outside and pay attention.</p>
<a class="text-link" href="#films">Come along <span aria-hidden="true">→</span></a>
</article>
<article class="path-card path-create">
<p class="card-kicker">Sound &amp; expression</p>
<h3>Music</h3>
<p>My own recordings, covers, and performances by musicians I encounter. Room to listen, experiment, and find the next song.</p>
<a class="text-link" href="#music">Start listening <span aria-hidden="true">→</span></a>
</article>
<article class="path-card path-build">
<p class="card-kicker">Curiosity at work</p>
<h3>Creative engineering</h3>
<p>Open-source tools and experiments built out of curiosity. Explore the work and how it's made.</p>
<a class="text-link" href="#projects">Explore the projects <span aria-hidden="true">→</span></a>
</article>
<article class="path-card path-game">
<p class="card-kicker">Shared worlds &amp; friendly competition</p>
<h3>Gaming</h3>
<p>Game servers, community worlds, and experiments you can play together. Drop in, explore, or follow the gaming streams.</p>
<a class="text-link" href="#gaming">Find your next game <span aria-hidden="true">→</span></a>
</article>
</div>
</section>
<section class="section films-section" id="films" aria-labelledby="films-title" data-peertube-feed data-channels="eric_channel" data-title="Films &amp; places">
<div class="section-heading section-heading-row">
<div>
<p class="eyebrow">A camera, an open ear, somewhere to go</p>
<h2 id="films-title">Films &amp; places.</h2>
<p>Travel films and everyday discoveries, from planned trips to unexpected detours. Recordings of the musicians I meet are in the <a href="#music">music section</a>.</p>
</div>
<a class="text-link" href="https://peertube.eom.dev/video-channels/eric_channel">More travel &amp; everyday discoveries <span aria-hidden="true">→</span></a>
</div>
<p class="feed-status" data-feed-status role="status" aria-live="polite">Selected recordings below. Latest uploads load automatically when available.</p>
<div class="film-grid latest-grid" data-feed-items>
<article class="project-card media-card">
<a class="media-image" href="https://peertube.eom.dev/videos/watch/b16e17cc-2545-40ad-b9fa-b9200400aff5" aria-label="Watch I Got Heat Stroke in the Great Smokey Mountains">
<img src="https://peertube.eom.dev/lazy-static/thumbnails/c75393d3-9acd-4a9d-bbd0-7f370662c208.png" width="560" height="315" loading="lazy" decoding="async" alt="">
<span class="media-label" aria-hidden="true">Watch film ↗</span>
</a>
<div class="media-copy">
<p class="card-kicker">Travel film · North Carolina</p>
<h3>I Got Heat Stroke in the Great Smokey Mountains</h3>
<p>A backpacking trip takes an unexpected turn: kayaking, Asheville, and the buskers I met along the way.</p>
<a class="text-link" href="https://peertube.eom.dev/videos/watch/b16e17cc-2545-40ad-b9fa-b9200400aff5">Watch the trip <span aria-hidden="true">→</span></a>
</div>
</article>
<article class="project-card media-card">
<a class="media-image" href="https://peertube.eom.dev/videos/watch/678e7a68-9beb-48b2-b4cc-8cfede773a81" aria-label="Watch La Banda Maguey at La Fiesta del Pueblo">
<img src="https://peertube.eom.dev/lazy-static/thumbnails/bae0a54a-27b7-4604-ba10-556c21d32474.png" width="560" height="315" loading="lazy" decoding="async" alt="">
<span class="media-label" aria-hidden="true">Watch performance ↗</span>
</a>
<div class="media-copy">
<p class="card-kicker">Performance recording · Raleigh</p>
<h3>La Banda Maguey at La Fiesta del Pueblo</h3>
<p>La Banda Maguey performing in downtown Raleigh. A little of the festival, recorded and shared.</p>
<div class="project-links">
<a class="text-link" href="https://peertube.eom.dev/videos/watch/678e7a68-9beb-48b2-b4cc-8cfede773a81">Watch the performance <span aria-hidden="true">→</span></a>
<a class="text-link" href="https://www.bandamaguey.com/">Meet the musicians</a>
</div>
</div>
</article>
</div>
</section>
<section class="section music-section" id="music" aria-labelledby="music-title" data-peertube-feed data-channels="eric_music" data-title="Music">
<div class="music-copy">
<p class="eyebrow">From the guitar to the recording</p>
<h2 id="music-title">Making room for music.</h2>
<p>Original recordings, covers, and performances by musicians I meet along the way.</p>
<p>Listen to the latest uploads here, or explore more in the <a class="text-link" href="#peertube-library">channels and collections</a>.</p>
<div class="about-links">
<a class="button button-primary" href="https://peertube.eom.dev/video-playlists/bde0cf4d-318f-4865-b205-b11104a7c46b">Explore my originals</a>
<a class="text-link" href="https://peertube.eom.dev/video-channels/eric_music">Browse the music channel <span aria-hidden="true">→</span></a>
</div>
</div>
<p class="feed-status" data-feed-status role="status" aria-live="polite">Selected recording below. Latest uploads load automatically when available.</p>
<div class="film-grid latest-grid" data-feed-items>
<a class="music-feature media-image" href="https://peertube.eom.dev/videos/watch/f9613754-234e-4053-b194-341154f007c5" aria-label="Watch and listen to Tidal Waltz">
<img src="https://peertube.eom.dev/lazy-static/thumbnails/32b4d3ba-a871-4f5c-942d-4001948c1295.jpg" width="560" height="315" loading="lazy" decoding="async" alt="">
<span class="media-label" aria-hidden="true">Tidal Waltz · Music &amp; film ↗</span>
</a>
</div>
</section>
<section class="section featured-section" id="projects" aria-labelledby="projects-title">
<div class="section-heading section-heading-row">
<div>
<p class="eyebrow">The workshop · Made here, shared openly</p>
<h2 id="projects-title">My projects.</h2>
<p>Tools, experiments, and open-source work I build and contribute to across organizations. Explore my recent public activity below.</p>
</div>
<a class="text-link" href="https://gitea.eom.dev/eric?tab=activity">Follow my public activity <span aria-hidden="true">→</span></a>
</div>
<div id="gitea-projects">
<p class="feed-status" data-project-status role="status" aria-live="polite">Selected project below. Recent public pushes load automatically when available.</p>
<div class="project-grid latest-grid" data-project-items>
<article class="project-card">
<div class="project-mark mark-blue" aria-hidden="true">&lt;/&gt;</div>
<p class="card-kicker">Open-source tools &amp; infrastructure</p>
<h3>The code behind this corner of the internet</h3>
<p>Explore the repositories behind my projects and independent publishing setup. Take a look at how things work, learn from the code, or adapt it for your own space.</p>
<div class="project-links">
<a class="text-link" href="https://gitea.eom.dev/explore/repos">Browse the source <span aria-hidden="true">→</span></a>
</div>
</article>
</div>
</div>
<div class="workshop-recordings" data-peertube-feed data-channels="eric_tech" data-title="Engineering">
<h3>Latest engineering videos</h3>
<p>Build notes, technical explorations, and the process behind the projects.</p>
<p class="feed-status" data-feed-status role="status" aria-live="polite">Latest uploads load automatically when available. Browse the engineering channel directly if it is unavailable.</p>
<div class="film-grid latest-grid" data-feed-items>
<p><a class="text-link" href="https://peertube.eom.dev/video-channels/eric_tech">Browse the engineering channel</a></p>
</div>
</div>
</section>
<section class="section featured-section gaming-section" id="gaming" aria-labelledby="gaming-title">
<div class="section-heading section-heading-row">
<div>
<p class="eyebrow">Game servers &amp; shared worlds</p>
<h2 id="gaming-title">Come play. Make yourself at home.</h2>
<p>Luanti is the main community world I host. The Button is ready to play, and Wikideck is an experiment still in development. Explore below or catch up with the gaming streams.</p>
</div>
<a class="text-link" href="https://peertube.eom.dev/video-channels/eric_gaming">Browse the gaming channel <span aria-hidden="true">→</span></a>
</div>
<div class="project-grid gaming-grid">
<article class="project-card">
<div class="project-mark mark-green" aria-hidden="true">▦</div>
<p class="card-kicker">Season V · Public server</p>
<h3>Luanti</h3>
<p>Explore a low-gravity world with eleven team islands, markets and an adventure-map spawn. Connect with a Luanti client at <code>luanti.eom.dev:30000</code>.</p>
<div class="project-links">
<a class="text-link" href="https://discourse.eom.dev/t/luanti-season-v/690">Season V details <span aria-hidden="true">→</span></a>
</div>
</article>
<article class="project-card">
<div class="project-mark mark-red" aria-hidden="true">●</div>
<p class="card-kicker">A social experiment</p>
<h3>The Button</h3>
<p>One shared countdown, six risk zones, and a season of nerve. Play, follow the standings, or inspect the code.</p>
<div class="project-links">
<a class="text-link" href="https://button.eom.dev/">Play the game <span aria-hidden="true">→</span></a>
<a class="text-link" href="https://gitea.eom.dev/Gaming/the-button">View the source</a>
</div>
</article>
<article class="project-card">
<div class="project-mark mark-blue" aria-hidden="true">▧</div>
<p class="card-kicker">Experimental card game</p>
<h3>Wikideck</h3>
<p>Mine, collect and trade illustrated Wikipedia cards. This is an experimental, unaudited project; its public network has not launched.</p>
<div class="project-links">
<a class="text-link" href="https://gitea.eom.dev/WikiDeck/wikideck">Explore Wikideck <span aria-hidden="true">→</span></a>
</div>
</article>
</div>
<div class="workshop-recordings" data-peertube-feed data-channels="eric_gaming" data-title="Gaming">
<h3>Latest gaming videos &amp; streams</h3>
<p>Catch up on the games and worlds we spend time in together.</p>
<p class="feed-status" data-feed-status role="status" aria-live="polite">Latest uploads load automatically when available. Browse the gaming channel directly if it is unavailable.</p>
<div class="film-grid latest-grid" data-feed-items>
<p><a class="text-link" href="https://peertube.eom.dev/video-channels/eric_gaming">Browse gaming videos and streams</a></p>
</div>
</div>
</section>
<section class="section films-section" id="peertube-library" aria-labelledby="library-title">
<div class="section-heading">
<p class="eyebrow">Channels &amp; collections · Always something to explore</p>
<h2 id="library-title">Find a thread. Follow it.</h2>
<p>Original music, live performances, trips, and experiments, organized on PeerTube. New public channels and playlists appear here automatically; each collection shows its three most recently published videos.</p>
</div>
<div class="collection-controls">
<label for="peertube-collection">Choose a channel or playlist</label>
<select id="peertube-collection" disabled><option>Loading channels and playlists…</option></select>
<a class="text-link" data-library-link href="https://peertube.eom.dev/accounts/eric/videos">Browse all publications <span aria-hidden="true">→</span></a>
</div>
<p class="feed-status" data-library-status role="status" aria-live="polite">The collection browser loads automatically when available. You can always browse directly on PeerTube.</p>
<div class="film-grid latest-grid" data-library-items></div>
<noscript><p>Enable JavaScript to see the latest uploads here, or follow the channel and playlist links to browse on PeerTube.</p></noscript>
</section>
<section class="community-band" aria-labelledby="community-title">
<div>
<p class="eyebrow">Stay in the loop</p>
<h2 id="community-title">Follow the work. Add your voice.</h2>
<p>Follow new recordings and works in progress on Mastodon, talk on the forum, or catch a live stream.</p>
<p>I share project notes, things I've learned, and ideas on Discourse. <a class="text-link" href="https://discourse.eom.dev/">Writing on Discourse <span aria-hidden="true">→</span></a></p>
</div>
<div class="community-actions">
<a class="button button-primary" href="https://discourse.eom.dev/latest">Visit the forum</a>
<a class="button button-secondary" href="https://mastodon.eom.dev/@eric/">Follow on Mastodon</a>
<a class="quiet-link" href="https://owncast.eom.dev/">Check the live channel</a>
</div>
</section>
<section class="about-section section" id="about" aria-labelledby="about-title">
<div class="about-photo">
<img src="/static/profile_2026.jpg" width="300" height="300" loading="lazy" alt="Eric Meehan">
</div>
<div class="about-copy">
<p class="eyebrow">The person behind the work</p>
<h2 id="about-title">Hi, I'm Eric.</h2>
<p>I'm a musician in Raleigh, North Carolina, and I work full-time as a software engineer. This is where I follow my curiosity through music, films, and projects of my own.</p>
<p>I use open-source software to own the means of production and publish on my own terms. I believe in a decentralized internet, and I share code and educational content to help others build independent spaces too.</p>
<div class="about-links">
<a class="text-link" href="https://mastodon.eom.dev/@eric/">Follow on Mastodon <span aria-hidden="true">→</span></a>
<a class="text-link" href="mailto:eric@eom.dev">Get in touch</a>
<a class="text-link" href="/eric@eom.dev.pub">View my GPG key</a>
</div>
</div>
</section>
<section class="section services-section" id="services" aria-labelledby="services-title">
<div class="section-heading">
<p class="eyebrow">The open-source home behind the work</p>
<h2 id="services-title">An independent space to connect.</h2>
<p>These services are where I publish and the community connects. Browse public videos and posts without a paid membership. Free accounts include forums, chat, and Git hosting; Gold (Level 3) and above add Mastodon and PeerTube account access.</p>
</div>
<div class="project-grid">
<article class="project-card service-card">
<div class="project-mark service-mark"><img src="https://discourse.eom.dev/uploads/default/optimized/1X/_129430568242d1b7f853bb13ebea28b3f6af4e7_2_32x32.png" width="32" height="32" loading="lazy" decoding="async" alt=""></div>
<p class="card-kicker">Free · Level 0 and above</p>
<h3>Discourse · Forums</h3>
<p>Talk about the music, films, and projects. Bronze and above also get exclusive member content.</p>
<a class="text-link" href="https://discourse.eom.dev/">Visit the forum <span aria-hidden="true">→</span></a>
</article>
<article class="project-card service-card">
<div class="project-mark service-mark"><img src="https://element.eom.dev/vector-icons/144.5a63bf2.png" width="32" height="32" loading="lazy" decoding="async" alt=""></div>
<p class="card-kicker">Free · Level 0 and above</p>
<h3>Matrix · Chat</h3>
<p>Keep in touch in community rooms through Element. Bronze and above also get exclusive member content.</p>
<a class="text-link" href="https://element.eom.dev/">Open Matrix chat <span aria-hidden="true">→</span></a>
</article>
<article class="project-card service-card">
<div class="project-mark service-mark"><img src="https://gitea.eom.dev/assets/img/favicon.svg" width="32" height="32" loading="lazy" decoding="async" alt=""></div>
<p class="card-kicker">Free · Level 0 and above</p>
<h3>Gitea · Source code</h3>
<p>Explore the code behind the projects, learn from it, or collaborate on something of your own.</p>
<a class="text-link" href="https://gitea.eom.dev/">Explore Gitea <span aria-hidden="true">→</span></a>
</article>
<article class="project-card service-card">
<div class="project-mark service-mark"><img src="https://mastodon.eom.dev/packs/assets/favicon-48x48-DMnduFKh.png" width="32" height="32" loading="lazy" decoding="async" alt=""></div>
<p class="card-kicker">Gold · Levels 3–5</p>
<h3>Mastodon · Updates</h3>
<p>Follow public updates, or participate with an eom.dev account and connect with the wider fediverse.</p>
<a class="text-link" href="https://mastodon.eom.dev/">Visit Mastodon <span aria-hidden="true">→</span></a>
</article>
<article class="project-card service-card">
<div class="project-mark service-mark"><img src="https://peertube.eom.dev/client/assets/images/favicon.png" width="32" height="32" loading="lazy" decoding="async" alt=""></div>
<p class="card-kicker">Gold · Levels 3–5</p>
<h3>PeerTube · Films &amp; music</h3>
<p>Watch public recordings freely. Gold and above can also take part with an eom.dev PeerTube account.</p>
<a class="text-link" href="https://peertube.eom.dev/">Visit PeerTube <span aria-hidden="true">→</span></a>
</article>
<article class="project-card service-card">
<div class="project-mark service-mark"><img src="https://owncast.eom.dev/favicon.ico" width="32" height="32" loading="lazy" decoding="async" alt=""></div>
<p class="card-kicker">Public live channel</p>
<h3>Owncast · Live streams</h3>
<p>Drop in for performances, experiments, and work in progress when the channel is on air.</p>
<a class="text-link" href="https://owncast.eom.dev/">Check the live channel <span aria-hidden="true">→</span></a>
</article>
</div>
<p><a class="text-link" href="/members/register/">Create a free community account <span aria-hidden="true">→</span></a> · <a class="text-link" href="/members/">Compare membership benefits</a></p>
</section>
<section class="support-section" id="support" aria-labelledby="support-title">
<div class="support-copy">
<p class="eyebrow">More room to make</p>
<h2 id="support-title">Help the next song, film, or experiment happen.</h2>
<p>Memberships and one-time contributions fund the time, recording, travel, and independent publishing behind my creative work.</p>
<p>Your support gives me room to keep making and sharing. Releases follow the work, with no fixed schedule or promise of a particular project.</p>
</div>
<div class="support-actions">
<a class="button button-primary" href="/members/">Explore memberships</a>
<a class="button button-secondary" href="https://donate.stripe.com/dRm28qczOcDx05Nfd9cQU00">Make a one-time contribution</a>
<details class="crypto-support">
<summary>Other ways to support</summary>
<p>Monero contributions can be sent to this public address:</p>
<code class="wallet-address">48mFvxYDSCzMy5a3Zaj7ewApbX4GwXVXX9T1JC8mqBC19s9UcrNq8eaKkQ6GKdhHGQGmhdpvMd3mcbjf4eQbP8Yv7KdAREw</code>
<p>The <a href="/xmrig.json">XMRig configuration</a> is an example for running your own miner on P2Pool, not a contribution link. Replace the example wallet with your own.</p>
</details>
</div>
</section>
</main>
<script type="module" src="/static/peertube-feeds.mjs"></script>
<script type="module" src="/static/gitea-projects.mjs"></script>
<!--#include virtual="/common/footer.html" -->
</body>
</html>