BACKEND ENGINEER · TOKYO · INDEPENDENT PROJECTS

Careful backends,
useful tools.

I’m Li Jiajun, a Go and Python engineer in Tokyo. After five-plus years running security and monitoring backends, I now build and run two Japanese-learning apps, made for my own JLPT N2 study.

Tokyo · Go, Python, Rust · JLPT N2 (2026)

A look inside the learning experience
Tanuki WordsVocabulary
Tanuki Words study view with a Japanese word, reading, example sentence, and audio controls
HummingBirdListening
HummingBird marked sentences with furigana, explanations, and a waveform player

Screenshots · capture dates listed with each product

Two ways into the same language.Read with contextListen with intentionReturn through review

01 / VOCABULARY & RECALL

Give every new word somewhere to stay.

A calm workspace for Japanese vocabulary. Choose a book, learn words with their readings and example sentences, then return to the ones that need another look.

  1. 01

    A bookshelf with a next step

    Continue studying or start a focused review from the same book. Keep the material and the task connected.

  2. 02

    Words you can read and hear

    Furigana, meanings, example sentences, and audio sit together in the study view.

  3. 03

    Review with a clear scope

    Mark words as known or flagged, and revisit eligible words through scheduled review.

RustReactSQLiteSpaced review
Open words.kashunli.com

02 / LISTENING & UNDERSTANDING

Stay with the sentence. Hear it click.

A listening workspace that lets you work one sentence at a time. Follow the transcript, replay a difficult line, and use explanations to connect what you hear with what it means.

  1. 01

    Find your place in the audio

    Line-by-line transcripts and waveform playback keep the sound connected to the sentence.

  2. 02

    Make room for another listen

    Use continuous or manual practice, with repeat and pause settings that match your pace.

  3. 03

    Keep the lines that challenge you

    Mark difficult sentences, revisit them together, and return to the original passage for context.

RustReactSQLiteSentence audio
Open listening.kashunli.com

A SHARED LEARNING RHYTHM

Small steps.
Something that stays.

01

Meet it in context.

Read a word with its example. Hear a sentence within its passage.

02

Give it your attention.

Replay, check the meaning, and mark what needs more practice.

03

Come back to it.

Use each app’s review flow to revisit what you have studied.

BEHIND THE TOOLS

A thoughtful interface.
A practical foundation.

Both projects pair a React interface with a Rust service and SQLite storage. The engineering follows the learning experience: precise playback, clear study state, and content that can be maintained separately.

Content and progress have different homes.

Published learning material is kept separate from account and study data. Content preparation happens in dedicated pipelines, while the apps serve the learner experience.

Audio belongs to the learning flow.

Tanuki Words serves book-scoped audio. HummingBird reuses passage audio with line timing and byte-range streaming, so sentence practice does not require a separate audio file for every line.

Start simply. Keep your place.

Both apps support browser-held progress for guests and account-backed study state when signed in. Shared review rules help keep scheduling behavior consistent across the two projects.

ABOUT ME

A backend engineer,
and a Japanese learner.

I’m a backend engineer who worked in Shenzhen and now lives in Tokyo. For more than five years I built and ran backend systems in Go and Python: a host-security platform watching about 100,000 servers at OPPO, and device-monitoring middleware before that.

After leaving OPPO in April 2024, I took a planned career break to teach myself Rust, React, and Japanese, then moved to Tokyo in October 2025 to study at a language school. Tanuki Words and HummingBird are the study tools I wished existed while preparing for JLPT N2, which I passed in 2026.

I build with AI coding agents and review the architecture, security, and release behavior myself. In every project I care about where the data comes from, how it is validated, and how a bad release is rolled back.

Based in
Tokyo, Japan
Core stack
Go, Python, MySQL, Redis, Kafka · Rust, React, SQLite
Languages
Mandarin (native) · English (professional) · Japanese (JLPT N2)

RESUME

Backend Engineer
(Go, Python)

Tokyo, Japan · [email protected] · github.com/kashunli

Professional summary

Backend engineer with 5+ years of production experience in Go and Python, mainly on security platforms at OPPO, including 1-2 years as the sole backend engineer of a host-security platform monitoring about 100,000 servers. Experienced in service ownership, incident response, and replacing legacy Java services with Go. Now based in Tokyo (JLPT N2), building and running two language-learning services with an AI-assisted, personally reviewed workflow.

Technical skills

Backend
Go, Python, microservices, gRPC, Protocol Buffers, REST APIs
Data and systems
MySQL, Redis (Lua scripting), Kafka, MongoDB, Linux, TCP/IP, MQTT
Operations
Docker, Kubernetes, Prometheus, Grafana, pprof, Git, CI/CD
Independent development (AI-assisted)
Rust, Axum, React, TypeScript, SQLite, Android/WebView

Professional experience

Independent Developer

Self-directed development

May 2024 – Present · Tokyo, Japan since Oct 2025

Began a planned career break after OPPO with self-study in Rust, React, and Japanese, then relocated to Tokyo for language school. Since 2025, built and deployed two study services for personal JLPT N2 preparation (passed in 2026), turning printed books and exam audio into web, Android, and Anki study tools.

  • Tanuki Words (N2 Vocabulary, 2025 – present): study service unifying six JLPT vocabulary books, merging 10,103 book entries into 7,450 items while keeping each book’s examples and source. Audio-backed word and sentence cards, review scheduling, and Anki export.
  • HummingBird (N2 Listening Practice, 2026 – present): listening service with waveform, line-level, and passage replay over 935 items and 17,000+ timed transcript segments. Learner accounts use Argon2id hashing, hashed sessions, HttpOnly/SameSite cookies, and CSRF protection.
  • Built both on Rust/Axum APIs, React/TypeScript clients, and SQLite, with Android packaging. Python/FFmpeg and OCR/ASR-assisted pipelines turn PDFs and audio into validated study data, published with rollback checks.
  • Developed with AI coding agents (OpenAI Codex, Anthropic Claude) for exploration, implementation, debugging, and testing, with personal review of architecture, security, final changes, and release behavior.

OPPO Mobile Telecommunications Corp., Ltd.

Backend Engineer, Security and Privacy Department

Oct 2020 – Apr 2024 · Shenzhen, China

  • Took over and ran the backend of an internal host-security (HIDS) platform monitoring approximately 100,000 production physical servers. Sole backend engineer on a 6-person team for roughly 1-2 years, then one of its maintainers.
  • Owned host online/offline state, task-result processing, policy configuration, Kafka processing, scheduled jobs, deployment, monitoring, and on-call incident response, working directly with host-agent developers and downstream service teams.
  • Fixed a database write bottleneck: per-host status reports had pushed MySQL to its write limit. Moved live CPU, memory, and open-port state into Redis keyed by agent with TTL expiry, and flushed snapshots to MySQL on a controlled schedule.
  • Designed a Redis/Lua claim so that only one node of a multi-node group runs each recurring job, at intervals from one minute to several hours: a Lua script atomically checks and advances the next trigger time.
  • Diagnosed a production service that stopped on its own: pprof showed goroutines accumulating behind one trigger function. Added deadlines and automatic release to the data-processing path, which resolved it.
  • Covered changes with test cases, running database-related tests against a real database rather than mocks, and took part in peer code review.
  • Took over a legacy Java Security Operations Center backend after its maintainer left and replaced it incrementally with Go. It serves host status, vulnerability, and security-event data to the security operations team. Kept API responses and the MySQL schema identical behind an nginx-like dispatch layer, and retired Java once the Go service ran without new errors.
  • Rebuilt a nearly unused Java APK-hardening service in Go as the sole backend engineer, adding the APIs, task tracking, and observability it lacked. Designed the gRPC API that internal CI/CD calls automatically; implemented upload, queued tasks, one Linux process per task, timeout kill, failure records, downloads, and manual retry. Still in production at departure.
  • Introduced Prometheus metrics and Grafana dashboards for scheduled-job status, task success/failure, Kafka lag, request rate, and error rate.

Shenzhen Digitalor Technology Co., Ltd.

Python Programmer / Backend Engineer

Mar 2019 – Sep 2020 · Shenzhen, China

  • Developed Go middleware connecting monitoring sensors and controllers to an operations platform through TCP, MQTT, and HTTP/JSON. Covered device onboarding, ingestion, state management, caching, and event delivery.
  • Built most application software for an embedded Linux controller, excluding hardware drivers: RS485 communication, real-time processing, REST APIs, WebSocket updates, and configuration/user interfaces using Python, Tornado, and Vue.js, with serial polling kept independent of the web/API layer.
  • Built a reusable Go data-synchronization service for a Guosen Securities deployment, mapping customer CMDB data into the monitoring platform using concurrent multi-table reads/writes and controlled goroutine execution.
  • Separated ingestion from downstream processing using Redis and asynchronous messaging, with idempotent processing as a design goal. Learned Go on the job after joining as a Python programmer.

Earlier experience

China Progress Freight Forwarding Co., Ltd.

Overseas Business Development / Python Automation

Mar 2017 – Feb 2019 · Shenzhen, China

  • Worked in overseas business development, logistics, and marketing. Used self-taught Python (Scrapy, Flask, PostgreSQL) for web scraping and data cleaning, organizing public prospect information and building internal lead-management and logistics-inquiry tools.

Bedmate Furniture International

Logistics Coordinator

Jun 2014 – Jun 2016 · Lagos, Nigeria

  • Coordinated China-to-Nigeria raw-material imports among suppliers, banks, ports, customs-clearance agents, and internal teams. Handled import forms and certificates, tax and payment paperwork, and shipment follow-up in an English-only workplace.

Education

The Toa Language Institute, The Kazankai Foundation

Japanese Language Studies

Oct 2025 – Expected Mar 2027 · Tokyo, Japan

Qingdao University

Bachelor of Science in Chemistry

Sep 2009 – Jun 2013 · Qingdao, China

Languages

Mandarin Chinese: native. English: professional working proficiency, including two years in an English-only workplace; TOEFL iBT 108/120 (personal best). Japanese: JLPT N2 (passed 2026).

Availability

Based in Tokyo. Current residence status: Student. Available for full-time employment after approval of a change to an appropriate work status.

CONTACT

Let’s talk about
building something dependable.

Back to the beginning