1. Drop the dormant api_tokens table on startup: initModels now runs dropApiTokensTable (GORM Migrator, string table name since the model is gone). No-ops on fresh databases, where AutoMigrate never creates it; covers databases carried over from V2.7.0 whose install row was already deleted by hand. Covered by TestDropApiTokensTable_DropsLegacyTable. 2. Delete provably dead Nord/PIA integration: service/integration/nord.go and pia.go (+ pia_test.go), the whole internal/pia package (only pia.go imported it), the nord/pia setting keys and getters, the HasNordSecret view field, and the frontend model/schema fields; openapigen regenerated (generated diff is exactly the hasNordSecret removal). Evidence: zero production callers for NordService/PiaService, no controller routes, no jobs, no frontend UI, no openapi exposure; panel egress is a separate netproxy mechanism and does not consume them. maxResponseSize moves to warp.go, which is its remaining user (it was declared in nord.go). 3. Delete unreferenced internal/web/locale/translation/ (3 files): the runtime loads internal/web/translation (web.go embed + locale.go disk fallback); zero references to the locale/translation path. 4. gofmt-align the AllSetting SubPort block (pre-existing drift). 5. Docs: architecture.md token table row, API-tokens troubleshooting row, api_token.go tree entry, setting/api gateway token comments, the mtls 'API token optional' phrase, and the integration provider list (now warp.go only); the 4 api-tokens.mdx pages plus their meta.json entries; the per-node apiToken prose in nodes.mdx (4 languages, title and anchor slugs updated in pairs; frontmatter re-parsed clean). Deliberately NOT changed: install-agent.sh RELEASE_BASE stays V2.7.0 (agent installs keep pulling from V2.7.0); install-master.sh LUI_URL V2.7.0 -> V2.7.1 is left to the release commit; no forced first-login password change. Kept as live, with evidence: WARP (hourly WarpIpJob in web.go), mtproto (live inbound protocol + sidecar manager + traffic job), xray_version (NodeList UI fallback when singboxVersion is absent), session.apiAuthUserKey (spa_test login simulation + GetLoginUser production fast path).
L-UI Documentation
The official documentation and product site for L-UI — an advanced web panel for managing Xray-core servers.
Overview
This directory (docs/ in the L-UI monorepo) contains
the source for docs.sanaei.dev — a static-first documentation and
marketing site built with Fumadocs on Next.js. It has no backend,
no database, and no auth: every page is prerendered and every tool runs entirely in the
browser.
What's inside
The documentation walks you through L-UI from first install to day-to-day operation:
- Getting Started — installation, first login, and updating or uninstalling the panel.
- Configuration — the panel, inbounds, REALITY, transports, clients, subscriptions, and share links.
- Operations — reverse proxy, multi-node setups, outbounds & routing, backup/restore, the Telegram bot, and security.
- Reference — environment variables, the database, ports & firewall, and the HTTP API.
- Help — troubleshooting, FAQ, migration, and how to contribute.
Interactive tools
The site ships with in-browser helpers that generate configuration for you — no data ever leaves your browser:
| Tool | What it does |
|---|---|
| REALITY Config Generator | Build a valid REALITY inbound configuration. |
| Share Link Inspector | Decode and inspect vless:// / vmess:// share links. |
| Install Command Builder | Assemble the right install command for your setup. |
| Reverse Proxy Generator | Generate reverse-proxy configs (Nginx / Caddy). |
| Protocol Wizard | Pick and configure the right protocol for your needs. |
| Firewall Rules Generator | Produce firewall rules for your ports. |
Tech stack
| Layer | Technology |
|---|---|
| Framework | Next.js 16 (App Router) · React 19 |
| Docs | Fumadocs (-ui / -core / -mdx) |
| Styling | Tailwind CSS v4 |
| Search | Orama static index |
| Language | TypeScript (strict) |
| Tests | Vitest for the pure lib/xray logic |
| Tooling | pnpm · oxlint · oxfmt |
Quick start
This project uses pnpm (npm lockfiles are gitignored). Run everything
from the docs/ directory:
cd docs
pnpm install
pnpm dev # http://localhost:3000
Useful scripts:
| Script | Description |
|---|---|
pnpm dev |
Start the dev server |
pnpm build |
Production build (also typechecks) |
pnpm typecheck |
Generate MDX/route types and tsc --noEmit |
pnpm lint |
Run oxlint (.oxlintrc.json) |
pnpm test |
Run unit tests (Vitest) |
See CONTRIBUTING.md for the full list and project conventions.
Project structure
app/ # Next.js App Router — layouts, home, docs, OG images, search, llms.txt
components/ # React components — interactive tools, home sections, MDX bindings
content/docs/ # MDX documentation, one folder per locale (en · fa · ru · zh)
lib/ # source config, i18n, GitHub stats, and the unit-tested lib/xray logic
public/ # static assets — logos, favicon, openapi.json, CNAME
scripts/ # build-time scripts (API reference generation)
source.config.ts # Fumadocs MDX schema & collection config
next.config.mjs # Next.js config (static-export gating)
proxy.ts # i18n middleware
Internationalization
Documentation is authored in English. Persian (fa, RTL), Russian (ru), and
Chinese (zh) locales are wired up; untranslated pages fall back to English so they
never 404. English URLs are unprefixed; other locales live under /fa, /ru, /zh.
Deployment
The site builds for two targets:
- Vercel / Node —
pnpm build(static search index + prerendered OG images). - GitHub Pages (static export) —
DEPLOY_TARGET=static pnpm build→out/.
Contributing
Contributions are welcome! Setup, scripts, and project conventions live in
CONTRIBUTING.md.
License
Licensed under GPL-3.0.