SELECTED WORK / 2 PROJECTS

What I built.
What I am still checking.

Where it is used, why it is designed this way, and evidence you can check. Introduced by the problem, not by a list of technologies. Every entry uses the same fields.

The guideline, exam guide and supplementary list behind the English-score certificate, with each document's role. Arrows show reference relations, not "submit all three".Public demo using saved samples. See each caption for the action and capture date.

PROJECT 01 / RAG / DOCUMENT RETRIEVAL

J-Grad Admission RAG

Turns graduate-admission guidelines into applicant guidance that cites the official page

Public demo · maintained · 2026-07 → 2026-10

  1. 01Find what you need inside the documents
  2. 02Check how each answer maps to its evidence
  3. 03Go back to the source and re-read the condition
Problem
Advisers at a study-abroad school re-check the same facts across shared and program-specific guidelines; handing it to an LLM loses the source.
My part & AI
Three principles were fixed at the start: facts and decisions live in code and the AI only puts them into words; "unknown" never becomes "no"; relations between documents are human-checked before use. Requirements, acceptance and course changes were mine; most code was written by Codex / Claude Code and verified by me against real data and regression tests.
Verification & limits
End-to-end runs on the real PDF, a regression gate on a fixed benchmark, browser acceptance on desktop and mobile. CI does not re-measure the model each run — the docs say so.
What I would change
Two things. The foundation was over-built, so a screen a user could walk through end to end came late; next time, a narrow but complete path first. And the process was too heavy for two schools and a few dozen users: seventeen decision records were written, seven were worth keeping. Next time, only decisions I never want to re-argue get a record.
A checkable number
Recall@10 0.8852 · MRR 0.8323
saved evaluation, 42 fixed queries, 391-entry KB (2026-09-24): how often the right evidence appears in the top 10 results, not answer accuracy
Stack
PythonFastAPIPyMuPDFBGE-M3BM25 / RRFPydanticpytestPlaywrightGitHub Actions
App screen from a TTS / fictional-document run; no recordings of people, no personal data (2026-10-28).Screens and video come from TTS audio or public fictional documents. Third-party trials and native-speaker review have not been conducted.

PROJECT 02 / JAPANESE LEARNING / CLAUDE SKILL + GPU

Japanese Speaking Coach

A Windows app for the moment you are mid-conversation in Japanese: furigana subtitles and replies you can say as they are; the recommended reply leads with its conclusion and can answer from your own course documents with a citation

In development (phase 2: subtitles, replies, document answers and review working) · 2026-10 →

  1. 01Read the subtitles — furigana only on the hard kanji
  2. 02Say the ⭐ reply as it is, starting from its bold conclusion
  3. 03Check answers drawn from your course documents, with their source

Inspect history and saved output separately from the main demonstration.

History and lookup

TTS 音声による再生・個人情報なし(2026-10-25、commit 3ba4bea)

Problem
Chinese speakers in Japan (N4–N2) cannot answer a clerk's keigo or a colleague's slang within seconds; textbooks that explain first do not help.
My part & AI
I designed the output format, the five-step politeness rule behind the ⭐ pick and the LLM-judge evaluation; Claude Code implemented the Skill and the subtitle app.
Verification & limits
Numbers come from TTS audio and text evaluations (speed n=10, replies 20 sentences × 2, 8 fictional document questions). The author used it on real videos and an 89-minute online class and fixed what broke (D-013–D-041). The latest version has not yet been checked in a real conversation; no third-party trial or native review yet.
What I would change
While another agent worked on it, optimising one metric ("never invent facts") filled the replies with blanks like 【参加できます/参加できません】, so they could no longer be said, and the evaluation measured a different prompt path from the real app. Next time: measure sayability with every change, on the same path as the real app.
A checkable number
2.21 s · 102/102 · 328 tests
last subtitle to reply suggestions p50 2.21 s (p95 2.50), speech recognition p50 0.25 s (RTX 5060, 10 TTS sentences); replies sayable as they are 102/102 (20 sentences × 2); 328 unit tests
Stack
Claude Skillfaster-whisper (large-v3-turbo)CUDAMeCab / fugashiDeepSeek APItkinterAnki export