
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…
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.
Grab the latest release asset from GitHub.
# download a build from https://github.com/NewbieEvil/sharequota.com/releases
git clone https://github.com/NewbieEvil/sharequota.com
// compatibility
| Platforms | cli, api, web, mobile |
|---|---|
| Operating systems | — |
| AI compatibility | claude |
| License | MIT |
| Pricing | open-source |
| Language | — |
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 Probutton, an earnings calculator and an entire two-sided marketplace from this codebase. It is whyRELEASE_REPOisnulland a gate fails the build if any download link renders while there is no release to point at. Readdocs/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 8 models key · OAuth |
ChatGPT 32 models key · OAuth |
Gemini 19 models key · OAuth |
DeepSeek 6 models API key |
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 five | Clients 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 models | 32 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 translation | Anthropic ↔ OpenAI ↔ Gemini for requests, responses and SSE streams |
| 💾 6 platform builds | macOS · Linux · Windows, x64 and ARM64 each — one static binary, no runtime |
| 🧪 Depth over breadth | 26 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_REPOisnull, why no download button on the site renders an href, and whynpm run qc:releasesasserts 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
| Script | Does |
|---|---|
dev build start | Next.js |
typecheck | tsc --noEmit |
models | Regenerate lib/models.generated.ts from the binary's registry JSON |
qc | Chain the eleven gates |
qc:routes qc:a11y qc:seo qc:links qc:i18n | Route health · accessibility · SEO · link integrity · dictionaries |
qc:consistency qc:freshness qc:affordance qc:releases | Token drift · content rot · control affordance · dead downloads |
qc:perf qc:parity | Performance budget · computed-style parity |
shots | Screenshot every page at every breakpoint in both themes |
🧱 Stack
|
Next.js 15 App Router |
React 19 server-first |
Tailwind v4 CSS variables |
TypeScript strict |
Node 20.17 pinned |
Playwright dev only |
| Why it is here | |
|---|---|
| ▲ Next.js 15 — App Router, server components | Locale negotiation needs a real request pipeline — see Deploying |
| ⚛ React 19 | Interactive islands only; the rest is server-rendered |
🎨 Tailwind CSS v4 via @tailwindcss/postcss | The token system is CSS custom properties in one file, and v4's @custom-variant is what desk: is built on |
| 🔷 TypeScript, strict | Dictionary is derived from the English file, so a missing translation key is a build error |
| 🎭 Playwright, dev only | Every 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.
| Source | Holds | Changed by | |
|---|---|---|---|
| 📊 | src/lib/site.ts | Product facts — version, port, platforms, providers, packages, dependencies, proof points, navigation | A release |
| 🇬🇧 | src/i18n/dictionaries/*.ts | Every user-visible string, in every language | A copy edit or a translation |
| 🤖 | src/lib/models.generated.ts | The model catalogue, extracted from the binary's own registry JSON by npm run models | Regenerating 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.
| Group | Count | Routes | |
|---|---|---|---|
| 📦 | Product | 6 | / · /models · /providers · /download · /pricing · /compare |
| 📖 | Docs | 10 | /docs + quickstart · api · routing · cli · config · deploy · troubleshooting · limits · faq |
| 🏗 | Project | 5 | /changelog · /roadmap · /architecture · /licenses · /brand |
| 🏢 | Company | 6 | /about · /contact · /security · /privacy · /terms · /sitemap |
| Named | 27 | ||
| ⚙ | Generated | 84 | 79 model pages + 5 provider pages |
| Total | 111 |
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 declaresalternates: { canonical }replaces the parent layout'salternateswholesale — Next does not merge the nestedlanguagesmap. Eight of nine pages silently lost their hreflang tags that way. Every page now builds metadata throughpageMetadata(), 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"]
| Gate | What it asserts | |
|---|---|---|
| 🔷 | typecheck | tsc --noEmit |
| 📐 | qc:consistency | Static 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 |
| 📦 | build | Production build |
| 🔗 | qc:routes | Every 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:a11y | Every page × 8 breakpoints × 2 themes in a real browser — see below |
| 🔍 | qc:seo | Title ≤ 60 chars, description 70–160, complete OG/Twitter, and uniqueness across every page in the sitemap |
| 🔗 | qc:links | Every internal link resolves, every #anchor has a target that exists, every external link in a new tab carries rel="noopener" |
| 🌐 | qc:i18n | Dictionary integrity — unregistered loaders, orphan files, untranslated values |
| 👆 | qc:affordance | Cursor affordance (<a> and <button> in the same visual role must not show different pointers) and decoration painted over text |
| 💾 | qc:releases | No 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:
| Check | Rule | |
|---|---|---|
| ↔ | H-SCROLL | the page must never scroll horizontally |
| 📦 | OVERFLOW-EL | names the element causing it |
| 🌗 | CONTRAST | ≥ 4.5:1, or ≥ 3:1 for large text, against the composited background |
| 📱 | IOS-ZOOM | fields ≥ 16px below the lg breakpoint |
| 👆 | TOUCH-TARGET | controls ≥ 40px tall on phone and tablet |
| 🔠 | HEADING-SKIP | no h1 → h3 jumps |
| 🏷 | NO-NAME | every link and button has an accessible name |
| ✂ | CLIPPED | in-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.
| Job | Runs on | Gates | |
|---|---|---|---|
| ⚡ | fast | every push | typecheck · consistency · freshness · build · seo · i18n · releases |
| 🖥 | browser | pull requests | routes · 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
| Endpoint | What it is | |
|---|---|---|
| 🗺 | /sitemap.xml | Generated from lib/routes.ts — the same registry the route gate reads |
| 🤖 | /robots.txt | |
| 🧠 | /llms.txt | The 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.xml | The 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-image | 1200×630, prerendered per locale |
| 🏷 | JSON-LD | SoftwareApplication, 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.
| Doc | What it answers | |
|---|---|---|
| 🧭 | docs/FLOWS.md | Who 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.md | Eleven sections of rules, each citing the clause it comes from — WCAG 2.2 AA, ISO 9241-210, ICU, DTCG, PDPD/GDPR |
| ✅ | docs/QC-CHECKLIST.md | Eleven numbered gates with PASS/FAIL criteria. npm run qc chains the automated ones |
| ✍ | docs/CONTENT.md | Positioning and per-page content spec, including the competitor research /compare is built on |
| 🎨 | docs/HOUSE-STYLE.md | 1,762 lines of measured decisions — every palette, type and layout round, with the numbers |
| 📈 | docs/SCALE.md | Why the site is a tree rather than a landing page |
| 🗺 | docs/ROADMAP.md | Staged 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.
| What | Where | State | |
|---|---|---|---|
| 💾 | Release URLs | RELEASE_REPO in src/lib/site.ts | null — 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 sizes | size on each platform | null — the UI omits the figure rather than printing a number nobody measured |
| 🔗 | Social handles | SOCIALS in src/lib/site.ts | Two, both verified — it was twelve, all invented. See below |
| 💲 | Pricing | pricing in the dictionary | Structure 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.
| What | Measured | Floor | |
|---|---|---|---|
| ⚠ | White label on the light primary fill #16a34a | 3.30:1 | 4.5 (14px / w500) |
The alternatives were real and were declined, which is what makes this a decision rather than an oversight:
| Option | Measured | |
|---|---|---|
| ✅ | Dark #0e100e label on the same fill | 5.80 |
| ✅ | White label on a fill one step deeper #15803d | 5.02 |
| ❌ | White on #16a34a — shipped | 3.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.
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.
// embed badge
[](https://claudeers.com/sharequotacom)
// retro hit counter
[](https://claudeers.com/sharequotacom)
// reviews
// guestbook
// 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…
Marketing skills for Claude Code and AI agents. CRO, copywriting, SEO, analytics, and growth engineering.
Apache Airflow - A platform to programmatically author, schedule, and monitor workflows
CLI tool for configuring and monitoring Claude Code