1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# Manual Analysis: v15.7 (minified) vs v13.0 (readable)
## Executive Summary
v15.7 is a **minified build** of essentially the same codebase as v13.0.
The version bump (13.0 → 15.7) does NOT indicate major new features —
both are built on BlueKnight Panel 5.2.4 with the Marvel/Arblant UI mod.
## Key Findings
### 1. Same Core
- Both report `version: "5.2.4"` (BlueKnight base)
- Same TAB_ROUTES (protocols, warp, subscriptions, dns, routing, settings, overview, password, nodeshare)
- Same APP_CONFIG structure (bk_session cookie, wd_session legacy)
- Same UI strings ("Default Dev Password Active", "Welcome to BlueKnight Panel", etc.)
### 2. Theme System (present in both)
- 9 glass theme backgrounds: theme-bg-1.webp through theme-bg-9.webp
- "Randomize Theme" feature (5 occurrences in both)
- ~940 `--theme-*` CSS variables (934 in v13, 945 in v15.7)
- Glass morphism design language
### 3. Arblant Branding (present in both)
- 4 occurrences of "arblant"/"Arblant" in both versions
- Marvel Multiverse Edition tagline
### 4. RTL Support (present in both)
- Both contain RTL markup
- Persian RTL engine via CSS (no hardcoded Persian text in either)
### 5. Differences (minor)
- v15.7 has 11 additional `--theme-*` variables (945 vs 934)
- v15.7 is 123KB smaller (minification: no whitespace, short names, no comments)
- v13.0 has 231 readable function names; v15.7 has minified equivalents
## Function Mapping (confirmed)
| v15.7 (minified) | v13.0 (readable) | Purpose |
|------------------|------------------|---------|
| `ki` | `renderDashboardPage` | Main panel HTML renderer |
| `Di` | `handlePanel` | Main panel request handler |
| `yo` | `dnsQuestion` | DNS question builder |
| `vo` | `TYPES` | DNS record types |
## Architecture (from v13.0 readable source)
```
handlePanel(request, env)
├── Check password configured → redirect to /panel/setup
├── Check session cookie → redirect to /panel/login
├── Get settings from KV
├── Determine initialTab from URL path (TAB_ROUTES)
├── Handle POST (settings changes)
└── renderDashboardPage({host, isDefaultPassword, flashMessage, settings, initialTab})
├── Sidebar with nav buttons (switchTab)
├── Tab panes (overview, protocols, warp, subscriptions, dns, routing, settings)
└── Client-side JS (switchTab function)
```
## Implications for Feature Work
1. **Use v13.0 as primary reference** — it documents the full panel logic
2. **String-replacement on final HTML still works** but now I understand WHY
3. **For native modifications**: map the target function via v13.0, find minified equivalent in v15.7 by distinctive strings, then patch precisely
4. **New code between versions is minimal** — v13.0 covers ~95% of v15.7's logic
## Update 2026-10-20: v15-readable obtained
- File: `v15-readable.js` (1.34MB, 7,820 lines, node --check OK)
- Source: Claude reformatted the minified v15 with esbuild (indentation + line breaks)
- NOT original source: server functions still have short names (~170), comments gone
- Readable: client JS/CSS/HTML in template literals, FA/EN texts, translation dict, studio settings, 9 WebP images
- This is now the PRIMARY reference for v15.7 work (replaces v13.0 for v15-specific features)
- v13.0 remains useful for mapping short names to original intent (e.g. yo=dnsQuestion)