bama
BAMA: 모든 Mac 앱을 만들 수 있습니다
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Build for the Gulf. In both directions. Skills, formats and a starter for products that ship in Arabic and English.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Build for the Gulf. In both directions.
Dualkit is a free, open-source toolkit for products that ship in Arabic and English. v0.1 is in beta.
Docs and live demos are at dualkit.dev.
In Cursor, copy cursor/rules into your project's .cursor/rules. The rules are generated from the same source as the skills, and CI fails if they drift.
The skills were measured against a baseline before release. Fresh agents built the same bilingual checkout screen three times without them and three times with them. The task, the scorer and every run are in evals/payment-summary.README 전문 보기 ↗Ask Claude Code or Cursor for a bilingual screen and you get the same three bugs:
Dualkit fixes them at the source, in the agent and in the code, and checks any page for the ones that got through.
| What it is | Install | |
|---|---|---|
| Skills | Five agent skills for Claude Code and Cursor, listed in the Claude plugin directory: RTL layout, Arabic and Latin type pairing, Gulf formats, bilingual copy, converting an app | /plugin marketplace add dualkit/dualkit |
| Format | Six Gulf currencies, Umm al-Qura dates, Arabic numerals, GCC phones and IBANs for all six countries, Emirates ID, Saudi VAT number, Gulf weekends. No dependencies | npm i @dualkit/format |
| Starter | A bilingual design system to fork: one token file feeds CSS, Tailwind and Figma, plus eight React components | From the release |
| Check | Audit any page for Arabic and RTL bugs, with a shareable Gulf-ready report | npx dualkit check <url> |
| Lint | 8 source rules on by default that catch Arabic and RTL bugs in your CSS, HTML, JavaScript and TypeScript, with no browser | npx dualkit@beta lint . |
| Convert | Turns an English Next.js or Vite React app into an Arabic one on a new git branch, and proves English did not change | npx dualkit@beta convert |
Fresh agents built the same bilingual checkout three times without the skills and three times with them.
| Check | Without | With |
|---|---|---|
| Phone and IBAN isolated inside Arabic text | 0/3 | 3/3 |
| Arabic type overrides (line height, size, tracking) | 0/3 | 3/3 |
| Digit system pinned, not left to defaults | 1/3 | 3/3 |
Three runs is a smoke test, not a benchmark. The task, the scorer and every run are in evals/payment-summary.
The skills are listed in the Claude plugin directory, so you can install them from there in Claude Code, Cowork and the Claude apps. Or, in Claude Code:
/plugin marketplace add dualkit/dualkit
/plugin install dualkit@dualkit
In any agent that reads skills (Claude Code, Cursor, Codex and others):
npx skills add dualkit/dualkit
In Cursor, copy cursor/rules into your project's .cursor/rules. The rules are generated from the same source as the skills, and CI fails if they drift.
npm i @dualkit/format
import { formatMoney, formatHijri, parseUaePhone } from '@dualkit/format'
formatMoney(1234.5, { currency: 'AED', locale: 'ar', numerals: 'arab' }) // ١٬٢٣٤٫٥٠ د.إ
formatHijri(new Date('2026-02-18'), { timeZone: 'Asia/Riyadh' }) // 1 Ramadan 1447 AH
parseUaePhone('٠٥٠ ١٢٣ ٤٥٦٧') // { ok: true, value: { e164: '+971501234567', type: 'mobile' } }
Full API in the package README.
npm i @dualkit/starter
Then in your CSS:
@import '@dualkit/starter/tokens.css';
@import 'tailwindcss';
@import '@dualkit/starter/theme.css';
<html lang="ar" dir="rtl"> switches to Arabic type, and data-theme="dark" to dark mode. More in the starter README.
The eight components install with the shadcn CLI, as source you own:
npx shadcn@latest add https://dualkit.dev/r/amount.json
Swap amount for button, date-display, digit-input, field, sheet, tabs or toast.
Point one command at any page, local or live. It opens it in Chromium, runs 34 Arabic and right-to-left rules, and writes a report with a score out of 100 and every bug marked on a screenshot.
npx [email protected] install chromium # once
npx dualkit check https://your-site.com/ar
In CI, uses: dualkit/dualkit/action@main scores every pull request and uploads the report (action/README.md). Every rule, why it matters and how to fix it is in RULES.md.
Add --review to also have a vision model read a screenshot (needs GEMINI_API_KEY or OPENROUTER_API_KEY). It is experimental and not yet measured against hand labels, so treat its findings as suggestions. See the CLI README.
Lint reads your source instead of a rendered page, so it needs no browser and runs in seconds. It checks CSS, SCSS, HTML, JavaScript and TypeScript, including JSX, plus Vue and Svelte files and CSS in styled and css templates, against 8 source rules: left and right in CSS and Tailwind classes, letter-spacing on Arabic, Arabic formats that leave the digits to the runtime, the bare islamic calendar instead of islamic-umalqura (the Hijri calendar CLDR ranks first for Saudi Arabia, the UAE, Bahrain, Kuwait and Qatar), Hijri dates with no time zone, and the old rial sign. Left and right in CSS and Tailwind classes, and digits left to the runtime, are notes, so they are listed but do not fail the run unless you set --fail-on note. A ninth rule, which prefers :dir() to a [dir] selector, is off by default and can be turned back on through the API: pass RULES from @dualkit/lint to lint().
npx dualkit@beta lint .
physical.css:2:3 · source/physical-css `margin-left: 8px` is tied to one side. Use `margin-inline-start`.
0 errors, 0 warnings, 1 note in 2 files
It exits 1 when a finding reaches --fail-on (default error). Turn a rule off for one line with a dualkit-disable-next-line <rule-id> -- reason comment. In CI, set mode: lint on the same Action. Every rule and its known limits are in LINT.md.
Convert takes an existing English app and makes it Arabic on a new git branch. It works on Next.js App Router and Vite React apps styled with Tailwind v3, Tailwind v4, plain CSS or CSS modules.
npx dualkit@beta convert --mode bilingual --start "npm run dev" --port 3000
bilingual adds Arabic with a language switch and leaves English exactly as it is. arabic makes the whole app Arabic and right to left, with no switch. Phase 1 rewrites the code and writes dualkit-strings.json, every English string with its Arabic left empty. Your agent fills the Arabic with the dualkit-convert skill. Phase 2, dualkit convert --finish, compares each English page with a screenshot from before, runs the check rules on each Arabic page and writes a report.
Dualkit makes no model calls in convert, and every drafted Arabic string is marked for a native speaker to check. What it converts and what it leaves to you: the convert README.
The most useful help right now:
plugin/skills/ and comment wherever something reads wrong.| Path | Contents |
|---|---|
packages/format | The format library, with its tests |
packages/rules | The 34 check rules and the page reader, with their tests |
packages/lint | The source rules behind dualkit lint, with their tests |
packages/convert | The engine behind dualkit convert, with its tests |
packages/cli | The dualkit CLI and its report |
action | The GitHub Action that runs check or lint on pull requests |
plugin/skills | The five skills (SKILL.md each) |
cursor/rules | Cursor rules generated from plugin/skills |
packages/skills | The generator and the tests that keep skills, rules and the plugin manifest in step |
apps/site | dualkit.dev (Next.js) |
design | Figma specs, tokens and the motion prototype the site was built from |
evals | Baseline evaluations for the skills |
npm install
npm test
npm run dev
This is a beta. No native Arabic reviewer has checked the Arabic rules yet; that happens before 1.0. If any Arabic reads wrong, please open an issue.
Made by Sam Santos. MIT licensed.