{"id":16250296,"url":"https://github.com/willow-god/Friend-Circle-Lite","last_synced_at":"2025-10-25T03:30:42.996Z","repository":{"id":246942744,"uuid":"822876443","full_name":"willow-god/Friend-Circle-Lite","owner":"willow-god","description":"🐱一个精简版，无后端，且仅利用github action运行的精简版友链朋友圈程序，兼容fc的json格式信息，同时支持推送友圈更新，支持他人订阅个人站点并在更新时发送邮箱推送。","archived":false,"fork":false,"pushed_at":"2024-09-30T20:01:44.000Z","size":2175,"stargazers_count":32,"open_issues_count":0,"forks_count":23,"subscribers_count":2,"default_branch":"main","last_synced_at":"2024-09-30T23:01:31.299Z","etag":null,"topics":["feed","hexo","html","html-css-javascript","json","python","rss","spider","yaml"],"latest_commit_sha":null,"homepage":"https://blog.liushen.fun/posts/4dc716ec/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/willow-god.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-07-02T02:24:42.000Z","updated_at":"2024-09-30T15:21:39.000Z","dependencies_parsed_at":"2024-09-11T16:36:31.598Z","dependency_job_id":null,"html_url":"https://github.com/willow-god/Friend-Circle-Lite","commit_stats":null,"previous_names":["willow-god/friend-circle-lite"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willow-god%2FFriend-Circle-Lite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willow-god%2FFriend-Circle-Lite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willow-god%2FFriend-Circle-Lite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/willow-god%2FFriend-Circle-Lite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/willow-god","download_url":"https://codeload.github.com/willow-god/Friend-Circle-Lite/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":219866835,"owners_count":16555903,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["feed","hexo","html","html-css-javascript","json","python","rss","spider","yaml"],"created_at":"2024-10-10T15:01:48.739Z","updated_at":"2025-10-25T03:30:42.990Z","avatar_url":"https://github.com/willow-god.png","language":"Python","funding_links":[],"categories":["Python"],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"./static/favicon.ico\" width=\"200\" alt=\"fclite\"\u003e\n\n  [前端展示](https://fc.liushen.fun) | [详细文档](https://blog.liushen.fun/posts/4dc716ec/)\n\n  # Friend-Circle-Lite\n\n\u003c/div\u003e\n\n友链朋友圈简单版，实现了[友链朋友圈](https://github.com/Rock-Candy-Tea/hexo-circle-of-friends)的基本功能，能够定时爬取rss文章并输出有序内容，为了较好的兼容性，输入格式与友链朋友圈的json格式一致，为了轻量化，暂不支持从友链页面自动爬取，下面会附带`hexo-theme-butterfly`主题的解决方案，其他主题可以类比。\n\n## 开发进度\n\n### 2025-07-23\n\n* 添加缓存文件，防止由于缓存导致多次请求\n* 添加feed.php后缀的适配\n* 完善action，将临时文件统一缓存，包括缓存文件，和最新文章文件，缓存时间缩短为三十天\n\n\u003e 注意，本次更新由于变动了订阅文章地址，可能导致给所有邮件订阅用户发送五个最新文章邮件，如果想要避免，可以先将SMTP发件信息修改成错误的信息，防止成功发送邮件，等更新完成，成功执行一次获得最新文章，并缓存后再修改成正确的相关信息即可。\n\n### 2024-10-29\n\n* 完善github数据获取，从环境变量中直接获取，配置文件仅用于自部署\n* 限制文章数量，防止因为数量过大导致的api文件加载缓慢，仅保留150左右文章([#23](https://github.com/willow-god/Friend-Circle-Lite/pull/23))\n* 修改action中写错的github_token拼写\n\n### 2024-10-07\n\n* 添加随机文章刷新按钮\n* 完善邮件通知模板自定义程度\n\n\u003cdetails\u003e\n\u003csummary\u003e查看更多\u003c/summary\u003e\n\n\u003ch3\u003e2024-10-07\u003c/h3\u003e\n\n* 更新自部署的api地址，统一为all.json，提高js兼容性\n* 美化展示页面UI(@JLinMr)，添加背景图片\n* 优化作者卡片弹窗动效(@JLinMr)\n\n\u003ch3\u003e2024-09-22\u003c/h3\u003e\n\n* 修复 #18 提出的，由于rss倒序导致限制抓取错误的问题，改为先全部获取后，按照时间排序，再选择性获取\n\n\u003ch3\u003e2024-09-05\u003c/h3\u003e\n\n* 更新部署方式，将静态文件放到page分支下，主分支不放数据文件\n* 前后端分离，部署方式不变但更加直观方便\n\n\u003ch3\u003e2024-09-03\u003c/h3\u003e\n\n* 添加特定RSS选项，用于指定部分友链特殊RSS地址\n* 更新文档，添加特定RSS选项配置部分\n\n\u003ch3\u003e2024-08-28\u003c/h3\u003e\n\n* 日常维护，修复issue中提出的时间为空导致错误的情况，使用更新时间代替\n\n\u003ch3\u003e2024-08-11\u003c/h3\u003e\n\n* 添加服务器部署的情况下，合并github结果的选项\n* 由于复杂性，决定将服务和定时抓取分开，使用面板自带进行配置，防止小白无法配置\n* 修改文档，添加自部署部分\n\n\u003ch3\u003e2024-08-03\u003c/h3\u003e\n\n* 将自部署分离为API服务和定时爬取\n* 尝试更加系统的启动脚本\n* 删除server.py中的爬取内容，使用定时任务crontab实现\n\n\u003ch3\u003e2024-07-28\u003c/h3\u003e\n\n* 自部署添加跨域请求 \n* 修复内存占用异常问题\n* 将html资源分开存放，实现更加美观的页面\n\n\u003ch3\u003e2024-07-26\u003c/h3\u003e\n\n* 自部署添加跨域请求 \n* 添加`/rss.xml`，`/feed/`，`feed.xml`接口的爬取，提高兼容性\n* 修复PJAX下会多次出现模态框的问题，并且切换页面不消失\n* 修复模态框宽度问题，添加日历图标以更加美观\n\n\u003ch3\u003e2024-07-25\u003c/h3\u003e\n\n* 自部署正在开发中，仅供测试\n* 添加`/errors.json`，用于获取丢失友链数据，提高自定义程度\n* 添加`/index.xml`接口的爬取，提高兼容性\n\u003c/details\u003e\n\n\n\n## 展示页面\n\n* [清羽飞扬の友链朋友圈](https://blog.liushen.fun/fcircle/)\n\n* [❖星港◎Star☆ 的友链朋友圈](https://blog.starsharbor.com/fcircle/)\n\n* [梦爱吃鱼的友链朋友圈](https://blog.bsgun.cn/fcircle/)\n\n* 欢迎在issue中[提交](https://github.com/willow-god/Friend-Circle-Lite/issues/20)以展示你独特的设计！\n\n## 项目介绍\n\n- **爬取文章**: 爬取所有友链的文章，结果放置在根目录的all.json文件中，方便读取并部署到前端。\n- **邮箱推送更新(对作者推送所有友链更新)**: 作者可以通过邮箱订阅所有rss的更新（未来开发）。\n- **issue邮箱订阅(对访客实时推送最新文章邮件)**: 基于`GitHub issue`的博客更新邮件订阅功能，游客可以通过简单的提交`issue`进行邮箱订阅站点更新，删除对应`issue`即可取消订阅。\n- **文件分离**: 将前后端分离，前端文件放在page分支，后端文件放在主分支\n\n## 特点介绍\n\n* **轻量化**：对比原版友链朋友圈的功能，该友圈功能简洁，去掉了设置和fastAPI的臃肿，仅保留关键内容。\n* **无数据库**：因为内容较少，我采用`json`直接存储文章信息，减少数据库操作，提升`action`运行效率。\n* **部署简单**：原版友链朋友圈由于功能多，导致部署较为麻烦，本方案仅需简单的部署action即可使用，vercel仅用于部署前端静态页面和实时获取最新内容。\n* **文件占用**：对比原版`4MB`的`bundle.js`文件大小，本项目仅需要`5.50KB`的`fclite.min.js`文件即可轻量的展示到前端。\n\n## 功能概览\n\n* 文章爬取\n* 暗色适配\n* 显示作者所有文章\n* 获取丢失友链数据\n* 随机钓鱼\n* 邮箱推送\n* 美观邮箱模板\n* 自部署(2024-08-11添加)\n* 前端单开分支(2024-09-05添加) @CCKNBC\n\n## action部署使用方法\n\n### 前置工作\n\n1. **Fork 本仓库:**\n   点击页面右上角的 Fork 按钮，将本仓库复制到你自己的`GitHub`账号下，仅复刻main分支即可。\n   ![](./static/fork.png)\n\n2. **配置 Secrets:**\n   在你 Fork 的仓库中，依次进入 `Settings` -\u003e `Secrets` -\u003e `New repository secret`，添加以下 Secrets：\n   - `SMTP_PWD`(可选): SMTP 服务器的密码，用于发送电子邮件，如果你不需要，可以不进行配置。\n\n   ![](./static/1.png)\n   \n3. **配置action权限：**\n   \n   在设置中，点击`action`，拉到最下面，勾选`Read and write permissions`选项并保存，确保action有读写权限。\n   \n4. **启用 GitHub Actions:**\n   GitHub Actions 已经配置好在仓库的 `.github/workflows/*.yml` 文件中，当到一定时间时将自动执行，也可以手动运行。\n   其中，每个action功能如下：\n   \n   - `friend_circle_lite.yml`实现核心功能，爬取并发送邮箱，需要在Action中启用；\n   - `deal_subscribe_issue.yml`处理固定格式的issue，打上固定标签，评论，并关闭issue；\n   \n5. **设置issue格式：**\n   这个我已经设置好了，你只需要检查issue部分是否有对应格式即可，可以自行修改对应参数以进行自定义。\n\n### 配置选项\n\n1. 如果需要修改爬虫设置或邮件模板等配置，需要修改仓库中的 `config.yaml` 文件：\n\n   - **爬虫相关配置**\n     使用 `requests` 库实现友链文章的爬取，并将结果存储到根目录下的 `all.json` 文件中。\n     \n     ```yaml\n     spider_settings:\n       enable: true\n       json_url: \"https://blog.qyliu.top/friend.json\"\n       article_count: 5\n       merge_result:\n         enable: true\n         merge_json_url: \"https://fc.liushen.fun\"\n     ```\n     \n     `enable`：开启或关闭，默认开启；\n     \n     `json_url`：友链朋友圈通用爬取格式第一种（下方有配置方法）;\n     \n     `article_count`：每个作者留存文章个数。\n\n     `marge_result`：是否合并多个json文件，若为true则会合并指定网络地址和本地地址的json文件并去重\n     \n     - `enable`：是否启用合并功能，该功能提供与自部署的友链合并功能，可以解决服务器部分国外网站，服务器无法访问的问题\n     \n     - `marge_json_path`：请填写网络地址的json文件，用于合并，不带空格！！！\n     \n   - **邮箱推送功能配置**\n     暂未实现，预留用于将每天的友链文章更新推送给指定邮箱。\n     \n     ```yaml\n     email_push:\n       enable: false\n       to_email: recipient@example.com\n       subject: \"今天的 RSS 订阅更新\"\n       body_template: \"rss_template.html\"\n     ```\n     \n     **暂未实现**：该部分暂未实现，由于感觉用处不大，保留接口后期酌情更新。\n     \n   - **邮箱 issue 订阅功能配置**\n     通过 GitHub issue 实现向提取的所有邮箱推送博客更新的功能。\n     \n     ```yaml\n     rss_subscribe:\n       enable: true\n       github_username: willow-god\n       github_repo: Friend-Circle-Lite\n       your_blog_url: https://blog.qyliu.top/\n     ```\n     \n     `enable`：开启或关闭，默认开启，如果没有配置请关闭。\n     \n     `github_username`：github用户名，用来拼接github api地址\n     \n     `github_repo`：仓库名称，作用同上。\n     \n     `your_blog_url`：用来定时检测是否有最新文章，请确保你的网站可以被FCLite抓取到\n     \n   - **SMTP 配置**\n     使用配置中的相关信息实现邮件发送功能。\n     \n     ```yaml\n     smtp:\n       email: 3162475700@qq.com\n       server: smtp.qq.com\n       port: 587\n       use_tls: true\n     ```\n     \n     `email`：发件人邮箱地址\n     \n     `server`：`SMTP` 服务器地址\n     \n     `port`：`SMTP` 端口号\n     \n     `use_tls`：是否使用 `tls` 加密\n     \n     这部分配置较为复杂，请自行学习使用。\n\n   - **特定 RSS 配置**\n   \n     用于指定特定友链特殊RSS，样例如下：\n\n     ```yaml\n     specific_RSS:\n       - name: \"Redish101\"\n         url: \"https://reblog.redish101.top/api/feed\"\n      # - name: \"無名小栈\"\n      #   url: \"https://blog.imsyy.top/rss.xml\"\n     ```\n\n     `name`：友链名称，需要严格匹配\n\n     `url`：该友链对应RSS地址\n\n     可以添加多个，如果不需要也可以置空。\n\n2. **贡献与定制:**\n   欢迎对仓库进行贡献或根据需要进行定制。\n\n**如果你配置正常，那么等action运行一次（可以手动运行）应该就可以在page分支看到结果了，检查一下，如果结果无误，可以继续看下一步**\n\n### 友圈json生成\n\n**注意，以下可能仅适用于hexo-theme-butterfly或部分类butterfly主题，如果你是其他主题，可以自行适配，理论上只要存在友链数据文件都可以整理为该类型，甚至可以自行整理为对应json格式后放到 `/source` 目录下即可，格式可以参考：`https://blog.qyliu.top/friend.json` **\n\n1. 将以下文件放置到博客根目录：\n\n   ```javascript\n   const YML = require('yamljs')\n   const fs = require('fs')\n   \n   let friends = [],\n       data_f = YML.parse(fs.readFileSync('source/_data/link.yml').toString().replace(/(?\u003c=rss:)\\s*\\n/g, ' \"\"\\n'));\n   \n   data_f.forEach((entry, index) =\u003e {\n       let lastIndex = 2;\n       if (index \u003c lastIndex) {\n           const filteredLinkList = entry.link_list.filter(linkItem =\u003e !blacklist.includes(linkItem.name));\n           friends = friends.concat(filteredLinkList);\n       }\n   });\n   \n   // 根据规定的格式构建 JSON 数据\n   const friendData = {\n       friends: friends.map(item =\u003e {\n           return [item.name, item.link, item.avatar];\n       })\n   };\n   \n   // 将 JSON 对象转换为字符串\n   const friendJSON = JSON.stringify(friendData, null, 2);\n   \n   // 写入 friend.json 文件\n   fs.writeFileSync('./source/friend.json', friendJSON);\n   \n   console.log('friend.json 文件已生成。');\n   ```\n\n2. 在根目录下运行：\n\n   ```bash\n   node link.js\n   ```\n\n   你将会在source文件中发现文件`friend.json`，即为对应格式文件，下面正常hexo三件套即可放置到网站根目录。\n\n3. (可选)添加运行命令到脚本中方便执行，在根目录下创建：\n\n   ```bash\n   @echo off\n   E:\n   cd E:\\Programming\\HTML_Language\\willow-God\\blog\n   node link.js \u0026\u0026 hexo g \u0026\u0026 hexo algolia \u0026\u0026 hexo d\n   ```\n\n   地址改成自己的，上传时仅需双击即可完成。\n\n   如果是github action，可以在hexo g脚本前添加即可完整构建，注意需要安装yaml包才可解析yml文件。\n\n## 部署静态网站\n\n首先，将该项目部署到vercel，部署到vercel等平台的目的主要是检测仓库变动并实时更新数据，及时获取all.json文件内容。任意平台均可，但是注意，部署的分支为page分支。\n\n1. vercel 部署完成后，检查对应页面，如果页面中没有数据，且 `/all.json` 路径无法访问可能是部署到main分支了，可以通过 `setting-git-Production Branch` ，填写为page并重新进行部署即可\n   \n   ![](./static/vercel.png)\n\n2. zeabur 可以在部署时直接选择分支：\n   \n   ![](./static/zeabur.png)\n\n3. CloudFlare Page 也可以在构建时即选择对应的分支，这里不再细讲。\n\n   ![](./static/cloudflare.png)\n\n部署完成后，你将获得一个地址，如果是通过vercel部署的，建议自行绑定域名。\n\n检查 `https://example.com/all.json` 是否有数据，如果有，则部署成功。\n\n## 部署到你的页面\n\n在前端页面的md文件中写入：\n\n```html\n\u003cdiv id=\"friend-circle-lite-root\"\u003e\u003c/div\u003e\n\u003cscript\u003e\n    if (typeof UserConfig === 'undefined') {\n        var UserConfig = {\n            // 填写你的fc Lite地址\n            private_api_url: 'https://fc.liushen.fun/',\n            // 点击加载更多时，一次最多加载几篇文章，默认20\n            page_turning_number: 20,\n            // 头像加载失败时，默认头像地址\n            error_img: 'https://i.p-i.vip/30/20240815-66bced9226a36.webp',\n        }\n    }\n\u003c/script\u003e\n\u003clink rel=\"stylesheet\" href=\"https://fastly.jsdelivr.net/gh/willow-god/Friend-Circle-Lite/main/fclite.min.css\"\u003e\n\u003cscript src=\"https://fastly.jsdelivr.net/gh/willow-god/Friend-Circle-Lite/main/fclite.min.js\"\u003e\u003c/script\u003e\n```\n\n其中第一个地址填入你自己的地址即可，**注意**尾部带`/`，不要遗漏。\n\n然后你就可以在前端页面看到我们的结果了。效果图如上展示网站，其中两个文件你可以自行修改，在同目录下我也提供了未压缩版本，有基础的可以很便捷的进行修改。\n\n## 自部署使用方法\n\n如果你有一台境内服务器，你也可以通过以下操作将其部署到你的服务器上，操作如下：\n\n### 前置工作\n\n确保你的服务器有定时任务 `crontab` 功能包，一般是linux自带，如果你没有宝塔等可以管理定时任务的面板工具，可能需要你自行了解定时工具并导入，本教程提供了简单的介绍。\n\n### 宿主机环境\n\n\u003e 适用于宝塔面板等宿主机直接有Python环境的场景下\n\n首先克隆仓库并进入对应路径：\n\n```bash\ngit clone https://github.com/willow-god/Friend-Circle-Lite.git\ncd Friend-Circle-Lite\n```\n\n由于不存在issue，所以不支持邮箱推送(主要是懒得分类写了，要不然还得从secret中获取密码的功能剥离QAQ)，请将除第一部分抓取以外的功能均设置为false\n\n下载服务相关包，其中 `requirements-server.txt` 是部署API服务所用包， `requirements.txt` 是抓取服务所用包，请均下载一遍。\n\n```bash\npip install -r ./requirements.txt\npip install -r ./server/requirements-server.txt\n```\n\n#### 部署API服务\n\n如果环境配置完毕，你可以进入目录路径后直接运行`deploy.sh`脚本启动API服务：\n\n```bash\nchmod +x ./deploy.sh\n./deploy.sh\n```\n\n其中的注释应该是较为详细的，如果部署成功你可以使用以下命令进行测试，如果获取到了首页html内容则成功：\n\n```bash\ncurl 127.0.0.1:1223\n```\n\n这个端口号可以修改，在server.py最后一行修改数字即可，如果你想删除该API服务，可以使用ps找到对应进程并使用Kill命令杀死进程：\n\n```bash\nps aux | grep python\nkill -9 [这里填写上面查询结果中对应的进程号]\n```\n\n### Docker环境\n\n\u003e 目前Docker部署方式和1Panel强相关，如果有其他需要docker环境部署的，可以参考，但是可能需要自行摸索\n\n由于主包也用上了1Panel，所以捣鼓了一下，得益于1Panel可以方便的创建运行环境，所以可以基本做到无占用的API，因为除了执行action的时候，其他时间完全是纯静态的。\n\n首先创建一个完全静态的网站，比如fc.example.com，如下：\n\n![](./static/1panel-website.png)\n\n打开网站目录，将fclite项目代码放置在以网站命名的文件夹下，注意看示例：\n\n![](./static/1panel-dir.png)\n\n注意看上面的文件结构，不要搞错啦！其中默认的`index`等所有文件夹一定要保留，不要删掉！\n\n然后再在左侧菜单，1Panel，运行环境，创建Python环境，配置如下所示：\n\n![](./static/1panel-python.png)\n\n其中运行目录为刚才看到的以网站命名的文件夹，其中名称可以按照自己的要求随意修改，仅为Docker名称，执行命令如下：\n\n```bash\npip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple \u0026\u0026 pip install -r requirements.txt \u0026\u0026 python run.py \u0026\u0026 mv -f all.json errors.json index/\n```\n\n点击运行，如果正常，应该会执行一个docker实现抓取，并且在抓取完成后，docker关闭，而你的网站下的index文件夹内，应该就是最新的爬取的内容，直接静态部署即可，后面只需要定时启动docker，会自动执行抓取命令，抓取完成后也会自动关闭。\n\n#### 合并github数据\n\n你是不是以为github数据没用了？并不是！因为有很多站长是使用的GitHub page等服务部署的，这种服务可能无法被你的服务器抓取，此时你就需要合并两个的爬取数据。修改第一个配置中的以下部分：\n\n```yaml\nmerge_result:\n    enable: true\n    merge_json_url: \"https://fc.liushen.fun\"\n```\n其中地址项不要添加最后的斜杠，这样就会在本地爬取结束后合并远程的数据，以做到更高的准确率！\n\n### 定时抓取文章\n\n#### 宿主机环境\n\n\u003e 宿主机环境只需要直接执行python ./run.py即可执行抓取\n\n由于原生的crontab可能较为复杂，如果有兴趣可以查看./deploy.sh文件中，屏蔽掉的部分，这里我不会细讲，这里我主要讲解宝塔面板添加定时任务，这样可以最大程度减少内存占用，其他面板服务类似：\n\n![](./static/baota.png)\n\n点击宝塔右侧的定时任务后，点击添加，按照上图配置，并在命令中输入：\n\n```bash\ncd /www/wwwroot/Friend-Circle-Lite\npython3 run.py\n```\n\n具体地址可以按照自己的需要进行修改，这样我们就可以做到定时修改文件内容了！然后请求api就是从本地文件中返回所有内容的过程，和爬取是分开的，所以并不影响！\n\n#### 容器环境\n\n如果是容器环境，只需要定时启动容器即可执行抓取，抓取完成后，容器自动停止，零占用内存，命令如下示例，主要就是容器名称：\n\n```bash\ndocker restart Friend-Circle-Lite\n```\n\n## 问题与贡献\n\n如果遇到任何问题或有建议，请[提交一个 issue](https://github.com/willow-god/Friend-Circle-Lite/issues)。欢迎贡献代码！\n\n## Star增长曲线\n\n[![Star History Chart](https://api.star-history.com/svg?repos=willow-god/Friend-Circle-Lite\u0026type=Timeline)](https://star-history.com/#willow-god/Friend-Circle-Lite\u0026Timeline)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillow-god%2FFriend-Circle-Lite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwillow-god%2FFriend-Circle-Lite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwillow-god%2FFriend-Circle-Lite/lists"}