English | 日本語
- Name: Yuichi Shimo
- Role: Full-stack engineer with a backend focus
- Based in: Fukuoka, Japan
- Interests: Web development / Web scraping / Open source
- Currently: Building the whole pipeline for boatrace (Japanese powerboat racing) data on my own: collecting it, publishing it and putting it to use. The center is Boatrace Open API, a public API, and the work runs from scraping libraries to Funaken Lab, a backtesting tool written in TypeScript
Projects that scrape data from the official boatrace site, publish it as a pseudo-API using only GitHub Actions and GitHub Pages, and build analysis tools on top of that data, all run by one person. The organizations are split by role, and the main one is boatraceopenapi.
| Repository | Tech Stack |
|---|---|
| boatraceopenapi/api An API that publishes race cards, pre-race info and results for all 24 stadiums as JSON. It has no server: Cloudflare Workers Cron Triggers start GitHub Actions about every 3 minutes to update the day's data, and GitHub Pages serves it. This is the speed-first version (endpoint) |
|
| turnmark/api An API that also provides odds, on top of race cards, pre-race info and results. This is the stability-first version, covering data up to the previous day (endpoint) |
| Repository | Tech Stack |
|---|---|
| turnmark/turnmark The foundation of the two APIs above. A monorepo for turnmark/scraper, a scraper for the official site, and scrapers for the official sites of the Fukuoka, Mikuni, Tamagawa and Tokuyama stadiums |
|
shimomo/boatrace-phpboatrace/*, the next generation of my data libraries. Contracts (types), the DI container (core), general-purpose modules (support), and scrapers for the official site (scraper) and BOATCAST (scraper-boatcast) are published as separate Packagist packages. A redesign of turnmark for my own use cases, in progress |
| Repository | Tech Stack |
|---|---|
| shimomo/funaken-lab A backtesting lab that tests boatrace betting strategies against real race results. Reading information from after the betting deadline is a type error by design, which prevents leakage, and bets are settled from the payout table, with special payouts, unestablished bets and refunds counted separately (site) |
|
| shimomo/tenjisagi A per-racer ranking of how often the course taken in the start exhibition differs from the course in the actual race, known among fans as "tenji sagi" (exhibition fraud) (site) |
|
| shimomo/boatrace-motivation-viz A web app that visualizes racers' motivation and condition from the weight changes on race cards. It reads data from boatraceopenapi/api, is exported as a static site and is served from GitHub Pages (site) |
|
| shimomo/boatrace-replay-links A page that builds links to BOATCAST race replays (from 2020-01-01) from a date, stadium and race number. It doesn't embed the video and only opens the replay page. Replay URLs are added every morning as static JSON, one file per day, and are also published as an API (site) |
| Repository | Tech Stack |
|---|---|
| Handicapper.jp A web service that collects autorace race cards, results, odds and racer data daily. It offers analysis screens that go down to track conditions and trial run times, multi-criteria search over about 129,000 races since 2005, and a prediction simulator with virtual money. I handle everything from planning to operations on my own, and it runs on a Shin VPS (the code is private) |
|
| autorace/tokyo-sports-scraper A scraping library for autorace information from Tokyo Sports (PyPI: autorace-tokyo-sports-scraper) |
|
shimomo/autorace-news-collectorshimomo/autorace-news-collector collects the latest autorace articles from the feeds and APIs of AUTORACE.JP, Nikkan Sports, each stadium's official site and the official YouTube channel. It doesn't scrape HTML list pages, and leaves storage, read tracking and deduplication to the caller |
|
| ↳ shimomo/autorace-news A site for browsing the headlines collected by autorace-news-collector above, one page per week, in three rows: official announcements, newspaper articles and videos. Some sources forbid republishing, so it only publishes headlines and links (site) |
| Repository | Tech Stack |
|---|---|
shimomo/keirin-news-collectorshimomo/keirin-news-collector collects the latest keirin articles from the feeds and APIs of KEIRIN.JP, newspapers, JKA-related sites and the official sites of 31 velodromes. It shares its design with autorace-news-collector, and supports filtering by source and returning fetch failures separately |
|
| ↳ shimomo/keirin-news A site for browsing the headlines collected by keirin-news-collector above, mostly racer news, one page per day, in three rows: newspapers and media, official bodies, and velodrome announcements. Sources that block GitHub Actions IPs with 403 are read through RSS instead (site) |
|
| shimomo/winticket-keirin-columns An unofficial Chrome extension for reordering and hiding columns in WINTICKET's keirin race cards. It can move the "memo" column, which tends to be hidden off to the right, next to the racer names. It only rearranges the table already on the page and sends no extra requests |
| Repository | Tech Stack |
|---|---|
| shimomo/ses-filter A Chrome extension that collapses SES (contract staffing) and dispatch jobs, with the reason shown, in the search results of Japanese engineering job sites (paiza, Green, doda, Mynavi Tenshoku, Rikunabi NEXT). The rules are tuned by measuring precision and recall against saved search results and their correct labels (store / article) |
|
| shimomo/tech-trends A site that gathers the most popular web and AI items from GitHub Trending and Zenn every morning and puts them on one page. Compared with the previous day's record, it marks items that are rising fast or appearing for the first time (site) |
|
| shimomo/lapras-portfolio A setup that publishes a terminal-style portfolio page to GitHub Pages every morning from the public LAPRAS API. Fork it and change the ID in config.json to use it, and pick up my fixes with Sync fork (site) |
|
| shimomo/quadview A tool for watching up to four YouTube videos or live streams side by side on one screen. Swapping slots doesn't stop the other videos, and with presets (JSON) and your own YouTube Data API key, it finds today's streams on a channel and fills the slots (site) |
|
| shimomo/narikiri A CLI that syncs the ngrok URL, which changes every time ngrok starts, to a Stripe webhook endpoint (available through Homebrew) |
I check how new features and tools behave in reproducible local environments, then write articles from the logs. The articles are written in Japanese on Zenn, and the links open Zenn's AI-translated English version.
| Repository | Tech Stack |
|---|---|
| shimomo/lab-php86-clamp A test environment for clamp(), new in PHP 8.6, checked with the official 8.6.0RC2 Docker image. It records what changes when replacing max(min()), such as no type juggling and a ValueError on empty arrays, how existing user-defined clamp() functions are affected, and how it differs from the polyfill (article) |
|
| shimomo/lab-laravel-vet A test environment for laravel/vet (v0.2.1), which reviews Composer dependency updates using the diff and an AI agent, checked with a fake malicious package served locally. It records what it stops and what it doesn't, such as a version that only changes files outside autoload passing with PASS because their contents never reach the agent (article) |
| Organization | Role |
|---|---|
| boatraceopenapi | The core project that turns boatrace data into a public API. Most of my work happens here |
| turnmark | The scrapers behind the public APIs, and the stability-first API |
| boatracevibeproject | A playground built on vibes and momentum, for prototypes and small libraries |
| autorace | Scraping and analysis for autorace |
- Web: shimomo.net
- Email: github@shimomo.net
- Bluesky: @shimomo.net




