Commit Graph

1085 Commits

Author SHA1 Message Date
shenlan
a8592f4009 Revert "Apply AppShell layout styling for dashboard home (#713)" (#714)
This reverts commit b8287b1f28.
2025-12-02 10:42:43 +08:00
shenlan
b8287b1f28 Apply AppShell layout styling for dashboard home (#713) 2025-12-02 10:31:50 +08:00
shenlan
35620d0725 Add initial question support for AskAI button dialog (#712) 2025-12-02 10:23:15 +08:00
shenlan
3cf0c64fe4 Update Ask AI navbar button and sidebar behavior (#711) 2025-12-02 10:16:34 +08:00
shenlan
5c6698d5c5 Add Ask AI entry to navbar (#710) 2025-12-02 10:08:16 +08:00
shenlan
ca325b2f57 Center navbar layout (#709) 2025-12-02 10:03:34 +08:00
shenlan
563dac692f Add navbar and footer to home page layout (#708) 2025-12-02 09:57:45 +08:00
shenlan
034db51bee Refine navbar styling for calmer tone (#707) 2025-12-02 09:56:20 +08:00
shenlan
eb7168e9bd Remove CMS extension system (#706) 2025-12-02 09:50:58 +08:00
shenlan
208207dd96 Fix footer layout and duplication (#705) 2025-12-02 09:22:07 +08:00
shenlan
cbf41ec3f9 Refactor footer component (#704) 2025-12-02 08:53:11 +08:00
shenlan
85b95a9e62 Restyle dashboard navbar and footer (#703) 2025-12-02 08:42:59 +08:00
shenlan
b1b3d83b4e Redesign dashboard homepage (#702) 2025-12-02 08:09:02 +08:00
shenlan
f7906f56f6 Refine console homepage layout (#701) 2025-12-02 01:49:04 +08:00
shenlan
1227f52153 Replace Discord icon import with Disc (#700) 2025-12-02 01:34:34 +08:00
shenlan
933352e244 Replace unavailable lucide icon (#699) 2025-12-02 01:31:07 +08:00
shenlan
b4cd48c16f Replace missing lucide Api icon (#698) 2025-12-02 01:25:04 +08:00
shenlan
400ea1f204 Refine console homepage layout (#697) 2025-12-02 01:20:40 +08:00
shenlan
0b436001de Refactor homepage to console layout (#696) 2025-12-02 01:09:45 +08:00
shenlan
9be9001738 Refactor homepage to console entry layout (#695) 2025-12-02 00:37:58 +08:00
shenlan
ebe92f0eb1 Redesign homepage layout and footer (#694) 2025-12-02 00:24:44 +08:00
shenlan
0098f952b7 Refine homepage console layout (#693) 2025-12-02 00:05:59 +08:00
shenlan
85683bd9ae Refine console entry homepage layout (#692) 2025-12-01 23:50:50 +08:00
shenlan
18a429fb80 Refine console-style homepage cards (#691) 2025-12-01 23:29:54 +08:00
shenlan
047ace5ebe Polish scan payment layout (#690) 2025-11-21 22:58:58 +08:00
shenlan
ad413f2928 Add billing options to subscription panel (#689) 2025-11-21 22:16:13 +08:00
shenlan
92f1a93d0d Guard billing option selection check for null (#688) 2025-11-21 22:02:21 +08:00
shenlan
c1213a83b0 Update xstream subscription links and hide billing options (#687) 2025-11-21 21:59:05 +08:00
shenlan
bff6b75523 Refine subscription payment layout (#686) 2025-11-21 21:54:25 +08:00
shenlan
9cd61b1439 Move billing and subscriptions into user panel (#685) 2025-11-21 21:40:55 +08:00
shenlan
d63bef3a95 Annotate product payment methods (#684) 2025-11-21 20:56:01 +08:00
shenlan
6d2931c3d5 Make PayPal subscription plan ID optional (#683) 2025-11-21 20:44:53 +08:00
shenlan
05a02edae9 Add types for PayPal button callbacks (#682) 2025-11-21 19:54:35 +08:00
shenlan
080f34dfe3 Ensure PayPal SDK is treated as loaded (#681) 2025-11-21 19:30:05 +08:00
shenlan
d8d7a136eb Add crypto billing options and trial subscriptions (#680) 2025-11-21 19:20:51 +08:00
shenlan
c00898d712 Add PayPal billing and subscription support (#679) 2025-11-21 18:55:12 +08:00
Haitao Pan
dc95c645eb add manifest generation scripts
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 12:30:48 +08:00
Haitao Pan
0089f9d447 feat(content): separate content from code with markdown files
### Changes:

1. **Created content directories**:
   - `src/content/homepage/{zh,en}/hero.md` - Homepage content
   - `src/content/product/{xstream,xcloudflow,xscopehub}/{zh,en}/hero.md` - Product content

2. **Content generation script**:
   - `scripts/generate-content.ts` - Compiles markdown to JSON
   - Uses js-yaml for proper YAML parsing
   - Generates JSON files in `src/data/content/`

3. **Content loader**:
   - `src/lib/content-loader.ts` - Loads content from JSON files
   - No longer uses `fs` module (client-side compatible)
   - Supports homepage and product content

4. **Updated homepage component**:
   - `src/modules/homepage/page.tsx` - Now uses content loader
   - Removed hardcoded heroContent object
   - Content separated from logic and styling

### Result:
 Content separated from code
 Markdown format for easy editing
 Layout and logic unchanged
 Build succeeds with 120 static pages

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 12:17:12 +08:00
Haitao Pan
c548b9fc74 feat(blog): add sticky navigation header
Add top navigation similar to dynamic product pages:
- SVC.plus/blog breadcrumb (clickable, returns to homepage)
- Search component on the right
- Sticky positioning with blur background

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 11:29:56 +08:00
Haitao Pan
4c5b2dcf67 fix(download): resolve static generation bailout error
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 11:07:50 +08:00
Haitao Pan
f4678a601a fix(docs): resolve static generation error with caching strategy
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 10:49:45 +08:00
Haitao Pan
31242cfa91 feat(Navbar): hide navigation on /blog routes
Hide navbar by default on /blog and its subpaths

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-12 10:39:09 +08:00
shenlan
5d1f442584 feat(dashboard): fetch download manifests dynamically (#675) 2025-11-11 23:19:43 +08:00
Haitao Pan
eae77beeea feat: support dynamic port and manifest URLs
1. start script: npm run start passes args to next start
   - Usage: npm run start -- -p 3000

2. /docs: dynamic fetch from docs-manifest.json
   - URL: https://dl.svc.plus/dl-index/docs-manifest.json

3. /download: dynamic fetch from offline-package-manifest.json
   - URL: https://dl.svc.plus/dl-index/offline-package-manifest.json

🤖 Generated with Claude Code
2025-11-11 22:32:21 +08:00
Haitao Pan
086ab779a4 fix: add local fallback data for static development mode
### Changes:

1. **Added fallback data files**:
   - `public/_build/artifacts-manifest.json` - Local fallback for downloads page
   - `public/_build/offline-package.json` - Local fallback for offline-package

2. **Updated data fetching logic**:
   - `dl-index-data-artifacts.ts` - Now uses local fallback when network fetch fails
   - `dl-index-data-offline-package.ts` - Now uses local fallback when network fetch fails

### Problem:
In static development mode (`yarn start -p 3000`), the dashboard's docs and downloads pages
could not fetch data from external URLs, resulting in empty content.

### Solution:
Added local fallback data files that are imported directly into the components.
When network requests fail (e.g., in offline mode or behind firewall), the app now
falls back to local static data, ensuring pages work in development mode.

### Data Flow:
1. Try fetching from `https://dl.svc.plus/dl-index/*.json`
2. If that fails, try fallback URL
3. If that also fails, use local `public/_build/*.json` data
4. Display content to user

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 21:52:13 +08:00
shenlan
1cf14f3fd5 Fix dashboard download imports and registry alias (#672) 2025-11-11 19:48:16 +08:00
Haitao Pan
d647d02992 feat: merge quick wrapper into main manifest scripts
### Changes:

1. **gen_offline-package_manifest.py**
   - Merged gen_offline-package_manifest_quick.py functionality
   - Added auto-derivation of --root from --output path
   - Auto-discovers subdirectories when --include not specified
   - Outputs to offline-package-manifest.json
   - Removed quick wrapper script (merged into main)

2. **gen_docs_manifest.py**
   - Added auto-discovery of subdirectories
   - Scans all category/version/*.html and *.pdf when --include not specified

### Usage:

For gen_offline-package_manifest.py:
  # Auto-derive root from output
  python3 scripts/gen_offline-package_manifest.py \
    --output /data/update-server/dl-index

  # Or specify root explicitly
  python3 scripts/gen_offline-package_manifest.py \
    --root /data/update-server/offline-package \
    --output /data/update-server/dl-index

For gen_docs_manifest.py:
  # Auto-discover all subdirectories
  python3 scripts/gen_docs_manifest.py \
    --root /data/update-server/docs \
    --output /data/update-server/dl-index

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 18:58:37 +08:00
Haitao Pan
196b11bcc5 feat: enhance scripts with filtering and offline-package support
### Changes:

1. **scripts/gen_docs_manifest.py**
   - Added --include parameter with default "docs"
   - Filters documentation files to only include specified directories
   - Can be provided multiple times for multiple directories
   - Updated docstring to document the new parameter

2. **scripts/gen_mirror_manifest.py**
   - Added generation of offline-package.json file
   - Filters listings to only include offline-package directory entries
   - Writes to the same output directory alongside manifest.json

### Usage:

For gen_docs_manifest.py:
  python3 scripts/gen_docs_manifest.py \
    --root /data/update-server/docs \
    --base-url-prefix https://dl.svc.plus/docs \
    --include docs

For gen_mirror_manifest.py:
  python3 scripts/gen_mirror_manifest.py \
    --root /data/update-server \
    --include offline-package \
    --output dl-index/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 18:33:04 +08:00
Haitao Pan
8d94183c97 feat: enhance scripts with filtering and offline-package support
### Changes:

1. **scripts/gen_docs_manifest.py**
   - Added --include parameter with default "docs"
   - Filters documentation files to only include specified directories
   - Can be provided multiple times for multiple directories
   - Updated docstring to document the new parameter

2. **scripts/gen_mirror_manifest.py**
   - Added generation of offline-package.json file
   - Filters listings to only include offline-package directory entries
   - Writes to the same output directory alongside manifest.json

### Usage:

For gen_docs_manifest.py:
  python3 scripts/gen_docs_manifest.py \
    --root /data/update-server/docs \
    --base-url-prefix https://dl.svc.plus/docs \
    --include docs

For gen_mirror_manifest.py:
  python3 scripts/gen_mirror_manifest.py \
    --root /data/update-server \
    --include offline-package \
    --output dl-index/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 17:53:36 +08:00
Haitao Pan
5522ea1c1b feat: integrate offline-package data source
### Changes:

1. **scripts/gen_mirror_manifest.py**
   - Added generation of offline-package.json file
   - Filters listings to only include offline-package directory
   - Writes to the same output directory (dl-index/)

2. **src/lib/download/dl-index-data-offline-package.ts**
   - New module to fetch offline-package data from CDN
   - Fetches from: https://dl.svc.plus/dl-index/offline-package.json
   - Provides helper functions:
     - fetchOfflinePackageListings()
     - getOfflinePackageListings()
     - getOfflinePackageSections()
     - getOfflinePackageFileCount()
   - Includes simple in-memory caching

3. **src/app/download/page.tsx**
   - Updated to use offline-package data
   - Merges offline-package sections with existing data
   - Added offline-package file count to totals
   - Made component async to support data fetching

### Result:
Download page now fetches and displays offline-package data from the CDN endpoint, providing real-time updates without rebuilding the application.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-11 17:50:41 +08:00