Files
ai-translate-client/spec/prd.md
Julian Freeman 5abd514c1d first runnable
2026-02-22 16:30:45 -04:00

3.9 KiB

PRD: GemmaTrans Desktop Client

1. Project Overview

GemmaTrans is a lightweight, high-performance desktop translation client built with Tauri and Vue 3. It is designed to act as a modern frontend for the TranslateGemma model running on a local or remote Ollama instance (including over private networks like Tailscale). The application prioritizes speed, privacy, and a professional "Google Translate" aesthetic.


2. Technical Stack

  • Core Framework: Tauri (Rust backend for system-level API access).
  • Frontend Framework: Vue 3 (Composition API).
  • Styling: Tailwind CSS (Minimalist, modern utility-first CSS).
  • Package Manager: pnpm.
  • State Management: Pinia (To persist user settings and prompt templates).
  • Icons: Lucide Vue Next.

3. User Interface (UI) Requirements

The UI should be Modern, Minimalist, and Functional, mimicking the clean layout of Google Translate.

3.1 Main Translation Interface

  • Split-Pane Layout:
    • Left (Source): Input text area with a header for language selection.
    • Right (Target): Read-only text area for the translation result, with a header for the target language selection.
  • Language Selection: Dropdowns supporting both Full Name (e.g., English) and ISO Code (e.g., en).
  • Actions: * "Translate" button (with loading state).
    • "Copy" button on the target pane.
    • "Clear" button on the source pane.

3.2 Settings View

  • API Configuration: A text input for the Ollama API Address (e.g., http://100.x.y.z:11434).
  • Output Control: A toggle switch for Enable Streaming (renders text as it is generated).
  • Prompt Engineering: A large text area for the System Prompt Template.

4. Functional Requirements

4.1 Prompt Engineering Engine

The application must dynamically inject variables into the user-provided template before sending the request to the Ollama API.

Default Template:

You are a professional {SOURCE_LANG} ({SOURCE_CODE}) to {TARGET_LANG} ({TARGET_CODE}) translator. Your goal is to accurately convey the meaning and nuances of the original {SOURCE_LANG} text while adhering to {TARGET_LANG} grammar, vocabulary, and cultural sensitivities. Produce only the {TARGET_LANG} translation, without any additional explanations or commentary. Please translate the following {SOURCE_LANG} text into {TARGET_LANG}:

{TEXT}

4.2 Template Variables

The engine must support and correctly replace the following tokens:

  • {SOURCE_LANG}: Full name of the input language (e.g., "Chinese").
  • {SOURCE_CODE}: Short code of the input language (e.g., "zh-Hans").
  • {TARGET_LANG}: Full name of the output language (e.g., "English").
  • {TARGET_CODE}: Short code of the output language (e.g., "en").
  • {TEXT}: The actual content provided by the user.

4.3 Ollama Integration

  • Support for the /api/generate endpoint.
  • Ability to handle both stream: true (progressive UI updates) and stream: false (batch updates).
  • Support for connecting to any valid URL provided in Settings, ensuring compatibility with Tailscale IPs.

5. Technical Implementation Details

5.1 Language Mapping (Default Configuration)

The application will provide a default list of languages:

Language Code
English en
Chinese zh-Hans
Japanese ja
Spanish es
French fr
German de

5.2 Persistence

  • All settings (API Address, Stream Toggle, and Custom Prompt Template) must be stored in the user's local application data folder to ensure they are remembered across restarts.

6. Success Metrics

  • Connectivity: Seamless communication with an Ollama instance over a Tailscale network.
  • UX: The "Streaming" mode should feel responsive with no UI lag during high-token-per-second generation.