iex> Site.moduledoc()
"""
I'm a software engineer in Tokyo. Most days I'm writing Elixir, sometimes poking at embedded firmware, and occasionally building the web pieces that tie the two together. Most of what I make is open source, published on Codeberg.
This site is where I keep short notes on what I'm building and learning. Recent projects and the latest posts are below — for the longer story, visit /about.
If you'd like to get in touch, /contact has details.
"""
iex> Ken.now()
%Now{
as_of: ~D[],
status: "Two things at once: NoirNotes, a notes app whose server holds ciphertext it has no key for, and Fardel, household finances and possessions in one local SQLite file. Both still at the stage where the schema is allowed to change its mind."
}
iex> Ken.work(limit: 2)
%Portfolio{
entries: [
%Project{
status: :in_progress,
about: "Notes the server stores and cannot read. Every note is encrypted in the browser before it is sent, and there is nowhere in the database for readable text to sit. A test fails if anyone adds one. Elixir, Phoenix LiveView, PostgreSQL, AGPL-3.0."
},
%Project{
status: :in_progress,
about: "Household finances and personal possessions in one local app. One SQLite file, no server to administer, nothing leaves the machine. Accounts, the ledger with receipt lines, categories, the catalogue, possessions with valuation and a dashboard are in."
}
],
}
iex> Blog.feed(limit: 3)
%Feed{
entries: [
%Post{
date: ~D[],
description: "I assumed I built for the desktop because I don't work on a phone. The actual reason is that mobile platforms break the one promise local-first software makes.",
},
%Post{
date: ~D[],
description: "Every app I build is missing the same three things. People read that as a roadmap of what I haven't got to yet. It isn't a roadmap. It's the whole design.",
},
%Post{
date: ~D[],
description: "I don't hate ads because they're annoying. I hate what they predict. Netflix convinced me: ads are what growth needs, not what free products need.",
}
],
}
iex> Ken.support()
"If anything here is useful to you, please consider buying me a coffee️ on Ko-fi ☕. Every bit of encouragement helps me keep writing and building in the open."
iex> Ken.motd()
"I'd rather build the future than predict it — one elegant function at a time."