Skip to content
View shimomo's full-sized avatar
🌴
On vacation
🌴
On vacation

Block or report shimomo

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Content in all repositories owned by your account will be closed.
Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
shimomo/README.md

Hi there! 👋

English | 日本語

🙋‍♂️ About Me

  • 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

💻 Skills

php phpunit psalm composer laravel cakephp go javascript typescript jest vitest vue.js react next.js vite python pytest docker actions pages codecov stripe


🚤 Boatrace

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.

🌐 Public APIs

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)
php phpunit psalm actions pages
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)
php phpunit psalm actions pages

📦 Libraries

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
php phpunit psalm actions
shimomo/boatrace-php
boatrace/*, 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
php phpunit psalm actions

📊 Using the Data

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)
typescript react vite vitest actions pages
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)
php actions pages
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)
typescript next.js react jest codecov actions pages
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)
javascript actions pages

🏍️ Autorace

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)
php laravel vue.js typescript actions
autorace/tokyo-sports-scraper
A scraping library for autorace information from Tokyo Sports (PyPI: autorace-tokyo-sports-scraper)
python pytest actions
shimomo/autorace-news-collector
shimomo/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
php phpunit psalm actions
↳ 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)
php phpunit psalm javascript actions pages

🚴 Keirin

Repository Tech Stack
shimomo/keirin-news-collector
shimomo/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
php phpunit psalm actions
↳ 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)
php phpunit psalm javascript actions pages
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
javascript

🧰 Tools

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)
typescript vitest
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)
typescript vitest actions pages
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)
typescript vitest actions pages
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)
javascript actions pages
shimomo/narikiri
A CLI that syncs the ngrok URL, which changes every time ngrok starts, to a Stripe webhook endpoint (available through Homebrew)
go stripe

🧪 Experiments and Articles

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)
php docker
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)
php composer python

🏢 Organizations

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

📫 Contact

Pinned Loading

  1. boatraceopenapi/api boatraceopenapi/api Public

    A project for publishing a boatrace API with GitHub Actions and GitHub Pages. / GitHub Actions と GitHub Pages を利用してボートレース(競艇)の API を公開するプロジェクト

    PHP 5

  2. boatraceopenapi/programs boatraceopenapi/programs Public

    [Deprecated] A project for publishing a boatrace API with GitHub Actions and GitHub Pages. / GitHub Actions と GitHub Pages を利用してボートレース(競艇)の API を公開するプロジェクト

    PHP 9

  3. boatraceopenapi/previews boatraceopenapi/previews Public

    [Deprecated] A project for publishing a boatrace API with GitHub Actions and GitHub Pages. / GitHub Actions と GitHub Pages を利用してボートレース(競艇)の API を公開するプロジェクト

    PHP 2 1

  4. boatraceopenapi/results boatraceopenapi/results Public

    [Deprecated] A project for publishing a boatrace API with GitHub Actions and GitHub Pages. / GitHub Actions と GitHub Pages を利用してボートレース(競艇)の API を公開するプロジェクト

    PHP 10 3