Commit Graph
98 Commits
Author SHA1 Message Date
gouki ddbf259e93 fix(covers): fallback to neutral prompt when title trips content moderation
Build and Deploy / verify (push) Successful in 10s
Build and Deploy / deploy (push) Successful in 18s
input new_sensitive 的标题(自杀/逝世等)改用不含标题的通用提示词重试一次
2026-10-14 23:52:00 +00:00
gouki d041622531 feat: post cover filter + admin AI cover action, restyle page-cache admin
Build and Deploy / verify (push) Successful in 10s
Build and Deploy / deploy (push) Successful in 17s
- 抽 CoverGenerator 服务(covers:generate 与后台共用),内部强制同步产出 card 转换
- 文章列表:新增封面状态图标列、「有/无封面/完全无图」筛选、行内「生成封面」AI 操作
- 页面缓存:统计改为原生 StatsOverviewWidget(缓存页数/总大小/命中率/时长),
  缓存明细表重排(表头、悬停、URL 截断、图标删除按钮、空状态)
2026-10-14 23:48:57 +00:00
gouki 58ebaf7f90 fix(covers): generate card conversion inline during covers:generate
Build and Deploy / verify (push) Successful in 11s
Build and Deploy / deploy (push) Successful in 19s
站点无常驻 queue worker,media conversion 走 database 队列会永远不被消费,
导致封面 card 缩略图 404/403。批量生成期间关闭 queue_conversions_by_default。
2026-10-14 00:01:30 +00:00
gouki 57b6221d90 feat: list mode 50/page, card mode left-image rows, AI cover generation command
Build and Deploy / verify (push) Successful in 10s
Build and Deploy / deploy (push) Successful in 18s
- blog_paginate: 纯列表模式每页 50 条(list_per_page 可调),其余模式仍走 per_page
- 图文(card)模式:卡片网格改为左图右文横排,小屏回退竖排;摘要放宽到 100 字
- 新增 covers:generate:复用 AI 设置的 LLM 配置调 /image_generation(默认 image-01),
  为无封面文章批量生成封面存入 media cover 集合;支持 --all/--limit/--post/--style/--dry-run
- AI 设置页新增图片模型、封面风格两项配置
- 修正 HomeViewModeTest:列表模式为纯标题(不再显示摘要),并断言每页 50 条与图文布局
2026-10-13 23:58:15 +00:00
gouki 16dac8b568 feat: topbar legacy-sync button, card view mode with cover fallback, year/month/day archives, richer page cache admin, stylevar repeater editor
Build and Deploy / verify (push) Successful in 32s
Build and Deploy / deploy (push) Successful in 17s
- topbar: Livewire LegacySyncButton next to 写文章 (moved from user menu)
- view modes: add 图文(card) grid with cover fallback chain (cover → attachment → first content image → placeholder); list mode now title-only compact
- archives: year/month/day index grid
- page cache admin: size + expiry columns, total size, cache policy note
- theme inject: stylevars switch from KeyValue to Repeater with multi-line HTML editing
- import: html_entity_decode for category/post-title/link/keywords/comment author
2026-10-13 09:01:46 +00:00
gouki 2d8752f863 fix(auth): return empty string from getAuthPassword for legacy null passwords (recaller hash_equals TypeError)
Build and Deploy / verify (push) Successful in 10s
Build and Deploy / deploy (push) Successful in 17s
2026-10-12 23:07:10 +00:00
gouki 3784b31ecf feat(admin): add 'sync legacy sablog data' button to user menu (incremental import)
Build and Deploy / verify (push) Successful in 11s
Build and Deploy / deploy (push) Successful in 18s
2026-10-12 22:58:53 +00:00
gouki d483577c90 fix(tags): use crc32-fallback slugger for Chinese tag names (HasSlug was blanking slugs)
Build and Deploy / verify (push) Successful in 11s
Build and Deploy / deploy (push) Successful in 17s
2026-10-12 22:52:21 +00:00
gouki 9c91f1bdec ci: drop composer install from asset build (vite does not need vendor; github dist timeouts)
Build and Deploy / verify (push) Successful in 13s
Build and Deploy / deploy (push) Successful in 22s
2026-10-12 13:55:01 +00:00
gouki fbf46f5082 ci: skip dev dependencies in asset build (faker/pint/phpunit hit github timeouts)
Build and Deploy / verify (push) Failing after 10m19s
Build and Deploy / deploy (push) Skipped
2026-10-12 12:56:38 +00:00
gouki 86effba075 fix(import): dedupe tags via Tag::findFromString (name is JSON translatable)
Build and Deploy / verify (push) Failing after 30m11s
Build and Deploy / deploy (push) Skipped
2026-10-12 12:44:39 +00:00
gouki 6adfacc4e5 feat(frontend): enable Livewire SPA navigation (wire:navigate)
Build and Deploy / verify (push) Failing after 39m48s
Build and Deploy / deploy (push) Skipped
2026-10-12 12:30:58 +00:00
gouki b062e09db0 ci: use aliyun composer mirror to avoid github timeout
Build and Deploy / verify (push) Successful in 4m16s
Build and Deploy / deploy (push) Successful in 49s
2026-10-12 09:18:59 +00:00
gouki 7fb4c89d6e ci: trigger deploy for path generator
Build and Deploy / verify (push) Failing after 8m17s
Build and Deploy / deploy (push) Skipped
2026-10-12 09:10:34 +00:00
gouki dec02f583a feat(media): use legacy filepath structure for attachments via custom path generator
Build and Deploy / verify (push) Failing after 11m47s
Build and Deploy / deploy (push) Skipped
2026-10-12 08:58:19 +00:00
gouki 3aed6771b0 fix(theme): widen main container from 960px to 1380px for modern screens
Build and Deploy / verify (push) Successful in 29s
Build and Deploy / deploy (push) Successful in 26s
2026-10-11 19:32:28 +00:00
gouki 13f017e806 fix(import): preserve original attachment filepath structure; enable admin SPA mode
Build and Deploy / verify (push) Successful in 31s
Build and Deploy / deploy (push) Successful in 28s
2026-10-11 19:31:11 +00:00
gouki faf70ec5f4 fix(import): use sablog_articles.keywords for tags instead of sablog_tags.aids
Build and Deploy / verify (push) Successful in 33s
Build and Deploy / deploy (push) Successful in 37s
2026-10-11 19:25:36 +00:00
goukiandCursor debead72a5 feat: add frontend admin shortcut for staff
Build and Deploy / verify (push) Failing after 15m18s
Build and Deploy / deploy (push) Skipped
Let admin and editor open /admin in a new tab from the public header and profile, so they can jump to the backend without leaving the site.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-21 23:42:54 +00:00
goukiandCursor 36c4ffc5b4 fix: restyle pager chips and restore theme ad slots
Build and Deploy / verify (push) Successful in 37s
Build and Deploy / deploy (push) Successful in 38s
Replace the loose page-count label with a SaBlog-style 6 / 316 chip, wire inject/stylevar HTML into list and post views, and flush page cache when ads are saved.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 21:48:24 +00:00
goukiandCursor ae47447062 feat: restore sablog browse modes and clean imported HTML
Build and Deploy / verify (push) Successful in 40s
Build and Deploy / deploy (push) Successful in 36s
Keep the public site readable after import (nbsp, highlighter, wrapping code, compact pager) and finish the admin extras already in this tree: sticky levels, preview, page cache, and live llms.txt.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 21:33:02 +00:00
goukiandCursor 469160dc3f feat: add admin env badge, quick post button, and harden plugin enable
Build and Deploy / verify (push) Failing after 15m17s
Build and Deploy / deploy (push) Skipped
Show local/prod in the Filament topbar, jump to create post in one click, tighten sidebar spacing, and stop Hello World from 500ing when its tables are missing.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-18 08:24:16 +00:00
gouki b39423831c test(legacy): align expectations with sablog canonical URLs
Build and Deploy / verify (push) Successful in 40s
Build and Deploy / deploy (push) Successful in 32s
2026-09-16 23:06:53 +00:00
gouki 38723662e2 fix(seo): read id/cid route params after sablog URL refactor
Build and Deploy / verify (push) Successful in 34s
Build and Deploy / deploy (push) Successful in 39s
2026-09-16 23:06:14 +00:00
goukiandCursor de03ddec52 Merge branch 'main' of gitea.neatcn.com:gouki/laralog
Build and Deploy / verify (push) Successful in 34s
Build and Deploy / deploy (push) Successful in 40s
Keep media-library covers while adopting sablog /show-{id}.shtml canonical URLs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 19:06:42 +00:00
goukiandCursor f81397a289 feat: use xpier media library for uploads and markdown embeds
Store media:ID in post bodies instead of CDN URLs, and keep sablog attach tokens as a fallback.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-09-16 19:03:52 +00:00
gouki 79dfa0d88c fix(routes): remove duplicate /tag/{name} legacy route shadowing canonical
Build and Deploy / verify (push) Successful in 59s
Build and Deploy / deploy (push) Successful in 31s
2026-09-09 21:28:03 +00:00
gouki f5987e7cc2 refactor(routes): canonical URLs now match sablog format exactly
Build and Deploy / verify (push) Successful in 1m6s
Build and Deploy / deploy (push) Successful in 41s
- /show-{id}.shtml (comments page: /show-{id}-{page}.shtml)
- /category-{cid}.shtml / /category-{cid}-{page}.shtml
- /archives-{YYYYMM}.shtml / /archives-{YYYYMM}-{page}.shtml
- /tag/{name}, /tagslist.shtml, /index-{page}.shtml
- slug 时代的 /posts/{slug} 等旧格式全部 301 到 sablog 格式
2026-09-09 21:21:07 +00:00
gouki f6a9a8ea50 fix(renderer): render [attach=xx] as <img> for image attachments (legacy sablog behavior)
Build and Deploy / verify (push) Successful in 1m0s
Build and Deploy / deploy (push) Successful in 33s
2026-09-07 22:32:22 +00:00
gouki 46428ce02f fix(routes): legacy sablog .shtml URLs 301 alongside .html
Build and Deploy / verify (push) Successful in 58s
Build and Deploy / deploy (push) Successful in 33s
2026-09-07 20:04:44 +00:00
gouki e0c709ad5c fix(import): null out orphan category references (FK safe)
Build and Deploy / verify (push) Successful in 1m0s
Build and Deploy / deploy (push) Successful in 33s
2026-09-07 19:55:19 +00:00
gouki 66ce4bce0a fix(import): guard epoch-0 datetimes for MySQL 5.7 TIMESTAMP range
Build and Deploy / verify (push) Successful in 59s
Build and Deploy / deploy (push) Successful in 29s
2026-09-07 19:47:45 +00:00
gouki d5e68ab6fc fix(link-tracker): prefix index on target_url for MySQL 5.7 compat
Build and Deploy / verify (push) Successful in 1m3s
Build and Deploy / deploy (push) Successful in 33s
2026-09-07 19:33:47 +00:00
gouki 6f1a25f7fa ci: retrigger after env password quoting fix
Build and Deploy / verify (push) Successful in 1m13s
Build and Deploy / deploy (push) Failing after 35s
2026-09-07 19:28:09 +00:00
gouki 1add059bcc ci: retrigger deploy after storage skeleton fix
Build and Deploy / verify (push) Successful in 1m11s
Build and Deploy / deploy (push) Failing after 23s
2026-09-07 19:24:08 +00:00
gouki 06e73d49d0 ci: deploy via php83-ex; ignore ext-exif in verify (CI image lacks it)
Build and Deploy / verify (push) Successful in 1m13s
Build and Deploy / deploy (push) Failing after 26s
2026-09-07 19:19:43 +00:00
gouki 9fdbb55218 ci: fix step order - touch sqlite before composer, drop premature key:generate
Build and Deploy / verify (push) Failing after 7s
Build and Deploy / deploy (push) Skipped
2026-09-07 19:13:39 +00:00
gouki 2301f7075e ci: prepare sqlite env in verify job; remove GitHub-only workflow
Build and Deploy / verify (push) Failing after 5s
Build and Deploy / deploy (push) Skipped
2026-09-07 19:10:18 +00:00
gouki b491c8ac86 ci: add Gitea Actions deploy workflow for laralog.neatstudio.com
Build and Deploy / verify (push) Failing after 7s
Build and Deploy / deploy (push) Skipped
2026-09-07 19:04:14 +00:00
ak 43dc8f9856 docs: 安装/导入文档 + 部署文档刷新 + workerman 进程文件收归 storage
CI / test (push) Failing after 7s
CI / deploy (push) Skipped
- docs/install.md:全新安装指南(环境要求/.env/验收清单/常见问题)
- docs/import.md:Sablog 导入全解(命令参数表/数据映射/附件短代码/301 兼容/S3 同步/幂等重跑/检查清单)
- docs/deploy.md:补生产迁移顺序、上线前检查清单、调度器实际内容
- Workerman 进程文件(pid/status/log)统一写入 storage/framework 与 storage/logs,不再出现在项目根目录;.gitignore 排除并清理根目录残留
- README 文档导航补 install/import
2026-08-13 05:00:22 +08:00
ak 6f13d13d5a chore: 上线前加固——调度器/登录限流/env 模板补全
- routes/console.php:注册每日数据库备份(03:00)+ 前台页面缓存清理(04:00)
- 前台登录/注册 POST 加 throttle:6,1 防爆破
- .env.example 补 S3/LLM/MARKET/UPLOAD_DISK 配置项,新部署不再漏配
2026-08-13 03:32:27 +08:00
ak f1b9d1e1c3 refactor: 外链中转拆为内置插件 neatstudio.link-tracker
- 插件承载全部逻辑:redirects 迁移(hasTable 兼容旧库)、Redirect 模型、UrlRedirector、/go 路由+控制器、Filament 外链中转资源
- 核心只留 hook 接入点:
  - tracked_url() 助手走 link.redirect 过滤器(评论正文/作者网址/友链模板统一调用)
  - 正文外链改写移到插件的 post.rendered 过滤器(优先级 20,晚于会员付费过滤)
- 停用插件:链接恢复直连、内容不受影响;后台「管理 → 外链中转」查看点击量/启停
- 测试更新为插件上下文(含无过滤器降级断言);97 通过
2026-08-13 02:05:32 +08:00
ak 8f1ff6e3f9 feat: 外链中转 /go——点击统计 + 拦截 + 隐藏真实链接
- redirects 表 + UrlRedirector:go_url() 站外链接改写为 /go/{hash}(确定性 hash、同 URL 复用、并发安全、缓存)
- /go/{hash} 302 跳转 + 点击计数 + 最后点击时间;停用状态 410(二次拦截);后台「外链中转」资源可查看点击量/启停/删除
- 接入点:正文外链(渲染器统一改写)、评论正文自动链接(comment_body)、评论作者网址、友链(侧边栏+友链页);站内/相对/mailto/tel/锚点不中转
- 测试 6 个(改写/计数/拦截/复用/渲染/评论正文);README 补充
2026-08-13 01:28:10 +08:00
ak 5f74dd76e4 feat: 文章/分类/评论关联细节完善
- 文章列表:会员插件注入「付费」徽章列(会员/付费¥xx,停插件即消失)
- 分类:真实文章数(withCount)、名称点击跳文章列表并按分类筛选(ListPosts booted 预置筛选)
- 分类:新增封面(medialibrary)+ 介绍(description 字段/表单);前台分类页顶部展示介绍区;SEO description + BreadcrumbList 结构化数据(GEO)
- 文章编辑:MarkdownEditor 内容区加大(26rem);文章编辑页新增「评论」关系管理页(可审/拒)
- 评论列表:文章列带摘要
- 三套主题补 .category-intro 样式
- 测试更新(付费徽章列)
2026-08-12 22:44:16 +08:00
ak a22175d5b7 style: 筛选下拉再压一档(29px),与应用按钮(25px)协调 2026-08-12 19:19:53 +08:00
ak c12eb38cca feat: 后台表格优化——行点击禁用/标题省略/行高统一/筛选控件紧凑
- 8 个资源表格 recordUrl(null)+recordAction(null):行不再可点击,查看/编辑仅通过操作列按钮;标题列不再自动变链接
- 标题列单行省略(含分类描述),长标题不换行,所有数据行统一 53px 与表头等高
- 筛选下拉控件紧凑(min-height 1.75rem、字号 0.8rem),与应用按钮协调
- 重置链接紧跟应用筛选按钮(不再推到最右)
- 操作列固定宽度 88px
- 实测:表头=数据行=53px、行点击关闭、重置紧跟应用
2026-08-12 19:11:13 +08:00
ak 1d0fe3f8b6 style: 筛选区一行横排(重置靠右/按钮缩小)+ 表头高度对齐数据行
- 筛选区整体 flex 一行:重置靠右(order+margin-left:auto)、各条件 label 内联、应用按钮缩小
- 表头 padding 提到 *3(12px),与数据行(53px,受操作列按钮固定高度约束)视觉差缩小
- 数据行高度:.fi-ta-text/.fi-ta-icon padding-block 由默认 *4 压到 *1.75(57→53px),双行标题行 81→63px
2026-08-12 19:00:55 +08:00
ak 0c5b19b4eb style: 筛选区一行横排(重置|条件|应用)+ 表头/数据行高度和谐
- 筛选区整体 flex 一行:重置链接、各条件(label 内联在控件左侧)、应用按钮同行排列,必要时自动换行
- 行高:表头 0.5→0.5625rem 稍加,选择列 0.4375→0.375rem 稍减,单行数据行与表头高度趋近一致
2026-08-12 18:33:47 +08:00
ak 2c3e18fee6 style: 后台再收一档——表头/选择列/筛选区间距微减 2026-08-12 18:21:33 +08:00
ak 359d350083 feat: 筛选条件 Above 常驻横排 + 修正表格行紧凑(行高驱动源)
- 五个表格筛选改为 AboveContent 常驻显示,隐藏「筛选条件」标题、压缩为一行
- 修正行紧凑:行高由选择列/表头驱动(数据单元格默认 padding 为 0,此前加 padding 反而加高)
2026-08-12 18:20:59 +08:00