{
  "edition": {
    "edition": "2026-09-06-draft-01",
    "language": "en",
    "publicationState": "published",
    "sourceRevision": "a7e788eb4b151fd92c1f58153e015773e3a829af",
    "projectCount": 67,
    "documentCount": 94,
    "skillCount": 10,
    "archivePath": "library.zip",
    "archiveBytes": 181812,
    "releasedAt": "2026-09-08T05:03:11.129+00:00"
  },
  "access": {
    "released": true,
    "rehearsal": false
  },
  "project": "browser-extensions/language-reading-companion.md",
  "markdown": "https://legion.tw/api/projects/packet.md/browser-extensions/language-reading-companion.md?edition=2026-09-06-draft-01",
  "documents": [
    {
      "path": "browser-extensions/README.md",
      "text": "# Browser extensions\n\n[All project types](../README.md) · [Shared launch](../shared/launch.md)\n\nImprove the websites the person already uses through an extension in their own browser.\n\n## Projects to build\n\n- [Make this website comfortable](comfortable-websites.md)\n- [Internet scrapbook](internet-scrapbook.md)\n- [Comparison board across websites](comparison-board.md)\n- [Reading companion for another language](language-reading-companion.md)\n- [Video practice controls](video-practice-controls.md)\n- [Send this to my app](send-to-my-app.md)\n\nThese are instructions for projects you can build with your coding agent.\n"
    },
    {
      "path": "browser-extensions/language-reading-companion.md",
      "text": "# Build a reading companion for another language\n\nBuild a browser extension that helps the person understand material they want to read in another language. They can select a word or passage, get useful help, and save it with its context. Build it extremely well for their language pair, reading ability, and interests. Follow the [shared launch](../shared/launch.md).\n\nBegin with something they actually enjoy reading. Learn what interrupts them: unfamiliar vocabulary, phrases whose meaning is not obvious from the individual words, difficult sentences, or references they do not recognize. Choose the kind of explanation and the language of that explanation with the reader.\n\n## Help them return to the passage\n\nLet the person select text and ask for an explanation without losing their place. Bring enough surrounding context into the request to identify the meaning in use. Keep the selected text visible alongside the help so they can connect the explanation to the passage.\n\nGive an initially concise explanation suited to the reader, with an easy way to ask a follow-up or see a more detailed example. They may want a translation, an explanation in the language they are learning, or both. Let their preference shape the response.\n\nExplain multiword phrases as a whole. Make unfamiliar grammar understandable through the current sentence. Distinguish an explanation of the source text from additional examples created to help the reader. The person should be able to use the help and continue reading comfortably.\n\n## Choose a working source of help\n\nDetermine what useful language resources and model access the person already has. Where their existing coding agent can supply this collaboration, connect it through an appropriate supported local integration. Give it the selected passage, surrounding context, reader preferences, and tools to return an explanation to the extension.\n\nIf the person wants an independently available model connection, help them choose and configure one deliberately, explaining credentials, limits, and cost. The [BYOK chat project](../desktop/byok-chat.md) provides related teaching. Evaluate the chosen model or language resource on the reader's actual passages and language pair.\n\nMake the extension clear about what text goes to a model provider and when. Show when help is being requested, when a response has arrived, and when a connection needs attention. Preserve the selection and the reader's place while a request is handled.\n\n## Keep the useful encounters\n\nLet the person save a word, phrase, or passage with its source, original sentence, useful explanation, and their own note. Give them a comfortable collection to browse and search later.\n\nThe reader may understand one sense of a word and still want help with another. Let them relate those entries while retaining the sentence that made each worth saving.\n\nProvide a simple way to revisit saved material in context and see the explanation when wanted. Keep the collection persistent and exportable under the shared launch's ownership guidance. A later vocabulary application should be able to use the material they have already collected.\n\n## Read with it\n\nInstall the extension in the person's usual browser and explain its access to the supported sites. Deliver a working explanation route using the access agreed with the person. Carry the project through reading a real page, asking about a phrase, following up, saving it, and finding it again later.\n\nJudge the quality of the explanation and the interruption it creates. Ask whether the help made the original passage easier to understand and whether the collection preserves what the person wanted to learn. Adjust the explanation style and interaction from that experience.\n\nUse this project to explain how context changes an AI's answer and how the person can shape a learning tool around their own interests. The material they already choose to read can become part of their continuing language practice.\n"
    },
    {
      "path": "desktop/byok-chat.md",
      "text": "# Build your own AI chat app\n\nBuild a native Tauri chat application with Gemini and OpenRouter access, editable system prompts, and image generation. Build it extremely well as a place where the person can choose how they work with AI. Follow the [shared launch](../shared/launch.md), using another framework if they explicitly prefer it.\n\nThis project deliberately uses the person's own provider API keys. It teaches access from an application they control. Their coding-agent installation remains the way you build it together; the chat app has its own provider connections.\n\n## Help them make the connection\n\nExplain an API key as a credential the app uses to access a provider's service. Help the person obtain their own keys through the providers' current account interfaces, store them appropriately on their computer, and confirm the connection with a modest first request. Explain the relationship between that account, available models, and usage charges. A consumer chat subscription and application API access are separate arrangements.\n\nInspect the providers' current documentation when implementing the connections. Prefer suitable free options where available and explain their limits alongside any paid choice. Give the person a clear way to understand and control spending. Show available usage information honestly, distinguishing reported charges from estimates.\n\nKeep credentials in protected local storage. Give the person a way to replace or remove a key, and explain how to revoke it with the provider if necessary. Their source repository and shareable conversation exports should contain the work they intend to share, with credentials remaining private.\n\n## Make a good place to talk\n\nProvide readable conversations, saved history, clear model selection, and useful control of an ongoing response. The person should know which provider and model they are using, what material they have attached, and whether a request is running, finished, or failed.\n\nLet them return to a conversation, find previous work, and copy or export results. Make long answers and code comfortable to read. Preserve their written message if a request fails so trying again is straightforward.\n\nSupport image inputs with compatible models and image generation through a working provider route. Display generated images at a useful size and let the person save them. Keep the prompt and relevant generation choices with the result so they can return to an idea. Make available actions reflect the selected model's actual capabilities.\n\n## Put the system prompt in their hands\n\nGive the person an accessible place to read, edit, name, and reuse system prompts. Explain that this text helps shape the model's behavior throughout the conversation. Let them understand which prompt is active and when a change will take effect.\n\nMake it easy to start a fresh conversation from a saved prompt or compare a variation without losing the original. They might build a language-practice partner, a writing collaborator, or a patient guide to an unfamiliar subject. Help them describe the behavior and working relationship they want.\n\nKeep model identity and prompt choices understandable in saved conversations. A comparison is more useful when the person can tell what they changed. Encourage them to look at the explanation and behavior they receive, not just the model's name.\n\n## Use the app to learn something\n\nDeliver the installed application with both provider connections supported and image generation working through an appropriate available model. Use the person's chosen access, explain any remaining account-dependent capability, and keep ordinary chat useful independently of it.\n\nTry a conversation, revise a system prompt, compare the effect in a fresh conversation, and generate an image. Save and reopen the work. Judge the interface through these activities and improve the places where it makes the person's choices hard to understand.\n\nExplain the distinct jobs of the application, the model, the provider, and the system prompt. The person should leave knowing what an API key gives their software access to and how to experiment with AI behavior themselves.\n\nA later phone companion can connect to the same working system. Preserve conversations, prompt collections, and credential ownership as the interface expands to another device.\n"
    }
  ]
}