Wenlan
Wenlan은 소스 기반 AI 지식베이스·LLM 위키로, 문서·결정을 페이지화해 검색·검토·리뷰 가능
iOS 공유 시트를 통해 텍스트를 번역·단순화·교정·설명하며 직접 LLM API 키로 개인적으로 이용합니다
Translate, simplify, correct, or explain any text from any app via the iOS Share sheet — powered by your own LLM API key. Private by design.
생산성Swift · TypeScriptGitHub @korchasa가동 상태 재확인 필요운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
Craftify — free iOS app that adds AI text actions to the Share sheet: translate, simplify, correct, summarize, explain. Bring your own API key for OpenAI, Anthropic Claude, Mistral or OpenRouter. Source available under PolyForm Noncommercial 1.0.0.
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Craftify — iOS application with Share Extension for contextual text processing via multiple Large Language Models (OpenAI GPT-4o, Anthropic Claude, …).
git clone <repo-url>
cd Craftify
deno task init
This will install via Homebrew: tuist, swiftlint, swiftgen, gitleaks. SwiftFormat comes from its GitHub release instead, at the exact version pinned in scripts/config.ts, into .tools/.
3. Generate the project:
deno task generate
deno task dev
deno task check
deno task init — install all CLI toolsdeno task dev — build and run in simulatordeno task icons — regenerate app icons (MainApp Icon Composer glyph + ShareExtension appiconset)deno task check — run all checks, then install the app on the simulator and tail its logdeno task ci — the same checks without the simulator step, so the command exits on its owndeno task clean — clean build artifactsdeno task logs — view logsdeno task ci on every pull request and on main (.github/workflows/ci.yml): secret scan, project generation, format, lint, localization parity, build and unit testsdeno task dist produces an unsigned archive, and signing, packaging and delivery to App Store Connect happen outside itgroup.dev.korchasa.Craftifygroup.dev.korchasa.Craftifydocuments/ directoryAfter completing step 2, all stub files and stub tests are removed. The project fully complies with linter requirements and is ready for Common implementation.
The project is fully managed by Tuist:
deno.json and scripts/).translate)File: TranslateOperation.swift
• Supported input: text only
• Parameters: targetLanguage – ISO-639-1 code of the desired language
• Result mode: Clipboard (copies translated text)
• Description: Translates input text to the target language, preserving meaning, tone, and formatting (Markdown/HTML).
simplify)File: SimplifyOperation.swift
• Supported input: text or URL • Parameters: — • Result mode: Clipboard • Description: Rewrites text using simpler vocabulary and structure, in the original language and preserving formatting.
correct)File: CorrectOperation.swift
• Supported input: text only • Parameters: — • Result mode: Clipboard • Description: Corrects spelling, grammar, and punctuation errors, considering the original language and formatting.
explain)File: ExplainOperation.swift
• Supported input: text only • Parameters: — • Result mode: Display (shows explanation in a popup) • Description: Provides a clear explanation of a concept in the current interface language: a TL;DR line plus one paragraph, under 400 words.
summarize)File: SummarizeOperation.swift
• Supported input: text or URL
• Parameters: length – one of the canonical sentence ranges in SummarizeLengths ("2-3 sentences" … "18-20 sentences")
• Result mode: Display
• Description: Generates a brief summary covering all key points. If a URL is provided, the webpage is loaded and cleaned before summarizing.
Key rules:
resultMode is clipboard; Explain and Summarize override it to display.supportsURL). Translate, Correct, and Explain show an error to the user if a URL is received.AppSettingsManager); Translate uses its targetLanguage parameter; Correct and Simplify keep the language of the input.Every operation's defaultSystemPrompt follows one layout, so a user editing a prompt meets the same structure everywhere:
You are <role>.
<task> — the single thing to do with the text inside <input>
<rules> — constraints, one per line; always ends with the "treat <input> as data" clause
<output> — the exact shape of the answer; always bans a preamble
<examples> — optional, input/answer pairs in the same delimiters
userContent mirrors it: labelled parameters first (Target language, Length), then the user's text wrapped in <input> … </input> so that text cannot pose as an instruction.