DESKTOP-1R2VSQH\Lenovo ThinkPad E490
|
6fd3a1515f
|
ซ่อม text ไทย PDF (ActualText) + revalidatePath ทุก action + คีย์ลัด DEL + ตรายาง label บรรทัดเดียว
- โหลด PDF ผ่าน /api/pdf?fileId= ที่สร้าง ToUnicode CMap ใหม่บนสำเนาในหน่วยความจำ
จาก ActualText ใน marked content (lib/pdf-actual-text.ts + unit tests) — แก้
ฟอนต์ไทยที่ cmap เพี้ยน (คำสั่งศาล) ให้ textLayer select/copy/ค้นหา/ชื่อ bookmark
ถูกต้องตั้งแต่ต้น ไฟล์ใน public/ ไม่ถูกแตะ (invariant #1) — PDF ปกติได้ bytes
เดิม ไม่มี cost และ fail แล้ว PDFViewer fallback fetch ไฟล์ดิบเอง
- ข้อความจาก selection ห้าม selection.toString() ตรง ๆ: ใช้ selectionTextWithin
เดินทีละอักษร เรียงตามตำแหน่งบนจอ (จัดการ Thai combining marks + ctrl ขยะ)
ปิดท้ายด้วย sanitizePdfText ก่อนเก็บ DB/ชื่อ bookmark/คลิปบอร์ด (มี tests)
- mergeRectsByLine ใช้ median ความสูง rect คำนวณเกณฑ์บรรทัดแทนค่าคงที่
- Server Actions ทุกตัวที่เขียน DB เรียก revalidateFilePages (revalidatePath
หน้า viewer+summary) คู่กับ publish event — แก้กด back แล้วเข้าไฟล์ใหม่ได้
RSC payload เก่าจาก Router Cache ฝั่ง client จนต้อง hard refresh
- คีย์ลัด DEL/Backspace ลบ annotation ที่เลือกอยู่ (ของตัวเองเท่านั้น ข้ามเมื่อ
focus อยู่ใน input/textarea/select/contenteditable)
- STAMP: ย่อฟอนต์ label ให้อยู่บรรทัดเดียวพอดีกรอบทั้งบนจอ (canvas measure) และ
export PDF (stampFitFontSize แชร์กัน) + เพิ่ม handle ปรับขนาดตรายางในแผง
selection (uniform scale + clamp รายแกน)
- sync invariant/กติกา: CLAUDE.md #4, rules/*.md, PLAN-FEAT.md (F3)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-11 13:28:35 +07:00 |
|
DESKTOP-1R2VSQH\Lenovo ThinkPad E490
|
289d735bf3
|
เพิ่มตัวเลือก mock user 10 คนที่หน้าแรก + ปรับหน้าแรก + select ลูกศรเองทั่วแอป
Deploy eCourt Note Web to Server / Validate Database Schema (Drizzle) (push) Successful in 3s
Deploy eCourt Note Web to Server / Build Web Docker Image (push) Successful in 47s
Deploy eCourt Note Web to Server / Deploy eCourt Note Web to Server (push) Successful in 3s
Deploy eCourt Note Web to Server / Notify Deployment Status (push) Successful in 1s
- utils/user.ts: MOCK_USERS (userId คงที่) + setLocalUser/getStoredLocalUser
เขียนลง localStorage key เดิม — PDFViewer อ่าน getLocalUser() เหมือนเดิม
- components/UserPicker.tsx: dropdown เลือกผู้ใช้ก่อนเข้า annotate
(ยังไม่มี identity = default คนแรก, identity สุ่มเดิมแสดงเป็น option ชั่วคราว)
- components/Select.tsx: select ถอดลูกศร native (ชิดขอบ) ใส่ ChevronDown เอง
ใช้ที่ UserPicker + ตัวกรองรายคน + เลือกหัวข้อ bookmark 2 จุด
- app/page.tsx: header monogram, การ์ดไฟล์ hover, empty state ใหม่
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-10 18:02:01 +07:00 |
|
DESKTOP-1R2VSQH\Lenovo ThinkPad E490
|
79c9e2cc41
|
Seed ไฟล์ตัวอย่างแบบ idempotent sync กับ public/samples/
- scripts/seed-samples.mjs: INSERT ไฟล์ที่ยังไม่มี row + DELETE row ที่ไฟล์หาย
(CASCADE ลบ annotation ตาม) — แทน SQL seed มือเดิมใน README
- รันอัตโนมัติตอน container start ต่อจาก migrate + npm run seed-samples บนเครื่อง dev
- สลับไฟล์ sample เป็นคำสั่งศาล 2 ฉบับ
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-10 18:01:25 +07:00 |
|
DESKTOP-1R2VSQH\Lenovo ThinkPad E490
|
ec26d79f0e
|
Fix migrate ตอน start: standalone node_modules ไม่มี package postgres
Deploy eCourt Note Web to Server / Validate Database Schema (Drizzle) (push) Successful in 3s
Deploy eCourt Note Web to Server / Build Web Docker Image (push) Successful in 46s
Deploy eCourt Note Web to Server / Deploy eCourt Note Web to Server (push) Successful in 3s
Deploy eCourt Note Web to Server / Notify Deployment Status (push) Successful in 1s
Next บีบ bundle postgres.js เข้า server chunks ทำให้ /app/node_modules
ของ standalone ไม่มี package นี้ — migrate.mjs import ไม่เจอ (ERR_MODULE_NOT_FOUND)
แก้โดย COPY package postgres จาก stage deps (v3.4.9 ไม่มี dependency ย่อย)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-10 16:30:01 +07:00 |
|
DESKTOP-1R2VSQH\Lenovo ThinkPad E490
|
60658568f7
|
Auto-migrate ตอน container start (แทนการ push มือ)
Deploy eCourt Note Web to Server / Validate Database Schema (Drizzle) (push) Successful in 3s
Deploy eCourt Note Web to Server / Build Web Docker Image (push) Successful in 44s
Deploy eCourt Note Web to Server / Deploy eCourt Note Web to Server (push) Successful in 3s
Deploy eCourt Note Web to Server / Notify Deployment Status (push) Successful in 0s
- scripts/migrate.mjs: สร้าง database ถ้ายังไม่มี + apply ไฟล์
drizzle/*.sql ที่ยังไม่อยู่ในตาราง _migrations (ทีละไฟล์ใน
transaction, แยก statement ด้วย --> statement-breakpoint)
— เจอ schema ที่สร้างไว้ก่อนแล้ว (42P07/42710/42701) ถือว่า applied
- web.Dockerfile: ฝัง drizzle/ + scripts/ ใน image,
CMD รัน migrate ก่อน node server.js
- .dockerignore: เอา drizzle ออก (ต้องขึ้น image)
- commit ไฟล์ migration แรก drizzle/0000 (จาก drizzle-kit generate)
ทดสอบบน PostgreSQL 17 แล้ว 3 เคส: สร้างใหม่ / รันซ้ำ / schema
มีอยู่ก่อนแบบไม่มี _migrations (เคส server ปัจจุบัน) — ผ่านทั้งหมด
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-10 16:25:14 +07:00 |
|
DESKTOP-1R2VSQH\Lenovo ThinkPad E490
|
f6f4ed9129
|
CD: build/deploy จาก branch dev แทน main
Deploy eCourt Note Web to Server / Validate Database Schema (Drizzle) (push) Successful in 3s
Deploy eCourt Note Web to Server / Build Web Docker Image (push) Successful in 44s
Deploy eCourt Note Web to Server / Deploy eCourt Note Web to Server (push) Successful in 4s
Deploy eCourt Note Web to Server / Notify Deployment Status (push) Successful in 1s
เปลี่ยนการตรวจ tag ให้อยู่บน origin/dev + diff เช็ค schema เทียบ origin/dev
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-10 15:58:27 +07:00 |
|
DESKTOP-1R2VSQH\Lenovo ThinkPad E490
|
83108dd16c
|
Add Forgejo CD workflow + Docker image build
Deploy eCourt Note Web to Server / Validate Database Schema (Drizzle) (push) Successful in 3s
Deploy eCourt Note Web to Server / Build Web Docker Image (push) Successful in 53s
Deploy eCourt Note Web to Server / Deploy eCourt Note Web to Server (push) Failing after 1s
Deploy eCourt Note Web to Server / Notify Deployment Status (push) Failing after 1s
- .forgejo/workflows/build.yml: ดัดแปลงจาก e-Ticket — validate db/schema.ts
(Drizzle) แทน Prisma migrations, image chamomind/ecourt-note,
deploy ผ่าน SSH (ECOURT_NOTE_TAG), แก้ env ที่ใช้แต่ไม่ได้นิยาม
(NEXT_PUBLIC_APP_URL) และ vars/secrets.SSH_DEPLOY_USER ไม่สอดคล้อง
- docker/web.Dockerfile: Next.js standalone 3 stages (deps/build/runner)
พร้อม build-time DATABASE_URL placeholder (db/index.ts throw ถ้าไม่มี env
ตอนเก็บ page data) + COPY .next/static ที่ standalone ไม่รวม
- .dockerignore กัน .git/node_modules/.next/.env เข้า build context
- next.config.mjs: เปิด output: "standalone"
หมายเหตุ: ยังตรวจ docker build ท้องถิ่นไม่ครบ — ค้างที่ดิสก์ C: เต็ม
(Docker Desktop buildkit read-only) รอเคลียร์พื้นที่ก่อน rerun
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-10 15:43:17 +07:00 |
|
DESKTOP-1R2VSQH\Lenovo ThinkPad E490
|
eddcec28c7
|
Add application codebase: PDF annotation for e-Court
Next.js 14 + Drizzle/PostgreSQL + SSE realtime sync — highlight,
freehand, comment, bookmark + ฟีเจอร์ต่อยอด F1–F19 (edit/move, undo/redo,
shapes, redaction, export PDF/CSV, reply, resolve, search, summary,
textbox, stamp, version history)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-09-10 14:29:40 +07:00 |
|
DESKTOP-1R2VSQH\Lenovo ThinkPad E490
|
6fd0c3174f
|
first commit
|
2026-09-10 14:21:21 +07:00 |
|