Ali

Hello, neon world

· 1 min read · meta, effect

Welcome to the first post. This site is a small experiment: a portfolio and blog that is fully typed end to end, served by Effect and fed by plain Markdown files sitting in a folder.

How it works

Every post lives in content/blog/ as a .md file with a little YAML frontmatter on top:

---
title: Hello, neon world
date: 2026-10-02
description: First transmission.
tags: [meta, effect]
---

The Blog service reads the directory with Effect's FileSystem, validates the frontmatter with Schema, and renders the body with marked. A bad date or a missing title fails with a typed InvalidPost error instead of a mystery undefined at runtime.

export class Blog extends Context.Service<Blog, {
  readonly list: Effect.Effect<ReadonlyArray<PostMeta>, InvalidPost>
  readonly get: (slug: string) => Effect.Effect<Post, PostNotFound | InvalidPost>
}>()("poroto/Blog") {}

What to expect

  • Notes on TypeScript and Effect
  • Things I broke in production, and what I learned
  • The occasional design tangent

夜は短し — the night is short. Ship something.

See you on the grid.