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
28 changes: 14 additions & 14 deletions .cache/project-stats.json
Original file line number Diff line number Diff line change
@@ -1,40 +1,40 @@
{
"updated_at": "2026-06-16T20:46:22.417Z",
"updated_at": "2026-06-17T02:56:48.134Z",
"repos": {
"iflytek/astron-agent": {
"stars": 8565,
"forks": 853,
"updated_at": "2026-06-16T20:46:20.778Z"
"stars": 8566,
"forks": 852,
"updated_at": "2026-06-17T02:56:47.515Z"
},
"iflytek/astron-rpa": {
"stars": 5178,
"forks": 577,
"updated_at": "2026-06-16T20:46:21.050Z"
"stars": 5179,
"forks": 579,
"updated_at": "2026-06-17T02:56:47.623Z"
},
"iflytek/astronclaw-tutorial": {
"stars": 410,
"forks": 43,
"updated_at": "2026-06-16T20:46:21.308Z"
"updated_at": "2026-06-17T02:56:47.727Z"
},
"harnessclaw/harnessclaw-engine": {
"stars": 266,
"forks": 91,
"updated_at": "2026-06-16T20:46:21.610Z"
"updated_at": "2026-06-17T02:56:47.833Z"
},
"harnessclaw/harnessclaw": {
"stars": 316,
"forks": 82,
"updated_at": "2026-06-16T20:46:21.873Z"
"updated_at": "2026-06-17T02:56:47.932Z"
},
"iflytek/iFly-Skills": {
"stars": 186,
"forks": 24,
"updated_at": "2026-06-16T20:46:22.153Z"
"updated_at": "2026-06-17T02:56:48.033Z"
},
"iflytek/skillhub": {
"stars": 3490,
"forks": 505,
"updated_at": "2026-06-16T20:46:22.417Z"
"stars": 3491,
"forks": 508,
"updated_at": "2026-06-17T02:56:48.134Z"
}
}
}
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -88,3 +88,8 @@ ehthumbs_vista.db
# ============================================
public/images/watermarked/

# ============================================
# Build-generated community files
# ============================================
.github/ISSUE_TEMPLATE/repo-create.yml

8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ All notable changes to this project will be documented in this file.

## [Unreleased]

## [0.2.0] - 2026-06-17

### Added

- **i18n Language Toggle**: Client-side 中文/EN toggle button in header (`ToggleLanguage.astro`), persisted via `localStorage.lang`, effective across all pages without reload
Expand Down Expand Up @@ -35,6 +37,11 @@ All notable changes to this project will be documented in this file.
- **Home**: Add card containers with hover animation to 6 feature sections (上移、阴影、边框高亮、标题变色、图标放大)
- **Copyright**: Use dynamic year `${new Date().getFullYear()}` instead of hardcoded 2026
- **Blog i18n Link Fix**: `BlogHighlightedPosts.astro` and `BlogLatestPosts.astro` now use `set:html` for `linkText` to properly render `data-i18n` attributes (was rendering raw HTML tags as text). Homepage passes i18n-aware `linkText` to `BlogLatestPosts`
- **Stats Mobile Layout Fix**: Merged icon/amount and label into same container so labels stay aligned with their values on mobile; removed `min-w-[220px]` to keep 4 items in one row on desktop
- **Adopters Modal**: Click any adopter card to open a macOS/iOS-style frosted-glass detail modal with logo, full scenario, delivery and outcome sections. URL hash routing (`#adopter-{slug}`) for direct linking. Mobile bottom sheet, desktop centered. i18n-aware (zh/en), ESC/overlay close, language toggle sync
- **Adopters Tags i18n**: Add `tagsEn` field to all 10 adopter YAML files and content schema. Card tags use `data-lang-zh`/`data-lang-en` for language switching. Modal JS selects `tagsEn`/`tags` based on current language
- **Adopters Disclaimer**: Add `* 以上案例已获用户授权同意展示` / `* All cases shown have been authorized by the users` footer note below marquee sections, using `data-i18n` translation key
- **Contribute Cold-Start Optimization**: `contribute.astro` now reads `.cache/contributors.json` first (committed with build, served from Vercel filesystem) for instant render on cold start. Live GitHub API fetch runs in background to refresh cache. Previous logic (API → cache fallback) inverted to cache → API refresh

### Changed

Expand All @@ -48,6 +55,7 @@ All notable changes to this project will be documented in this file.
- **Stats Layout**: Amounts row (7, 18.4K, 2.2K, Apache 2.0) and labels row (开源项目, GitHub Stars, Forks, 开源协议) now render as two separate flex rows in `Stats.astro` — amounts on top line, labels on bottom line
- **Contribute PR Workflow**: Step descriptions now bilingual (`descZh`/`descEn`) with `data-lang-zh`/`data-lang-en` switching
- **Brand Name i18n**: "iFLYTEK Open Source" displays as "科大讯飞开源" in Chinese mode across logo, header, homepage title, and all widget default texts via `data-lang-zh`/`data-lang-en`
- **Language Change Event**: `BasicScripts.astro` language toggle now dispatches `CustomEvent('languagechange')` so page-specific scripts (e.g. adopters modal) can react and re-render when language switches
- **Font Stack**: Add `'PingFang SC'` to `--font-sans` and `--font-heading` CSS font stacks (Apple device local font only, no `@font-face` or font file upload)
- **Blog Watermark Architecture**: Watermark images now pre-baked to `public/images/watermarked/` via `scripts/watermark-images.ts`; originals in `src/assets/images/` remain untouched; `<Image watermark>` resolves watermarked copies via `findWatermarkedImage()`
- **Blog Detail Page**: Move featured image below article body; hide title/excerpt in header (`sr-only` for SEO); reduce prose font size to `prose-sm lg:prose-lg`
Expand Down
15 changes: 13 additions & 2 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@iflytek/website",
"version": "1.0.0",
"version": "0.2.0",
"description": "iFLYTEK Open Source Website - Showcasing open source projects, blog, events and community contributions.",
"type": "module",
"private": true,
Expand Down
1 change: 1 addition & 0 deletions src/components/common/BasicScripts.astro
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ import { translations } from '~/utils/translations';
const lang = elem.getAttribute('data-aw-lang-btn');
localStorage.lang = lang;
applyLanguage(lang);
document.dispatchEvent(new CustomEvent('languagechange', { detail: { lang } }));
});

attachEvent('[data-aw-social-share]', 'click', function (_, elem) {
Expand Down
1 change: 0 additions & 1 deletion src/components/widgets/Footer.astro
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,6 @@ const { socialLinks = [], secondaryLinks = [], links = [], footNote = '', theme
});
modal.dataset.wechatBound = 'true';
}

}

if (!document.body.dataset.wechatEscBound) {
Expand Down
33 changes: 30 additions & 3 deletions src/components/widgets/Stats.astro
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@ const {

<WidgetWrapper id={id} isDark={isDark} containerClass={`max-w-6xl mx-auto ${classes?.container ?? ''}`} bg={bg}>
<Headline title={title} subtitle={subtitle} tagline={tagline} />
<div class="flex flex-wrap justify-center text-center">
<!-- Desktop: two rows (amounts row + labels row), same as before -->
<div class="hidden md:flex flex-wrap justify-center text-center">
<div class="flex flex-wrap justify-center w-full">
{
stats &&
stats.map(({ amount, icon }) => (
<div class="p-4 md:w-1/4 sm:w-1/2 w-full min-w-[220px] text-center intersect-once motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade intersect-quarter">
<div class="p-4 md:w-1/4 sm:w-1/2 w-full text-center intersect-once motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade intersect-quarter">
{icon && (
<div class="flex items-center justify-center mx-auto mb-2 text-primary">
<Icon name={icon} class="w-10 h-10" />
Expand All @@ -43,7 +44,7 @@ const {
{
stats &&
stats.map(({ title }) => (
<div class="p-4 md:w-1/4 sm:w-1/2 w-full min-w-[220px] text-center intersect-once motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade intersect-quarter">
<div class="p-4 md:w-1/4 sm:w-1/2 w-full text-center intersect-once motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade intersect-quarter">
{title && (
<div
class="text-sm font-medium tracking-widest text-gray-800 dark:text-slate-400 lg:text-base"
Expand All @@ -55,4 +56,30 @@ const {
}
</div>
</div>
<!-- Mobile: each stat is a single block with icon+amount+label together -->
<div class="flex flex-wrap justify-center md:hidden">
{
stats &&
stats.map(({ amount, icon, title }) => (
<div class="p-4 w-1/2 text-center intersect-once motion-safe:md:opacity-0 motion-safe:md:intersect:animate-fade intersect-quarter">
{icon && (
<div class="flex items-center justify-center mx-auto mb-2 text-primary">
<Icon name={icon} class="w-10 h-10" />
</div>
)}
{amount && (
<div class="font-heading text-primary text-[2.6rem] font-bold dark:text-white lg:text-5xl xl:text-6xl">
{amount}
</div>
)}
{title && (
<div
class="mt-2 text-sm font-medium tracking-widest text-gray-800 dark:text-slate-400 lg:text-base"
set:html={title}
/>
)}
</div>
))
}
</div>
</WidgetWrapper>
1 change: 1 addition & 0 deletions src/content.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,7 @@ const adopterCollection = defineCollection({
subtitle: z.string(),
subtitleEn: z.string().optional(),
tags: z.array(z.string()).optional(),
tagsEn: z.array(z.string()).optional(),
scenario: z.string(),
scenarioEn: z.string().optional(),
delivery: z.string(),
Expand Down
4 changes: 4 additions & 0 deletions src/data/adopters/chinatelecom.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ tags:
- 电信
- 内网部署
- 业务稽核
tagsEn:
- Telecom
- Intranet deployment
- Business audit
scenario: 自动业务受理、业务稽核,全部运行在企业内网环境。
scenarioEn: Automatic service acceptance and business auditing in a fully isolated enterprise network.
delivery: 围绕验证码识别、复杂页面定位和内网依赖注入,形成隔离网络下的实施方案。
Expand Down
4 changes: 4 additions & 0 deletions src/data/adopters/donghua.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ tags:
- 金融
- 数据处理
- Agent + RPA
tagsEn:
- Finance
- Data processing
- Agent + RPA
scenario: 银行征信数据归集、反洗钱报告生成,探索面向金融行业的智能体与自动化能力。
scenarioEn: Credit data aggregation and anti-money-laundering report generation for banking workflows.
delivery: 补齐认证、容器部署、模型授权和 RPA 架构配置,串起可验证的业务闭环。
Expand Down
4 changes: 4 additions & 0 deletions src/data/adopters/fiberhome.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ tags:
- 通信
- 离线内网
- Open API
tagsEn:
- Telecom
- Offline intranet
- Open API
scenario: 离线内网 RPA 自动化、界面录制回放、内网 AI 模型接入、与 Jenkins 等系统联动。
scenarioEn: Offline RPA automation, recording and playback, private AI model access, and Jenkins integration.
delivery: 打通离线镜像导入、模拟人工输入、动态元素定位、自定义 AI 模型和 Open API 对接。
Expand Down
4 changes: 4 additions & 0 deletions src/data/adopters/foxit.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ tags:
- 软件产品
- 工作流
- 共建反馈
tagsEn:
- Software product
- Workflow
- Co-building feedback
scenario: 数智员工智能体、插件集成、工作流编排与 RPA 私有化部署。
scenarioEn: Digital employee agents, plugin integration, workflow orchestration, and private RPA deployment.
delivery: 通过代码节点绕过接口限制,支持现有后端系统联调,并围绕 Skill 与任务拆分持续共建。
Expand Down
4 changes: 4 additions & 0 deletions src/data/adopters/guangwu.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ tags:
- 企业服务
- SSO
- 规划能力
tagsEn:
- Enterprise service
- SSO
- Planning capability
scenario: 企业微信集成、单点登录、具备规划能力的智能体应用探索。
scenarioEn: WeCom integration, SSO, and planning-capable agent exploration.
delivery: 快速定位多组织登录问题,明确企微扫码登录、SSO 和规划能力的推进路径。
Expand Down
4 changes: 4 additions & 0 deletions src/data/adopters/shandongyungu.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ tags:
- 软件服务
- 财务自动化
- OCR 扩展
tagsEn:
- Software service
- Finance automation
- OCR extension
scenario: 财务系统自动化、自动化测试、验证码与 OCR 扩展。
scenarioEn: Finance system automation, automated testing, and captcha/OCR capability extension.
delivery: 排查环境冲突带来的拾取异常,提供第三方 OCR 接入路径和流程配置建议。
Expand Down
4 changes: 4 additions & 0 deletions src/data/adopters/xiangyang-dongsheng.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ tags:
- 制造配套
- 邮件自动化
- Excel 自动化
tagsEn:
- Manufacturing
- Email automation
- Excel automation
scenario: 订单自动接收、邮件附件自动下载处理、共享文件夹 Excel 自动化。
scenarioEn: Automatic order intake, email attachment download, and shared-folder Excel processing.
delivery: 针对邮件组件、Excel 实例调度、路径转义和网页组件问题提供源码级修复与实施指导。
Expand Down
4 changes: 4 additions & 0 deletions src/data/adopters/xiaoqu.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ tags:
- 研发支持
- 前后端分离
- 开源版
tagsEn:
- R&D support
- Frontend-backend separation
- Open source edition
scenario: RPA 二次开发调试、前后端分离开发部署。
scenarioEn: RPA secondary development, source debugging, and frontend-backend separated deployment.
delivery: 明确开源版支持前后端分离开发模式,帮助团队以更灵活的方式调试源码。
Expand Down
4 changes: 4 additions & 0 deletions src/data/adopters/yugou.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ tags:
- 制造业
- 知识库
- 私有化
tagsEn:
- Manufacturing
- Knowledge base
- Private deployment
scenario: 企业私有知识库、数字人导览、智能体应用与 RPA 联动。
scenarioEn: Private enterprise knowledge base, digital human guide, and Agent + RPA integration.
delivery: 围绕容器稳定性、Nginx/HTTPS、Casdoor 登录和联合部署链路完成排障。
Expand Down
4 changes: 4 additions & 0 deletions src/data/adopters/yunsuan.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,10 @@ tags:
- 园区运营
- 数据清洗
- 生产上线
tagsEn:
- Campus operations
- Data cleaning
- Production launch
scenario: 智慧园区客服、竞品与热点分析、非结构化订单数据清洗。
scenarioEn: Smart campus customer support, competitor and trend analysis, and unstructured order text transformation.
delivery: 利用大模型和 Prompt 将复杂文本转成结构化 JSON,并通过工作流写回业务系统。
Expand Down
Loading
Loading