{"id":51842148,"url":"https://github.com/fs-frost/yomigaeru","last_synced_at":"2026-07-23T07:01:30.492Z","repository":{"id":372751538,"uuid":"1309523075","full_name":"FS-Frost/yomigaeru","owner":"FS-Frost","description":null,"archived":false,"fork":false,"pushed_at":"2026-07-23T04:48:31.000Z","size":385,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-07-23T06:09:51.419Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://fs-frost.github.io/yomigaeru/","language":"Svelte","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/FS-Frost.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-07-23T04:41:26.000Z","updated_at":"2026-07-23T04:48:24.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/FS-Frost/yomigaeru","commit_stats":null,"previous_names":["fs-frost/yomigaeru"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/FS-Frost/yomigaeru","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FS-Frost%2Fyomigaeru","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FS-Frost%2Fyomigaeru/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FS-Frost%2Fyomigaeru/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FS-Frost%2Fyomigaeru/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/FS-Frost","download_url":"https://codeload.github.com/FS-Frost/yomigaeru/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/FS-Frost%2Fyomigaeru/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35793062,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-07-20T02:08:10.276Z","status":"online","status_checked_at":"2026-07-23T02:00:06.683Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-07-23T07:01:28.532Z","updated_at":"2026-07-23T07:01:30.478Z","avatar_url":"https://github.com/FS-Frost.png","language":"Svelte","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 蘇 Yomigaeru\n\nPWA estática tipo Anki para aprender japonés, con SRS (repetición espaciada) e integración de IA multimodal (Gemini). **Offline-first**: todo se guarda en el navegador (IndexedDB) y funciona sin conexión una vez cargada.\n\n\u003e _yomigaeru_ (蘇る): \"revivir / resurgir\" — la memoria que vuelve.\n\n## Características\n\n- **Estudio SRS** con [ts-fsrs](https://github.com/open-spaced-repetition/ts-fsrs) (algoritmo FSRS). Botones Repetir / Difícil / Bien / Fácil con previsualización de intervalos.\n- **Furigana** con notación estilo Anki: `漢字[かんじ]` → renderizado `\u003cruby\u003e`.\n- **TTS** en japonés (`ja-JP`) vía Web Speech API; voz configurable.\n- **Mazos y tarjetas**: CRUD completo, imagen de contexto opcional.\n- **IA (Gemini)**:\n  - Generar tarjeta desde texto.\n  - Foto/captura → tarjetas (multimodal, con compresión de imagen en cliente).\n  - Juez de producción: escribes tu respuesta y la IA la evalúa.\n  - Desglose gramatical de la oración (cacheado por tarjeta).\n- **Backup**: exportar / importar toda la base de datos (JSON, vía `dexie-export-import`).\n- **PWA**: service worker offline-first, almacenamiento persistente (`navigator.storage.persist()`), instalable.\n\n## Stack\n\n| Área | Tecnología |\n|------|-----------|\n| Framework | SvelteKit + Svelte 5 (runes) |\n| Build | Vite 8 |\n| Estilos | Tailwind CSS 4 |\n| DB local | IndexedDB vía [Dexie.js](https://dexie.org) |\n| SRS | ts-fsrs |\n| IA | `@google/genai` (Gemini) |\n| Validación | Zod |\n| Runtime/PM | [Bun](https://bun.sh) |\n| Adapter | `adapter-static` → GitHub Pages |\n\n## Requisitos\n\n- [Bun](https://bun.sh) (última versión).\n- API key de Gemini ([aistudio.google.com](https://aistudio.google.com/apikey)) — se ingresa en **Ajustes** y se guarda solo en tu navegador. No se envía a ningún servidor propio.\n\n## Desarrollo\n\n```bash\nbun install\nbun run dev        # servidor local (PORT=5000 por defecto)\n```\n\n| Comando | Qué hace |\n|---------|----------|\n| `bun run dev` | Servidor de desarrollo |\n| `bun run build` | Build de producción a `build/` |\n| `bun run preview` | Previsualiza el build |\n| `bun run check` | `svelte-kit sync` + `svelte-check` (typecheck) |\n| `bun run format` | Prettier escribe |\n| `bun run lint` | Prettier verifica |\n\n\u003e El service worker **solo** se construye en `build` (no en dev).\n\n## Estructura\n\n```\nsrc/\n  lib/\n    db/         # Dexie: schema, decks, cards, settings, backup\n    gemini/     # cliente + funciones IA (generateCard, imageToCards, judge, grammar) + schemas\n    srs/        # fsrs.ts (wrapper ts-fsrs), queue.ts (tarjetas vencidas)\n    media/      # tts.ts (Web Speech), image.ts (compresión canvas)\n    gui/        # componentes Svelte reutilizables + nav/\n    state/      # app.svelte.ts (estado global runes: ajustes + toasts)\n    furigana.ts # parser 漢字[かんじ] -\u003e segmentos ruby\n    pwa.ts      # persistencia + registro del SW\n  routes/       # +page (inicio), estudio, mazos, crear, foto, ajustes\n  service-worker.ts\n```\n\n### Modelo de datos (IndexedDB / Dexie v1)\n\n- `decks` — mazos.\n- `cards` — tarjetas (`front` con furigana, `back` español, `reading`, `context`, `imageBlob`, `grammar` cacheado).\n- `fsrsData` — estado de programación FSRS por tarjeta (`due`/`last_review` como epoch ms; índice `[state+due]`).\n- `reviewLogs` — historial de repasos.\n- `settings` — clave/valor (`apiKey`, `geminiModel`, `ttsVoiceURI`, `requestRetention`).\n\n## Despliegue\n\nPush a `main` dispara GitHub Actions ([.github/workflows/main.yml](.github/workflows/main.yml)): `check` → `build` con `BASE_PATH=/yomigaeru` → deploy a la rama `gh-pages`.\n\nPara servir bajo otra ruta, ajusta `BASE_PATH` (debe coincidir con el nombre del repo).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffs-frost%2Fyomigaeru","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffs-frost%2Fyomigaeru","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffs-frost%2Fyomigaeru/lists"}