张鸿尧

FutureSonic 音乐创作协作平台

独立负责待绘科技旗下 FutureSonic 平台的前端架构与全量业务实现,涵盖类 GitHub 的项目仓库、议题系统、创作者主页、消息中心、站内搜索与音乐乐谱渲染等核心模块。

Challenge

音乐与创意创作者需要一个类似 GitHub 的协作平台来管理项目版本、讨论议题、展示作品集,但同时需要原生支持乐谱预览、音频播放和创作者社交。市面上缺乏同时兼顾工程化项目管理与音乐内容展示的一体化前端方案。

Solution

以 Next.js 16 + React 19 + TypeScript 为核心栈,独立设计并实现覆盖用户认证、项目仓库(文件浏览、README、动态、授权管理)、议题与讨论系统、创作者个人主页、多维度站内搜索、消息通知中心、社区 Banner 与后台管理的完整前端。引入 abcjs 实现乐谱渲染,自研 FlexiblePlayer 音频播放器组件,使用 Redux Toolkit 与 React Query 分层管理客户端与服务端状态。

FutureSonic 平台界面预览

演示 FutureSonic 平台的项目仓库浏览、议题讨论、创作者主页、站内搜索与消息中心等核心功能。

项目概述

FutureSonic 是待绘科技旗下面向音乐与创意创作者的协作平台。它借鉴 GitHub 的仓库协作模式,为创作者提供项目管理、版本浏览、议题讨论、动态展示等工程化能力;同时针对音乐场景原生集成乐谱渲染(abcjs)与音频播放,让创作者可以在项目页直接展示和预览音乐内容。

我独立负责该平台前端系统的架构设计与全部业务实现。项目基于 Next.js 16(App Router)、React 19TypeScriptAnt Design 6Tailwind CSS 4,通过 Redux Toolkit 管理客户端状态,React Query 处理服务端异步数据,Framer Motion 驱动交互动画。

技术架构

  • 前端框架与技术栈:Next.js 16 App Router + React 19 + TypeScript + Tailwind CSS 4 + Ant Design 6。
  • 状态管理:Redux Toolkit 负责客户端全局状态(如存储配额、消息通知);React Query 负责服务端状态缓存、分页与自动重验证。
  • 路由与目录结构:采用 App Router 的嵌套布局体系。app/project/[project_id]/repo/[...slug] 实现类 GitHub 的仓库文件树浏览;app/composer/[composer_id] 实现创作者个人主页;app/search 实现四维度搜索;app/message 实现消息中心。
  • 关键第三方库
    • abcjs:乐谱渲染,将 ABC 记谱法转化为可视五线谱。
    • react-markdown + remark-gfm:Markdown 内容渲染,用于 README、话题正文与评论。
    • framer-motion:页面过渡与组件交互动画。
    • react-infinite-scroll-component:搜索与列表场景的无限滚动加载。
    • react-quill-new:富文本编辑器,用于话题创建与评论输入。

核心功能

项目仓库系统

类 GitHub 的仓库体验是平台的核心:

  • 文件浏览:通过 [...slug] 动态路由实现层级文件树浏览,支持面包屑导航、文件图标识别与 README 自动渲染。
  • 项目侧边栏:集中展示项目标签(Label)、团队成员(Team Members)、近期动态(Recent Activity)、观察者与报告者(Observers & Reporters)等元信息。
  • 多 Tab 内容区:涵盖议题(Topic)、动态(Dynamic)、配置(Configuration,含基础设置与删除仓库)、授权(Authorization)、关联(Relation)与开放数据(Open)等模块。
  • 存储状态看板:实时展示项目存储配额使用情况。

议题与讨论系统

  • 议题列表:支持创建新议题、筛选与排序。
  • 议题详情:独立话题页展示正文、回复卡片(Reply Card)与嵌套讨论流。
  • 富文本创作:基于 React Quill 的编辑器支持格式化文本、图片与链接插入,用于话题发布与评论回复。

创作者主页(Composer)

为每位创作者生成个人落地页,包含多个内容 Tab:

  • Home:个人简介与精选内容。
  • Projects:关联的项目列表。
  • Collections:收藏合集。
  • Issues:参与或发起的议题。
  • Management:账号隐私设置、资料管理等。
  • Support & Follow:关注列表与社交互动。

站内搜索

四维度统一搜索入口,覆盖:

  • Projects:项目搜索,支持多条件筛选。
  • Articles:文章搜索。
  • Issues:议题搜索。
  • Users:用户搜索。

每个维度配备独立的过滤组件(Filter),结果列表支持无限滚动与分页缓存。

消息中心

完整的站内通知与私信系统:

  • 私信(Direct Messages):一对一实时会话页。
  • 通知分类:@提及(Mentions)、回复(Replies)、系统通知(System)、收藏(Favorites)、关注(Follows)、创作动态(Creations)。
  • 设置页:消息偏好与通知开关管理。

音乐内容展示

针对音乐场景的原生能力:

  • 乐谱渲染:基于 abcjs 将 ABC 记谱文本渲染为可交互的五线谱,支持播放同步与参数调整。
  • FlexiblePlayer:自研音频播放器组件,用于项目页中的音频预览与播放控制。

社区与后台

  • 社区 Banner:轮播与展示社区活动、热门创作者。
  • 后端管理(Backend):平台运营后台入口,提供内容审核与系统配置能力。

独立开发挑战

  • 复杂嵌套路由与状态共享:仓库文件浏览使用 [...slug] 动态捕获,需要与侧边栏、面包屑、项目信息栏保持状态同步。解决方案:通过 ProjectRepoContext 提供项目级上下文,统一维护当前路径、分支与文件元数据。
  • 多维度搜索的缓存与分页:四维度搜索各自拥有不同的过滤条件与分页策略。解决方案:使用 React Query 的 useInfiniteQuery 封装 usePaginatedFetchList Hook,按搜索维度生成独立的查询键,保证分页状态隔离与缓存复用。
  • 音乐组件性能:abcjs 乐谱渲染在大段乐谱下存在重绘开销。解决方案:将乐谱渲染拆分为独立组件,仅在数据变更时触发重渲染,并使用 React.memo 与 useMemo 减少不必要的 DOM 操作。

技术亮点

  • 类 GitHub 仓库体验的前端实现:从文件树路由、README 渲染到议题讨论,完整复刻了开发者熟悉的仓库协作交互模式。
  • 四维度统一搜索与无限滚动:通过 React Query 的无限查询能力,实现丝滑的滚动加载与维度切换。
  • 音乐原生能力嵌入:乐谱渲染与音频播放不是外部链接跳转,而是直接嵌入项目页的原生交互组件。
  • 完整的消息与社交链路:从私信到通知、从关注到创作者主页,形成创作者社交闭环。