岛街 · 2D 像素元宇宙 IM

每个群,是岛上的一栋建筑

岛街是一个 2D 像素的元宇宙 IM。从聊天列表下拉,你看到一片岛群 —— 每个群、每家企业都是岛上一栋建筑。 你只看得到建筑,看不到里面的人,也进不去别人的;点建筑上的申请入口,对方同意后走大厅进去,才见得到人、走近能说话。

这张图画的是规模上限,不是进度:20 格就是 20 座岛,由小程序的包体配额算出来。今天一座都还没建。
这里跑的是客体参考实现仓打出来的一个真包,用的是要出货的那套打包链。它还没上架:手机上的货架今天没有这一条,而这份带家具的版本还停在那个仓一个没合并的改动里。 能走动是真的 —— 用方向键或者点一下地面:家具都走不过去,地毯可以踩过去;走到柜台前会弹出一 条提示 —— 那就是走进群室内后「走近即触发」的那套机制。 整页打开这个包—— 会多出一块包自带的能力探针表:在浏览器里全部拿不到,包照样跑,那就是降级路径在工作。加载没成功,上面是这间商店的静态画面。
岛屿规模上限
20由 20 MiB 的小程序配额算出
引擎占配额
约 3%剩下的全部留给内容
今天的真实用户
0不修饰,本页往下展开

为什么是现在

出处 →

2026 年 8 月 2 日我们把方向改了。改之前做的是模拟投资和预测市场 —— 用户押上筹码猜涨跌;改之后做的是元宇宙 IM,人在里面开店、开公司、打工、社交,猜实际事件但不押任何筹码。

换方向的理由不是原来那条不赚钱,是它带着一整套我们不想要的负担:只要有筹码,产品就要按赌博去过应用商店的分级,按金融去过各地的牌照。把筹码拿掉,这些负担整体消失,而「猜一件事会不会发生」这件事本身一点没少。

改之前

模拟投资 / 预测市场

有筹码,有下注机制。合规负担按赌博和金融两条线同时计。

改之后

元宇宙 IM,零筹码

人、岛、店、公司、打工、社交。猜事件保留,筹码清零。

一套世界,两层

出处 →

从聊天列表下拉进来,是全局俯视层:一片岛群,只看得到建筑,看不到任何角色,也进不去别人的。每栋建筑挂一个申请入口 —— 申请入群,或申请加入一家企业。

对方同意,或者你被邀请,才走大厅进入那栋建筑的室内。这时才是室内群空间层:能走动、看得到在场的成员、走近就能说话。

全局俯视层

只见建筑

从聊天列表下拉进入。看不到人,进不去别人的,每栋挂一个申请入口。

室内群空间层

走进去才见得到人

申请通过或被邀请后走大厅进入。走动、在场、走近即语音。

一个群、一家企业,就是岛上一栋建筑,也就是一间聊天室。进不同的群,就是进不同的建筑。成员在不在线,直接用 IM 本身的状态,元宇宙这层不另造一套。

建筑里能做的还是现实里那几件:开店、开公司、打工赚沙豆、社交,以及零筹码地猜一件真实世界的事会不会发生。 一条链路把「所有能力都是小程序」说得更具体:企业组织在自己的店铺里发会员卡,卡收进用户的卡包里,拿着卡去它的实体店能用。

哪个模块负责什么

工程细节 →

整个项目只有一条结构性的分野,其余全部从它推出来:壳是宿主,小程序是客体。壳装载包、提供桥、管窗口与更新。它不知道包里在演什么。小程序是一个包,被沙箱关着,吃 20 MiB 的配额,能力全部经桥向宿主要。

这条分野决定了「所有能力都是小程序」这句话可不可能成立:只有当壳完全不懂业务,业务才能一个一个地做成包、独立审核、独立上下架。壳里塞一次业务,就少一个能被独立替换的能力。

下面这张表中间那一列和左边一样重要,而且更容易被删:一个模块的边界只写正面,半年后每个模块都会长出一点点别人的活。「不负责什么」的每一行都是一条能拿去否决改动的依据。

最右那一列是今天的披露状态,三档:已经在生产上跑着的 3 行、代码在库但还差一段才能跑起来的 5 行、当前作者化 registry 未登记 manifest 的 3 行。最后一档不推断外置观察中不存在身份或实现。

模块负责什么不负责什么今天到哪了
iOS 壳装载包,把账号、支付、音视频经桥给包不渲染岛,不解释岛上任何规则已在生产
桌面壳把同一份包装进桌面窗口,管更新与本地能力不分叉业务逻辑,不做第二套渲染层已在库未接线
网页壳免安装入口,同一份产物直接在浏览器里跑没有宿主能力,不假装有已在库未接线
元宇宙包岛与角色的渲染、走动、遮挡与排序不建账号,不碰资金,不自己存档已在库未接线
猜事件包猜一件真实事件会不会发生,记准确度与排名不押筹码,不结算盈亏,不碰真实沙豆余额已在库未接线
模拟仓包独立记账的模拟仓、季度重置、名次与称号不动真实沙豆余额,不做下单、撮合、仓位结算无作者化清单
商户店铺包实物商品与线下服务的成交不在包里卖数字商品无作者化清单
卡包收纳企业发的会员卡,在实体店出示与核销不发卡,不记企业的账,不碰资金结算已在库未接线
消息与账号账号、会话、消息、实时音视频不知道岛的存在,不为渲染层写专用代码已在生产
小程序平台审核、货架、版本、包体扫描与配额判定不运行包里的代码,不替包做业务判断已在生产
资源控制面图集与音频的对象存储与分发不改资产内容,不当资产的真值来源无作者化清单

无作者化 manifest 的 3 行 —— 模拟仓包、商户店铺包、资源控制面 —— 只说明 public registry 尚未登记模块归属,不是仓不存在或实现未开始的证明。

岛街和 ProbAtlas 是什么关系

出处 →

两个名字都会出现在材料里,而它们不是一回事。「岛街」是产品的中文名。「ProbAtlas」是公司和平台的名字,比现在这个产品方向定得更早 —— 全站的域名、证书和服务器配置至今全部挂在它下面。你在地址栏里到处看到它,那不是另一个产品,是同一家公司的地基。

而在岛上,ProbAtlas 还指一件具体的东西:一个理财小程序,用沙豆做一份模拟仓。它和你的钱包是分开的两本账 —— 模拟仓里的数字只拿沙豆当刻度,你真正的沙豆余额在它的整个生命周期里一次也不变动;每季度清零重开,比的是收益率,赢来的是名次和称号,不是沙豆。这个玩法的最终形态还没拍板。

公司与平台

ProbAtlas

域名、证书与服务器都在这个名字下。平台名要不要跟着产品方向一起改,是老板级的决定,还没拍。

产品

岛街

岛上有一个叫 ProbAtlas 的理财小程序。两层同名是历史造成的,不是同一个东西的两种叫法。

最后回答一个尽调的人一定会问的:下单界面在不在路线图上。不在。早先规划里有过一条「面向事件合约的下单与仓位构建」的产品线, 已经裁决不做 —— 只接数据接口把数据拿进来,不做下单、不做撮合、不做仓位结算。这和下面那组红线里的第一条不是两件事, 是同一条边界的正反两面。

第一笔钱从哪来

出处 →

第一笔钱不来自元宇宙。收入表里唯一有历史成交痕迹的一条是白牌 IM 的私有化交付:东西已经就绪、已经在生产上验证过,对公收款不需要任何支付基建。卡住它的是第一个客户和一份对外的产品说明,不是技术。

元宇宙里,商户的钱走成交,不走站内的数字商品。依据是应用商店的规则本身:实物商品和线下消费的服务必须用非应用内购买收款,平台抽成 0%;反过来在 app 里卖数字商品或者卖曝光,要走应用内购买,抽 15% 到 30%。这条差别决定了商户侧的整个设计。

沙豆是劳动货币:干活赚,买虚拟商品花,数量永不因为任何结果增减,也永远不能提现。

订阅这条线上,老板已经定下一档:组织者档 $18.99。这是唯一一个已经拍板的价格 —— 其余档位仍在重议,所以这一页不给别的数字。

我们不做什么

出处 →

一个「元宇宙 + 猜真实事件」的产品,读到这里最容易被问的一句是:这是不是赌博。答案是六条红线,而且每一条都写成了一句代码审查时能当场判定的话 —— 一行代码只要拿行情、事件结果,或者「猜对了没有」去算某个人的沙豆该加多少减多少,它就是违规的。加还是减、多还是少、能不能提现,都不改变这个判定。

  • 系统内不存在任何押注机制。
  • 不结合赌,不接虚拟币,也不与任何预测市场平台发生业务关系。
  • 沙豆只在干活时产生、只在买虚拟商品时消失,数量永不因为行情或某个结果增减。
  • 猜一件真实事件会不会发生,猜对涨的是准确度分数和排名,不发也不扣沙豆。
  • 模拟盘独立记账、季度重置,沙豆不流入也不流出,回报是名次和称号。
  • 沙豆永远不能提现。

应用商店的分级规则只在一个地方分界:用户有没有拿值钱的东西去赌一个结果,赌输了就没了。我们这里没有任何东西会因为一个结果而消失 —— 这不是免责声明,是产品定义。

它长什么样

美术方向全文 →

先正面回答一个绕不过去的问题:不走霓虹。深底加高饱和霓虹加发光,正是加密交易所和赌场共用的视觉语法 —— 机制层刚把押注摘出去,美术层再装回来等于没拆,而审核的人先看截图。要霓虹就得先废掉色板,而色板是全部纪律的地基。方向因此写死:高级但不霓虹。

冷暗族

#14142a#1b1b3a#2a2a42#3a2a4f#3d3d5c#4a3a63#55557a

木族

#4a3020#6b452c#8f6340#b8865c

灯族

#ffb35c#ffd28a

肤族

#c67b6f#e8b894

最亮

#f4e4c8

植被族

#1f3d33#2f5c46#47805c

角色冷蓝

#2f5478#4a7fa8#6fa3c9
色板一共 22 个值,分 7 族,整个项目不许超。最深是 #14142a 而不是纯黑,最亮是 #f4e4c8 而不是纯白 —— 纯黑纯白在这套里是违规值。

让它不糙的不是分辨率,是五条纪律。它们跟引擎、跟画多大都没关系:

  • 色板就是这 22 个值,整个项目不许超。
  • 没有纯黑,没有纯白。最深是 #14142a,最亮是 #f4e4c8。
  • 阴影换色相,不只是变暗:明部靠降明度,暗部靠转色相。
  • 一个光源方向不变,固定左上,所有物件同侧落影。
  • 每一个接触点一条压深接触影,不是可选项。
屋顶 · 两坡一脊 · 出檐墙厚 6px地面暖光落点 · 俯视没有天空走道 · 只差明度屋顶淡到 25%,角色与名牌全程可见
这张图比屏幕宽,可以左右滑动 —— 它是像素画,缩到装满手机屏就等于把像素糊掉,而这张图整个意义就在像素边界上。

镜头是鸟瞰。角色 32 × 48 像素写死 —— 一格宽、一格半高,这就是「也别太大」。「精细一点」不靠加像素,靠在同样大小里加明度台阶。

头发 2 阶脸 2 阶 + 眼领口 最亮值上衣 3 阶 + 轮廓光腿 2 阶鞋 压深接触影 两行实际大小放大 5 倍在左
精细度不靠加像素,靠加明度台阶。判据是绝对的 —— 单格不透明色值不少于 9 个、必须有轮廓光、必须有接触影,三条都能用一条命令查。

精细几乎是免费的,而这是量出来的:一个角色的四朝向四帧图集 562 B,一张 512 见方的地块图集 22,825 B —— 后者是前者的四十倍。加台阶、加朝向都便宜,加地块面积才贵。

最容易画糊的一步是把阴影画成「继续调暗」。暗部必须跨族转色相 —— 整张图发灰,就是这一步被画错了。

引擎已经定了:Phaser 4.2.1

工程细节 →

引擎不重选。Godot 4 与 Unity Web 在第一步就出局,理由不是喜好:它们导出的单个 wasm 文件未压缩 40 MB,而小程序服务端写死的单文件上限是 16 MiB —— 拿这两个数直接除,是上限的 2.38 倍,扫描器直接拒收。Phaser 4.2.1 是 MIT 许可,可以商用。

上面那套质感 —— 平涂色块、索引调色板、接触影、按高度分层的遮挡与排序 —— 全是 2D 精灵引擎的基本功,没有一条需要 3D。所以选一个 2D 引擎不是妥协,是对着要做的东西选的。

三端共用同一份产物,而今天只有网页这一端有实物证据:本页顶上那个商店就是那份文件在浏览器里跑。 iOS 壳已经在生产上,但这份文件在它里面跑起来这件事本站没有任何证据。 桌面壳窗口能开起来,但装载本地包用的自定义协议还没接上。账号、聊天直接调 IM 已有的底座;支付那一件底座上今天还没有。

读法:一份产物扇出到三个平级外壳,不是三套代码;每条边上写的是它真正走的那个调用。底座五件里有两件今天在小程序层还调不到。

代价是引擎要塞进小程序 20 MiB 的配额。按现在选定的那四个插件打完包量过,引擎连插件一起占大约 3%。这四个插件还没最后拍板,插件一换这个数必须重新量。再扣掉游戏逻辑、角色图集、中文字体子集、界面和音效,还剩大约 16.2 MiB 全部留给内容 —— 按每座岛约 0.78 MiB 算,共用背景音乐时装得下 20 座岛,每座岛各配一分钟背景音乐就只剩 11 座。

引擎只吃掉一格,剩下的全是内容。这一格是打了包量出来的,不是估的。

今天真实到哪了

出处 →

今天没有用户。真实用户 0,账号表里那 190 条全是冒烟测试留下的。小程序货架上真实条目 1 个。零收入,而且收款链路根本没通 —— 我们调过下单支付那个接口,返回 404。

岛也一座都没建。20 座是预算允许的上限,不是进度。

已建成 0 / 20

但渲染层不是纸面上的。本页顶上那间能走动的商店是一个真包,用要出货的那套打包链打出来的:真的碰撞(墙和家具是实心的,走不过去), 真的邻近触发(走到柜台前面板子自己弹出来,不靠点按钮),角色和屋顶按固定层序前后遮挡。 它是拿 Phaser 4.2.1 打出来的,过了小程序平台自己那套扫描器。

也说清它还不是什么:那是一间商店的内景,不是一座岛;它的清单自报是一份骨架,带家具的那一版还在客体仓一个没合并的改动里。 而「过了扫描器」只说明包装合规 —— 那套扫描器不执行包里的代码,一个打开是白屏的包照样能过。

本轮新建了四个仓:元宇宙包、猜事件包、卡包,加一个三者共用的打包与门禁工具链。元宇宙那个包创世时打开是白屏, 修完之后补了一道门禁:不许只查包装,必须真把包加载起来、真起一个浏览器、真渲染、真截图看到像素、真能动。桌面这一端也有了实物 —— 一个原生 Electron 壳能开起来并且不白屏。

也说清它们今天到哪为止:四个仓都还没有接进任何宿主;能装签名包的那份桌面壳还在客体参考仓一个没合并的分支上,仓的默认分支上没有它。 这些仓的门禁只有本地把关 —— 工作流文件在仓里,而能跑它的机器是零台。

开工的条件也写死了,而且是判据不是排期:真实注册用户不到 200 个、真实小程序不到 8 个,元宇宙这条线就不开工。达不到就不开工,不用排期去凑。

这个品类的坏消息,我们自己先写下来了

出处 →

虚拟空间社交是一个尸横遍野的品类,规划里专门有一节列它的负面证据,而且写死了不许因为想做就淡化。品类冠军 Gather 在 2026 年 2 月官宣团队并入 Figma、产品剥离成独立小生意,原话是「它不是一门风投规模的生意」; 同期 Teamflow、Wonder.me、Mozilla Hubs、Meta 的 Workrooms 独立应用连环关停;Rec Room 有 1.5 亿注册,2026 年 6 月照样关停 —— 注册量不是护城河。

所以我们没有把它当成一个新的社交空间去立项,而是当成一个已经有账号、有聊天、有小程序宿主的 IM 上面多长出来的一层。这一层做砸了,底下那些东西照样在跑。

规划里还写了一条零工程的证伪实验:先自己花几百美元用三个月同类产品,如果我们团队自己三个月后都不再打开它,就没有任何理由相信外部用户会打开我们造的那个。

凭什么是你们

出处 →

空间语音已经买好了

iOS 工程里实时音视频 SDK 已经集成,空间音频扩展已经链接进构建,生产级适配层和服务端的实时通信域都已经存在。走近听得见、走远听不见的距离衰减语音,是零美术、只需要接线的能力 —— 而那正是这一类产品的核心体验。

包体预算不是估的

20 MiB 这个数是从小程序服务端的常量里逐条读出来的,不是拍脑袋定的;引擎连插件一起占的那大约 3%,是拿现在选定的那套插件真打了一个包、再用平台自己的扫描器量出来的 —— 插件集一换就得重新量。所有和这条线冲突的引擎,在这一步就出局了。

底座不用重写

小程序宿主、账号、聊天这 3 件已经在生产上跑着,支付不在其中 —— 收款链路今天没通。我们要新写的是渲染层和内容,不是一个平台。这是这件事在今天能被一个小团队做出来的全部原因。