三月初,我开始了独立开发的尝试,起初我准备从最简单的导航站入手,用来整理我书签中独立开发者的一些站点,然后在进行谷歌广告接入的一些尝试,但在后来的实践中发现这似乎并不适合我,所以我将尝试转向了工具站。这一次对工具站的意外的尝试,却让我实现了从灵感到工具的臆想。
为什么我无心建立导航站点
最开始的几天,我在 Github 上寻找开箱即用的导航站,准备找到合适的就微调界面,然后形成自己独有的站点。我翻来覆去,找了很多站点都不尽人意,作为起点的项目是够了,但是完全不符合现代风格的审美,大多数过于简陋了。
相比较于我现在使用的 Dashy 建立的导航站来说,开源的导航站看起来只是做了一个重定向的界面,而不是在一个界面中做一个即用即走的聚合功能。
总的来说,我的预期太高了,导致我不太愿意维护一个自己都不需要,并且只有跳转功能的导航站点。目前来看导航站不适合我,所以还是直接进入到工具站点的编写阶段。
透过新鲜事物学习新技术
现在的这个时间阶段,我已经知道 AI 已经很成熟了,甚至只需要一种截图就能快速生成一个原型站点。当然,我也只是道听途说,还没有真正使用,另外绘制布局对我来说并不困难,只是需要花费一些时间罢了。
从原型到界面,总会花费很多时间,这很大的限制了开发者的生产力。一个想法到落地,需要经过数天的时间,而在几天之后灵感可能就消失了。对于验证一个想法来说,借助 AI 的确是不错的选择。
早在半年前,我就听说了 V0 能够做到快速生成界面原型,当时忙于工作,于是错过尝鲜时间。实际上我很早就看中了云服务平台 Vercel 推出的开源的 shadcn/ui 组件,现代化的设计和简洁的 UI 风格非常适合小型站点的开发。
V0 默认使用了 Next.js + shadcn/ui + Tailwind CSS + Typescript 的技术组合来生成原型界面,实际上我对 Next.js 并不熟悉,所以使用这个 AI 工具也能够让我扩展技术边界。
于是,我尝试在 V0 的输入框中键入了一段话,仅不到 1 分钟,一个简单的工具就完成了,界面虽然有点奇怪的地方,但只要继续输入调整,就能马上修改。在这种工具加持下给我带来震撼的同时,更多的是对可能性的惊叹:“这个工具,说不定可以帮我实现想法后最初一版原型。”
几个网页工具的初次尝试
在尝到了 AI 工具的甜头后,我几乎没有思考就选择优化收藏夹中的站点,我要自己写一个更好的同类网站工具来代替收藏夹的工具,把别人的工具变成自己的工具。这样我既能将收藏夹清理出来,也能把自己写的工具整理出来。
一开始,我选择性写了两个简单的色彩工具:ColorPalette 和 ColorConverter,主要是因为这类工具比较少,同类工具也很分散,所以是对几个同类网站工具的融合。简单来说,是因为我想要这种工具。这类色彩工具受众并不多,界面比较单薄,所以我直接开源了。
因为 AI 生成的代码,实际上很多地方不太符合前端工程的规范,还会有些意料之外的 bug 要手动修复,所以我还是花了一些时间审阅重构原有的代码。除了少部分布局,实际上大部分代码都被我修改过了一遍,结果就是我对这一套技术组成更熟悉了,所以我可以做更复杂的工具了。
因为我使用的 Dashy 是通过 Yaml 配置的,经常需要提取站点的 Metadata 信息,所以每次看到有趣的网站我都要通过元素审查工具把关键信息复制出来,这实在是有些在笨了,而且效率地下,所以我就决定了下一个工具。说起网站的 Metadata 标签,实际上是和 SEO 有些关联的,所以在这个基础上我把更多的网站信息提取了出来,这样也能在优化网站 SEO 的时候进行快速检查。另外,我还特地保留一个外部 API,用来通过请求查询网站的元信息。就这样,MetaThief 工具完成了,这也是一个开源工具,但是特别的是我准备尝试推广这个站点。
我所尝试的最小化的推广
大多数的开发者,会在类似 Product Hunt、V2EX 、Indie Hackers 和 Hacker News 等开发者平台或社交平台上分享自己的作品,但是在这些站点上推广我的工具站多少有些大材小用了,而且我上面的几个站点并没有打算投放广告的打算,也许,能够获得几个开源项目的 star,但推广意义不大。
我选了四个国内专注于独立开发的小众网站,w2solo 独立开发者社区、Solo 独立开发者社区、独立开发者前线 和 新趣集,在这些站点上分享了 MetaThief 工具,于是喜提 2 个项目 star,在刚开始的一周内访问量多了一些,之后就掉下去了。
好吧,也许这个工具受众并没有那么多。但是我的推广想要看到的结果达到了,推广只能带来短时间内的流量增加,这不是永久的,想要维持流量看起来还是得在搜索引擎的 SEO 优化排名上下功夫。
我是如何掉进代码开发陷阱的
有了前几次的经验,我就开始自大了起来,认为只要我想到的东西,立即去做就能马上写出来,所以我这次我想都没想直接写自己的需求。
在第一次工作时,因为涉及到逆向相关的东西,逆向接口和抓 Cookie 这些操作让我吃了很大一碗饭,本着下次不在同一个地方吃太撑的想法,我准备写一个能够解析内部 Cookie 工具。
但是,因为这个需求过于奇特,而且我还把布局拆分成了侧边栏方式的功能模块,复杂度直接上升了好几个等级,就算是 AI 也没能完全理解我想要什么。没办法,自己来吧,我把所有代码都修改了一遍,第一次尝试分离出核心的代码逻辑文件,为了弄明白 Next.js 的一些 Hook 特性查了不少文档和资料。
为了完成这个工具,我爬起来第一件是就是继续打开电脑写代码,有好几次错过饭点,因为熬夜生物钟延迟了,生活节奏变得一团糟。不过我还是得写完,因为我需要这个工具,抵抗着对这个工具极大的怨气,两周后,这个 CookieInspector 工具完成了。
这个工具的受众实际只有我,但是为了完成这个工具,我却用掉了一周多的时间去重构代码,如果在全职开发这样做,很容易让自己浪费了时间,就当用一周多换了个教训吧。
后来我把这个工具也发到了前面的几个推广站里,发现甚至比第一个站点带来的访问量还要少得多。我开始反思这件事,这类网站工具看来需要有受众群体才能受欢迎,这样才能有初期流量。总的来说,这一次我的方向错了。
方向调整和下一个的目标
这个时候我才想起一些独立开发者说的看谷歌搜索关键词趋势,然后根据关键词写工具,原来是为了扩大受众,也许我也应该利用关键词做一些优化和调整。
几天后,我看到了一篇独立开发者用一年时间优化关键词、SEO 等站点信息,超过了仿照搜索引擎上高 SEO 排名写的站点的帖子。于是,我学着研究了同类站点的关键词,然后把同类站点有的关键词加入到自己的网站工具里,然后用我写的 Metadata 获取工具逐个检查了一遍。也许,这就是所谓的 SEO 优化的一部分?
到这里,我已经完成了独立开发半启动计划的两个目标,SEO优化和平台推广,当然这还只是开始,后续还需要继续编写工具,然后尝试如何进行广告投放。