diff --git a/backend/cmd/server/main.go b/backend/cmd/server/main.go
index c9dc57bb..5b7a01cc 100644
--- a/backend/cmd/server/main.go
+++ b/backend/cmd/server/main.go
@@ -51,7 +51,7 @@ func main() {
flag.Parse()
if *showVersion {
- log.Printf("Sub2API %s (commit: %s, built: %s)\n", Version, Commit, Date)
+ log.Printf("TianShuAPI %s (commit: %s, built: %s)\n", Version, Commit, Date)
return
}
@@ -101,7 +101,7 @@ func runSetupServer() {
// This allows users to run setup on a different address if needed
addr := config.GetServerAddress()
log.Printf("Setup wizard available at http://%s", addr)
- log.Println("Complete the setup wizard to configure Sub2API")
+ log.Println("Complete the setup wizard to configure TianShuAPI")
if err := r.Run(addr); err != nil {
log.Fatalf("Failed to start setup server: %v", err)
diff --git a/backend/internal/repository/github_release_service.go b/backend/internal/repository/github_release_service.go
index 77839626..f38d4d13 100644
--- a/backend/internal/repository/github_release_service.go
+++ b/backend/internal/repository/github_release_service.go
@@ -52,7 +52,7 @@ func (c *githubReleaseClient) FetchLatestRelease(ctx context.Context, repo strin
return nil, err
}
req.Header.Set("Accept", "application/vnd.github.v3+json")
- req.Header.Set("User-Agent", "Sub2API-Updater")
+ req.Header.Set("User-Agent", "TianShuAPI-Updater")
resp, err := c.httpClient.Do(req)
if err != nil {
diff --git a/backend/internal/repository/github_release_service_test.go b/backend/internal/repository/github_release_service_test.go
index d375a193..291da3b1 100644
--- a/backend/internal/repository/github_release_service_test.go
+++ b/backend/internal/repository/github_release_service_test.go
@@ -223,7 +223,7 @@ func (s *GitHubReleaseServiceSuite) TestFetchLatestRelease_Success() {
s.srv = newLocalTestServer(s.T(), http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
require.Equal(s.T(), "/repos/test/repo/releases/latest", r.URL.Path)
require.Equal(s.T(), "application/vnd.github.v3+json", r.Header.Get("Accept"))
- require.Equal(s.T(), "Sub2API-Updater", r.Header.Get("User-Agent"))
+ require.Equal(s.T(), "TianShuAPI-Updater", r.Header.Get("User-Agent"))
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
_, _ = w.Write([]byte(releaseJSON))
diff --git a/backend/internal/server/api_contract_test.go b/backend/internal/server/api_contract_test.go
index d96732bd..4155849d 100644
--- a/backend/internal/server/api_contract_test.go
+++ b/backend/internal/server/api_contract_test.go
@@ -271,14 +271,14 @@ func TestAPIContracts(t *testing.T) {
service.SettingKeySMTPUsername: "user",
service.SettingKeySMTPPassword: "secret",
service.SettingKeySMTPFrom: "no-reply@example.com",
- service.SettingKeySMTPFromName: "Sub2API",
+ service.SettingKeySMTPFromName: "TianShuAPI",
service.SettingKeySMTPUseTLS: "true",
service.SettingKeyTurnstileEnabled: "true",
service.SettingKeyTurnstileSiteKey: "site-key",
service.SettingKeyTurnstileSecretKey: "secret-key",
- service.SettingKeySiteName: "Sub2API",
+ service.SettingKeySiteName: "TianShuAPI",
service.SettingKeySiteLogo: "",
service.SettingKeySiteSubtitle: "Subtitle",
service.SettingKeyAPIBaseURL: "https://api.example.com",
@@ -308,7 +308,7 @@ func TestAPIContracts(t *testing.T) {
"smtp_username": "user",
"smtp_password_configured": true,
"smtp_from_email": "no-reply@example.com",
- "smtp_from_name": "Sub2API",
+ "smtp_from_name": "TianShuAPI",
"smtp_use_tls": true,
"turnstile_enabled": true,
"turnstile_site_key": "site-key",
@@ -321,7 +321,7 @@ func TestAPIContracts(t *testing.T) {
"ops_realtime_monitoring_enabled": true,
"ops_query_mode_default": "auto",
"ops_metrics_interval_seconds": 60,
- "site_name": "Sub2API",
+ "site_name": "TianShuAPI",
"site_logo": "",
"site_subtitle": "Subtitle",
"api_base_url": "https://api.example.com",
diff --git a/backend/internal/service/auth_service.go b/backend/internal/service/auth_service.go
index 386b43fc..2bb46c87 100644
--- a/backend/internal/service/auth_service.go
+++ b/backend/internal/service/auth_service.go
@@ -207,7 +207,7 @@ func (s *AuthService) SendVerifyCode(ctx context.Context, email string) error {
}
// 获取网站名称
- siteName := "Sub2API"
+ siteName := "TianShuAPI"
if s.settingService != nil {
siteName = s.settingService.GetSiteName(ctx)
}
@@ -247,7 +247,7 @@ func (s *AuthService) SendVerifyCodeAsync(ctx context.Context, email string) (*S
}
// 获取网站名称
- siteName := "Sub2API"
+ siteName := "TianShuAPI"
if s.settingService != nil {
siteName = s.settingService.GetSiteName(ctx)
}
diff --git a/backend/internal/service/setting_service.go b/backend/internal/service/setting_service.go
index 0a7426f8..6e026b90 100644
--- a/backend/internal/service/setting_service.go
+++ b/backend/internal/service/setting_service.go
@@ -89,7 +89,7 @@ func (s *SettingService) GetPublicSettings(ctx context.Context) (*PublicSettings
EmailVerifyEnabled: settings[SettingKeyEmailVerifyEnabled] == "true",
TurnstileEnabled: settings[SettingKeyTurnstileEnabled] == "true",
TurnstileSiteKey: settings[SettingKeyTurnstileSiteKey],
- SiteName: s.getStringOrDefault(settings, SettingKeySiteName, "Sub2API"),
+ SiteName: s.getStringOrDefault(settings, SettingKeySiteName, "TianShuAPI"),
SiteLogo: settings[SettingKeySiteLogo],
SiteSubtitle: s.getStringOrDefault(settings, SettingKeySiteSubtitle, "Subscription to API Conversion Platform"),
APIBaseURL: settings[SettingKeyAPIBaseURL],
@@ -247,7 +247,7 @@ func (s *SettingService) IsEmailVerifyEnabled(ctx context.Context) bool {
func (s *SettingService) GetSiteName(ctx context.Context) string {
value, err := s.settingRepo.GetValue(ctx, SettingKeySiteName)
if err != nil || value == "" {
- return "Sub2API"
+ return "TianShuAPI"
}
return value
}
@@ -292,7 +292,7 @@ func (s *SettingService) InitializeDefaultSettings(ctx context.Context) error {
defaults := map[string]string{
SettingKeyRegistrationEnabled: "true",
SettingKeyEmailVerifyEnabled: "false",
- SettingKeySiteName: "Sub2API",
+ SettingKeySiteName: "TianShuAPI",
SettingKeySiteLogo: "",
SettingKeyDefaultConcurrency: strconv.Itoa(s.cfg.Default.UserConcurrency),
SettingKeyDefaultBalance: strconv.FormatFloat(s.cfg.Default.UserBalance, 'f', 8, 64),
@@ -332,7 +332,7 @@ func (s *SettingService) parseSettings(settings map[string]string) *SystemSettin
TurnstileEnabled: settings[SettingKeyTurnstileEnabled] == "true",
TurnstileSiteKey: settings[SettingKeyTurnstileSiteKey],
TurnstileSecretKeyConfigured: settings[SettingKeyTurnstileSecretKey] != "",
- SiteName: s.getStringOrDefault(settings, SettingKeySiteName, "Sub2API"),
+ SiteName: s.getStringOrDefault(settings, SettingKeySiteName, "TianShuAPI"),
SiteLogo: settings[SettingKeySiteLogo],
SiteSubtitle: s.getStringOrDefault(settings, SettingKeySiteSubtitle, "Subscription to API Conversion Platform"),
APIBaseURL: settings[SettingKeyAPIBaseURL],
diff --git a/backend/internal/setup/cli.go b/backend/internal/setup/cli.go
index 03ac3f66..a0a74a63 100644
--- a/backend/internal/setup/cli.go
+++ b/backend/internal/setup/cli.go
@@ -51,7 +51,7 @@ func RunCLI() error {
fmt.Println()
fmt.Println("╔═══════════════════════════════════════════╗")
- fmt.Println("║ Sub2API Installation Wizard ║")
+ fmt.Println("║ TianShuAPI Installation Wizard ║")
fmt.Println("╚═══════════════════════════════════════════╝")
fmt.Println()
diff --git a/frontend/src/api/index.ts b/frontend/src/api/index.ts
index 50b14c4c..e80cc753 100644
--- a/frontend/src/api/index.ts
+++ b/frontend/src/api/index.ts
@@ -1,5 +1,5 @@
/**
- * API Client for Sub2API Backend
+ * API Client for TianShuAPI Backend
* Central export point for all API modules
*/
diff --git a/frontend/src/components/layout/AuthLayout.vue b/frontend/src/components/layout/AuthLayout.vue
index 3cfc1d4d..bd20b3c4 100644
--- a/frontend/src/components/layout/AuthLayout.vue
+++ b/frontend/src/components/layout/AuthLayout.vue
@@ -65,7 +65,7 @@ import { ref, computed, onMounted } from 'vue'
import { getPublicSettings } from '@/api/auth'
import { sanitizeUrl } from '@/utils/url'
-const siteName = ref('Sub2API')
+const siteName = ref('TianShuAPI')
const siteLogo = ref('')
const siteSubtitle = ref('Subscription to API Conversion Platform')
@@ -74,7 +74,7 @@ const currentYear = computed(() => new Date().getFullYear())
onMounted(async () => {
try {
const settings = await getPublicSettings()
- siteName.value = settings.site_name || 'Sub2API'
+ siteName.value = settings.site_name || 'TianShuAPI'
siteLogo.value = sanitizeUrl(settings.site_logo || '', { allowRelative: true })
siteSubtitle.value = settings.site_subtitle || 'Subscription to API Conversion Platform'
} catch (error) {
diff --git a/frontend/src/components/layout/README.md b/frontend/src/components/layout/README.md
index e2cbdd17..e94aa31c 100644
--- a/frontend/src/components/layout/README.md
+++ b/frontend/src/components/layout/README.md
@@ -1,6 +1,6 @@
# Layout Components
-Vue 3 layout components for the Sub2API frontend, built with Composition API, TypeScript, and TailwindCSS.
+Vue 3 layout components for the TianShuAPI frontend, built with Composition API, TypeScript, and TailwindCSS.
## Components
diff --git a/frontend/src/i18n/locales/en.ts b/frontend/src/i18n/locales/en.ts
index bd17a7f1..be468ec9 100644
--- a/frontend/src/i18n/locales/en.ts
+++ b/frontend/src/i18n/locales/en.ts
@@ -43,8 +43,8 @@ export default {
// Setup Wizard
setup: {
- title: 'Sub2API Setup',
- description: 'Configure your Sub2API instance',
+ title: 'TianShuAPI Setup',
+ description: 'Configure your TianShuAPI instance',
database: {
title: 'Database Configuration',
description: 'Connect to your PostgreSQL database',
@@ -2447,7 +2447,7 @@ export default {
secretKeyConfiguredHint: 'Secret key configured. Leave empty to keep the current value.' },
linuxdo: {
title: 'LinuxDo Connect Login',
- description: 'Configure LinuxDo Connect OAuth for Sub2API end-user login',
+ description: 'Configure LinuxDo Connect OAuth for TianShuAPI end-user login',
enable: 'Enable LinuxDo Login',
enableHint: 'Show LinuxDo login on the login/register pages',
clientId: 'Client ID',
@@ -2477,7 +2477,7 @@ export default {
title: 'Site Settings',
description: 'Customize site branding',
siteName: 'Site Name',
- siteNamePlaceholder: 'Sub2API',
+ siteNamePlaceholder: 'TianShuAPI',
siteNameHint: 'Displayed in emails and page titles',
siteSubtitle: 'Site Subtitle',
siteSubtitlePlaceholder: 'Subscription to API Conversion Platform',
@@ -2523,7 +2523,7 @@ export default {
fromEmail: 'From Email',
fromEmailPlaceholder: "noreply{'@'}example.com",
fromName: 'From Name',
- fromNamePlaceholder: 'Sub2API',
+ fromNamePlaceholder: 'TianShuAPI',
useTls: 'Use TLS',
useTlsHint: 'Enable TLS encryption for SMTP connection'
},
@@ -2692,14 +2692,14 @@ export default {
// Admin tour steps
admin: {
welcome: {
- title: '👋 Welcome to Sub2API',
- description: '
Sub2API is a powerful AI service gateway platform that helps you easily manage and distribute AI services.
🎯 Core Features:
- 📦 Group Management - Create service tiers (VIP, Free Trial, etc.)
- 🔗 Account Pool - Connect multiple upstream AI service accounts
- 🔑 Key Distribution - Generate independent API Keys for users
- 💰 Billing Control - Flexible rate and quota management
Let\'s complete the initial setup in 3 minutes →
',
+ title: '👋 Welcome to TianShuAPI',
+ description: 'TianShuAPI is a powerful AI service gateway platform that helps you easily manage and distribute AI services.
🎯 Core Features:
- 📦 Group Management - Create service tiers (VIP, Free Trial, etc.)
- 🔗 Account Pool - Connect multiple upstream AI service accounts
- 🔑 Key Distribution - Generate independent API Keys for users
- 💰 Billing Control - Flexible rate and quota management
Let\'s complete the initial setup in 3 minutes →
',
nextBtn: 'Start Setup 🚀',
prevBtn: 'Skip'
},
groupManage: {
title: '📦 Step 1: Group Management',
- description: 'What is a Group?
Groups are the core concept of Sub2API, like a "service package":
- 🎯 Each group can contain multiple upstream accounts
- 💰 Each group has independent billing multiplier
- 👥 Can be set as public or exclusive
💡 Example: You can create "VIP Premium" (high rate) and "Free Trial" (low rate) groups
👉 Click "Group Management" on the left sidebar
'
+ description: 'What is a Group?
Groups are the core concept of TianShuAPI, like a "service package":
- 🎯 Each group can contain multiple upstream accounts
- 💰 Each group has independent billing multiplier
- 👥 Can be set as public or exclusive
💡 Example: You can create "VIP Premium" (high rate) and "Free Trial" (low rate) groups
👉 Click "Group Management" on the left sidebar
'
},
createGroup: {
title: '➕ Create New Group',
@@ -2792,8 +2792,8 @@ export default {
// User tour steps
user: {
welcome: {
- title: '👋 Welcome to Sub2API',
- description: 'Hello! Welcome to the Sub2API AI service platform.
🎯 Quick Start:
- 🔑 Create API Key
- 📋 Copy key to your application
- 🚀 Start using AI services
Just 1 minute, let\'s get started →
',
+ title: '👋 Welcome to TianShuAPI',
+ description: 'Hello! Welcome to the TianShuAPI AI service platform.
🎯 Quick Start:
- 🔑 Create API Key
- 📋 Copy key to your application
- 🚀 Start using AI services
Just 1 minute, let\'s get started →
',
nextBtn: 'Start 🚀',
prevBtn: 'Skip'
},
diff --git a/frontend/src/i18n/locales/zh.ts b/frontend/src/i18n/locales/zh.ts
index 9724a55c..fcebc130 100644
--- a/frontend/src/i18n/locales/zh.ts
+++ b/frontend/src/i18n/locales/zh.ts
@@ -40,8 +40,8 @@ export default {
// Setup Wizard
setup: {
- title: 'Sub2API 安装向导',
- description: '配置您的 Sub2API 实例',
+ title: 'TianShuAPI 安装向导',
+ description: '配置您的 TianShuAPI 实例',
database: {
title: '数据库配置',
description: '连接到您的 PostgreSQL 数据库',
@@ -2592,7 +2592,7 @@ export default {
secretKeyConfiguredHint: '密钥已配置,留空以保留当前值。' },
linuxdo: {
title: 'LinuxDo Connect 登录',
- description: '配置 LinuxDo Connect OAuth,用于 Sub2API 用户登录',
+ description: '配置 LinuxDo Connect OAuth,用于 TianShuAPI 用户登录',
enable: '启用 LinuxDo 登录',
enableHint: '在登录/注册页面显示 LinuxDo 登录入口',
clientId: 'Client ID',
@@ -2622,7 +2622,7 @@ export default {
description: '自定义站点品牌',
siteName: '站点名称',
siteNameHint: '显示在邮件和页面标题中',
- siteNamePlaceholder: 'Sub2API',
+ siteNamePlaceholder: 'TianShuAPI',
siteSubtitle: '站点副标题',
siteSubtitleHint: '显示在登录和注册页面',
siteSubtitlePlaceholder: '订阅转 API 转换平台',
@@ -2666,7 +2666,7 @@ export default {
fromEmail: '发件人邮箱',
fromEmailPlaceholder: "noreply{'@'}example.com",
fromName: '发件人名称',
- fromNamePlaceholder: 'Sub2API',
+ fromNamePlaceholder: 'TianShuAPI',
useTls: '使用 TLS',
useTlsHint: '为 SMTP 连接启用 TLS 加密'
},
@@ -2833,14 +2833,14 @@ export default {
// Admin tour steps
admin: {
welcome: {
- title: '👋 欢迎使用 Sub2API',
- description: 'Sub2API 是一个强大的 AI 服务中转平台,让您轻松管理和分发 AI 服务。
🎯 核心功能:
- 📦 分组管理 - 创建不同的服务套餐(VIP、免费试用等)
- 🔗 账号池 - 连接多个上游 AI 服务商账号
- 🔑 密钥分发 - 为用户生成独立的 API Key
- 💰 计费管理 - 灵活的费率和配额控制
接下来,我们将用 3 分钟带您完成首次配置 →
',
+ title: '👋 欢迎使用 TianShuAPI',
+ description: 'TianShuAPI 是一个强大的 AI 服务中转平台,让您轻松管理和分发 AI 服务。
🎯 核心功能:
- 📦 分组管理 - 创建不同的服务套餐(VIP、免费试用等)
- 🔗 账号池 - 连接多个上游 AI 服务商账号
- 🔑 密钥分发 - 为用户生成独立的 API Key
- 💰 计费管理 - 灵活的费率和配额控制
接下来,我们将用 3 分钟带您完成首次配置 →
',
nextBtn: '开始配置 🚀',
prevBtn: '跳过'
},
groupManage: {
title: '📦 第一步:分组管理',
- description: '什么是分组?
分组是 Sub2API 的核心概念,它就像一个"服务套餐":
- 🎯 每个分组可以包含多个上游账号
- 💰 每个分组有独立的计费倍率
- 👥 可以设置为公开或专属分组
💡 示例:您可以创建"VIP专线"(高倍率)和"免费试用"(低倍率)两个分组
👉 点击左侧的"分组管理"开始
'
+ description: '什么是分组?
分组是 TianShuAPI 的核心概念,它就像一个"服务套餐":
- 🎯 每个分组可以包含多个上游账号
- 💰 每个分组有独立的计费倍率
- 👥 可以设置为公开或专属分组
💡 示例:您可以创建"VIP专线"(高倍率)和"免费试用"(低倍率)两个分组
👉 点击左侧的"分组管理"开始
'
},
createGroup: {
title: '➕ 创建新分组',
@@ -2933,8 +2933,8 @@ export default {
// User tour steps
user: {
welcome: {
- title: '👋 欢迎使用 Sub2API',
- description: '您好!欢迎来到 Sub2API AI 服务平台。
🎯 快速开始:
- 🔑 创建 API 密钥
- 📋 复制密钥到您的应用
- 🚀 开始使用 AI 服务
只需 1 分钟,让我们开始吧 →
',
+ title: '👋 欢迎使用 TianShuAPI',
+ description: '您好!欢迎来到 TianShuAPI AI 服务平台。
🎯 快速开始:
- 🔑 创建 API 密钥
- 📋 复制密钥到您的应用
- 🚀 开始使用 AI 服务
只需 1 分钟,让我们开始吧 →
',
nextBtn: '开始 🚀',
prevBtn: '跳过'
},
diff --git a/frontend/src/main.ts b/frontend/src/main.ts
index 11c0b1e8..80c24d07 100644
--- a/frontend/src/main.ts
+++ b/frontend/src/main.ts
@@ -16,7 +16,7 @@ const appStore = useAppStore()
appStore.initFromInjectedConfig()
// Set document title immediately after config is loaded
-if (appStore.siteName && appStore.siteName !== 'Sub2API') {
+if (appStore.siteName && appStore.siteName !== 'TianShuAPI') {
document.title = `${appStore.siteName} - AI API Gateway`
}
diff --git a/frontend/src/router/README.md b/frontend/src/router/README.md
index 4ffacb8f..e5518e75 100644
--- a/frontend/src/router/README.md
+++ b/frontend/src/router/README.md
@@ -2,7 +2,7 @@
## Overview
-This directory contains the Vue Router configuration for the Sub2API frontend application. The router implements a comprehensive navigation system with authentication guards, role-based access control, and lazy loading.
+This directory contains the Vue Router configuration for the TianShuAPI frontend application. The router implements a comprehensive navigation system with authentication guards, role-based access control, and lazy loading.
## Files
diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts
index 7e929400..b8432104 100644
--- a/frontend/src/router/index.ts
+++ b/frontend/src/router/index.ts
@@ -1,5 +1,5 @@
/**
- * Vue Router configuration for Sub2API frontend
+ * Vue Router configuration for TianShuAPI frontend
* Defines all application routes with lazy loading and navigation guards
*/
@@ -337,7 +337,7 @@ router.beforeEach((to, _from, next) => {
// Set page title
const appStore = useAppStore()
- const siteName = appStore.siteName || 'Sub2API'
+ const siteName = appStore.siteName || 'TianShuAPI'
if (to.meta.title) {
document.title = `${to.meta.title} - ${siteName}`
} else {
diff --git a/frontend/src/stores/README.md b/frontend/src/stores/README.md
index 35c7df41..50393c94 100644
--- a/frontend/src/stores/README.md
+++ b/frontend/src/stores/README.md
@@ -1,6 +1,6 @@
# Pinia Stores Documentation
-This directory contains all Pinia stores for the Sub2API frontend application.
+This directory contains all Pinia stores for the TianShuAPI frontend application.
## Stores Overview
diff --git a/frontend/src/stores/app.ts b/frontend/src/stores/app.ts
index 55476ca0..f80c9718 100644
--- a/frontend/src/stores/app.ts
+++ b/frontend/src/stores/app.ts
@@ -24,7 +24,7 @@ export const useAppStore = defineStore('app', () => {
// Public settings cache state
const publicSettingsLoaded = ref(false)
const publicSettingsLoading = ref(false)
- const siteName = ref('Sub2API')
+ const siteName = ref('TianShuAPI')
const siteLogo = ref('')
const siteVersion = ref('')
const contactInfo = ref('')
@@ -284,7 +284,7 @@ export const useAppStore = defineStore('app', () => {
*/
function applySettings(config: PublicSettings): void {
cachedPublicSettings.value = config
- siteName.value = config.site_name || 'Sub2API'
+ siteName.value = config.site_name || 'TianShuAPI'
siteLogo.value = config.site_logo || ''
siteVersion.value = config.version || ''
contactInfo.value = config.contact_info || ''
diff --git a/frontend/src/types/index.ts b/frontend/src/types/index.ts
index 5eb74596..2f35a155 100644
--- a/frontend/src/types/index.ts
+++ b/frontend/src/types/index.ts
@@ -1,5 +1,5 @@
/**
- * Core Type Definitions for Sub2API Frontend
+ * Core Type Definitions for TianShuAPI Frontend
*/
// ==================== Common Types ====================
diff --git a/frontend/src/views/HomeView.vue b/frontend/src/views/HomeView.vue
index 6a3753f1..dd94f78e 100644
--- a/frontend/src/views/HomeView.vue
+++ b/frontend/src/views/HomeView.vue
@@ -417,7 +417,7 @@ const authStore = useAuthStore()
const appStore = useAppStore()
// Site settings - directly from appStore (already initialized from injected config)
-const siteName = computed(() => appStore.cachedPublicSettings?.site_name || appStore.siteName || 'Sub2API')
+const siteName = computed(() => appStore.cachedPublicSettings?.site_name || appStore.siteName || 'TianShuAPI')
const siteLogo = computed(() => appStore.cachedPublicSettings?.site_logo || appStore.siteLogo || '')
const siteSubtitle = computed(() => appStore.cachedPublicSettings?.site_subtitle || 'AI API Gateway Platform')
const docUrl = computed(() => appStore.cachedPublicSettings?.doc_url || appStore.docUrl || '')
diff --git a/frontend/src/views/admin/SettingsView.vue b/frontend/src/views/admin/SettingsView.vue
index d46c3329..ecdacc48 100644
--- a/frontend/src/views/admin/SettingsView.vue
+++ b/frontend/src/views/admin/SettingsView.vue
@@ -1000,7 +1000,7 @@ const form = reactive({
email_verify_enabled: false,
default_balance: 0,
default_concurrency: 1,
- site_name: 'Sub2API',
+ site_name: 'TianShuAPI',
site_logo: '',
site_subtitle: 'Subscription to API Conversion Platform',
api_base_url: '',
diff --git a/frontend/src/views/auth/EmailVerifyView.vue b/frontend/src/views/auth/EmailVerifyView.vue
index 3b6b45ba..3c119e37 100644
--- a/frontend/src/views/auth/EmailVerifyView.vue
+++ b/frontend/src/views/auth/EmailVerifyView.vue
@@ -206,7 +206,7 @@ const hasRegisterData = ref(false)
// Public settings
const turnstileEnabled = ref(false)
const turnstileSiteKey = ref('')
-const siteName = ref('Sub2API')
+const siteName = ref('TianShuAPI')
// Turnstile for resend
const turnstileRef = ref | null>(null)
@@ -241,7 +241,7 @@ onMounted(async () => {
const settings = await getPublicSettings()
turnstileEnabled.value = settings.turnstile_enabled
turnstileSiteKey.value = settings.turnstile_site_key || ''
- siteName.value = settings.site_name || 'Sub2API'
+ siteName.value = settings.site_name || 'TianShuAPI'
} catch (error) {
console.error('Failed to load public settings:', error)
}
diff --git a/frontend/src/views/auth/README.md b/frontend/src/views/auth/README.md
index 65c3a190..27d38474 100644
--- a/frontend/src/views/auth/README.md
+++ b/frontend/src/views/auth/README.md
@@ -1,6 +1,6 @@
# Authentication Views
-This directory contains Vue 3 authentication views for the Sub2API frontend application.
+This directory contains Vue 3 authentication views for the TianShuAPI frontend application.
## Components
diff --git a/frontend/src/views/auth/RegisterView.vue b/frontend/src/views/auth/RegisterView.vue
index bfdc08e8..bca497ea 100644
--- a/frontend/src/views/auth/RegisterView.vue
+++ b/frontend/src/views/auth/RegisterView.vue
@@ -262,7 +262,7 @@ const registrationEnabled = ref(true)
const emailVerifyEnabled = ref(false)
const turnstileEnabled = ref(false)
const turnstileSiteKey = ref('')
-const siteName = ref('Sub2API')
+const siteName = ref('TianShuAPI')
const linuxdoOAuthEnabled = ref(false)
// Turnstile
@@ -308,7 +308,7 @@ onMounted(async () => {
emailVerifyEnabled.value = settings.email_verify_enabled
turnstileEnabled.value = settings.turnstile_enabled
turnstileSiteKey.value = settings.turnstile_site_key || ''
- siteName.value = settings.site_name || 'Sub2API'
+ siteName.value = settings.site_name || 'TianShuAPI'
linuxdoOAuthEnabled.value = settings.linuxdo_oauth_enabled
} catch (error) {
console.error('Failed to load public settings:', error)
diff --git a/frontend/src/views/auth/USAGE_EXAMPLES.md b/frontend/src/views/auth/USAGE_EXAMPLES.md
index 735dbe13..d912f67e 100644
--- a/frontend/src/views/auth/USAGE_EXAMPLES.md
+++ b/frontend/src/views/auth/USAGE_EXAMPLES.md
@@ -1,6 +1,6 @@
# Authentication Views Usage Examples
-This document provides practical examples of how to use the authentication views in the Sub2API frontend.
+This document provides practical examples of how to use the authentication views in the TianShuAPI frontend.
## Quick Start
@@ -61,7 +61,7 @@ This document provides practical examples of how to use the authentication views
// - On success:
// - Token stored in localStorage
// - User data stored in state
-// - Success toast: "Account created successfully! Welcome to Sub2API."
+// - Success toast: "Account created successfully! Welcome to TianShuAPI."
// - Redirect to /dashboard
// - On error:
// - Error message displayed inline
diff --git a/frontend/src/views/auth/VISUAL_GUIDE.md b/frontend/src/views/auth/VISUAL_GUIDE.md
index a978b731..e4beabcc 100644
--- a/frontend/src/views/auth/VISUAL_GUIDE.md
+++ b/frontend/src/views/auth/VISUAL_GUIDE.md
@@ -11,7 +11,7 @@ Both LoginView and RegisterView use the AuthLayout component, which provides:
│ │
│ ┌─────────────────────────────────────┐ │
│ │ │ │
-│ │ Sub2API Logo │ │
+│ │ TianShuAPI Logo │ │
│ │ "Subscription to API Conversion" │ │
│ │ │ │
│ └─────────────────────────────────────┘ │
@@ -39,7 +39,7 @@ Centered: Both horizontally and vertically
```
┌─────────────────────────────────────────────┐
│ │
-│ 🔷 Sub2API │
+│ 🔷 TianShuAPI │
│ Subscription to API Conversion Platform │
│ │
│ ┌─────────────────────────────────────┐ │
@@ -133,13 +133,13 @@ Centered: Both horizontally and vertically
```
┌─────────────────────────────────────────────┐
│ │
-│ 🔷 Sub2API │
+│ 🔷 TianShuAPI │
│ Subscription to API Conversion Platform │
│ │
│ ┌─────────────────────────────────────┐ │
│ │ │ │
│ │ Create Account │ │
-│ │ Sign up to start using Sub2API │ │
+│ │ Sign up to start using TianShuAPI │ │
│ │ │ │
│ │ Username │ │
│ │ ┌────────────────────────────────┐ │ │