Let's start with some types

After more than two decades working with JavaScript I'd become very comfortable with its lack of typing, so I was surprised at how quickly I became a TypeScript adherent.

I find it's almost impossible to start coding without designing types and interfaces for data first.

I started a file under /types/ that will export a bunch of interfaces that describe the most common data types.

    export interface Link {
        text: string;
        title: string;
        url: string;
    }
    
    export interface Author {
        name: string;
        contact?: string;
        urls?: Link[];
    }
    
    export type ArchiveFormat = 'YearMonthDay' | 'YearMonth';
    
    export interface Blog {
        title: string;
        url: string;
        description?: string;
        language?: string;
        authors?: Author[];
        archiveFormat: ArchiveFormat;
        archiveWithSlug: boolean;
        indexPosts?: number;
    }
    
    export interface Tag {
        name: string;
        text: string;
    }
    
    export type PostStatus = 'draft' | 'publish';
    
    export interface Post {
        date: Date;
        title: string;
        author: Author;
        guid?: string;
        content?: string;
        excerpt?: string;
        slug?: string;
        tags?: Tag[];
        thumbnail_image?: string;
        opengraph_image?: string;
        previous_link?: Link;
        next_link?: Link;
        status: PostStatus;
    }                        

Hello, world!

If you're reading this, hello! I have torn down this weblog, down to this single index page. There is no styling, no dynamic content, no scripts, no archives, no tags or categories. Just a fresh start, right here.

I'm going to rebuild this blog as a static site. I mentioned last week that I have to change hosting providers and wasn't looking forward to moving this website. I got to thinking about how a lot of what I've maintained here over the years isn't really useful anymore. I really don't want to wrangle with Wordpress or other blogging software. Most of the custom programming I've done has been to support defunct things like the Demo Club and email lists. So there no good reason to keep maintaining a database and PHP install.

I've looked into all the hot new static site generators and while there's a ton of them, I'm not excited by any of them. Plus, there's always something that needs custom hacking, and the hacking part is fun. And it's been awhile since I've hacked something together just for myself.

So I'm going to write my own static blog generator, and blog about it here. It's the perfect time for this. We're sliding into winter, and I need a project. I'm not writing any music. I'm 20 pages deep into a comic script that I have no energy to start drawing yet. So yeah, let's do this!

Eating an elephant

I'm making a promise to myself right now that I'm only going to work on one tiny feature at a time and go easy on myself. This is how I finished THE LAST REUNION SHOW — basically a panel or two every evening was enough to feel like I'd done something.

I have some very basic requirements:

The first three are the most important, the bare "minimum viable product"

Things I can live without:

This is gonna be basic computer stuff: file management, text parsing, simple graphing challenges, building indexes. I'm not inventing anything new at all — and yet, I'm excited? I just wanna build something, and that's a helluva lot more interesting than migrating this creaky old site to a new home.