claudeers.
// Data & Analytics

sharequota.com

Every AI plan you own, behind one key. A free, MIT-licensed local AI gateway that pools Claude, ChatGPT, Gemini, DeepSeek and OpenRouter into a single endpoi…

// Data & Analytics[ cli ][ api ][ web ][ mobile ][ claude ]#claude#ai-gateway#ai-sdk#anthropic#anthropic-api#anthropic-claude#deepseek#llm-proxy#data◷ MIT$open-sourceupdated 27 days ago
Actively maintained
100/100
last commit about 2 months ago
last release 18 days ago
releases 8
open issues 0
// star history

Install with your AI

Paste into Claude Code, Cursor, or any agent — it reads the repo and wires the tool into your project.

Install and set up sharequota.com (release-binary project) into my current project.
Found on https://claudeers.com/sharequotacom
Repo: https://github.com/NewbieEvil/sharequota.com
Homepage/docs: https://sharequota.com
Detected install method: release-binary → inspect the README
Category: data. Platforms: cli, api, web, mobile.
Read the repo's README for exact setup and env vars, then install it and wire it into my project.

Claudeers Health Verdict:
active; community-verified: false. Confirm the source before running anything.
// or install directly (release-binary)

Grab the latest release asset from GitHub.

# download a build from https://github.com/NewbieEvil/sharequota.com/releases
// or clone
git clone https://github.com/NewbieEvil/sharequota.com

// compatibility

Platformscli, api, web, mobile
Operating systems—
AI compatibilityclaude
LicenseMIT
Pricingopen-source
Language—

Get your FREE $2.50 API credits to access TickAtlas financial data ↗
sharequota.com

sharequota.com

The site behind ShareQuota — and the gates that keep it honest.

The marketing and documentation site for ShareQuota, the local proxy that pools the AI subscriptions you already pay for behind one endpoint and one key.

111 routes · English-first and locale-scoped from the ground up · eleven automated gates · 0 accessibility findings



⚡ Run it🧱 Stack📁 Structure🗺 Routes
🎨 Design system🧪 Gates🌐 i18n🔁 CI
🤖 llms.txt🔒 Security📚 Docs💥 The product

🇬🇧 English🇨🇳 简体中文🇹🇼 繁體中文🇮🇳 हिन्दी🇪🇸 Español🇫🇷 Français🇸🇦 العربية
🇧🇩 বাংলা🇧🇷 Português🇷🇺 Русский🇯🇵 日本語🇩🇪 Deutsch🇰🇷 한국어🇻🇳 Tiếng Việt
🇮🇩 Indonesia🇹🇷 Türkçe🇮🇹 Italiano🇹🇭 ไทย🇵🇱 Polski🇵🇰 اردو🇺🇦 Українська

[!IMPORTANT] One rule shapes this whole repository: nothing on the site may promise what the software cannot do.

It is not a slogan. It deleted a pricing page, a Get Pro button, an earnings calculator and an entire two-sided marketplace from this codebase. It is why RELEASE_REPO is null and a gate fails the build if any download link renders while there is no release to point at. Read docs/FLOWS.md §0 before adding any control — no automated gate can catch a button that promises something the system cannot deliver.


Contents


🧭 What this repo is

A Next.js 15 App Router site — marketing pages, a nine-page documentation tree, a catalogue of 79 models with a page each, five provider pages, and the legal and project pages a real product needs.

It is built like the product it describes: no analytics, no tag manager, no session recorder, one cookie and one local-storage entry, and every number on a page traceable to the file it was counted from.

What makes it worth reading as a codebase is not the pages — it is the enforcement layer:

🧪
11
gates in CI
🖥
~270
page loads per a11y run
♿
0
accessibility findings
📅
90d
before a competitor claim expires
🔗
2-way
sitemap ↔ route check

One gate fails the build when a claim on /compare goes 90 days without being re-verified. Another fails it if a control's label stops matching what the control actually does.


💥 The product this site describes

ShareQuota — a single Go binary that runs on your machine and puts every AI account you own behind one local endpoint and one key. Free, MIT, no account, no server in the middle.

Claude
Claude
8 models
key · OAuth
ChatGPT
ChatGPT
32 models
key · OAuth
Gemini
Gemini
19 models
key · OAuth
DeepSeek
DeepSeek
6 models
API key
OpenRouter
OpenRouter
14 models
API key
Claude Code ─┐                                    ┌─→ Claude      (API key · OAuth)
Codex CLI  ──┤                                    ├─→ ChatGPT     (API key · OAuth)
Gemini CLI ──┼──→  localhost:20130  ──────────────┼─→ Gemini      (API key · OAuth)
Your SDK  ───┤     one sq- key                    ├─→ DeepSeek    (API key)
curl ────────┘     4 dialects · 79 models         └─→ OpenRouter  (API key)
🔑 One key, not fiveClients hold an internal sq- key. The real credential is attached by the proxy at the last moment and is never visible to the caller
📦 79 models32 ChatGPT · 19 Gemini · 14 OpenRouter · 8 Claude · 6 DeepSeek, up to 1M context
🔌 4 API dialects/v1/messages · /v1/chat/completions · /v1/responses · /v1beta/models/{model}:generateContent
🔄 Real translationAnthropic ↔ OpenAI ↔ Gemini for requests, responses and SSE streams
💾 6 platform buildsmacOS · Linux · Windows, x64 and ARM64 each — one static binary, no runtime
🧪 Depth over breadth26 packages, 434 files, 157,679 lines of Go, 3,015 race-enabled tests, 3 direct dependencies

Every one of those figures lives in src/lib/site.ts with the file it was counted from, and is rendered on the site next to its source.

[!NOTE] The binary is not published yet. The repository is private and there is no public release, which is why RELEASE_REPO is null, why no download button on the site renders an href, and why npm run qc:releases asserts exactly that. The site says so in plain words rather than saying "coming soon" — which is a promise with a date implied.


⚡ Running it

npm install
npm run dev        # http://localhost:3000 → redirects to /en
npm run build      # production build
npm start          # serve the build
npm run typecheck  # tsc --noEmit
npm run qc         # the eleven gates, in order

Node 20.17.0 — pinned in .nvmrc, which CI reads with node-version-file, so the version is stated once and cannot drift from what a developer runs.

🖥 Running the browser-driven gates
npx playwright install --with-deps chromium
npm run build && npm start &
npm run qc:a11y      # every page × 8 breakpoints × 2 themes
npm run qc:perf      # LCP / CLS / INP against the budget
npm run qc:parity    # diff computed styles against the reference site

perf.mjs refuses to run against next dev — a dev server compiles on request and ships an unminified bundle with the overlay attached, so an LCP measured there is a measurement of the dev server.

🧰 Every script in package.json
ScriptDoes
dev build startNext.js
typechecktsc --noEmit
modelsRegenerate lib/models.generated.ts from the binary's registry JSON
qcChain the eleven gates
qc:routes qc:a11y qc:seo qc:links qc:i18nRoute health · accessibility · SEO · link integrity · dictionaries
qc:consistency qc:freshness qc:affordance qc:releasesToken drift · content rot · control affordance · dead downloads
qc:perf qc:parityPerformance budget · computed-style parity
shotsScreenshot every page at every breakpoint in both themes

🧱 Stack

Next.js
Next.js 15
App Router
React
React 19
server-first
Tailwind CSS
Tailwind v4
CSS variables
TypeScript
TypeScript
strict
Node.js
Node 20.17
pinned
Playwright
Playwright
dev only
Why it is here
▲ Next.js 15 — App Router, server componentsLocale negotiation needs a real request pipeline — see Deploying
⚛ React 19Interactive islands only; the rest is server-rendered
🎨 Tailwind CSS v4 via @tailwindcss/postcssThe token system is CSS custom properties in one file, and v4's @custom-variant is what desk: is built on
🔷 TypeScript, strictDictionary is derived from the English file, so a missing translation key is a build error
🎭 Playwright, dev onlyEvery browser-driven gate. Chromium only — three engines would triple the slowest CI step for no extra coverage

Six runtime dependencies total — next, react, react-dom, clsx, tailwind-merge, server-only. No component library, no animation library, no icon package: the icons are inline SVG in src/components/ui/icons.tsx.


📁 Project structure

src/
  app/
    📄 layout.tsx                  root shell: fonts, no-flash theme script
    🎨 globals.css                 the whole token system — 2,297 lines, three layers
    🗺 sitemap.ts  robots.ts
    🤖 llms.txt/route.ts           the site described for a model, not a crawler
    📡 rss.xml/route.ts            the changelog as a feed
    🔒 .well-known/security.txt
    [locale]/
      📄 layout.tsx                header + footer, per-locale metadata & hreflang
      🏠 page.tsx                  home — hero, proof, tools, providers, features,
                                   compare, how, download, FAQ, CTA
      📚 models/                   the catalogue + a page per model (79)
      🌐 providers/                the five, + a page each
      💾 download/                 six builds, checksums, installers, requirements
      💲 pricing/                  free, and what actually costs money
      🆚 compare/                  four competitors, and the rows they win
      📖 docs/[slug]/              nine pages, sidebar, prev/next, search
      🏗 architecture/  📓 changelog/  🗺 roadmap/  📄 licenses/  🎨 brand/
      ℹ about/  📬 contact/  🔒 security/  🛡 privacy/  ⚖ terms/  🧭 sitemap/
      🚫 not-found.tsx
      🖼 opengraph-image.tsx        social card, prerendered per locale
  components/
    layout/     header, footer, section rail
    sections/   the home page's ten bands
    docs/       shell, search, callouts, bodies
    models/     catalogue, cards, capability icons, detail drawer
    ui/         primitives, buttons, cards, prose, stats, icons
  content/
    📓 CHANGELOG.md                copied from the binary repo; a gate checks it has not drifted
  i18n/
    ⚙ config.ts                    locale registry + Accept-Language matching
    📦 dictionaries.ts              per-locale dynamic import
    🇬🇧 dictionaries/en.ts           ALL copy — 1,625 lines — and the source of `Dictionary`
  lib/
    📊 site.ts                      product facts: platforms, providers, packages, deps, proof
    🤖 models.generated.ts          GENERATED from the binary's registry — do not hand-edit
    💻 snippets.ts                  every code sample, pointed at one endpoint constant
    🗺 routes.ts                    every route — read by the sitemap AND the route gate
    📖 docs.ts  🔍 seo.ts  📓 changelog.ts  🔢 format.ts
  🚦 middleware.ts                  sends /anything to /<locale>/anything

🧪 scripts/    the gates — see Quality gates
📚 docs/       the reasoning — see Documentation
📋 plans/      the work log: every round, with its measurements

🔍 Facts, copy, and the line between them

Three sources, and the separation is the point.

SourceHoldsChanged by
📊src/lib/site.tsProduct facts — version, port, platforms, providers, packages, dependencies, proof points, navigationA release
🇬🇧src/i18n/dictionaries/*.tsEvery user-visible string, in every languageA copy edit or a translation
🤖src/lib/models.generated.tsThe model catalogue, extracted from the binary's own registry JSON by npm run modelsRegenerating after a registry change

Nothing user-visible is typed directly into a component. That is what makes translation mechanical rather than an archaeology exercise — and it is why adding a language is three edits and no refactor.

The same discipline runs one level deeper. KEY_PREFIX, LOCAL_ENDPOINT, BINARY and RELEASE_DOCS_URL are constants because they appeared in nine code samples and two prose strings: nine-plus-two places to miss when the binary changes one of them. Every snippet in snippets.ts interpolates them.


🗺 Routes

111 routes per locale — and both directions are asserted. qc:routes reads the sitemap the app generates and checks every URL answers 200; it also checks that everything answering 200 is in the sitemap. A page missing from the sitemap is a page search engines never see, and nothing else in the build would say so.

GroupCountRoutes
📦Product6/ · /models · /providers · /download · /pricing · /compare
📖Docs10/docs + quickstart · api · routing · cli · config · deploy · troubleshooting · limits · faq
🏗Project5/changelog · /roadmap · /architecture · /licenses · /brand
🏢Company6/about · /contact · /security · /privacy · /terms · /sitemap
Named27
⚙Generated8479 model pages + 5 provider pages
Total111

A model page is not a doorway page: each carries its own routed id, context window, max output, published price per million tokens, price tier, reasoning format, a nine-flag capability matrix, and a runnable request in three dialects. The capability matrix shows both columns — what a model cannot do is a fact about it, and hiding it just moves the surprise to runtime.

/troubleshooting 308s to /docs/troubleshooting. Permanent, and cacheable by browser and CDN: a route that once answered 200 should never start answering 404 without a forwarding address.


🌐 Internationalisation

English-first, but locale-scoped from the ground up. middleware.ts sends /anything to /<locale>/anything, matching Accept-Language by quality value — en-GB lands on en, a malformed header never throws, and the fallback is the default locale rather than a crash.

Adding a language — three edits, no refactor

Step
1️⃣Copy src/i18n/dictionaries/en.ts → <code>.ts and translate the values. Dictionary is derived from the English file, so TypeScript fails the build on any key you miss.
2️⃣Add the import() line in src/i18n/dictionaries.ts
3️⃣Add the entry to LOCALES in src/i18n/config.ts

Routing, <html lang>, the hreflang set, og:locale, the sitemap and the header language switcher all read from that one registry. The switcher renders nothing while only one locale exists and appears on its own once a second one lands. RTL is already in the type (dir: 'ltr' | 'rtl').

qc:i18n catches the three things TypeScript cannot: a locale registered with no loader, a dictionary file that exists but is never registered, and a value left in English inside a translated file.

🇻🇳 Vietnamese is next in the roadmap — the font subset already includes vietnamese and formatVnd() is in lib/format.ts waiting for it. It is queued behind migrating plural handling to ICU MessageFormat, because doing that after two locales exist means editing two files instead of one.

[!WARNING] The defect that produced seo.ts. A page that declares alternates: { canonical } replaces the parent layout's alternates wholesale — Next does not merge the nested languages map. Eight of nine pages silently lost their hreflang tags that way. Every page now builds metadata through pageMetadata(), which makes that mistake unavailable.


🎨 Design system

Three layers, and a component may only consume the last two:

🎨 LAYER 1  PRIMITIVE   raw ramps. The ONLY place a colour literal may appear.
🏷 LAYER 2  SEMANTIC    role tokens (bg, fg, secondary, border, raised…), complete in BOTH themes.
🎛 LAYER 3  COMPONENT   per-component knobs.

Reaching into a primitive from a component is the same defect as hardcoding a hex.

The palette is measured, not eyeballed. It was read off the reference site's live computed styles with a Playwright probe, round-tripped through a canvas so oklab()/lab() come back as honest sRGB. Every value it produced was then checked against the contrast floor, and the ones that failed were corrected rather than copied: nine deviations, each recorded with the number that forced it.

Rule that holds throughout
🎨The neutrals are not grey. Every one is pulled toward the accent hue — that is what makes a page read as one material instead of a coloured button dropped on a grey site
📐Depth is elevation plus a 2px rise, never a darker fill. A hover:bg-* on a card replaces its opaque background and the card reads as a hole in the page
🔤Two font families, not six: Plus Jakarta Sans and JetBrains Mono
🎬Motion is five patterns, transform and opacity only, and prefers-reduced-motion removes all of it
🌗Both themes follow the OS by default, with no JavaScript beyond a pre-paint no-flash script
👆 desk: instead of lg: — the variant, and the measurement behind it
@custom-variant desk (@media (width >= 64rem) and (pointer: fine));

The 40px target floor is a statement about fingers; lg: is a statement about width. They agree on a laptop and disagree on exactly the device the floor exists for — a 1024px Android tablet, an iPad in landscape, a touchscreen laptop.

Measured on this site, sub-40px targets go from 6 at 768px to 15 at 1024px under the width-only rule. Every one of those nine is a control a finger loses at lg.

pointer: fine reports the primary pointer, so a hybrid touchscreen laptop reports fine and keeps the larger targets — the conservative reading, and the safe error.


🧪 Quality gates

npm run qc chains eleven, in dependency order. A finding is a defect, not a discussion.

flowchart LR
  A["🔷 typecheck"] --> B["📐 consistency"] --> C["📅 freshness"] --> D["📦 build"]
  D --> E["🔗 routes"] --> F["♿ a11y"] --> G["🔍 seo"] --> H["🔗 links"]
  H --> I["🌐 i18n"] --> J["👆 affordance"] --> K["💾 releases"]
GateWhat it asserts
🔷typechecktsc --noEmit
📐qc:consistencyStatic analysis for drift no runtime check can see: the same visual role built two ways, spacing off the ladder, a token bypassed with an arbitrary value, a page inventing its own section rhythm
📅qc:freshness/changelog has not drifted from the binary repo's CHANGELOG.md, and the competitor facts on /compare were re-verified within 90 days
📦buildProduction build
🔗qc:routesEvery URL in the generated sitemap answers 200 — and everything answering 200 is in it. Plus the locale redirect at /, and that an unknown path is a real 404 rather than a soft 200
♿qc:a11yEvery page × 8 breakpoints × 2 themes in a real browser — see below
🔍qc:seoTitle ≤ 60 chars, description 70–160, complete OG/Twitter, and uniqueness across every page in the sitemap
🔗qc:linksEvery internal link resolves, every #anchor has a target that exists, every external link in a new tab carries rel="noopener"
🌐qc:i18nDictionary integrity — unregistered loaders, orphan files, untranslated values
👆qc:affordanceCursor affordance (<a> and <button> in the same visual role must not show different pointers) and decoration painted over text
💾qc:releasesNo download href renders while RELEASE_REPO is null

Two more run outside the chain: qc:perf (needs a production server) and qc:parity (diffs computed styles against the reference site).

The accessibility sweep

scripts/qc.mjs drives a real browser over every page at eight widths in both themes and reports what a screenshot at one width cannot show:

CheckRule
↔H-SCROLLthe page must never scroll horizontally
📦OVERFLOW-ELnames the element causing it
🌗CONTRAST≥ 4.5:1, or ≥ 3:1 for large text, against the composited background
📱IOS-ZOOMfields ≥ 16px below the lg breakpoint
👆TOUCH-TARGETcontrols ≥ 40px tall on phone and tablet
🔠HEADING-SKIPno h1 → h3 jumps
🏷NO-NAMEevery link and button has an accessible name
✂CLIPPEDin-flow content not cut off by overflow: hidden

It resolves oklab()/oklch() — Tailwind v4 emits those for every /opacity colour, and reading L,a,b as if they were r,g,b invents contrast failures by the hundred. It exempts sr-only elements and sections merely clipping their own decorative glow. So a finding means a defect.

✅ Current state: 0 findings. Treat any regression as a build failure.

The performance budget

⚡
LCP ≤ 2000ms
📐
CLS ≤ 0.05
👆
INP ≤ 200ms
🏭
production build
cold cache, never next dev

The INP number is an approximation and the script says so: real INP is field data over a session. The first version of this gate reported home/phone at 240ms, then 192 / 256 / 272ms across three runs of the same build — a budget gate that changes verdict without the code changing is not a gate, so it now counts only entries with interactionId > 0 and samples deterministically.


🔁 Continuous integration

Split by what each gate costs.

JobRuns onGates
⚡fastevery pushtypecheck · consistency · freshness · build · seo · i18n · releases
🖥browserpull requestsroutes · a11y · links · affordance · perf

The browser job is ~270 page loads for the accessibility sweep alone, which is why it does not run on every push to a branch. It installs Chromium only, builds, starts the production server, and waits on /en before measuring anything.

🤖 Dependabot runs weekly with minor and patch grouped into one PR — the alternative is a pull request per package and a repo where nobody reads them. Majors stay ungrouped on purpose: Next, React and Tailwind are pinned to versions whose behaviour is measured in docs/, and a major in any of the three is a round of work rather than a merge button.


🤖 The machine-readable surface

EndpointWhat it is
🗺/sitemap.xmlGenerated from lib/routes.ts — the same registry the route gate reads
🤖/robots.txt
🧠/llms.txtThe site described for a model rather than a crawler. A plain-text map so an assistant answering a question about ShareQuota reaches the right page instead of guessing from a rendered landing page
📡/rss.xmlThe changelog as a feed. One item per released version; the unreleased section is skipped because it has no date and would reappear as "new" on every build
🔒/.well-known/security.txt
🖼/<locale>/opengraph-image1200×630, prerendered per locale
🏷JSON-LDSoftwareApplication, FAQPage on /docs/faq only, breadcrumbs — inert markup, never user input

llms.txt carries a "What it is not" section, and that is deliberate: the most common wrong answer about this product is that it resells quota, because the name sounds like it should. Stating the negative is what stops it being repeated.


🔒 Security headers and what the site stores

X-Content-Type-Options: nosniff
Referrer-Policy: strict-origin-when-cross-origin
X-Frame-Options: DENY
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=()

🔐 HSTS is two years and preload-eligible — the one header here with a real cost, and the correct trade for a site that has never served anything over HTTP and has no legacy subdomain to strand.

⚠ There is no CSP, and that is recorded as open rather than made silently. layout.tsx ships a blocking inline theme script, so a real CSP needs a build-computed hash or a per-request nonce — and a nonce forces every one of the static pages to render dynamically. That is a decision with a measurable cost.

What the site stores: 🍪 one cookie (your chosen language) and 💾 one local-storage entry (sq-theme). Both stay on your device. No analytics, no tag manager, no advertising network, no cross-site tracking.


📚 Documentation

docs/ holds the reasoning; the code holds the result.

DocWhat it answers
🧭docs/FLOWS.mdWho arrives, what they want, which screen serves each step — and which steps have no software behind them. Ends in a ranked gap register. §0 is the content rule this whole repo is built on
♿docs/UX-STANDARDS.mdEleven sections of rules, each citing the clause it comes from — WCAG 2.2 AA, ISO 9241-210, ICU, DTCG, PDPD/GDPR
✅docs/QC-CHECKLIST.mdEleven numbered gates with PASS/FAIL criteria. npm run qc chains the automated ones
✍docs/CONTENT.mdPositioning and per-page content spec, including the competitor research /compare is built on
🎨docs/HOUSE-STYLE.md1,762 lines of measured decisions — every palette, type and layout round, with the numbers
📈docs/SCALE.mdWhy the site is a tree rather than a landing page
🗺docs/ROADMAP.mdStaged plan; each stage has entry criteria, work, a gate and exit criteria
🔄docs/REDESIGN.md

📋 plans/ is the work log — one directory per round, each with its scout, research, phases, probes, before/after screenshots and a measured report. It is why a claim in this README can be checked rather than believed.


🚀 Deploying

Standard Next.js server build — Vercel, Netlify, Cloudflare, or npm start behind a reverse proxy.

[!CAUTION] output: 'export' is deliberately not used. The middleware needs a real request pipeline; a static export would drop locale negotiation and every visitor would land on English regardless of their browser.

🖼 The image optimizer is off (images: { unoptimized: true }) because the site ships no raster images — copy and SVG only. That also keeps it deployable to any static-capable host.

📦 npm audit reports three high advisories in postcss and sharp, both transitive dependencies of Next itself. The only fix npm offers is a downgrade to next@9, which is not a fix. sharp is never loaded, because the optimizer is disabled.


🚧 Before launch

Placeholders are centralised so each is a single edit.

WhatWhereState
💾Release URLsRELEASE_REPO in src/lib/site.tsnull — the honest state. Setting it to the repo slug turns every download surface on at once, and the /docs/faq answer that says the repo is private ships in the same commit, or the site contradicts itself
📏Binary sizessize on each platformnull — the UI omits the figure rather than printing a number nobody measured
🔗Social handlesSOCIALS in src/lib/site.tsTwo, both verified — it was twelve, all invented. See below
💲Pricingpricing in the dictionaryStructure is real; the product is free and nothing is sold
🔍 Why ten social links were deleted, and how each was checked

Every removed link was checked rather than assumed, because HTTP status is a weak signal on social platforms — most serve a soft-404 with a 200:

x.com/sharequota .............. 404
youtube.com/@sharequota ....... 404
facebook.com/sharequota ....... 400
threads.net/@sharequota ....... 200, body says "Unavailable"
t.me/sharequota ............... 200, generic page, og:description EMPTY
zalo.me/sharequota ............ 200, redirects to the Zalo LOGIN page
discord.gg/sharequota ......... 200 marketing page, but the Discord API
                                answers {"message":"Unknown Invite","code":10006}
linkedin / reddit / tiktok .... unverifiable without an account

The Discord one mattered most, and not because of the icon: /contact rendered it as a support channel with a response expectation, and /docs offered it as the place to ask for help. That is a promise of a room that does not exist. A dead icon is untidy; a dead support channel is a lie to someone who is stuck.


⚖ The one sanctioned deviation

docs/UX-STANDARDS.md §1 ends: "a finding is a defect, not a discussion — the one exception is a deliberate deviation, which must be recorded in the README with its measured number before it may be suppressed."

It has exactly one entry.

WhatMeasuredFloor
⚠White label on the light primary fill #16a34a3.30:14.5 (14px / w500)

The alternatives were real and were declined, which is what makes this a decision rather than an oversight:

OptionMeasured
✅Dark #0e100e label on the same fill5.80
✅White label on a fill one step deeper #15803d5.02
❌White on #16a34a — shipped3.30

How it is enforced. scripts/qc.mjs carries a DEVIATIONS registry that matches the exact composited pair, so it stops matching the moment either colour moves and cannot widen into cover for a second defect. Every match is printed under its own heading on every run — the gate reports SANCTIONED DEVIATIONS (152 occurrences, 1 distinct) above TOTAL FINDINGS: 0 — so the exception stays visible instead of becoming silence. Removing it is a one-line change in globals.css.


🤝 Contributing

Before adding a control, read docs/FLOWS.md §0. Before adding a colour, read docs/UX-STANDARDS.md §1. Then:

Rule
1️⃣npm run qc must pass — all eleven gates, no exceptions and no new suppressions
2️⃣Copy goes in the dictionary. Facts go in site.ts. Neither goes in a component
3️⃣A number on a page must name the file it was counted from, or be labelled an estimate, or not be printed
4️⃣A feature that exists in the binary's source but is not wired into the running server is not a feature. It does not go on the site
5️⃣If a claim on the site stops being true, that is a bug of the same severity as a broken build

📜 License

MIT — see LICENSE. Copyright © 2026 ShareQuota contributors.

MIT covers the code. It does not cover the name and the mark: say "works with ShareQuota" freely, but do not use the name or logo in a way that suggests this project endorses your work, and do not use it in your own product name, domain or app-store listing. The full rule is on /brand.


sharequota.com

One local endpoint for the AI accounts you already pay for.

Free · MIT · no account · no server in the middle

Built in Vietnam 🇻🇳 · Every number on this page is counted from the source, not estimated.

// faq

What is sharequota.com?

Every AI plan you own, behind one key. A free, MIT-licensed local AI gateway that pools Claude, ChatGPT, Gemini, DeepSeek and OpenRouter into a single endpoint — one key for Claude Code, Codex and Gemini CLI. No account, no server in the middle, nothing leaves your machine.. It is open-source on GitHub.

Is sharequota.com free to use?

sharequota.com is open-source under the MIT license, so it is free to use.

What category does sharequota.com belong to?

sharequota.com is listed under data in the Claudeers registry of Claude-compatible tools.

3 views
★ 11 stars
unclaimed
updated 27 days ago

// embed badge

sharequota.com on Claudeers
[![Claudeers](https://claudeers.com/api/badge/sharequotacom.svg)](https://claudeers.com/sharequotacom)

// retro hit counter

sharequota.com hit counter
[![Hits](https://claudeers.com/api/counter/sharequotacom.svg)](https://claudeers.com/sharequotacom)

// reviews

// guestbook

0/500

// related in Data & Analytics

🔓

Wrap Antigravity, ChatGPT Codex, Claude Code, Grok Build as an OpenAI/Gemini/Claude/Codex compatible API service, allowing you to enjoy the free Gemini 3.1 P…

// datarouter-for-me/⟨Go⟩★ 54,158◷ MIT[ claude ]
🔓

Marketing skills for Claude Code and AI agents. CRO, copywriting, SEO, analytics, and growth engineering.

// datacoreyhaines31/⟨JavaScript⟩★ 52,036◷ MIT[ claude ]
🔓

Apache Airflow - A platform to programmatically author, schedule, and monitor workflows

// dataapache/⟨Python⟩★ 47,013◷ Apache-2.0[ claude ]
🔓

CLI tool for configuring and monitoring Claude Code

// datadavila7/⟨Python⟩★ 32,352◷ MIT[ claude ]
→ see how sharequota.com connects across the ecosystem