Frasea es una aplicación web (Next.js) que permite traducir texto, guardar un historial de traducciones y obtener frases de ejemplo mediante scraping (microservicio Rust). Está pensada para desarrolladores y usuarios que necesitan guardar y gestionar traducciones rápidas con contexto.
- Traducción de texto usando
@vitalets/google-translate-api. - Historial de traducciones por usuario (guardado en MongoDB).
- Guardar/editar/eliminar traducciones desde la UI.
- Scraper de frases de ejemplo (servicio
scrap-dictionaryen Rust) para obtener ejemplos de uso. - Autenticación básica con JWT y cookies HTTP-only.
- Frontend / Backend: Next.js 16 (App Router) + React 19
- Base de datos: MongoDB (imagen
mongo:6.0en docker-compose) - Autenticación: JWT (cookie
auth_token) - Scraper: Rust (Axum + reqwest + scraper)
- Contenedores: Docker + Docker Compose
- Lenguajes: TypeScript (frontend) y Rust (scraper)
- Construir y levantar todo con Docker Compose:
docker compose up --build- Accede a:
- App Next.js: http://localhost:3000
- Mongo Express: http://localhost:8081
- Servicio scrap-dictionary: http://localhost:3030
Nota: Docker Compose ya monta
my-app/.env.localy usa en el servicioMONGODB_URIcon credenciales de ejemplo definidas endocker-compose.yml.
El
Dockerfiledel frontend utiliza Bun (oven/bun) para construir y ejecutar la aplicación (vermy-app/Dockerfile).
Scripts principales (desde my-app):
bun run dev— desarrollobun run build— construir para producciónbun run start— iniciar producciónbun run lint— linting
Variables requeridas por el servidor (ver my-app/.env.example):
MONGODB_URI— URI para conectar con MongoDB (ejemplo:mongodb://root:example@mongo:27017/Frasea?authSource=admin)JWT_SECRET— Secreto para firmar tokens JWTJWT_EXPIRES_IN— Tiempo de expiración del JWT en segundos (e.g.3600)SCRAP_DICTIONARY_URL— URL del servicio scrap-dictionary (por defectohttp://localhost:3030)
-
POST
/api/translate- Descripción: Traduce texto.
- Payload:
{ text: string, from: string, to: string } - Respuesta:
{ originalText, from, to, translatedText }
-
GET
/api/languages- Descripción: Devuelve lista de idiomas (scrapeada de la doc de Google Translate).
- Respuesta:
{ languages: [{ name, code }, ...] }
-
Servicio Rust
scrap-dictionary:- GET
/translate/:source/:target/:word— Devuelve traducciones y ejemplos (200 / 404 / 502 según resultado). - GET
/health— Health check del servicio.
- GET
my-app/— Aplicación Next.js (frontend y API)my-app/.env.example— Ejemplo de variables de entornomy-app/Dockerfile— Dockerfile del frontendscrap-dictionary/— Microservicio Rust (scraper)mongo-init/init-db.js— Script que inicializa la BD con un usuario y datos de ejemplodocker-compose.yml— Orquestación de servicios para desarrollo