2026-09-11 ServiceOn Blog 작업일지입니다. 오늘은 27건의 작업을 진행했습니다.
다음 작업 (기억)
현상/기능
- 앞으로 진행할 사항을 기억해놔
작업
- 미착수. 메일 해지는 n8n `7p6KtUGdcYAOnJfv` HTML 하단. 광고는 사용자 ca-pub만
페이지 (구독 15항목 + 메일 발송)
현상/기능
- 구독 메일 발송 포함 15가지를 순서대로 실행
작업
- 관리자 `/subscribers` 목록·중지·삭제·지금 발송, 대시보드 오늘 호/장·구독자·Working 수
- 웹 구독 API 속도제한·이메일검사·허니팟, 푸터 수집 안내, `/unsubscribe?token=`
- `sitemap.xml` / `robots.txt` / `rss.xml` / OG / 404·error, 카드 `uniquePostsByTitle`
- 업로드: `BLOB_READ_WRITE_TOKEN` 있으면 Vercel Blob, 없으면 `public/uploads`
- `ThemeInitScript` type 고정, 미사용 삭제, `pnpm test` (shared)
- n8n `SO-블로그 구독 메일` (`7p6KtUGdcYAOnJfv`) 매일 09:00 Asia/Seoul + 관리자 웹훅 발행
- UI: n8n-워크플로우
- 운영 배포는 main 푸시 CI. 이번 작업은 커밋하지 않음
- AdSense ID는 만들지 않음 (`NEXT_PUBLIC_ADSENSE_CLIENT` 있을 때만 로드)
n8n (Working 파이프라인 발행)
현상/기능
- Working n8n이 꺼져 있음을 켜고, 나머지 추가/수정 내용을 순서대로 표로 정리
작업
- `SO-블로그 파이프라인-working` (n8n-워크플로우) 발행
- `activeVersionId`: `2da1cfd8-8c1a-49ef-a725-1f291c56fd8e`
- 매일 07:00 Asia/Seoul 스케줄 활성. 뉴스 파이프라인은 미변경
- UI: n8n-워크플로우
페이지 (매거진 바로가기·푸터 저작권)
현상/기능
- IT·AI 소식으로 / 구독 / 카드 덱으로 버튼도 삭제
- SubscribePanel 구독 버튼 옆 안내에 copyright 를 넣는다
작업
- `MagazineArticle`: 하단 바로가기 3버튼 제거
- `SubscribePanel`: 구독 버튼 옆을 `© 2026 ServiceOn` 으로 표시
- `SiteFooter`: 아래쪽 중복 copyright 제거
페이지 (푸터 구독)
현상/기능
- 매거진 화면을 열면 하단에 이미지와 같은 구독 기능이 있는데 이를 foot 로 옮기고 기존 foot 의 구독은 삭제, copy right 는 옮기 구독 기능 밑으로 보낸다
작업
- `SiteFooter`: 매거진형 `SubscribePanel` → 그 아래 © 2026 ServiceOn
- `MagazineArticle`: 본문 하단 구독 카드 제거. 구독 버튼은 `#subscribe`
- `SubscribePanel`: compact(기존 푸터) 분기 삭제
페이지 (달력 데이터 있는 날)
현상/기능
- 뉴스, working 데이터가 있으면 달력의 해당일을 좀 더 잘 표시
- 특히 선택해 일자는 데이터가 있으나 없으나 똑같다
작업
- `DateCalendar`: 글 있는 날은 옅은 앰버+점. 선택+데이터는 이너링+어두운 점
- `DateStrip`: 같은 규칙. 선택일도 점이 사라지지 않음
- `getCalendarMarkRange`: 달력 점용 날짜 범위. 홈은 IT·AI+Working 합침
페이지 (헤더 메뉴 선택)
현상/기능
- 프로젝트, working 를 클릭해도 IT,AI소식 항목이 계속 선택되어 있다
작업
- `MainNav`의 `navFocus`(ai_news)는 `/posts/[id]` 에서만 IT·AI 소식을 켠다
- 프로젝트·Working 등 다른 경로에서는 레이아웃에 남은 포커스를 쓰지 않음
페이지 (매거진 관련 뉴스 제목)
현상/기능
- "관련 뉴스는 아래 카드에서 이어서 볼 수 있습니다." 이 항목은 무조건 이미지 밑으로 나오게 하고 오늘의 요약과 같은 스타일로 변경한다
- 오늘의 요약과 함께 앞에 아이콘을 추가한다
작업
- 관련 뉴스를 `h2.magazine-related-news`로 표시. `clear: both`로 이미지 아래 고정
- 오늘의 요약·관련 뉴스 h2 앞에 아이콘(책 / 신문). 번호는 없음
페이지 (매거진 오늘의 요약·광고)
현상/기능
- 매거진에 "01 오늘의 요약" 을 "오늘의 요약"으로 수정하고
- 광고칸이 2개 있는데 상위 광고칸을 오늘의 요약 위로 옮긴다
작업
- `오늘의 요약` h2에 `magazine-today-summary` — CSS 번호(01) 숨김
- n8n-워크플로우: 오늘의 요약이 있으면 그 앞에 인아티클 광고. 하단 출처 앞 광고는 그대로
페이지 / n8n (매거진 관련 뉴스 링크)
현상/기능
- 9/10 호에는 "관련 뉴스는 아래 카드에서 이어서 볼 수 있습니다." 뉴스 링크가 있고 9/11 호에는 없다. 만들 때 빠지는 것 같다
- 뉴스링크에 영문이 있으면 한글로 변경해서 링크를 추가해라
작업
- `attachMagazineRelatedNews`: 오늘의 요약 앞에 관련 뉴스 ul을 넣고, 영문 앵커는 카드 한글 제목으로 교체
- `MagazineArticle` / `posts/[id]`: 같은 날 카드(제목 중복 제외, 최대 10)를 `newsLinks`로 전달
- n8n `SO-블로그 파이프라인`: Validate가 문구 없으면 목록을 붙이고, `Attach Related News`가 한글 카드 제목으로 다시 고정
페이지 (매거진 본문 이미지)
현상/기능
- 매거진에 이미지가 너무 크게 들어간다. 1/4 로 줄여보이게 하고 이미지와 글자가 어울리게 표현
- 너무 작은 것 같다. 지금 상태에서 2배 정도 키워줘
작업
- `.post-content-magazine` 이미지(요약 그림·단독 img·figure)를 열 폭 50%로 왼쪽 배치
- 본문 문단이 이미지 옆을 감싸고, 다음 h2는 아래부터 시작
- 카드 본문 이미지 스타일은 변경하지 않음
페이지 (구독 저장)
현상/기능
- 구독을 누르면 메일이 저장되고 "구독신청되었습니다. 매일 아침 9시에 blog 소식을 보내드리겠습니다." 메시지를 보여준다
- 메일 저장은 별도의 저장이 필요하다
작업
- `POST /api/subscribe` 가 이메일을 소문자로 저장 (중복이면 재활성화)
- `SubscribePanel` 성공 문구를 요청 문장으로 표시. 매일 9시 발송 자체는 미구현
페이지 (구독 안내 문구)
현상/기능
- 구독 버튼 옆에 구독하면 매일 9시에 blog 뉴스를 발송한다는 메시지 추가
작업
- `SubscribePanel` 구독 버튼 옆: 구독하면 매일 9시에 블로그 뉴스를 발송합니다
페이지 (푸터 메뉴·구독)
현상/기능
- foot 에 메뉴는 빼고, 매뉴부분에 구독기능을 옮겨
작업
- `SiteFooter` 내비(홈/소식/Working/구독/serviceon.kr) 제거
- 메뉴가 있던 자리에 `SubscribePanel` compact + 저작권
페이지 (Working 프로젝트 바로 가기)
현상/기능
- working 에서 프로젝트 선택하면 바로 밑에 프로젝트 링크가 나오는데 프로젝트 링크 앞에 "프로젝트 바로 가기 " 를 넣고 화살표가 깜빡거리게 한다
작업
- `HistoryClient` 선택 프로젝트 카드 위에 `프로젝트 바로 가기 →` 링크
- `globals.css.animate-working-go-blink` 로 화살표 점멸
Working (프로젝트·날짜 일지)
현상/기능
- working 등록시 프로젝트별-날짜별 하나로 만들어야 한다
- 파일을 읽어서 업무 내용을 읽어서 일지쓰듯이 작성한다
- SO-블로그 파이프라인(ID) 같은 n8n ID는 안 나오게, SO-블로그 파이프라인(n8n-워크플로우) 로 표시
작업
- 로컬 `history:sync`: 프로젝트·날짜당 일지 1건, `history-day://{slug}/{date}`
- n8n Working `Parse History Files` 동일. 뉴스 파이프라인은 미변경, 미발행
- `sanitizeN8nWorkflowIds`: 워크플로 ID → (n8n-워크플로우)
- Working 전체 칩은 프로젝트별 일지를 보여 줌. `history-day://all` 카드는 정리
페이지 (홈 공유링크 카테고리)
현상/기능
- 공유링크도 앞에 카테고리 추가
작업
- `HomeBoard` CompactShareLink 제목 앞에 `categoryName` 표시
페이지 (홈 Working 프로젝트명)
현상/기능
- working 은 앞에 어떤 프로젝트 인지 앞에 표시
작업
- 홈 Working 미리보기는 하루 종합 카드를 빼고 프로젝트별 최근 4건
- `HomeBoard` Working 행 제목 앞에 `getProjectName` 표시
페이지 (홈 2×2 칸 제목)
현상/기능
- 소식, 공유링크 등 타이틀을 좀더 표나게 변경
작업
- `HomeBoard` 칸 제목: text-base/lg, extrabold, --ink, 하단 구분선
페이지 (홈 2×2 행 간격)
현상/기능
- 공유링크 리스트와 소식 항목 리스트 간격을 같게. 공유링크가 좁아 하단이 남음
작업
- `HomeBoard` CompactPostLink / CompactShareLink 행을 `min-h-14` 로 맞춤
- 공유링크 부제 타이포를 소식 날짜 줄과 동일하게
페이지 (홈 2×2 보드 배치)
현상/기능
- 홈 2×2 위치를 소식·공유링크 / 프로젝트·Working 순서로 변경
작업
- `HomeBoard` 칸 순서: 1×1 IT·AI 소식, 1×2 공유링크, 2×1 프로젝트, 2×2 Working
페이지 (RootLayout 테마 스크립트)
현상/기능
- Console Error: Encountered a script tag while rendering React component ( ThemeInit)
작업
- `ThemeInitScript`: 서버는 `text/javascript`, 클라 하이드레이션은 `text/plain`
- FOUC 방지 동작은 유지. 인라인 `<script>` 직접 렌더 경고 제거
페이지 (홈 2×2 보드)
현상/기능
- 홈 2×2 Working 칸은 가장 최근 4건. 다른 칸들도 4건
작업
- `HOME_BOARD_PREVIEW_COUNT = 4`
- Working은 선택일과 무관하게 `dev_history` 최근 4편 (하루 카드 우선)
- IT·AI / 프로젝트 / 공유링크도 각 칸 4건
페이지 (Working / 프로젝트)
현상/기능
- blog 내 모든 '포트폴리오'를 '프로젝트'로 변경하고 /portfolio 를 /project 로 변경
- working 페이지의 프로젝트와 /project 항목을 서로 일치
- working에서 전체 이외 프로젝트 선택 시 /project 카드가 바로 아래 표시
작업
- 공개 웹 메뉴·홈 보드·카드·상세 문구를 프로젝트로 변경. 경로 `/project`, `/project/[id]`
- `/portfolio` → `/project` 영구 리다이렉트
- `listProjectPortfolios` 로 Working 칩과 공개 카드 순서를 맞춤
- Working에서 칩 선택 시 해당 `PortfolioCard` 를 칩 아래에 표시
- 관리자 포트폴리오 폼에 Working 프로젝트 연결 셀렉트 추가 (관리자 메뉴명은 유지)
- 기존 미연결 카드(집합 운동의 한계를 넘다)는 공개 목록에서 제외
n8n 워크플로우 (SO-블로그 파이프라인 / World of AI)
현상/기능
- https://intheworldofai.com/archive 여기 정보도 blog IT/AI 소식으로 수집하고 싶다
작업
- 새 워크플로 없음. `SO-블로그 파이프라인`(n8n-워크플로우)에 `HTTP - World of AI` 추가
- 목록: `/p/` 카드. 본문: `content-blocks`. Merge 입력 7개
- 당일(KST) 기사만 기존 `Filter Today Tech News`로 통과
- 발행함. 매일 06:00부터 수집
- Schedule Trigger 수동 실행 #84 성공(13분). World of AI 목록 8건 → 당일 1건 `GPT-7 BEL LEAKS` 카드 upsert (`de69e208-…`, 제목 `GPT-7 추정 보도의 핵심`)
n8n 워크플로우 (SO-블로그 파이프라인-working)
현상/기능
- 원소스파일이 자동으로 연동되지 않아서 working 을 만들지 못하고 있다
- PC 가 꺼져있으면 소용이 없다. n8n 에서 git 에 접근해서 파일을 읽고 작업 가능한가
- 'SO-블로그 파이프라인-working' 이라는 워크플로우를 만들었다. 여기에 작업을 진행
- 자격증명 넣었다
- pulseup 은 pulseup2 로 대체 한다. pulseup 은 사용하지 않는다. blog 에 이름은 pulseup 으로 그대로 둔다
- blog 의 interior 는 PinPoint 로 변경.(git 은 그대로 interior)
- blog에 CineEcho 추가 하고 해당 git 도 워크플로우에 추가한다
- blog 에 komng chat, htmltohwpx 도 삭제
작업
- 새 워크플로 n8n-워크플로우 에 GitHub → Working 동기화 구성. 뉴스 파이프라인은 미수정
- 매일 07:00 Asia/Seoul + Manual. 원격: ServiceOn_Blog, PulseUp2, pinpoint, Ruga, CineEcho
- 원본 `history-sync://` 와 하루 카드 `history-day://` 를 MariaDB에 upsert
- `GitHub account`(`githubApi`) 를 `Get History File`에 연결. Set raw `jsonOutput` 은 문자열로 수정
- Manual 실행 82 성공: 파일 4개, upsert 739건(project 4 / raw 561 / day 174)
- `history-day://all/2026-09-10` 카드 확인됨. 워크플로는 아직 unpublished
- Shopify Auto 는 로컬 동기화만. Kmong Chat / htmltohwpx 는 블로그에서 제거
- PulseUp 표시이름/슬러그(`pulseup`) 유지. Git 소스는 `CJungHwi/PulseUp2`만 사용. 예전 `CJungHwi/PulseUp` 미사용
- `scripts/history-sources.json`에 `repo: CJungHwi/PulseUp2` 명시. 로컬 폴더명은 그대로 PulseUp
- Interior 표시명을 PinPoint로 변경. 슬러그/로컬 git은 `interior`, 원격은 `CJungHwi/pinpoint`
- CineEcho 추가. 슬러그 `cineecho`, 로컬 `CineEcho_kiro/.cursor/rules/project_history.md`, 원격 `CJungHwi/CineEcho`
- Kmong Chat / htmltohwpx 를 소스 목록과 DB에서 삭제 (`저장 절차`, `저장 절차`)
관리자 (이력 소스 테이블)
현상/기능
- history-sources.json 이 내용을 db의 테이블로 변경해서 관리하게
작업
- `scripts/history-sources.json` 삭제. `pnpm history:sync` 가 테이블을 읽음
- 관리자 `/history-sources` 에서 추가·수정·삭제
- n8n Working 파이프라인 `List History Sources` 가 같은 테이블을 조회
- git_owner/repo/path 가 있는 활성 행만 n8n GitHub 수집. Shopify Auto 는 로컬만