Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
479 changes: 425 additions & 54 deletions public/live/arcade/index.html

Large diffs are not rendered by default.

479 changes: 425 additions & 54 deletions public/live/arcadenova/index.html

Large diffs are not rendered by default.

479 changes: 425 additions & 54 deletions public/live/brutal/index.html

Large diffs are not rendered by default.

479 changes: 425 additions & 54 deletions public/live/canvas/index.html

Large diffs are not rendered by default.

479 changes: 425 additions & 54 deletions public/live/editorial/index.html

Large diffs are not rendered by default.

479 changes: 425 additions & 54 deletions public/live/meter/index.html

Large diffs are not rendered by default.

479 changes: 425 additions & 54 deletions public/live/notebook/index.html

Large diffs are not rendered by default.

479 changes: 425 additions & 54 deletions public/live/prism/index.html

Large diffs are not rendered by default.

479 changes: 425 additions & 54 deletions public/live/prismnova/index.html

Large diffs are not rendered by default.

479 changes: 425 additions & 54 deletions public/live/pulse/index.html

Large diffs are not rendered by default.

479 changes: 425 additions & 54 deletions public/live/pulsenova/index.html

Large diffs are not rendered by default.

479 changes: 425 additions & 54 deletions public/live/row/index.html

Large diffs are not rendered by default.

479 changes: 425 additions & 54 deletions public/live/saffron/index.html

Large diffs are not rendered by default.

479 changes: 425 additions & 54 deletions public/live/signature/index.html

Large diffs are not rendered by default.

479 changes: 425 additions & 54 deletions public/live/sketch/index.html

Large diffs are not rendered by default.

479 changes: 425 additions & 54 deletions public/live/terminal/index.html

Large diffs are not rendered by default.

479 changes: 425 additions & 54 deletions public/live/terminalnova/index.html

Large diffs are not rendered by default.

Binary file modified public/previews/arcade-desktop.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/arcade-mobile.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/arcadenova-desktop.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/arcadenova-mobile.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/brutal-desktop.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/brutal-mobile.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/canvas-desktop.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/editorial-desktop.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/editorial-mobile.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/prism-desktop.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/prism-mobile.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/prismnova-desktop.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/prismnova-mobile.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/pulsenova-desktop.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/row-desktop.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/row-mobile.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/signature-desktop.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/sketch-desktop.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/sketch-mobile.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/terminal-desktop.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/terminal-mobile.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/terminalnova-desktop.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified public/previews/terminalnova-mobile.webp
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 4 additions & 4 deletions src/components/Landing.astro
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ const install = "bash <(curl -fsSL https://github.com/iitzSeriZdev/Row-Template/

const T = fa
? {
pill: "Row-Template 1.3.0 — PasarGuard و Rebecca، هفده طرح",
pill: "به‌زودی: Row-Template 1.4.0 — پرچم همهٔ کشورها، برنامه‌های پنل خودتان",
title: "صفحهٔ اشتراک پنل شما، همان‌طور که باید باشد.",
lead: "Row-Template صفحهٔ اشتراک داخلی 3X-UI، PasarGuard و Rebecca را با صفحه‌ای سریع، خصوصی و بدون برند جایگزین می‌کند — هفده طرح، پنج زبان، و نصب با یک فرمان.",
start: "شروع کنید",
Expand All @@ -27,7 +27,7 @@ const T = fa
docsSub: "از نصب تا عیب‌یابی، به فارسی و انگلیسی.",
}
: {
pill: "Row-Template 1.3.0 — PasarGuard, Rebecca, seventeen designs",
pill: "Upcoming: Row-Template 1.4.0 — every country's flag, your panel's own apps",
title: "Your panel's subscription page, done properly.",
lead: "Row-Template replaces the built-in subscription page of 3X-UI, PasarGuard and Rebecca with a fast, private, white-label one — seventeen designs, five languages, installed with one command.",
start: "Get Started",
Expand All @@ -44,15 +44,15 @@ const T = fa

const features = fa
? [
["shield-check", "بدون درخواست بیرونی", "نه CDN، نه فونت وب، نه آمارگیری، نه سرویس بیرونی QR. تنها درخواست صفحه — روی 3X-UI — به‌روزرسانی وضعیت از پنل خود شماست."],
["shield-check", "بدون درخواست بیرونی", "نه CDN، نه فونت وب، نه آمارگیری، نه سرویس بیرونی QR. تنها درخواست صفحه، به‌روزرسانی وضعیت از پنل خود شماست."],
["badge-check", "بدون برند", "نام سرویس، لینک پشتیبانی و لوگوی شما — ذخیره‌شده به‌صورت داده و قرارگرفته به‌صورت متن، هرگز اجرا نمی‌شود."],
["smartphone", "افزودن یک‌لمسی", "v2rayNG، Happ، sing-box، Streisand، V2Box، Shadowrocket، Clash Verge Rev و… بر اساس پلتفرم مشترک."],
["languages", "پنج زبان، راست‌به‌چپ", "انگلیسی، فارسی، عربی، روسی و چینی، با چیدمان کامل راست‌به‌چپ و پوستهٔ روشن و تیره."],
["lock", "چک‌سام اجباری", "هر دانلود با SHA-256 بررسی می‌شود و راهی برای رد شدن از آن نیست. هر طرح چک‌سام خودش را دارد."],
["history", "برگشت‌پذیر", "فعال‌سازی اتمی، بازگردانی خودکار هنگام خطا و بازگشت به نسخهٔ قبل با یک فرمان."],
]
: [
["shield-check", "No third-party requests", "No CDNs, web fonts, analytics or external QR services. The page's only request — on 3X-UI — is its status refresh, from your own panel."],
["shield-check", "No third-party requests", "No CDNs, web fonts, analytics or external QR services. The page's only request is its status refresh, from your own panel."],
["badge-check", "Genuinely white-label", "Your service name, support link and logo — stored as data and inserted as text, never executed."],
["smartphone", "One-tap import", "v2rayNG, Happ, sing-box, Streisand, V2Box, Shadowrocket, Clash Verge Rev and more, chosen by the subscriber's platform."],
["languages", "Five languages, RTL", "English, Persian, Arabic, Russian and Chinese, with full right-to-left layout and light and dark themes."],
Expand Down
10 changes: 10 additions & 0 deletions src/content/docs/en/configuration/branding.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,16 @@ row-template config

It asks for the three fields in turn, showing the current value. Press Enter to keep a value, or type `-` to clear it.

### From your panel's own settings (PasarGuard, Rebecca)

PasarGuard and Rebecca keep a subscription title and a support link in their own settings. Row-Template can use them, so you do not type them twice (1.4.0):

- **On a fresh interactive install** the installer shows them and asks `Use them for this page? [Y/n]`. Answer Enter to use them — the name and link questions are then skipped — or `n` to type your own.
- **On an existing install**, open `row-template` → **2 — Reconfigure branding** → **7 — Use PasarGuard's (or Rebecca's) name and support link**, or run `RT_PANEL_BRANDING=1 row-template config`.
- **In a script**, set `RT_PANEL_BRANDING=1`. `RT_SERVICE_NAME` and `RT_SUPPORT_URL` still win for the field they set.

The panels' own defaults — the title `Subscription` and the bare `https://t.me/` — are never offered, nor a PasarGuard title that still carries a per-subscriber placeholder such as `{USERNAME}`, and every value passes the same checks as one you type. The settings are only read, and only from a SQLite database; with MySQL, MariaDB or PostgreSQL nothing is offered.

### From a script

Give the values as variables. Fields you do not set keep their current values:
Expand Down
29 changes: 22 additions & 7 deletions src/content/docs/en/configuration/subscriber-page.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,18 @@ Everything on this page is the same in all seventeen designs; only where things

The top of the page shows the subscription's state, the traffic used and remaining, and the expiry date. The panel fills these in when it serves the page, so they are correct the moment it opens.

- **3X-UI:** while the page stays open it **refreshes these figures from your own panel** — about every 15 seconds for an active subscription and every 60 seconds otherwise — and pauses while the tab is hidden. A refresh is used only if the response carries the page's own fields; anything unexpected stops refreshing and leaves the figures the server rendered, rather than showing wrong values.
- **PasarGuard and Rebecca:** the page shows the figures **as of when it was opened**, and does not refresh them. Both panels serve live status on a path of their own rather than the address the page asks, so reloading the page is how a subscriber sees newer figures.
While the page stays open it **refreshes these figures from your own panel** — about every 15 seconds for an active subscription and every 60 seconds otherwise — and pauses while the tab is hidden. It asks each panel in its own way:

- **3X-UI:** the page's own address with `?format=info`, answered in the page's own fields;
- **PasarGuard and Rebecca** (since 1.4.0): the panel's `/<token>/info` address, answered in the panel's own format, which the page reads.

A response the page does not recognise stops refreshing and leaves the figures it already has, rather than showing wrong values.

A subscription that starts counting on first connection (**on hold**) is shown as active. On PasarGuard, which tells the page how long the hold lasts, the expiry reads that it starts on first connection and how many days it is then valid for; on Rebecca, which does not, the expiry is shown as unknown rather than guessed.

## Connect

**Connect** offers the apps for the subscriber's platform, detected from the browser, with a one-tap import link:
**Connect** offers the apps for the subscriber's platform, detected from the browser, with a one-tap import link. On PasarGuard, if you list your own applications in the panel, those are shown instead — see [below](#your-own-applications-pasarguard). Otherwise the page offers:

| Platform | Apps |
|---|---|
Expand All @@ -32,6 +36,17 @@ A subscription that starts counting on first connection (**on hold**) is shown a
- **v2rayN** has no verified import link, so it offers **copy** instead.
- **Shadowrocket** is marked as a paid app.

### Your own applications (PasarGuard)

PasarGuard lets you list the applications your subscribers should use, in **Settings → Subscription → Applications**. When that list has entries, the Connect card shows them instead of the built-in apps (1.4.0):

- one tab for each platform your list covers — Android, iOS, Windows, macOS, Linux, Android TV and Apple TV — opening on the subscriber's own platform when it is there;
- your **recommended** application first, marked as recommended, then the rest in your order;
- your **description** in the subscriber's language (English when there is none in theirs), and a **Download** link — the one you set for their language, else the English one;
- **Import**, with the link PasarGuard built for this subscriber, and **Copy**. If PasarGuard has no subscription URL prefix set, the address it puts in that link is only a path; the page completes it with its own address.

For a subscription limited to certain devices (HWID), PasarGuard has already left out the applications you did not mark for it. The **icons** you set are not shown: the page loads nothing from another site. With no applications listed, the page offers the built-in apps above.

## Copy and QR

The subscription link can be copied with one tap or shown as a **QR code** to scan from another device. The QR code is generated on the page itself; the link never leaves the browser.
Expand All @@ -40,14 +55,14 @@ The subscription link can be copied with one tap or shown as a **QR code** to sc

The **Configurations** section lists every server in the subscription on its own row:

- a country flag, or a monogram when the name carries no valid country code — the country is never guessed from a host or IP;
- a country flag — from a flag emoji in the name, or a two-letter country code standing on its own (`TR | Istanbul`, `DE-FRA-2`; `UK` shows the British flag) — or a monogram when the name has neither; the country is never guessed from a host, an IP or a country's name;
- the configuration's name and a protocol label: VLESS, VMess, Trojan, Shadowsocks, Hysteria/Hysteria2, WireGuard, AmneziaWG or Telegram MTProto;
- **View** (a local QR code and copy) and **Copy**, for adding a single server by hand.

Long lists get a search box. Exact duplicates are collapsed and malformed links are set aside rather than shown. Links stay masked until **View** is opened and are never written to the browser console.

<Callout type="info" title="Flags on Windows">
Windows has no flag emoji, so Chromium-based browsers show two letters (such as `DE`) instead. The flags of Germany, France, the Netherlands, Japan, Sweden and the United States are drawn with CSS so they appear everywhere; other countries use the platform's own flags where available.
<Callout type="info" title="Flags on every platform">
Since 1.4.0 the page carries its own flag font (Twemoji's flags), so every country's flag looks the same on Windows, Android, iOS, macOS and Linux — including Chromium-based browsers on Windows, which have no flags of their own and used to show two letters such as `DE`. The font is used for flags only and is inside the page file, so it adds no request.
</Callout>

## Languages and themes
Expand All @@ -60,7 +75,7 @@ A subscriber's choices are remembered in their own browser.
## What the page never does

- It makes **no third-party requests** — no CDNs, web fonts, analytics, external QR services or geolocation lookups. Fonts, styles, scripts and the QR generator are all inside the one file.
- It **never sends subscriber data anywhere**. The only network request it makes — on 3X-UI — is the status refresh to the same panel address it was served from.
- It **never sends subscriber data anywhere**. The only network request it makes is the status refresh to the same panel it was served from.
- It asks search engines not to index it, and sends no referrer when a link is followed.

## VPN apps are unaffected
Expand Down
4 changes: 2 additions & 2 deletions src/content/docs/en/help/errors.mdx
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
---
title: Error Reference
nav: Error Reference
description: Every error and warning the Row-Template 1.3.0 installer and row-template command can print — on 3X-UI, PasarGuard and Rebecca — what it means, why it happens, and how to fix it.
description: Every error and warning the Row-Template 1.4.0 installer and row-template command can print — on 3X-UI, PasarGuard and Rebecca — what it means, why it happens, and how to fix it.
---

This page lists **every** message the installer and the `row-template` command print as an error or a warning — including the panel adapters and the activation transaction engine — taken from the 1.3.0 source. Paste part of a message into the filter to find it; names, paths and numbers that change from run to run are shown in *italics*.
This page lists **every** message the installer and the `row-template` command print as an error or a warning — including the panel adapters and the activation transaction engine — taken from the 1.4.0 source. Paste part of a message into the filter to find it; names, paths and numbers that change from run to run are shown in *italics*.

Messages look like this in your terminal:

Expand Down
10 changes: 7 additions & 3 deletions src/content/docs/en/help/faq.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@ The one you choose. An interactive install asks; a scripted fresh install must n

## Does the page send data anywhere?

No. It makes no third-party requests — no CDNs, web fonts, analytics, or external QR and geolocation services. On 3X-UI its only request is the status refresh to the panel it was served from; on PasarGuard and Rebecca it makes none.
No. It makes no third-party requests — no CDNs, web fonts, analytics, or external QR and geolocation services. Its only request is the status refresh to the panel it was served from. On PasarGuard, the icons of the applications you list are not loaded for the same reason.

## Why do the figures not refresh on PasarGuard and Rebecca?

Both panels serve live status on a path of their own, rather than the address the page asks. In 1.3.0 the page shows the figures as of when it was opened; reloading it shows newer ones.
They do from 1.4.0: the page asks each panel for the figures at its own `/<token>/info` address. In 1.3.x it showed the figures as of when it was opened. If they still do not refresh, see [Troubleshooting](/docs/help/troubleshooting/).

## Do I need sqlite3?

Expand All @@ -50,7 +50,7 @@ On the command line, `update` always applies the latest release — that makes i

## Can I use my own design?

Not in 1.3.0: only the seventeen shipped designs can be installed, each verified by its checksum. A proposal for custom templates is recorded in the project's design notes.
Not in 1.4.0: only the seventeen shipped designs can be installed, each verified by its checksum. A proposal for custom templates is recorded in the project's design notes.

## Can I use it behind a reverse proxy or CDN?

Expand All @@ -76,6 +76,10 @@ No. Every command reports to the terminal. `row-template verify` is the place to

Not as a public release. The fixes prepared under that number are included in 1.3.0.

## Can the page use the applications I listed in PasarGuard?

Yes, from 1.4.0. When **Settings → Subscription → Applications** has entries, the Connect card shows those, with your descriptions and download links, instead of its built-in apps. [Details →](/docs/configuration/subscriber-page/#your-own-applications-pasarguard)

## Is it free?

Yes. Row-Template is open source under the MIT License.
11 changes: 6 additions & 5 deletions src/content/docs/en/help/troubleshooting.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ If `verify` passes but your browser still shows the old page, something between

## The installer refuses Rebecca

`panel rebecca: this is Rebecca 0.0.x, the Python edition …` — Docker Hub's `rebeccapanel/rebecca` image is still the 0.0.x Python edition, which cannot render Row-Template's Rebecca page; with it, Rebecca would accept the setting and silently keep serving its own page. The installer refuses it before changing anything. Install Rebecca **1.x**, the Go edition, with Rebecca's binary installer (`rebecca-binary.sh`) — the install Row-Template is tested against — then run the installer again. The refusal message also names Rebecca's `rebecca migrate-binary`; Row-Template has not verified it, and in Rebecca's current scripts that command is not routed by the `rebecca` command, so it may only print its usage text.
`panel rebecca: this is Rebecca 0.0.x, the Python edition …` — Docker Hub's `rebeccapanel/rebecca` image is still the 0.0.x Python edition, which cannot render Row-Template's Rebecca page; with it, Rebecca would accept the setting and silently keep serving its own page. The installer refuses it before changing anything. Install Rebecca **1.x**, the Go edition, with Rebecca's binary installer (`rebecca-binary.sh`) — the install Row-Template is tested against — then run the installer again.

## The installer says more than one panel is installed

Expand All @@ -67,8 +67,7 @@ On PasarGuard and Rebecca, activation is a transaction: if a step fails, the pan

## The page shows, but the figures never update

- **PasarGuard and Rebecca:** expected. On these panels the page shows the figures as of when it was opened; reloading it shows newer ones. Both panels serve live status on a path of their own, and wiring that up is a decision deferred in 1.3.0.
- **3X-UI:** the page refreshes by requesting its own address with `?format=info` from your panel. If a reverse proxy strips the query string or blocks that request, the page keeps the figures it was served with. A response the page does not recognise stops refreshing on purpose; reloading the page starts it again.
The page refreshes by asking your panel for the figures: on 3X-UI its own address with `?format=info`, on PasarGuard and Rebecca the panel's `/<token>/info` address (1.4.0; on 1.3.x those two panels did not refresh at all). If a reverse proxy strips the query string or does not pass that address through, the page keeps the figures it was served with, and its footer says **Live updates stopped.** or **Live updates are not available on this panel**. Let the address through to the panel like the subscription address itself. A response the page does not recognise stops refreshing on purpose; reloading the page starts it again.

## Automatic activation is unavailable

Expand All @@ -90,7 +89,7 @@ On PasarGuard and Rebecca, activation is a transaction: if a step fails, the pan

## Designs are missing after updating from 1.1.0

After `row-template update` from 1.1.0, the next time you open `row-template`, or run `row-template config` or `row-template verify` as root, 1.3.0 downloads the rest of the same release — every design — before doing anything else. If the manager says `No templates are installed, and they could not be restored automatically`, that download failed and the message above it says why: make sure the server can reach the release source, then open the menu again, or run `row-template update`. [Why →](/docs/management/updating/#upgrading-from-110-or-120)
After `row-template update` from 1.1.0, the next time you open `row-template`, or run `row-template config` or `row-template verify` as root, the new release downloads the rest of the same release — every design — before doing anything else. If the manager says `No templates are installed, and they could not be restored automatically`, that download failed and the message above it says why: make sure the server can reach the release source, then open the menu again, or run `row-template update`. [Why →](/docs/management/updating/#upgrading-from-110-or-120)

## A branding change does not show

Expand All @@ -104,7 +103,9 @@ The page is regenerated — and on PasarGuard and Rebecca, copied into the panel

## Flags show as two letters on Windows

Windows does not display flag emoji, so Chromium-based browsers show a country code such as `DE`. Row-Template draws six common flags itself (Germany, France, the Netherlands, Japan, Sweden, the United States); the rest fall back to letters. This is a platform limitation, not a fault.
Update to 1.4.0: the page then carries its own flag font, and every country's flag shows on Windows too. In 1.3.x, Chromium-based browsers on Windows showed a code such as `DE` for all but six countries, because Windows has no flags of its own.

A badge with a **single letter** is the monogram: the node's name has no flag emoji and no two-letter country code standing on its own (`TR | Istanbul`, `DE-FRA-2`), or the code is not a country. Country and city names are not read; put the flag or the code in the node's name in your panel.

## `row-template: command not found`

Expand Down
Loading
Loading