← Work
MVP2025 - 2026 · Solo Builder· Started(First Commit date)
TransLoop
Double translation 학습 루프를 도구로 만든 외국어 학습 앱 - 원문을 외국어로 번역하고, 며칠 뒤 자기 번역을 다시 모국어로 역번역해 의미 손실을 비교.
- FastAPI
- React
- OpenAI
- Language Learning
스크린샷
프로젝트 목록 - 학습 주제별로 진도(EN→KO 비율)와 상태(active·draft·completed)를 한 화면에
프로젝트 생성 - 이름·설명·원문/번역 언어만 정하면 학습 단위가 만들어진다
프로젝트 안 - 텍스트 카드마다 난이도(Difficulty)와 직전 점수(Score) 노출, "Practise" 한 번으로 입장
Phase 2 - 자기 번역을 다시 원문 언어로 역번역하면서 의미 손실을 직접 본다
Result - 번역(82)·역번역(85) 두 점수를 함께 보여줘 "어디서 의미가 빠졌는지"가 비교된다
AI 피드백 - Strengths·Improvements·Hints·역번역에 보존된 표현까지 항목별로 정리
Setup
- Context
외국어 학습에서 잘 알려진 "double translation" 기법(원문 → 외국어 → 모국어 역번역으로 의미 손실을 자기 점검)을 한 도구로 묶음. 2025년에 처음 시작했다가 멈췄고, 다시 풀스택 구조를 잡아 재시동 중.
Build
- What I did
- Backend - FastAPI + SQLAlchemy 2.0 async + Pydantic v2 + OpenAI, alembic 마이그레이션
- Frontend - Vite + React 19 + Tailwind v4 + shadcn + TanStack Query, access/refresh 토큰 인증
- 배포 - 백엔드 Render + Neon Postgres, 프런트 Cloudflare Pages
- Product decisions
- "정답 비교"가 아니라 "자기 번역과 원문의 차이"를 학습 신호로 - 정오답 채점보다 의미 손실을 본인이 보게 만드는 게 학습 깊이를 만든다
- 토큰은 localStorage + 401 시 1회 자동 갱신 후 /login 리디렉션 - 학습 도중 끊김을 최소화
- QA considerations
- access/refresh 토큰 흐름 - 401 시 1회 자동 갱신이 무한 루프 없이 정확히 한 번만 돌고 실패 시 /login으로 안전히 떨어지는가
- 며칠 뒤 역번역이라는 시간차 학습 루프에서 원문·1차 번역·역번역 상태가 어긋나지 않고 이어지는가
- OpenAI 채점 응답이 비정형이거나 실패해도 학습 진행이 막히지 않고 degrade하는가
- 의미 손실 비교가 학습 신호의 전부이므로, AI가 짚는 "어디서 의미가 빠졌는지"가 실제 손실과 어긋나지 않는가(신호 정확도)
- 번역·역번역 두 점수(82·85)가 같은 입력에 재현 가능하고 임의로 흔들리지 않아 학습자가 점수 변화를 신뢰할 수 있는가
- 2025년에 멈췄다 2026년 풀스택으로 재시동하는 과정에서 기존 학습 데이터(프로젝트·텍스트·기록)가 유실 없이 이어지는가
- Tech stack
- FastAPI
- Python
- SQLAlchemy 2.0 (async)
- Pydantic v2
- OpenAI
- React 19
- TypeScript
- Vite
- Tailwind v4
- TanStack Query