Skip to content

iggcloud/Linknote

Repository files navigation

Linknote

一个免费开源、邀请制、多用户的 Pinboard 风格个人书签服务,并为登录用户提供私密便签工具。

生产主域名:https://linknote.iggcloud.com。Google OAuth 回调为 https://linknote.iggcloud.com/auth/google

它不把“书签”“文本分享”“导航页”做成三套系统:

  • Entry 是唯一内容类型:有 URL 是书签,无 URL 是文本;两者都支持正文、标签、搜索、隐私以及永久或临时分享。
  • 书签与文本共用 Entry 存储和权限逻辑,但在界面中分流:书签按收藏时间展示,文本只作为登录后的独立分享工具。
  • 标签是当前唯一的组织方式,分类与集合功能已经下线。
  • 书签支持 privateunlistedpublic 三档;文本是独立的私密工具,只有“仅自己可见”和“凭特定链接访问”两档,永远不进入公开书签流或个人主页。

本地运行

要求 Node.js 20+。

npm install
cp .dev.vars.example .dev.vars
npm run db:local
npm run dev

打开 Wrangler 输出的本地地址,进入 /login,使用 Google 登录。

test 是迁移时创建的初始管理员,并通过 ADMIN_GOOGLE_EMAIL 绑定指定的 Google 账号。系统每天北京时间 00:00 在 /about 发布 10 个一次性邀请链接;新用户先打开邀请链接,设置一次不可修改的唯一用户名,再使用 Google 完成注册,无需站内密码。

部署到 Cloudflare

  1. 登录并创建 D1:

    npx wrangler login
    npx wrangler d1 create linknote
  2. 把命令返回的 database_id 填入 wrangler.jsonc

  3. 初始化远端数据库并配置管理密钥:

    npm run db:remote
    npx wrangler secret put GOOGLE_CLIENT_ID
    npx wrangler secret put GOOGLE_CLIENT_SECRET
    npx wrangler secret put ADMIN_GOOGLE_EMAIL
    npm run deploy

建议使用至少 24 个随机字符作为管理密钥。生产环境也可以在站点前叠加 Cloudflare Access。

URL 约定

  • /:所有用户按规范化 URL 去重后的公开书签
  • /bookmarks:当前登录用户自己的书签
  • /s/:slug:书签或文本的统一分享地址
  • /s/:slug/raw:仅用于短文本原文,适合脚本、配置和 curl
  • /recent:兼容地址,永久跳转到 /
  • /notes:当前登录用户的私密便签
  • /settings:API Token 与导入导出
  • /about:站点功能、使用说明和每日邀请链接
  • /api/bookmarks/:兼容 linkding 浏览器插件的书签 API
  • /go/:id:记录点击并跳转到书签原地址
  • /login:Google 登录入口
  • /invite:兼容旧地址,跳转到站点说明的邀请区域
  • /admin:管理员处理用户、链接、分享和邀请

临时分享通过 Entry 的 expires_at 实现。过期后分享地址返回 404,数据仍保留在个人库中。 书签备注最多 2,000 个字符,文本分享正文最多 100,000 个字符;网页表单、导入和兼容 API 都执行相同限制。 书签永久保存,不提供失效时间;便签可以设置失效时间。用户可从设置页选择内置头像。

MVP 范围

已包含:Google 登录、每日邀请、多用户数据归属、管理后台、linkding 浏览器插件兼容 API、浏览器书签导入、HTML/JSON 导出、网页 Meta 自动补全、分流展示的书签与文本、安全 Markdown、文本 raw 原文、全文搜索、标签、浏览统计、可见性控制和到期时间。

linkding 浏览器插件

登录后进入 /settings 生成 API Token,然后在 linkding 官方插件中填写:

  • Base URL:https://linknote.iggcloud.com
  • API Authentication Token:刚生成的 Token

支持插件的连接检测、当前页面检查与 Meta 获取、新建或更新书签、删除书签、标签自动完成和地址栏搜索。插件的 unread、网页快照和归档字段目前以兼容默认值返回。

书签和文本的分享地址都只能由系统随机生成,生成后保持不变;书签不提供 raw,会员文本仍可使用 raw。

暂未包含:开放注册、浏览器扩展、附件和 API Token 管理。

About

Minimal Cloudflare bookmark manager and Markdown text sharing tool

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages