Chisle
The coding-agent plugin that bills 52% of a bare model across 20 live tasks. Terse persona + tool-output compressor + context diet.
Import your language files, edit every language side by side, and let AI draft the rest. A multi-language translation manager built with Next.js and Supabase.
Developer toolsTypeScript · PLpgSQLGitHub @nkonstaAvailability needs another checkOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A self-hostable, multi-language translation manager. Import your locale files, edit every language side by side, let AI draft what's missing, and control who can see and edit which languages — all backed by Supabase.
/ (statically rendered)./dashboard, behind authentication.🔗 Live: https://glotter.vercel.app/
Next.js 16 (App Router) · React 19 · TypeScript · Supabase (Postgres + Auth) · TanStack Table · Tailwind CSS v4 · Radix UI.
Requirements: Node.js 20+ and a Supabase project (free tier is fine).
Create one at supabase.com. You'll need three values from Project Settings → API:
In the Supabase dashboard, open SQL Editor, paste the contents of
db_setup/schema/tms_full_schema_v12.sql, and
run it. This creates all tables, RLS policies, and helper functions.
If AI translation will be enabled, also run
db_setup/optional/tms_ai_usage_controls.sql.
It adds the server-only shared concurrency and hourly usage controls.
Ignore
db_setup/upgrades/tms_acl_v12.sql— it's a migration for upgrading an older v11 database, not for fresh installs. Seedb_setup/README.md.
cp env.example .env.local
Edit .env.local:
| Variable | Required | Purpose |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL | ✅ | Supabase Project URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY | ✅ | Supabase anon public key (client) |
SUPABASE_SERVICE_ROLE_KEY | ✅ | Service role key. Server-only — used for saving translations and admin actions. Never expose to the client. |
NEXT_PUBLIC_SITE_URL | Recommended | Public origin (e.g. http://localhost:3000). Used for social-preview (Open Graph) image URLs. |
OPENAI_API_KEY | Optional | Enables AI translation. Without it, the rest of the app works; AI fill is disabled. |
OPENAI_MODEL, OPENAI_BASE_URL, AI_*, NEXT_PUBLIC_AI_* | Optional | Tune the AI provider, limits, and batching. Set AI_USAGE_LIMITS_ENABLED=true in production after applying the AI usage SQL patch. See env.example. |
The service role key bypasses Row-Level Security. It is only read server-side (in
app/api/**) and is never sent to the browser. Keep it secret.
In Authentication → URL Configuration → Redirect URLs, add the app entry point so sign-up confirmation and password-reset links land in the app:
http://localhost:3000/dashboardhttps://your-domain.com/dashboard (once deployed)This instance is admin-provisioned: signing up creates an account, but a new user has no access until a platform admin grants it. For a closed instance you can disable public sign-ups in Supabase and create users from the in-app Manage users screen instead.
This is the one manual step, and the app is unusable without it — there's no UI to create the first admin.
Create a user account. Easiest: Authentication → Users → Add user in the
Supabase dashboard (enable "Auto Confirm User"). Or sign up through the app at
/dashboard and confirm the email.
Copy that user's User UID from the Users list.
In the SQL Editor, run:
insert into platform_admins (user_id) values ('PASTE-USER-UID-HERE');
That user is now a platform admin: they can create projects, manage users, and assign per-project owners and members from the app.
npm install
npm run dev
Open http://localhost:3000 for the landing page, or http://localhost:3000/dashboard to sign in.
| Role | Scope | Can do |
|---|---|---|
| Platform admin | Whole instance | Everything: all projects, manage users, assign owners/members, edit any language. Bootstrapped via SQL (step 5). |
| Project owner | One project | Full access to that project — all languages, keys, languages, and members. |
| Member | One project | View/edit only the specific languages granted to them (per-language permissions). |
Owners and members are assigned by a platform admin (or project owner) through the Manage users / project-members screens. Permissions are enforced at the database level by Row-Level Security, not just in the UI.
en, fr, de) or
code:name pairs (en:English). Codes are lowercased.This is the beginning of the README. Read the rest at the original. Read the full README ↗