<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Brainwagon (reborn)</title>
    
    
    <meta name="description" content="Mark VandeWettering&#39;s notebook: telescope making, optics, radio, woodworking, and whatever is on the bench this week.">
    <link rel="canonical" href="https://brainwagon.org/">
    <meta property="og:site_name" content="Brainwagon">
    <meta property="og:type" content="website">
    <meta property="og:title" content="Brainwagon">
    <meta property="og:description" content="Mark VandeWettering&#39;s notebook: telescope making, optics, radio, woodworking, and whatever is on the bench this week.">
    <meta property="og:url" content="https://brainwagon.org/">
    <meta property="og:image" content="https://brainwagon.org/images/social-card.png">
    <meta property="og:image:alt" content="Brainwagon">
    
    <meta property="og:image:width" content="1200">
    <meta property="og:image:height" content="630">
    <meta property="og:image:type" content="image/png">
    <meta property="og:locale" content="en_US">
    
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:title" content="Brainwagon">
    <meta name="twitter:description" content="Mark VandeWettering&#39;s notebook: telescope making, optics, radio, woodworking, and whatever is on the bench this week.">
    <meta name="twitter:image" content="https://brainwagon.org/images/social-card.png">
    
    <link rel="stylesheet" href="/style.css?v=7">
    <link rel="alternate" type="application/rss+xml" title="Brainwagon" href="/blog/rss.xml">
    <link href="https://fonts.googleapis.com/css2?family=Open+Sans:ital,wght@0,300..800;1,300..800&family=Tagesschrift&display=swap" rel="stylesheet">
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/boxicons@latest/css/boxicons.min.css">
    <script>
      const savedTheme = localStorage.getItem('theme');
      if (savedTheme === 'dark' || (!savedTheme && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
        document.documentElement.classList.add('dark-theme');
      }
    </script>
</head>
<body>
    <nav>
        <section>
            <a href="/">Home</a>
            <a href='/blog/'>Blog</a>
            <a href="/telescopes/">Telescopes</a>
            <a href="/github/">Github</a>
            <a href="/podcasts/">Radio</a>
            <a href="/contact/">Contact</a>

            <div style="float: right; display: flex; align-items: center;">
                <div class="search-container" style="display: inline-block; position: relative; margin-right: 1em;">
                    <input type="text" id="search-input" placeholder="Search..." autocomplete="off">
                    <div id="search-results" class="search-results" style="display: none;"></div>
                </div>
                <a href="/about/">About</a>
                <a href="/blog/rss.xml" class="rss">RSS</a>
                <button id="theme-toggle" title="Toggle dark mode" style="background: none; border: none; cursor: pointer; color: var(--nav-link-color); font-size: 1.2em; vertical-align: middle;">
                    <i class="bx bx-moon" id="theme-toggle-icon"></i>
                </button>
            </div>
        </section>
    </nav>
    <main>
        <section>
            
<h1>brainwagon (reborn)</h1>
<img src="/images/caricature-small.png" alt="Caricature courtesy of Domee Shi" style="float: right; margin-left: 20px;"/>
<p>Welcome to the site of Mark VandeWettering.</p>

<p class="bio">I spent 33 years at Pixar Animation Studios, with credits from
<em>Toy Story</em> to <em>Elemental</em>, and over three decades at the
<a href="https://chabotspace.org/">Chabot</a> Telescope Makers' Workshop in
Oakland, California, teaching people to grind their own telescope mirrors. I
write here about telescope making, woodworking, radio, and whatever I am
building this week. My <a href="https://mvandewettering.com">resume is
here</a>.</p>
<p>Want to catch up with my blog? <a href='/blog/'><strong>Click here</strong></a> and get all the latest. Or use <a class="rss" href="/blog/rss.xml">RSS</a> to stay up to date.</p>

<p>The blog is now generated by a script which I wrote using Google's Antigravity CLI, and which is taking advantage of Google's <a href="https://github.com/google/open-knowledge-format">Open Knowledge Format</a> to store posts.</p>

<p>
In any case, if you are reading this and have any comments or questions,
feel free to send me an email and I'll try to respond. My goal
is to eventually write up a more complete HOWTO on how I created this.
</p>

        </section>
    </main>
    <footer>
        <section>
            <p class="footer-invite">Questions, corrections, or a project you
            would like a second pair of hands on? Write to me at
            <a href="/cdn-cgi/l/email-protection#98f5eef9f6fcfdeffdececfdeaf1f6ffd8fff5f9f1f4b6fbf7f5"><span class="__cf_email__" data-cfemail="016c77606f6564766475756473686f6641666c60686d2f626e6c">[email&#160;protected]</span></a>.
            I read my email and I answer it.</p>
            <p>&copy; 2002-2026, Mark VandeWettering</p>
        </section>
    </footer>
    <script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script>
        const themeToggle = document.getElementById('theme-toggle');
        const themeIcon = document.getElementById('theme-toggle-icon');
        const html = document.documentElement;
        const body = document.body;

        if (html.classList.contains('dark-theme')) {
            body.classList.add('dark-theme');
            themeIcon.classList.replace('bx-moon', 'bx-sun');
        }

        themeToggle.addEventListener('click', () => {
            const isDark = body.classList.toggle('dark-theme');
            html.classList.toggle('dark-theme', isDark);
            localStorage.setItem('theme', isDark ? 'dark' : 'light');
            
            if (isDark) {
                themeIcon.classList.replace('bx-moon', 'bx-sun');
            } else {
                themeIcon.classList.replace('bx-sun', 'bx-moon');
            }
        });
    </script>
    <script src="/search.js"></script>
    <script data-goatcounter="https://brainwagon.goatcounter.com/count"
        async src="//gc.zgo.at/count.js"></script>
</body>
</html>