Three students, one number, and a chess website
三个学生、一个数字,和一个国际象棋网站
The short version: we made a chess website. The long version involves three kids, one suspiciously perfect number, and a server that none of our parents know about (yet).
长话短说:我们做了一个国际象棋网站。长话长说呢,这个故事里有三个孩子、一个好得离谱的数字,还有一台我们的家长都还不知道的服务器。
Chapter 1 · The three people who should probably be asleep
We are three programmers from China. When we started the team, we were in different grades of middle school: Xy in Grade 8, Andy in Grade 7, and wei in Grade 9. On paper, that's exactly the kind of group that should be doing homework, arguing with alarm clocks, and getting shouted at for having phones under the desk at 11 PM. In reality, at 11 PM we were usually facing each other across a phone and a computer screen — three people awake at the same unreasonable hour, sending messages and pictures back and forth on WeChat while debugging a webpage together.
Our names are Xy, wei, and Andy — those are all pseudonyms, and if you met any of us in real life you would just see ordinary students with schoolbags that are too heavy. But on the internet, we are a small software studio with strong opinions, shaky budgets, and a habit of starting projects at midnight.
There is a natural food chain in a three-person team. Andy opens the game by dropping a wild idea into our WeChat group at 11:47 PM — sometimes as a sentence, sometimes just a screenshot of something he found online. Xy, our main developer, then builds it, breaks it, rebuilds it, and around 2 AM declares it "basically finished." wei, the oldest and co-developer, reads the code at breakfast, removes the three lines that would have caused an international incident, and says things like "have we tested this on a phone?" (We had not. We never had.)
None of us is the boss. Our management structure is: whoever is most awake at the moment makes the decision. This has occasionally resulted in features being written at 1 AM that none of us remembers approving, but overall it has worked surprisingly well — teenagers are very good at disagreeing, and even better at continuing the conversation ten minutes later like nothing happened.
Chapter 2 · The mysterious number 169
Every team needs a name. Most teams are named after wolves, storms, or Greek letters. We named ourselves after a math problem, which is a pretty good summary of our sense of humor.
One boring evening, someone wrote into the chat: 91 minus 78 equals 13. Then someone else, who clearly should have been doing their math homework, continued: 13 squared equals 169. We stared at it for a moment. A difference that turns into a square. Small numbers, neatly packed, no remainder. It felt like a sign, or at least like a much better team name than "The Three Keyboard Guys."
And that is how Team 169 was born. There is no deeper meaning, and we refuse to make one up. We just liked the fact that the math was clean, which is more than we can say for 90% of our code. The number 169 also looks great in group names, commit messages, and dramatic announcements. We like to think it means "small starting point, squared output," which is exactly what a three-person team of students should do.
Chapter 3 · How we met without ever meeting
People sometimes ask which classroom we meet in. The answer is: none of them. We have never met in person. We don't live in the same city, we don't attend the same school, and we're not even in the same grade. The three of us met online, in the way that three people who write code always seem to find each other eventually — one person posts a question, another person answers it, and the third one shows up with a completely different opinion and a screenshot.
Friendships in school are usually built on shared desks, lunch tables, and being late to the same class. Ours was built on shared bug reports. Instead of passing notes, we passed error messages. Instead of hanging out after school, we stayed up late facing each other across a phone and a computer, trading messages and screenshots in a WeChat group — plus the tiny chat rooms that we ourselves had built. It's a strange kind of friendship, but it's real: when your code is broken at midnight and the only person who can explain it is a kid two provinces away, you get close very quickly.
We have never shaken hands. But we have fixed each other's bugs at 1 AM. That's the same thing, in our generation.
We talk about programming, of course — the way other people talk about football. But we also talk about games. About exams. About teachers who don't understand why a homework needs to be "uploaded as a PDF named exactly like this." About terrible mobile phone keyboards, the weather, what we'd buy if we ever had money, and whether the new update of a game was secretly designed by someone who hates happiness. We're friends first and a company second, which is probably why the company still exists.
Chapter 4 · Our earlier crimes against web development
ChessPlay was not our first project. It is simply the first project that survived long enough to get its own website. Before ChessPlay, there were two legendary experiments.
The first was the Anonymous Chat Room. As the name suggests, it was a webpage where anyone could walk in, pick a temporary name, and talk to strangers. We built it because we thought the existing options were either bloated, creepy, or covered in advertisements that followed you to every other website. Ours was simple: a box, a text field, and zero accounts. The day it went online, we sat in the room by ourselves for about twenty minutes like three nervous hosts at a party nobody attended. Then one person came in. Then two. Then somebody typed a joke and three strangers laughed at it on the other side of the country, and we looked at each other across the chat and knew we were onto something.
Running an anonymous chat room is an education. We learned that people will, without any training, (a) be incredibly kind, (b) test whether the input field accepts emoji of unusual sizes, or (c) ask if the server is run by "a company." It was not run by a company. It was run by three children who were supposed to be asleep. We never told anyone.
The second was the Toolbox. Every programmer eventually builds a toolbox website, the same way every cook eventually burns something. It was a single page of small utilities we wished we had: text converters, generators, little calculators, weird helpers that solved one exact problem in our own homework. It was ugly, it was useful, and we used it ourselves every single day — which, by the way, is the most reliable test of whether a product is worth keeping: do the people who made it actually use it? We did. Our toolbox tabs stayed open on all three of our phones, like a toolbox with a broken lock that you can't close.
Those two projects taught us the important lessons that tutorials don't teach. We learned that real users click buttons in the wrong order. We learned that mobile browsers are small and opinionated. We learned that a feature nobody asked for is just a bug with confidence. And we learned that a tiny team, if it ships fast and listens to the people actually using the thing, can sometimes outrun teams with fifty times our budget.
Chapter 5 · Why chess, and why now
Chess came for us one at a time. One of us was dragged into a school chess club and lost forty games in a row to an eighth-grader with an unreadable expression. Another found chess on a phone during a long, boring holiday. The third got obsessed after watching a game where a queen was sacrificed to force a checkmate six moves later, and spent the entire weekend trying to do the same thing to the AI — mostly failing, occasionally succeeding, and then pretending it was intentional.
We liked the existing chess apps, but we kept hitting the same walls. Either they wanted us to download a giant app, create an account, sit through a rating system, and watch an advertisement before every move; or they felt like a stadium when what we wanted was a small table with a friend. We wanted to send a friend a six-letter code and be playing in ten seconds. We wanted blitz games, slow games, and even correspondence games where you have 72 hours per move and can think while pretending to listen in class. We wanted an AI that never gets tired. And, because we are not normal, we also wanted a mode where everybody in the room can move for the side to move — we called it Mass Chess, and it is exactly as chaotic as it sounds.
So we decided to build exactly the site we wanted to use. This is a luxury students have: nobody asked us for a business plan, so we didn't write one.
Chapter 6 · The build, or: why our sleep schedules filed a complaint
Building a chess game looks simple from the outside. It is a board with sixty-four squares and some pieces that move in predictable ways. It is not simple. A chess engine is a small universe of edge cases with opinions. We had to teach the computer about castling — including kingside, queenside, the rook having moved, the king passing through check, and the square being attacked. We had to teach it en passant, the one rule that every single chess player forgets and then gets upset about. We had to teach pawns promotion, which means a small front-line soldier reaching the last rank can become a queen, rook, bishop, or knight. We built move legality, check detection, checkmate detection, and the little move notation (1. e4 e5 2. Qh5…) that looks like a foreign language until you learn it, at which point it looks like a foreign language you can read.
The online side was harder. We didn't have a big backend, but we had a public shared data layer on the hosting platform, and we engineered the whole room around it. Moves are appended like chat messages, and every client independently replays the same rules to rebuild the same game. If two people click at the same time, the first correct move wins; nobody's board gets silently overwritten. Rooms, moves, and chat each live in their own little collection, and when a game ends, the room, the chat, and everything about the match are deleted automatically — nothing lingers on the server.
We made the board refresh twice a second so that your opponent's move appears almost before you finish complaining about it. The built-in chat refreshes the same way, which is how we discovered that a tiny message box is often more fun than the game itself. We wrote an AI with two levels: Easy is a generous opponent who sometimes doesn't notice the queen sitting in front of it; Normal is a calm, three-ply thinker that will punish you quietly. When the AI is in a clearly lost position, or when the board is too dead to win, it even offers a draw instead of forcing anything. And there are no forced draws in ChessPlay — a game ends by checkmate, resignation, flag fall, or a draw that both sides actually agree to, with a "Draw 🤝" button sitting right next to "Resign 🏳️."
There were bugs, of course. There were beautiful bugs. At one point, both players' pieces rendered in dark color on mobile, so every pawn looked like a shadow. The chat room once refused to accept messages because the interface was being rebuilt every half-second and the send button was destroyed literally while you were tapping it. We fixed both. The first bug taught us how mobile browsers render symbols; the second bug taught us that you should never destroy the thing the user is currently typing in, which is life advice we should probably print on a poster.
Chapter 7 · October 19, 2026 — the day the server went live
On October 19, 2026, we stopped calling it a draft and officially opened the server. It was a Sunday. The three of us were online at the same time, in three different rooms, staring at the same small webpage. We created a room, sent the code through our own chat, sat in the two seats, and played the first complete official game. Halfway through, one of us blundered a rook and tried to blame the network. The network was innocent.
We'd like to tell you there was a glamorous launch party. There was no party. There was a moment of silence, a few nervous refreshes, and then the realization that nobody was going to walk in unless we actually told people. So we told friends, our chat rooms, and the weird corners of the internet where chess players gather. And people came. Some played a quick game at lunch and left; others stayed, opened rooms, and taught strangers how the knight moves. Every time a new room appeared, the three of us watched it like three kids watching a small fire we had started — proud, nervous, and ready to run for water.
Chapter 8 · What we believe, in exactly three sentences
First: a game should respect the player — no accounts forced on you, no dark patterns, no advertisement before your move.
Second: simple beats smart. A six-letter code is a small invention, but it makes ChessPlay feel like sharing a table instead of visiting a stadium.
Third: finished games are deleted, not hoarded. We are not here to collect your data; we are here to let you play a game and move on with your day.
We build websites for the kind of people we are: students, players, strangers on the internet who are curious about what three kids can ship.
Chapter 9 · What's next
Homework comes first. We are, unfortunately, still students. Somewhere between exams and reviews, we plan to keep polishing ChessPlay — better timing options, nicer end screens, and the small refinements you only notice once hundreds of real people have clicked the wrong button. We also have ideas for new games, and the Anonymous Chat Room and Toolbox are still alive and waiting their turn. Team 169 doesn't move fast because we're organized; we move fast because we're stubborn and we genuinely enjoy it.
We can't promise you'll always win. We can't promise the AI will go easy on you — Normal is, frankly, a little ruthless. We can't even promise that Andy will stop sending ideas at 1 AM. But we can promise that the site will stay simple, free, and ours.
Chapter 10 · Thank you, and your move
To everyone who played a game, sent a bug report, opened a room for a friend, or just sat in the chat saying hello: thank you. A three-person team with no office, no budget, and no meeting times can only build a community because real people show up — and you did.
The board is set. The button is yellow, it is in the bottom-right corner, and it says Play Now. Six letters are waiting for you. Whether you're a future grandmaster, a player who can't remember the knight's moves, or someone who just wants to see what a few students from China made on a Sunday — you're welcome at the table.
Checkmate, or a friendly draw. Your choice.
— Xy · wei · Andy, Team 169
Launched October 19, 2026
第一章 · 三个本来应该在睡觉的人
我们是来自中国的三名程序员。团队成立那会儿,我们还在不同的年级读初中:Xy 上初二,Andy 上初一,wei 上初三。按常理,这样的三个人应该在写作业、和闹钟吵架,然后在晚上十一点因为桌底下偷偷玩手机被家长吼。而现实里,晚上十一点,我们常常一个拿着手机、一个对着电脑,在屏幕两端相互望着——在微信上发消息、发图片,没睡觉,一起给网页修 bug。
我们的名字是 Xy、wei 和 Andy——全是化名。如果在现实里遇到我们,你只会看到三个背着重得离谱的书包的普通学生。但在网上,我们是一个小型软件工作室,有很多想法、没什么预算,还酷爱半夜十二点开新项目。
三个人的团队里有一条天然的食物链。Andy 负责在晚上 11:47 往微信群里扔一个天马行空的想法——有时候是一句话,有时候只是一张不知从哪截来的图。Xy 是我们最主要的开发者,负责把它写出来、写崩、再写出来,然后在凌晨两点宣布"基本搞定"。wei 年纪最大、负责协同开发,会在早饭时通读一遍代码,删掉那三行足以酿成国际事故的东西,然后问一句:"手机上测过吗?"——没有,我们当然没测过。
我们没有老板。我们的管理架构是:当下最清醒的人做决定。这偶尔会导致某些功能在凌晨一点被写出来,而第二天没人记得是谁批准的。但总体运行得出奇地好——青少年非常擅长吵架,更擅长十分钟后像什么都没发生一样继续聊天。
第二章 · 神秘数字 169
每个团队都需要一个名字。多数团队用狼、风暴、希腊字母来命名。我们用一道数学题命名——这已经很能说明我们的幽默感了。
一个无聊的晚上,有人在聊天里写下:91 减 78 等于 13。然后另一个显然本该做数学作业的人接着写道:13 的平方是 169。我们盯着它看了一会儿:一个差,变成一个平方;小小的数字,干干净净,没有余数。这像一个预兆,或者至少比"三个键盘侠"这种名字强。
就这样,169 团队诞生了。没有更深的含义,我们也拒绝编一个。我们只是喜欢这种干净的数学——我们的代码 90% 都没这么干净。169 这个数字放在团队名、提交记录和一本正经的公告里都很好看。我们愿意把它理解成"很小的起点,平方级的产出",这恰好是一个三人学生团队应该做的事。
第三章 · 我们怎么在从不见面的情况下认识
有时会有人问我们在哪个教室开会。答案是:没有教室。我们从来没有在现实里见过面。我们不在同一个城市,不在同一所学校,甚至不在同一个年级。我们在网上认识——会写代码的人似乎总会以某种方式相遇:一个人提问,一个人回答,第三个人带着完全不同的观点和一张截图出现。
学校里的友谊通常建立在同桌、食堂和一起迟到上。我们的友谊建立在互相发送的 bug 报告上。别人传小纸条,我们传报错信息;别人放学后一起逛,我们则在凌晨一个拿手机、一个对电脑,隔着屏幕相望,在微信群里发消息、发截图——顺便钻进我们自己亲手搭的小聊天室里。这是一种奇怪的友谊,但很真实:半夜十二点代码崩了,能解释清楚的人远在两个省之外,你们会迅速变得很熟。
我们没握过手。但我们在凌晨一点修过彼此的 bug。在我们这个年代,这是同一件事。
我们当然聊编程——就像别人聊足球一样。但我们也聊游戏、聊考试、聊那些不理解"作业为什么必须按这种命名方式上传 PDF"的老师;聊糟糕的手机键盘、聊天气、聊等以后有钱了买什么、聊某款游戏的新更新是不是由一个讨厌快乐的人设计的。我们首先是朋友,其次才是团队,这大概也是团队活到今天的原因。
第四章 · 我们早先的网页"犯罪记录"
ChessPlay 不是我们的第一个项目,它只是第一个活下来、配拥有介绍网站的项目。在它之前,有两个传奇实验。
第一个是"匿名聊天室"。顾名思义,任何人都能进来,取一个临时名字,和陌生人说话。我们做它,是因为当时同类产品要么臃肿、要么诡异、要么广告会追着你跑到所有别的网站。我们的版本很简单:一个消息框、一个输入框、零账号。上线那天,我们三个人在房间里自己坐了二十分钟,像三个紧张的主人,办了一个没人来的聚会。然后进来一个人,然后两个人,然后有人讲了个笑话,地球另一边的几个陌生人都笑了——我们隔着聊天框对视,知道我们做出了点什么。
运营一个匿名聊天室是一种修行。我们在毫无训练的情况下就知道了:人们会(a)非常善良;(b)测试输入框到底能塞多大的表情;(c)问这个服务器是不是"一家公司"在运营。它不是一家公司。它是三个本该睡觉的孩子。我们没告诉过任何人。
第二个是"工具箱"。每个程序员最终都会做一个工具箱网站,就像每个厨师迟早会烧糊一次菜。那是一个单页网站,装着我们自己想要的小工具:文本转换、生成器、各种小计算器,还有一些恰好能解决我们作业里某个具体问题的神奇助手。它很丑,但很有用,而且我们自己每天都在用——顺便说一句,判断一个产品值不值得留,最可靠的方法就是:做它的人自己用不用?我们用。工具箱的标签页在我们三个人的手机上都一直开着,像一个锁坏了、合不上的工具箱。
这两个项目教会了我们教程里不教的东西。我们知道了真实用户会用完全错误的顺序点按钮;知道了手机浏览器又小又有自己的脾气;知道了没人要求的功能,只是一只很有自信的 bug。我们还知道:一个很小的团队,只要发得快、肯认真听真正用它的人说话,有时就能跑赢预算是自己五十倍的团队。
第五章 · 为什么是国际象棋,为什么是现在
国际象棋是一个一个找上我们的。一个人被拉进了学校的国际象棋社,连续输了四十局,输给一个表情读不懂的初二学长;另一个人在某个漫长无聊的假期里在手机上认识了棋;第三个人看了一盘棋:有人弃后,六步之后将杀——他整个周末都在 AI 身上重演这个套路,大部分时候失败,偶尔成功,然后假装这是自己的计谋。
我们喜欢已有的棋类软件,但总撞墙:要么让我们下载一个巨大的 App、注册账号、忍受一套段位体系,每走一步之前还要看广告;要么它像一座体育场,而我们想要的只是一张小桌子和一个朋友。我们想给朋友发一个六位房间码,十秒内就坐下开棋。我们想下快棋、慢棋,也想下每步 72 小时的通讯棋——这样上课假装听讲时也能思考。我们想要一个不会累的 AI。而且,因为我们不太正常,我们还想要一种房间里所有人都能替当前走棋一方落子的模式——我们叫它"万人棋",它的混乱程度和名字完全相符。
于是我们决定,做一个自己真正想玩的网站。这是学生才有的奢侈:没人让我们写商业计划书,所以我们没写。
第六章 · 开发过程,又名:我们的睡眠为何罢工
从外面看,做一个国际象棋游戏很简单:一块六十四格的棋盘,棋子走法固定。它一点都不简单。一个国际象棋引擎,是一个充满各种边界情况的小宇宙。我们要教会电脑王车易位——王翼、后翼、车动过没有、王经过的格子是否被攻击;要教会它吃过路兵——这是所有棋手都会忘记、然后为此生气的规则;要教会它兵的升变:一个冲到最后一排的小兵,可以变成后、车、象或马。我们写了合法走法、将军检测、将杀检测,还有看起来像某种外语的棋谱记法(1. e4 e5 2. Qh5…),等你学会以后,它就变成了一门你能读懂的外语。
联机部分更难。我们没有大型后端,但托管平台提供了公开共享的数据层,我们把整个房间系统围绕它来设计:走子像聊天消息一样追加,每个客户端各自重放同一套规则,重建出同一盘棋;如果两个人同时点击,第一条正确的走子生效,任何人的棋盘都不会被悄悄覆盖。房间、走子和聊天各自住在独立的集合里,对局结束时,房间、聊天以及这盘棋产生的所有信息都会自动删除——服务器上什么都不留。
我们让棋盘每半秒刷新一次,这样你还没来得及抱怨,对手的棋就已经落了下来。房间聊天也是同样的刷新节奏——也是在这个过程中,我们发现一个小小的消息框常常比棋局本身更有趣。我们还写了两个难度的 AI:简单是个宽厚的对手,有时会无视放在面前的后;正常是个冷静的三层思考者,会悄无声息地惩罚你。当引擎明显劣势,或者棋盘已经几乎无法结束时,它会主动发起求和,而不是强行判和。ChessPlay 里没有任何强制和棋:对局只能通过将杀、认输、超时,或双方真正同意的和棋结束——"求和🤝"按钮就放在"认输🏳️"旁边。
当然,还有 bug。有过一些非常漂亮的 bug。有一阵子,手机上双方的棋子都显示成深色,每个兵都像一团影子。聊天室一度拒绝发送消息,因为界面每半秒重建一次,发送按钮在你点下去的那一瞬间被销毁了。两个都修好了。第一个 bug 教会我们移动端如何渲染符号;第二个 bug 教会我们:永远不要在用户正在输入的时候销毁输入框——这条人生建议我们应该打印出来贴在墙上。
第七章 · 2026 年 10 月 19 日,服务器上线那天
2026 年 10 月 19 日,我们不再管它叫草稿,正式打开了服务器。那是个周日。我们三个同时在线,在三个不同的房间里,盯着同一个小小的网页。我们创建房间,把房间码通过自己的聊天室发过去,分别坐在两个座位上,下完了第一盘正式的棋。下到一半,有个人丢了一只车,还想甩锅给网络。网络是无辜的。
我们很想告诉你有一场盛大的上线发布会。没有发布会。只有一阵沉默,几次紧张的刷新,然后我们意识到:不主动去告诉别人,没有人会走进来。于是我们告诉了朋友、告诉了我们的聊天室、告诉了互联网上棋手聚集的各个角落。然后真的有人来了。有人在午休时下了一盘就走;有人留下来,开了房间,教陌生人马走日字。每当有一个新房间出现,我们三个就像盯着自己点起的一小堆火——骄傲、紧张,随时准备跑去端水。
第八章 · 我们的信条,正好三句话
第一:游戏应该尊重玩家——不强迫注册、不耍花招、走棋前不放广告。
第二:简单胜过聪明。一个六位房间码只是一个小发明,但它让 ChessPlay 更像共享一张桌子,而不是走进一座体育场。
第三:结束的对局会被删除,而不是被囤积。我们不收集你的数据,我们只想让你安安稳稳下一盘,然后去过自己的一天。
我们为和自己一样的人做网站:学生、玩家,还有互联网上那些好奇三个孩子到底能做出什么的陌生人。
第九章 · 接下来
作业优先。很遗憾,我们还是学生。在考试与复习之间的缝隙里,我们会继续打磨 ChessPlay:更多计时选择、更好看的结束界面,以及那些只有当几百个真实用户点错按钮之后才能发现的小细节。我们还有新游戏的点子,"匿名聊天室"和"工具箱"也都还活着,排队等下一个轮到自己。169 团队行动快,不是因为我们有条理,而是因为我们很倔,而且真的乐在其中。
我们不能保证你永远赢。不能保证 AI 会手下留情——说实话,"正常"难度有点无情。我们甚至不能保证 Andy 会在凌晨一点停止发灵感。但我们可以保证:这个网站会保持简单、免费,并且属于我们自己。
第十章 · 谢谢,轮到你了
对每一位下过棋、报过 bug、给朋友开过房间,或者只是在聊天室里打了个招呼的人:谢谢你。一个没有办公室、没有预算、没有例会时间的三人小团队,能建起一个社区,全靠真实的人愿意来——而你们真的来了。
棋盘已经摆好。按钮是黄色的,就在右下角,写着立即游玩。有六个字母在等你。无论你是未来的特级大师、是记不住马怎么走的新手,还是单纯想看看几个中国学生在一个周日做出了什么的人——这张桌子,都欢迎你。
将杀,或者一盘友好的和棋。你选。
—— 169 团队 · Xy · wei · Andy
2026 年 10 月 19 日上线