<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Portfolio | Shinya Kato</title><link>https://shinyakato.dev/portfolio/</link><description>Projects I have shipped with something public to point at — records, not a blog.</description><language>en</language><managingEditor>hi@shinyakato.dev (Shinya Kato)</managingEditor><webMaster>hi@shinyakato.dev (Shinya Kato)</webMaster><lastBuildDate>Sat, 01 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://shinyakato.dev/portfolio/index.xml" rel="self" type="application/rss+xml"/><item><title>shinyakato.dev — Personal site and works archive</title><link>https://shinyakato.dev/portfolio/shinyakato-dev/</link><pubDate>Sat, 01 Aug 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/shinyakato-dev/</guid><description>A static site generated by Hugo, holding a profile page of links and this archive. A push to CodeCommit runs a CodeBuild project that syncs it to S3 behind CloudFront.</description><category>personal</category></item><item><title>feed_generator — A Bluesky custom feed generator template</title><link>https://shinyakato.dev/portfolio/feed-generator/</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/feed-generator/</guid><description>A template for a Bluesky custom feed generator in Dart: a firehose indexer, a swappable ranking algorithm and store, and the three endpoints AppView calls, served over shelf.</description><category>personal</category><category>oss</category></item><item><title>bluesky_text_flutter — Flutter widgets for bluesky_text</title><link>https://shinyakato.dev/portfolio/bluesky-text-flutter/</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/bluesky-text-flutter/</guid><description>The last mile between bluesky_text and a Bluesky client: a text controller that highlights entities and the over-limit tail while typing, and a viewer for fetched posts.</description><category>personal</category><category>oss</category></item><item><title>atproto_identity — AT Protocol identity resolution for Dart</title><link>https://shinyakato.dev/portfolio/atproto-identity/</link><pubDate>Wed, 01 Jul 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/atproto-identity/</guid><description>Resolves an AT Protocol handle or DID to its DID document, PDS origin and signing key, and verifies the service-auth tokens arriving at a feed generator or an AppView.</description><category>personal</category><category>oss</category></item><item><title>DayoneLabs — Tech blog built on an AI-assisted workflow</title><link>https://shinyakato.dev/portfolio/dayonelabs/</link><pubDate>Sun, 01 Feb 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/dayonelabs/</guid><description>A technical blog built with Docusaurus. Drafts become MDX via Claude Code and Kiro; a push to CodeCommit runs CodePipeline and CodeBuild, and S3 and CloudFront serve it.</description><category>personal</category></item><item><title>Astra — Serverless space-content distribution</title><link>https://shinyakato.dev/portfolio/astra/</link><pubDate>Thu, 01 Jan 2026 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/astra/</guid><description>A serverless AWS platform that fetches space-related content, transforms it, and distributes it to several social networks. A full Java rewrite of the 2023 APOD Bot for Bluesky.</description><category>personal</category></item><item><title>at_primitives — AT Protocol identifier types for Dart</title><link>https://shinyakato.dev/portfolio/at-primitives/</link><pubDate>Mon, 01 Sep 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/at-primitives/</guid><description>The identifier layer under the atproto.dart packages: handle and DID validation, AT URI parsing, NSID, TID and record keys. It declares no other package in the monorepo.</description><category>personal</category><category>oss</category></item><item><title>lex_gen — Lexicon-to-Dart code generation</title><link>https://shinyakato.dev/portfolio/lex-gen/</link><pubDate>Tue, 01 Jul 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/lex-gen/</guid><description>A code generator that turns AT Protocol Lexicon documents into Dart models, service classes and CLI commands. It generates atproto, bluesky and bluesky_cli.</description><category>personal</category><category>oss</category></item><item><title>DayoneLabs (WordPress) — Predecessor blog on Amazon Lightsail</title><link>https://shinyakato.dev/portfolio/dayonelabs-wordpress/</link><pubDate>Wed, 01 Jan 2025 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/dayonelabs-wordpress/</guid><description>A technical blog running WordPress on Amazon Lightsail. It was replaced by a Docusaurus static site over authoring experience and running cost.</description><category>personal</category></item><item><title>aws_lambda_dart_runtime_ns — A Dart runtime for AWS Lambda</title><link>https://shinyakato.dev/portfolio/aws-lambda-dart-runtime-ns/</link><pubDate>Mon, 01 Apr 2024 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/aws-lambda-dart-runtime-ns/</guid><description>A custom AWS Lambda runtime for Dart, restructured from the AWS Labs runtime for current Dart SDKs. One deployment registers several named handlers.</description><category>personal</category><category>oss</category></item><item><title>did_plc — An independent DID PLC Directory client</title><link>https://shinyakato.dev/portfolio/did-plc/</link><pubDate>Wed, 01 Nov 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/did-plc/</guid><description>A Dart client for the DID PLC Directory — document, operation-log and audit-log lookups with caching, batching and streaming, plus ECDSA signing and verification.</description><category>personal</category><category>oss</category></item><item><title>atproto_oauth — OAuth 2.0 with DPoP for the AT Protocol</title><link>https://shinyakato.dev/portfolio/atproto-oauth/</link><pubDate>Wed, 01 Nov 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/atproto-oauth/</guid><description>A Dart implementation of the AT Protocol OAuth profile: pushed authorisation requests, PKCE, DPoP-bound tokens and automatic refresh, with every stage of the flow pluggable.</description><category>personal</category><category>oss</category></item><item><title>icann_tlds — The ICANN TLD list, regenerated daily</title><link>https://shinyakato.dev/portfolio/icann-tlds/</link><pubDate>Fri, 01 Sep 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/icann-tlds/</guid><description>A Dart list of every official top-level domain, with domain and email validators over it. A daily GitHub Actions job regenerates the list from IANA and releases the diff.</description><category>personal</category><category>oss</category></item><item><title>multiformats — CID and other IPFS primitives for Dart</title><link>https://shinyakato.dev/portfolio/multiformats/</link><pubDate>Thu, 01 Jun 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/multiformats/</guid><description>A Dart implementation of IPFS v1 CIDs — parsing, creation, the DAG-JSON and AT Protocol JSON forms, and a canonical DAG-CBOR encoder that is exact on the VM and the web.</description><category>personal</category><category>oss</category></item><item><title>bluesky_text — Post-text analysis for Bluesky Social</title><link>https://shinyakato.dev/portfolio/bluesky-text/</link><pubDate>Mon, 01 May 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/bluesky-text/</guid><description>A Dart library that detects handles, links and tags in Bluesky Social post text and converts them into the facets the API expects.</description><category>personal</category><category>oss</category></item><item><title>Official APOD Bot for Bluesky — The daily NASA APOD, on Bluesky</title><link>https://shinyakato.dev/portfolio/apod-bot/</link><pubDate>Sat, 01 Apr 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/apod-bot/</guid><description>A bot that posts the NASA Astronomy Picture of the Day image and explanation to Bluesky every day. Written in Dart, running on AWS Lambda and scheduled by Amazon EventBridge.</description><category>personal</category></item><item><title>xrpc — The XRPC transport layer for AT Protocol</title><link>https://shinyakato.dev/portfolio/xrpc/</link><pubDate>Wed, 01 Mar 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/xrpc/</guid><description>A wrapped HTTP client for the AT Protocol's XRPC layer: typed queries and procedures, blob upload, rate-limit handling, and WebSocket subscriptions for event streams.</description><category>personal</category><category>oss</category></item><item><title>lexicon — A Lexicon parser for the AT Protocol</title><link>https://shinyakato.dev/portfolio/lexicon/</link><pubDate>Wed, 01 Mar 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/lexicon/</guid><description>A parser for AT Protocol Lexicon schema documents, shipping the official lexicons as generated Dart constants. It is the input the lex_gen code generator reads.</description><category>personal</category><category>oss</category></item><item><title>bluesky_post — Post to Bluesky from GitHub Actions</title><link>https://shinyakato.dev/portfolio/bluesky-post/</link><pubDate>Wed, 01 Mar 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/bluesky-post/</guid><description>A Docker-based GitHub Action that posts to Bluesky Social from a workflow: images, video, replies, quotes, link previews and automatic facets.</description><category>personal</category><category>oss</category></item><item><title>bluesky_cli — A command-line client for Bluesky Social</title><link>https://shinyakato.dev/portfolio/bluesky-cli/</link><pubDate>Wed, 01 Mar 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/bluesky-cli/</guid><description>A Dart command-line tool that runs Bluesky Social and AT Protocol XRPC methods from the shell. It installs as bsky, and its commands are generated from the lexicons.</description><category>personal</category><category>oss</category></item><item><title>bluesky — A Dart/Flutter SDK for Bluesky Social</title><link>https://shinyakato.dev/portfolio/bluesky/</link><pubDate>Wed, 01 Mar 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/bluesky/</guid><description>A Dart/Flutter client library for Bluesky Social covering the app.bsky.* and chat.bsky.* namespaces, and including everything the atproto package provides.</description><category>personal</category><category>oss</category></item><item><title>atprotodart.com — Documentation site for atproto.dart</title><link>https://shinyakato.dev/portfolio/atprotodart-com/</link><pubDate>Wed, 01 Mar 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/atprotodart-com/</guid><description>A Docusaurus documentation site for atproto.dart, covering the getting-started guide, API reference and the Lexicon listing. It lives in the monorepo's website directory.</description><category>personal</category><category>oss</category></item><item><title>atproto.dart — Dart SDK monorepo for AT Protocol and Bluesky</title><link>https://shinyakato.dev/portfolio/atproto-dart/</link><pubDate>Wed, 01 Mar 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/atproto-dart/</guid><description>The monorepo for the Dart/Flutter AT Protocol and Bluesky Social SDK: fifteen packages, among them atproto, bluesky, bluesky_text and lex_gen, fourteen in one pub workspace.</description><category>personal</category><category>oss</category></item><item><title>atproto_core — Shared core layer for the atproto.dart SDK</title><link>https://shinyakato.dev/portfolio/atproto-core/</link><pubDate>Wed, 01 Mar 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/atproto-core/</guid><description>The package the atproto and bluesky libraries are built on: sessions and JWT decoding, a pluggable retry engine, XRPC and HTTP plumbing, and blob and CAR handling.</description><category>personal</category><category>oss</category></item><item><title>atproto — A Dart/Flutter SDK for the AT Protocol</title><link>https://shinyakato.dev/portfolio/atproto/</link><pubDate>Wed, 01 Mar 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/atproto/</guid><description>A Dart/Flutter client library covering the com.atproto.* namespace of the AT Protocol. It is the core package of the atproto.dart monorepo.</description><category>personal</category><category>oss</category></item><item><title>deck.blue — A multi-column web client for Bluesky</title><link>https://shinyakato.dev/portfolio/deck-blue/</link><pubDate>Sun, 01 Jan 2023 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/deck-blue/</guid><description>A Bluesky web client that shows several timelines side by side as columns. Built with Flutter for the web and using the atproto.dart SDK.</description><category>collaborative</category></item><item><title>mastodon_oauth2 — Mastodon OAuth 2.0 for Flutter</title><link>https://shinyakato.dev/portfolio/mastodon-oauth2/</link><pubDate>Tue, 01 Nov 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/mastodon-oauth2/</guid><description>A Flutter library that runs the Mastodon API's OAuth 2.0 authorization code flow in an app and returns an access token. Runs on Android, iOS, Linux, macOS, Web and Windows.</description><category>personal</category><category>oss</category></item><item><title>mastodon_api — A Dart/Flutter SDK for the Mastodon API</title><link>https://shinyakato.dev/portfolio/mastodon-api/</link><pubDate>Tue, 01 Nov 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/mastodon-api/</guid><description>A Dart/Flutter client library for the Mastodon API. Its README documents nine services across the v1 and v2 endpoints, with typed response objects and automatic retry.</description><category>personal</category><category>oss</category></item><item><title>twitter_oembed_api — Twitter oEmbed API for Dart and Flutter</title><link>https://shinyakato.dev/portfolio/twitter-oembed-api/</link><pubDate>Mon, 01 Aug 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/twitter-oembed-api/</guid><description>A Dart and Flutter client for the Twitter oEmbed API, returning the markup for an embedded tweet or an embedded timeline. Two methods, and no credentials to configure.</description><category>personal</category><category>oss</category></item><item><title>twitter_oauth2_pkce — Twitter API OAuth 2.0 PKCE for Flutter</title><link>https://shinyakato.dev/portfolio/twitter-oauth2-pkce/</link><pubDate>Sun, 01 May 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/twitter-oauth2-pkce/</guid><description>A Flutter library that adds the Twitter API's OAuth 2.0 PKCE authorization code flow to an app. Runs on Android, iOS, Linux, macOS, Web and Windows.</description><category>personal</category><category>oss</category></item><item><title>twitter_api_v2 — A Dart/Flutter SDK for the Twitter API v2.0</title><link>https://shinyakato.dev/portfolio/twitter-api-v2/</link><pubDate>Fri, 01 Apr 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/twitter-api-v2/</guid><description>A Dart/Flutter client library for the Twitter API v2.0, with OAuth 1.0a and 2.0, streaming, media upload and automatic retry.</description><category>personal</category><category>oss</category></item><item><title>console_color — The 256 Xterm colours as a Dart enum</title><link>https://shinyakato.dev/portfolio/console-color/</link><pubDate>Tue, 01 Mar 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/console-color/</guid><description>A Dart enum with one member per Xterm palette entry, each documented with its hex, RGB and HSL values. Its code getter returns the number a terminal expects.</description><category>personal</category><category>oss</category></item><item><title>text_divider — A Flutter Divider with text in the middle</title><link>https://shinyakato.dev/portfolio/text-divider/</link><pubDate>Tue, 01 Feb 2022 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/text-divider/</guid><description>A Flutter widget that places a Text in the middle of a Divider, horizontally or vertically, leaving the rule's size, thickness, indent and colour to the caller.</description><category>personal</category><category>oss</category></item><item><title>sweet_cookie_jar — Cookie management for Dart</title><link>https://shinyakato.dev/portfolio/sweet-cookie-jar/</link><pubDate>Wed, 01 Dec 2021 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/sweet-cookie-jar/</guid><description>A Dart library that extends the dart:io Cookie class and reads cookies off an http package response, including a response whose header sets more than one at a time.</description><category>personal</category><category>oss</category></item><item><title>app_version — In-app version check and update prompt</title><link>https://shinyakato.dev/portfolio/app-version/</link><pubDate>Wed, 01 Dec 2021 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/app-version/</guid><description>A Flutter widget that displays the running application's version status and, when a newer release is available, opens a prompt carrying its release notes.</description><category>personal</category><category>oss</category></item><item><title>Reflection Test Helper — Private-method reflection for tests</title><link>https://shinyakato.dev/portfolio/reflection-test-helper/</link><pubDate>Mon, 01 Mar 2021 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/reflection-test-helper/</guid><description>A Java helper for tests that have to reach a private method or field. from takes the class under test, addArgument its parameters, and invokeMethod calls the method by name.</description><category>personal</category><category>oss</category></item><item><title>Zenna DB — Annotation-driven JSON content mapping</title><link>https://shinyakato.dev/portfolio/zenna-db/</link><pubDate>Mon, 01 Feb 2021 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/zenna-db/</guid><description>A Java framework that maps JSON content files onto entity classes through annotations. Its stated aim is flexibility with a small implementation.</description><category>personal</category><category>oss</category></item><item><title>Epitaph — Named presets for Java regular expressions</title><link>https://shinyakato.dev/portfolio/epitaph/</link><pubDate>Sun, 01 Nov 2020 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/epitaph/</guid><description>A Java wrapper over java.util.regex whose builder takes either a raw pattern or one of 34 named presets, then answers find, matches and group against an input.</description><category>personal</category><category>oss</category></item><item><title>Envali — Annotation-driven entity validation for Java</title><link>https://shinyakato.dev/portfolio/envali/</link><pubDate>Thu, 01 Oct 2020 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/envali/</guid><description>A Java framework that validates an entity's fields from annotations declared on them. Envali.validate reflects over the fields and reports recoverable and unrecoverable errors.</description><category>personal</category><category>oss</category></item><item><title>Precondition Validator — Java argument checks that throw</title><link>https://shinyakato.dev/portfolio/precondition-validator/</link><pubDate>Tue, 01 Sep 2020 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/precondition-validator/</guid><description>A Java library of static precondition checks. Its one class, Preconditions, returns silently when an argument is acceptable and throws at once when it is not.</description><category>personal</category><category>oss</category></item><item><title>Content Framework — Externalised values and rules for Java</title><link>https://shinyakato.dev/portfolio/content-framework/</link><pubDate>Sat, 01 Aug 2020 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/content-framework/</guid><description>A Java framework that moves values and conditions out of source code and into JSON content files, so behaviour can change without the source being edited.</description><category>personal</category><category>oss</category></item><item><title>Catalog API — Common lookup behaviour for Java enums</title><link>https://shinyakato.dev/portfolio/catalog-api/</link><pubDate>Sat, 01 Aug 2020 00:00:00 +0000</pubDate><guid isPermaLink="true">https://shinyakato.dev/portfolio/catalog-api/</guid><description>A Java interface an enum implements to gain lookup by code or by tag value, membership checks and an ordered list, all as static methods on Catalog and BiCatalog.</description><category>personal</category><category>oss</category></item></channel></rss>