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.