Skip to content

Latest commit

 

History

113 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TANREN logo

TANREN

Train until it comes naturally.

생각하지 않아도 나올 때까지 단련해요.

A local-first language trainer for Korean learners.
한국어 사용자를 위해 만든 로컬 우선 언어 학습 도구예요.

Current target language: Japanese · 현재 목표 외국어: 일본어
Native language: Korean · 현재 모국어: 한국어


단어를 봤을 때 “아, 이거 아는데”에서 끝나지 않게.

TANREN은 필요한 순간에 바로 꺼낼 수 있을 때까지 반복해요.

읽고, 쓰고, 듣고, 피치를 구별해요. 내가 외웠다고 직접 판단할 필요도 없어요. 답하면 TANREN이 채점하고, 틀린 건 다시 돌아와요.

TANREN helps you move beyond “this looks familiar.” You read, write, listen, and recall — until the answer comes out when you need it.


Don’t recognize it. Recall it. | 알아보는 것보다, 꺼내는 연습

The goal is simple: don’t just recognize a word. Make sure you can retrieve it yourself.

  • Reading — See the expression and recall its meaning.
  • Writing — See the Korean meaning and produce the target expression.
  • Listening — Hear it, identify it, and recover the meaning.
  • Pitch — Reinforce Japanese lexical pitch patterns as you study.

The question types are mixed so the same word cannot always be memorized through the same cue.


단어장을 오래 봤는데 막상 말하려면 생각이 안 날 때가 있어요.

그래서 TANREN은 보여주는 것보다 직접 떠올리게 하는 것에 집중했어요.

  • 읽기 — 표현을 보고 뜻을 떠올려요.
  • 쓰기 — 한국어 뜻을 보고 목표어를 직접 써요.
  • 듣기 — 소리만 듣고 표현과 뜻을 복원해요.
  • 피치 — 일본어 피치 패턴도 함께 익혀요.

문제 유형은 섞여서 나와요. 같은 단어라도 매번 같은 방식으로 외울 수 없게 만들었어요.


Just answer. TANREN grades it. | 그냥 답하면 돼요

“Was that close enough?” is not something you should have to decide after every card.

TANREN does not rely on exact string matching alone. Local semantic models and deterministic rules work together so answers can be accepted when they actually mean the same thing, even when the wording is different.

Answers that merely look related should not automatically pass. For words with multiple meanings, each meaning is evaluated separately so TANREN can show what you covered and what you missed.

Your own decisions on ambiguous edge cases are remembered, so the same answer does not have to be judged from scratch every time.


“이건 거의 맞았나?”

그걸 매번 직접 판단하는 것도 꽤 피곤해요.

TANREN은 정답 문자열만 비교하지 않아요. 로컬 의미 모델과 규칙 기반 채점을 함께 사용해서 표현이 달라도 실제 뜻이 같으면 인정해요.

너무 멀리 간 답까지 전부 맞다고 처리하지도 않아요. 비슷해 보이는 것과 실제로 같은 뜻인 건 구분하려고 해요.

다의어도 하나로 뭉뚱그리지 않아요. 뜻마다 따로 보고, 어떤 뜻을 맞혔고 어떤 뜻을 놓쳤는지 확인할 수 있어요.

내가 직접 확정한 예외 판정도 기억해요. 같은 애매한 답을 매번 다시 판단하지 않아도 돼요.


Audio is ready before you need it. | 음성은 알아서 준비해요

Add Japanese vocabulary and TANREN prepares reading analysis, lexical pitch information, and synthesized audio in the background.

You do not have to search for recordings, check pronunciation separately, or attach audio to every card yourself.

TANREN uses a local Japanese analysis pipeline and VOICEVOX-based speech generation. Multiple voice profiles are supported too, so listening practice does not have to sound like one identical recording forever.


단어마다 음원을 찾고, 발음을 확인하고, 피치를 따로 찾아보는 건 귀찮아요.

일본어 항목을 추가하면 TANREN이 읽기, 피치, 음성을 백그라운드에서 준비해요.

단어마다 발음을 찾고 음원을 직접 넣지 않아도 돼요.

VOICEVOX 기반 여러 음성 프로필도 사용할 수 있어요. 매번 똑같은 녹음 하나만 듣는 느낌도 줄였어요.


Study in rounds. Keep only the misses. | 틀린 것만 남기면서 돌려요

TANREN uses rounds instead of making you manage another complicated scheduling system.

The study range grows in 50-entry steps, with a cumulative review every 500 entries.

Get an item right and it leaves the current round. Miss it and it stays. Finish the round, go again, and keep narrowing the list until only the things you still do not know remain.

No need to rate every card as “Again,” “Hard,” or “Good.” Your actual answer is the signal.


TANREN은 복잡한 스케줄표 대신 회독을 사용해요.

50개씩 범위를 넓히고, 500개마다 누적 총복습을 해요.

한 바퀴에서 맞힌 문제는 빠져요.

틀린 문제는 남아요.

다 돌면 다시 시작해요.

그러다 보면 결국 남는 건 아직 안 외워진 것뿐이에요.

스케줄을 관리하는 것보다 그냥 한 바퀴 더 도는 쪽에 가깝게 만들었어요.


Less setup. More studying. | 설정하는 시간은 줄였어요

A study tool should not become another thing you have to manage.

TANREN keeps the loop short: answer, review, continue. Fast transitions, keyboard-first controls, focused answer review, and lightweight feedback keep the session moving.

No self-rating after every card. No need to stop and decide how difficult something felt.


학습 앱을 잘 쓰기 위해 학습 앱 사용법부터 공부하고 싶진 않잖아요.

TANREN은 공부 흐름을 최대한 짧게 가져가요.

빠르게 넘어가고, 키보드로 계속 진행하고, 정답 화면에서는 지금 필요한 정보만 보여줘요.

문제를 풀고, 확인하고, 바로 다음 문제로 가요.

그게 전부여도 충분하게 만들고 있어요.


See how you actually study. | 공부한 만큼 보여줘요

TANREN tracks actual practice instead of reducing progress to a single streak number.

You can see attempts, studied vocabulary, problem accuracy, pitch accuracy, response time, study time, and mode-level history.

The point is not to turn every action into a score. It is to make progress — and persistent weak spots — easy to see.


연속 출석 숫자 하나만 보고 싶진 않았어요.

그래서 TANREN은 실제 학습 기록을 남겨요.

시도 횟수, 학습한 단어, 문제 정확도, 피치 정확도, 응답 시간, 공부 시간, 문제 유형별 기록을 볼 수 있어요.

잘하고 있는 건 잘하고 있다고.

계속 틀리는 건 계속 틀리고 있다고.

그 정도는 바로 보여야 하니까요.


Your vocabulary stays yours. | 내 단어장은 내 PC에

TANREN is local-first.

Your decks, attempts, study state, statistics, Japanese analysis, pitch metadata, and generated audio stay on your machine.

Semantic grading and Japanese enrichment are also designed around local runtimes, so normal study does not depend on a permanent cloud service.

Portable export preserves more than a plain word list. Deck settings, entries, aliases, stage state, attempts and statistics, typing and grading state, Japanese analysis, pitch/audio metadata, and related local journal data can travel with the deck.


TANREN은 로컬 우선이에요.

단어장, 학습 기록, 회독 상태, 통계, 일본어 분석, 피치 정보, 생성된 음성까지 로컬에 저장해요.

의미 채점과 일본어 분석도 평소 학습에서는 상시 클라우드 서비스가 필요하지 않아요.

Portable 내보내기도 단순한 단어 목록보다 더 많이 담아요.

덱 설정, 항목, 별칭, 회독 상태, 시도 기록, 통계, 타이핑·채점 상태, 일본어 분석, 피치와 음성 메타데이터, 관련 로컬 저널까지 함께 옮길 수 있어요.


Bring the words you want to learn. | 내가 외우고 싶은 걸 넣어요

Already have a word list? Bring it with you.

TANREN supports TSV, CSV, pasted text, UTF-8 BOM, LF/CRLF, and quoted CSV input.

An expression and its meaning are enough to start. Reading can be supplied when needed, and multiple meanings can be separated with /.

Malformed rows are reported without discarding the valid ones. Exact duplicate entries are not stored twice, and new entries keep a stable position after existing entries.


이미 가지고 있는 단어장이 있다면 그대로 가져오면 돼요.

TSV, CSV, 붙여넣기 텍스트, UTF-8 BOM, LF/CRLF, quoted CSV를 지원해요.

기본적으로 표현과 뜻만 있으면 시작할 수 있어요. 읽기는 필요할 때 직접 넣을 수 있고, 여러 뜻은 /로 나눌 수 있어요.

형식이 잘못된 행이 있어도 정상 항목까지 전부 버리지 않아요. 완전히 같은 항목은 중복 저장하지 않고, 새 항목의 순서도 기존 항목 뒤에서 안정적으로 유지해요.


Korean first. More languages later. | 지금은 한국어 사용자에게 집중해요

TANREN is currently designed first for Korean native-language users, including the interface, answer experience, and semantic grading pipeline.

Rather than claiming broad multilingual support with uneven quality, TANREN is focusing on making the Korean experience feel complete first.

Additional native-language interfaces and native-language support may be added if there is enough user demand.


TANREN은 현재 한국어 사용자에게 가장 좋은 경험을 주는 것을 먼저 하고 있어요.

UI도 한국어, 답변 경험도 한국어, 의미 채점도 한국어를 기준으로 설계했어요.

처음부터 모든 모국어를 얕게 지원하기보다, 한국어 환경을 먼저 제대로 만들고 싶었어요.

영어 같은 추가 모국어 UI와 네이티브 다국어 지원은 요청이 충분히 많아지면 추가할 예정이에요.


Japanese now. English and French next. | 목표 외국어도 늘릴 거예요

Japanese is the current target language and receives TANREN's deepest language-specific support.

Once the Japanese learning experience is mature enough, English, French, and other target languages are planned for future versions.

The goal is not to collect language badges. A new language should be added when it can receive a learning experience that still feels like TANREN.


지금은 일본어에 집중하고 있어요.

읽기 분석, 피치, 음성처럼 언어별로 깊게 만들어야 하는 기능이 많아서예요.

일본어 경험이 충분히 완성되면 영어와 프랑스어 같은 목표 외국어도 추가할 예정이에요.

지원 언어 숫자만 늘리는 건 목표가 아니에요.

추가한다면 그 언어도 TANREN답게 공부할 수 있을 때 추가하려고 해요.


Platform | 플랫폼

TANREN is currently available as a Windows desktop application.

  • Windows 10/11 x64
  • Node.js + npm — required for development only.
  • Rust stable MSVC toolchain — required for development only.
  • Python 3 — required only when building the bundled language sidecar. An installed app does not require a Python environment.

지금은 Windows에서 사용할 수 있어요.

  • Windows 10/11 x64
  • Node.js + npm — 개발할 때만 필요해요.
  • Rust stable MSVC toolchain — 개발할 때만 필요해요.
  • Python 3 — language sidecar를 빌드할 때만 필요해요. 설치된 앱을 실행할 때는 필요하지 않아요.

Development | 개발

Run TANREN from Sources.

cd Sources
npm ci
npm run sidecar:build
npm run dev

Build frontend production assets with npm run build.

Build the Rust backend with cargo build --manifest-path src-tauri\Cargo.toml.


Sources에서 실행해요.

cd Sources
npm ci
npm run sidecar:build
npm run dev

프런트엔드 production asset만 빌드하려면 npm run build를 사용해요.

Rust backend만 빌드하려면 cargo build --manifest-path src-tauri\Cargo.toml을 사용해요.


Testing | 테스트

Run the main automated test suites with:

cd Sources
npm test
cargo test --manifest-path src-tauri\Cargo.toml
npm run sidecar:test

The Windows input-profile smoke test temporarily changes the real keyboard profile, so it is excluded from the default Rust test run.

cargo test --manifest-path src-tauri\Cargo.toml windows_input_profile_smoke_restores_original_profile -- --ignored

주요 자동 테스트는 아래처럼 실행해요.

cd Sources
npm test
cargo test --manifest-path src-tauri\Cargo.toml
npm run sidecar:test

Windows input-profile smoke test는 실제 키보드 프로필을 잠시 바꿔요. 그래서 기본 Rust 테스트에서는 제외해뒀어요.

cargo test --manifest-path src-tauri\Cargo.toml windows_input_profile_smoke_restores_original_profile -- --ignored

Packaging | 패키징

Create the Windows package with:

cd Sources
npm run package

The pipeline builds the PyInstaller one-file language sidecar first and then creates the NSIS installer.

Output is written to Results\cargo-target\release\bundle\nsis.


Windows 패키지는 아래 명령으로 만들 수 있어요.

cd Sources
npm run package

PyInstaller one-file language sidecar를 먼저 만들고 NSIS installer를 생성해요.

결과물은 Results\cargo-target\release\bundle\nsis에 저장돼요.


Local Data | 로컬 데이터

By default, TANREN stores application data under Windows app-data.

  • Database: %APPDATA%\app.tanren.desktop\tanren.db
  • Audio cache: %APPDATA%\app.tanren.desktop\audio
  • Semantic / VOICEVOX runtime: %APPDATA%\app.tanren.desktop\semantic

The semantic/VOICEVOX runtime folder can be changed in Settings. The database and audio cache remain in app-data. TANREN_APP_DATA_HOME can be used for isolated testing or intentionally portable app-data operation.


기본 데이터는 Windows app-data 아래에 저장해요.

  • 데이터베이스: %APPDATA%\app.tanren.desktop\tanren.db
  • 음성 캐시: %APPDATA%\app.tanren.desktop\audio
  • Semantic / VOICEVOX 런타임: %APPDATA%\app.tanren.desktop\semantic

semantic/VOICEVOX runtime 폴더는 설정에서 바꿀 수 있어요. DB와 audio cache는 app-data에 유지돼요. 격리 테스트나 portable 운영이 필요할 때는 TANREN_APP_DATA_HOME으로 app-data 루트를 지정할 수 있어요.


Architecture | 아키텍처

TANREN uses React/Vite, Tauri, Rust, SQLite, a bundled Python language sidecar, local semantic models, and VOICEVOX.

Rust handles SQLite persistence, migrations, the study engine, grading orchestration, and Windows input-profile integration. The bundled Python sidecar performs Japanese analysis, while local semantic and VOICEVOX runtimes provide meaning evaluation and speech generation.

There is no cloud-sync layer yet. Mutations intended for future synchronization are recorded in a local journal.


TANREN은 React/Vite 프런트엔드와 Tauri 데스크톱 backend로 구성돼요.

Rust가 SQLite 저장소, migration, study engine, 채점 orchestration, Windows 입력 프로필 연동을 맡아요.

번들 Python sidecar는 일본어 분석을 담당하고, 로컬 semantic runtime과 VOICEVOX runtime이 의미 평가와 음성 생성을 맡아요.

아직 cloud sync layer는 없어요. 나중에 동기화할 수 있도록 필요한 mutation은 local journal에 기록하고 있어요.


Current Limitations | 현재 제한 사항

TANREN is still actively being developed.

  • Semantic models and the VOICEVOX runtime may require an initial download.
  • Listening requires generated audio for the selected entry.
  • Portable restore is intended for a fresh database and does not merge into an existing deck with the same UUID.
  • Installer signing and automatic updates are not included yet.
  • Native WebView scenarios still require manual acceptance testing in addition to core/unit tests.

아직 계속 만들고 있는 앱이에요. 지금은 몇 가지 제한이 있어요.

  • Semantic model과 VOICEVOX runtime은 처음 사용할 때 다운로드가 필요할 수 있어요.
  • 듣기 문제는 해당 항목의 음성이 준비되어 있어야 해요.
  • Portable restore는 같은 UUID를 가진 기존 덱에 합치지 않아요. 새 DB 복구용이에요.
  • Installer signing과 자동 업데이트는 아직 없어요.
  • Native WebView UI는 core/unit test와 별도로 수동 확인이 필요해요.

Keep studying. TANREN handles the rest. | 공부에만 집중할 수 있게

Spend less time managing the study system and more time actually recalling.

TANREN prepares what it can, grades what you answer, and brings the misses back.

Train until recall becomes automatic.


단어장 앱을 관리하는 데 시간을 쓰고 싶진 않았어요.

어떤 버튼을 눌러야 할지 고민하는 시간도 줄이고 싶었어요.

TANREN이 대신 준비하고, 채점하고, 틀린 걸 다시 가져올게요.

나는 그냥 답하면 돼요.

생각하지 않아도 나올 때까지 단련해요.

About

Train vocabulary until it comes naturally. A local-first active recall language trainer for Korean learners. 생각하지 않아도 나올 때까지 단련하는, 한국어 사용자를 위한 로컬 우선 능동 인출 언어 학습 도구.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Contributors

Languages