@heripo/research-radar 3.3.5 → 3.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/NOTICE CHANGED
@@ -33,7 +33,7 @@ The following names, marks, and logos are trademarks of kimhongyeon:
33
33
  - "heripo" and "헤리포"
34
34
  - "Research Radar" and "리서치 레이더"
35
35
  - The heripo logo and associated visual designs
36
- - Domain name: heripo.com
36
+ - Domain name: heripo.app
37
37
 
38
38
  While the source code is freely available under the Apache 2.0 license,
39
39
  use of these trademarks requires explicit permission from the trademark owner.
package/README.md CHANGED
@@ -13,7 +13,7 @@ English | [한국어](./README-ko.md)
13
13
 
14
14
  ## What is this?
15
15
 
16
- An AI-powered newsletter service for Korean cultural heritage. Built on [`@llm-newsletter-kit/core`](https://github.com/heripo-lab/llm-newsletter-kit-core), it's both a production service ([live at heripo.com](https://heripo.com/research-radar/subscribe)) and a reference implementation showing how to build automated newsletters with LLMs.
16
+ An AI-powered newsletter service for Korean cultural heritage. Built on [`@llm-newsletter-kit/core`](https://github.com/heripo-lab/llm-newsletter-kit-core), it's both a production service ([live at heripo.app](https://heripo.app/research-radar/subscribe)) and a reference implementation showing how to build automated newsletters with LLMs.
17
17
 
18
18
  **Production metrics**:
19
19
  - **Cost**: $0.2-1 USD per issue
@@ -27,13 +27,14 @@ An AI-powered newsletter service for Korean cultural heritage. Built on [`@llm-n
27
27
  - Multi LLM providers: OpenAI GPT-5 (analysis) + selectable content generation (OpenAI / Anthropic / Google)
28
28
  - Built-in retries, chain options, preview emails
29
29
 
30
- **Links**: [Live service](https://heripo.com/research-radar/subscribe) • [Newsletter example](https://heripo.com/research-radar-newsletter-example.html) • [Core engine](https://github.com/heripo-lab/llm-newsletter-kit-core)
30
+ **Links**: [Live service](https://heripo.app/research-radar/subscribe) • [Newsletter example](https://heripo.app/research-radar-newsletter-example.html) • [Core engine](https://github.com/heripo-lab/llm-newsletter-kit-core)
31
31
 
32
32
  ## Background
33
33
 
34
34
  Created by archaeologist-turned-engineer Hongyeon Kim to answer: "Why must research rely on labor-intensive manual work?"
35
35
 
36
- A personal script evolved into a production service after completing research on [Archaeological Informatization Using LLMs](https://poc.heripo.com). This repository open-sources the running service so developers can build domain-specific newsletters without starting from scratch.
36
+ A personal script evolved into a production service after completing research on [Archaeological Informatization Using LLMs](https://poc.heripo.org). This repository open-sources the running service so developers can build
37
+ domain-specific newsletters without starting from scratch.
37
38
 
38
39
  ## License
39
40
 
@@ -279,4 +280,11 @@ Code-based automation delivers **superior output quality** through advanced AI t
279
280
  ## Related Projects
280
281
 
281
282
  - [`@llm-newsletter-kit/core`](https://github.com/heripo-lab/llm-newsletter-kit-core) — Domain-agnostic newsletter engine
282
- - [Archaeological Informatization Using LLMs](https://poc.heripo.com) — Academic research (Korean)
283
+ - [Archaeological Informatization Using LLMs](https://poc.heripo.org) — Academic research (Korean)
284
+
285
+ ## Sponsor
286
+
287
+ If you'd like to support heripo lab's open-source research, you can sponsor us through:
288
+
289
+ - [Open Collective](https://opencollective.com/heripo-project) for general project sponsorship.
290
+ - [fairy.hada.io/@heripo](https://fairy.hada.io/@heripo) for Korean individual supporters who prefer KRW payments.
package/dist/index.cjs CHANGED
@@ -1758,7 +1758,7 @@ const contentOptions = {
1758
1758
  */
1759
1759
  const newsletterConfig = {
1760
1760
  brandName: '문화유산 리서치 레이더',
1761
- subscribePageUrl: 'https://heripo.com/research-radar/subscribe',
1761
+ subscribePageUrl: 'https://heripo.app/research-radar/subscribe',
1762
1762
  publicationCriteria: {
1763
1763
  minimumArticleCountForIssue: 5,
1764
1764
  priorityArticleScoreThreshold: 8,
@@ -1927,11 +1927,11 @@ const sanitizeText = (str) => purify.sanitize(str, { ALLOWED_TAGS: [] });
1927
1927
  const heripoLogoHtml = (imgMarginBottom) => `
1928
1928
  <div style="margin-bottom: 32px;">
1929
1929
  <div style="text-align: left; display: block;" class="light-logo">
1930
- <img src="https://heripo.com/heripo-logo.png" width="150" alt="로고" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block; margin-bottom: ${imgMarginBottom};" height="auto">
1930
+ <img src="https://heripo.app/heripo-logo.png" width="150" alt="로고" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block; margin-bottom: ${imgMarginBottom};" height="auto">
1931
1931
  </div>
1932
1932
  <!--[if !mso]><!-->
1933
1933
  <div style="text-align: left; display: none;" class="dark-logo">
1934
- <img src="https://heripo.com/heripo-logo-dark.png" width="150" alt="다크모드 로고" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block; margin-bottom: ${imgMarginBottom};" height="auto">
1934
+ <img src="https://heripo.app/heripo-logo-dark.png" width="150" alt="다크모드 로고" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block; margin-bottom: ${imgMarginBottom};" height="auto">
1935
1935
  </div>
1936
1936
  <!--<![endif]-->
1937
1937
  </div>`;
@@ -1947,7 +1947,7 @@ const platformIntroHtml = () => `
1947
1947
  <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">발굴조사보고서(PDF) 속에 갇힌 텍스트와 도면을 분석 가능한 구조화된 데이터로 전환하여, 연구자가 자료를 보다 체계적으로 탐색하고 재사용할 수 있는 인프라를 구축하고 있습니다.</p>
1948
1948
  <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7;
1949
1949
  color: #444444; margin: 0 0 18px 0;">현재는 소프트웨어 엔지니어와 고고학 연구자가 함께하는 <strong><a href="https://github.com/heripo-lab" target="_blank">heripo lab</a></strong>으로 운영 중이며, 2026년 1월 28일 핵심 엔진을 <strong><a href="https://github.com/heripo-lab/heripo-engine" target="_blank">오픈소스로 공개</a></strong>했습니다.</p>
1950
- <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">오픈소스로 공개된 핵심 기능은 <strong><a href="https://engine-demo.heripo.com" target="_blank">데모 사이트</a></strong>에서 직접 체험해 보실 수 있으며, 플랫폼 프로토타입 출시 시 구독자분들께 우선 안내해 드리겠습니다.</p>`;
1950
+ <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">오픈소스로 공개된 핵심 기능은 <strong><a href="https://engine-demo.heripo.org" target="_blank">데모 사이트</a></strong>에서 직접 체험해 보실 수 있으며, 플랫폼 프로토타입 출시 시 구독자분들께 우선 안내해 드리겠습니다.</p>`;
1951
1951
  /**
1952
1952
  * "Powered by LLM Newsletter Kit · View Source" footer line.
1953
1953
  */
@@ -2400,7 +2400,7 @@ const createNewsletterHtmlTemplate = (targets, options) => `<!DOCTYPE html>
2400
2400
  ${options?.isKrasNewsletter
2401
2401
  ? `<!-- KRAS 50주년 헤더 -->
2402
2402
  <div style="text-align: center; margin-bottom: 28px;">
2403
- <div style="width: 180px; min-height: 141px; display: inline-block; margin-bottom: 20px;"><img src="https://heripo.com/kras-50.png" width="180" alt="한국고고학회 50주년" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block;" height="auto"></div>
2403
+ <div style="width: 180px; min-height: 141px; display: inline-block; margin-bottom: 20px;"><img src="https://heripo.app/kras-50.png" width="180" alt="한국고고학회 50주년" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block;" height="auto"></div>
2404
2404
  <div class="kras-header-title" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 30px; font-weight: bold; color: #111111; line-height: 1.2; margin-bottom: 8px;">한국고고학회 뉴스레터</div>
2405
2405
  <div class="kras-header-date" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; color: #666666; line-height: 1.5;">${options?.displayDate ?? ''}</div>
2406
2406
  </div>
@@ -2410,7 +2410,7 @@ const createNewsletterHtmlTemplate = (targets, options) => `<!DOCTYPE html>
2410
2410
  `}
2411
2411
 
2412
2412
  ${options?.krasNewsMarkdown
2413
- ? `<h2 style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 1.3; color: #D2691E; margin: 0 0 16px 0; letter-spacing: -0.2px; border-left: 5px solid #D2691E; padding-left: 12px; background: none;"><span style="display: inline-block; width: 26px; height: 26px; vertical-align: -4px; margin-right: 6px;"><img src="https://heripo.com/kras-symbol.png" width="26" height="26" alt="" style="border: 0; display: block;"></span>학회 소식</h2>` +
2413
+ ? `<h2 style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 1.3; color: #D2691E; margin: 0 0 16px 0; letter-spacing: -0.2px; border-left: 5px solid #D2691E; padding-left: 12px; background: none;"><span style="display: inline-block; width: 26px; height: 26px; vertical-align: -4px; margin-right: 6px;"><img src="https://heripo.app/kras-symbol.png" width="26" height="26" alt="" style="border: 0; display: block;"></span>학회 소식</h2>` +
2414
2414
  safeMarkdown2Html(`${options.krasNewsMarkdown}
2415
2415
 
2416
2416
  ---
@@ -2442,7 +2442,7 @@ ${options.heripolabNewsMarkdown}
2442
2442
  <hr style="border: 0; border-top: 2px solid #D2691E; margin: 32px 0;">
2443
2443
 
2444
2444
  ${options?.krasNoticeMarkdown
2445
- ? `<h2 style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 1.3; color: #D2691E; margin: 0 0 16px 0; letter-spacing: -0.2px; border-left: 5px solid #D2691E; padding-left: 12px; background: none;"><span style="display: inline-block; width: 26px; height: 26px; vertical-align: -4px; margin-right: 6px;"><img src="https://heripo.com/kras-symbol.png" width="26" height="26" alt="" style="border: 0; display: block;"></span>학회 안내</h2>` +
2445
+ ? `<h2 style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 1.3; color: #D2691E; margin: 0 0 16px 0; letter-spacing: -0.2px; border-left: 5px solid #D2691E; padding-left: 12px; background: none;"><span style="display: inline-block; width: 26px; height: 26px; vertical-align: -4px; margin-right: 6px;"><img src="https://heripo.app/kras-symbol.png" width="26" height="26" alt="" style="border: 0; display: block;"></span>학회 안내</h2>` +
2446
2446
  safeMarkdown2Html(`${options.krasNoticeMarkdown}
2447
2447
 
2448
2448
  ---
@@ -2487,8 +2487,8 @@ ${platformIntroHtml()}
2487
2487
  </tr>
2488
2488
  <tr>
2489
2489
  <td align="center" style="-webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 30px 20px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 12px; line-height: 1.5; color: #888888;">
2490
- <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 10px 0;" class="footer-text">heripo lab | newsletter@heripo.com</p>
2491
- <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 10px 0;" class="footer-text">${options?.isKrasNewsletter ? '이 메일은 heripo.com에서 뉴스레터를 구독하신 분들과 한국고고학회 회원에게 발송됩니다.' : '이 메일은 heripo.com에서 리서치 레이더를 구독하신 분들에게 발송됩니다.'}<br>
2490
+ <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 10px 0;" class="footer-text">heripo lab | newsletter@heripo.org</p>
2491
+ <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 10px 0;" class="footer-text">${options?.isKrasNewsletter ? '이 메일은 heripo.app에서 뉴스레터를 구독하신 분들과 한국고고학회 회원에게 발송됩니다.' : '이 메일은 heripo.app에서 리서치 레이더를 구독하신 분들에게 발송됩니다.'}<br>
2492
2492
  더 이상 이메일을 받고 싶지 않으시면 <a href="{{{RESEND_UNSUBSCRIBE_URL}}}" target="_blank" style="-webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; font-weight: bold; transition: color 0.2s; color: #888888; text-decoration: underline;" class="footer-link">여기에서 수신 거부</a>하세요.</p>
2493
2493
  ${poweredByFooterHtml()}
2494
2494
  </td>
@@ -2860,7 +2860,7 @@ async function generateNewsletter(dependencies) {
2860
2860
  */
2861
2861
  function generateWelcomeHTML(id, name, options) {
2862
2862
  const isKras = options?.isKrasNewsletter ?? false;
2863
- const siteUrl = options?.siteUrl ?? 'https://heripo.com';
2863
+ const siteUrl = options?.siteUrl ?? 'https://heripo.app';
2864
2864
  const safeName = sanitizeText(name);
2865
2865
  const unsubscribeUrl = `${siteUrl}/research-radar/unsubscribe?id=${id}`;
2866
2866
  return juice(createWelcomeHtmlRaw(safeName, isKras, siteUrl, unsubscribeUrl));
@@ -2872,7 +2872,7 @@ function createWelcomeHtmlRaw(name, isKras, siteUrl, unsubscribeUrl) {
2872
2872
  const headerHtml = isKras
2873
2873
  ? `<!-- KRAS 50주년 헤더 -->
2874
2874
  <div style="text-align: center; margin-bottom: 36px;">
2875
- <div style="width: 180px; min-height: 141px; display: inline-block; margin-bottom: 20px;"><img src="https://heripo.com/kras-50.png" width="180" alt="한국고고학회 50주년" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block;" height="auto"></div>
2875
+ <div style="width: 180px; min-height: 141px; display: inline-block; margin-bottom: 20px;"><img src="https://heripo.app/kras-50.png" width="180" alt="한국고고학회 50주년" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block;" height="auto"></div>
2876
2876
  <div class="kras-header-title" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 30px; font-weight: bold; color: #111111; line-height: 1.2; margin-bottom: 0;">한국고고학회 뉴스레터</div>
2877
2877
  </div>
2878
2878
  <hr class="kras-header-divider" style="border: 0; border-top: 2px solid #D2691E; margin: 0 0 32px 0;">`
@@ -2899,8 +2899,8 @@ function createWelcomeHtmlRaw(name, isKras, siteUrl, unsubscribeUrl) {
2899
2899
  <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0;"><a href="${unsubscribeUrl}" style="color: #dc2626; font-weight: bold;">🚫 수신 거부하기</a></p>
2900
2900
  </blockquote>`;
2901
2901
  const footerDisclaimerText = isKras
2902
- ? '이 이메일은 heripo.com에서 한국고고학회 뉴스레터를 구독하신 분들에게 발송됩니다.'
2903
- : '이 이메일은 heripo.com에서 리서치 레이더를 구독하신 분들에게 발송됩니다.';
2902
+ ? '이 이메일은 heripo.app에서 한국고고학회 뉴스레터를 구독하신 분들에게 발송됩니다.'
2903
+ : '이 이메일은 heripo.app에서 리서치 레이더를 구독하신 분들에게 발송됩니다.';
2904
2904
  const footerUnsubscribeHtml = isKras
2905
2905
  ? `<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.7; color: #6b7280; margin: 0 0 18px 0; margin-bottom: 8px;">📱 구독 관리: <a href="${unsubscribeUrl}" class="footer-link">구독 해지</a></p>`
2906
2906
  : `<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.7; color: #6b7280; margin: 0 0 18px 0; margin-bottom: 8px;">📱 구독 관리: <a href="${unsubscribeUrl}" class="footer-link">구독 해지</a></p>`;
package/dist/index.d.ts CHANGED
@@ -128,7 +128,7 @@ type NewsletterTemplateOptions = DefaultNewsletterTemplateOptions | KrasNewslett
128
128
  interface WelcomeTemplateOptions {
129
129
  /** When true, apply KRAS (Korean Archaeological Society) branding */
130
130
  isKrasNewsletter?: boolean;
131
- /** Site base URL for constructing links (default: 'https://heripo.com') */
131
+ /** Site base URL for constructing links (default: 'https://heripo.app') */
132
132
  siteUrl?: string;
133
133
  }
134
134
  /**
package/dist/index.js CHANGED
@@ -1737,7 +1737,7 @@ const contentOptions = {
1737
1737
  */
1738
1738
  const newsletterConfig = {
1739
1739
  brandName: '문화유산 리서치 레이더',
1740
- subscribePageUrl: 'https://heripo.com/research-radar/subscribe',
1740
+ subscribePageUrl: 'https://heripo.app/research-radar/subscribe',
1741
1741
  publicationCriteria: {
1742
1742
  minimumArticleCountForIssue: 5,
1743
1743
  priorityArticleScoreThreshold: 8,
@@ -1906,11 +1906,11 @@ const sanitizeText = (str) => purify.sanitize(str, { ALLOWED_TAGS: [] });
1906
1906
  const heripoLogoHtml = (imgMarginBottom) => `
1907
1907
  <div style="margin-bottom: 32px;">
1908
1908
  <div style="text-align: left; display: block;" class="light-logo">
1909
- <img src="https://heripo.com/heripo-logo.png" width="150" alt="로고" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block; margin-bottom: ${imgMarginBottom};" height="auto">
1909
+ <img src="https://heripo.app/heripo-logo.png" width="150" alt="로고" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block; margin-bottom: ${imgMarginBottom};" height="auto">
1910
1910
  </div>
1911
1911
  <!--[if !mso]><!-->
1912
1912
  <div style="text-align: left; display: none;" class="dark-logo">
1913
- <img src="https://heripo.com/heripo-logo-dark.png" width="150" alt="다크모드 로고" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block; margin-bottom: ${imgMarginBottom};" height="auto">
1913
+ <img src="https://heripo.app/heripo-logo-dark.png" width="150" alt="다크모드 로고" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block; margin-bottom: ${imgMarginBottom};" height="auto">
1914
1914
  </div>
1915
1915
  <!--<![endif]-->
1916
1916
  </div>`;
@@ -1926,7 +1926,7 @@ const platformIntroHtml = () => `
1926
1926
  <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">발굴조사보고서(PDF) 속에 갇힌 텍스트와 도면을 분석 가능한 구조화된 데이터로 전환하여, 연구자가 자료를 보다 체계적으로 탐색하고 재사용할 수 있는 인프라를 구축하고 있습니다.</p>
1927
1927
  <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7;
1928
1928
  color: #444444; margin: 0 0 18px 0;">현재는 소프트웨어 엔지니어와 고고학 연구자가 함께하는 <strong><a href="https://github.com/heripo-lab" target="_blank">heripo lab</a></strong>으로 운영 중이며, 2026년 1월 28일 핵심 엔진을 <strong><a href="https://github.com/heripo-lab/heripo-engine" target="_blank">오픈소스로 공개</a></strong>했습니다.</p>
1929
- <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">오픈소스로 공개된 핵심 기능은 <strong><a href="https://engine-demo.heripo.com" target="_blank">데모 사이트</a></strong>에서 직접 체험해 보실 수 있으며, 플랫폼 프로토타입 출시 시 구독자분들께 우선 안내해 드리겠습니다.</p>`;
1929
+ <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 18px 0;">오픈소스로 공개된 핵심 기능은 <strong><a href="https://engine-demo.heripo.org" target="_blank">데모 사이트</a></strong>에서 직접 체험해 보실 수 있으며, 플랫폼 프로토타입 출시 시 구독자분들께 우선 안내해 드리겠습니다.</p>`;
1930
1930
  /**
1931
1931
  * "Powered by LLM Newsletter Kit · View Source" footer line.
1932
1932
  */
@@ -2379,7 +2379,7 @@ const createNewsletterHtmlTemplate = (targets, options) => `<!DOCTYPE html>
2379
2379
  ${options?.isKrasNewsletter
2380
2380
  ? `<!-- KRAS 50주년 헤더 -->
2381
2381
  <div style="text-align: center; margin-bottom: 28px;">
2382
- <div style="width: 180px; min-height: 141px; display: inline-block; margin-bottom: 20px;"><img src="https://heripo.com/kras-50.png" width="180" alt="한국고고학회 50주년" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block;" height="auto"></div>
2382
+ <div style="width: 180px; min-height: 141px; display: inline-block; margin-bottom: 20px;"><img src="https://heripo.app/kras-50.png" width="180" alt="한국고고학회 50주년" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block;" height="auto"></div>
2383
2383
  <div class="kras-header-title" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 30px; font-weight: bold; color: #111111; line-height: 1.2; margin-bottom: 8px;">한국고고학회 뉴스레터</div>
2384
2384
  <div class="kras-header-date" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; color: #666666; line-height: 1.5;">${options?.displayDate ?? ''}</div>
2385
2385
  </div>
@@ -2389,7 +2389,7 @@ const createNewsletterHtmlTemplate = (targets, options) => `<!DOCTYPE html>
2389
2389
  `}
2390
2390
 
2391
2391
  ${options?.krasNewsMarkdown
2392
- ? `<h2 style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 1.3; color: #D2691E; margin: 0 0 16px 0; letter-spacing: -0.2px; border-left: 5px solid #D2691E; padding-left: 12px; background: none;"><span style="display: inline-block; width: 26px; height: 26px; vertical-align: -4px; margin-right: 6px;"><img src="https://heripo.com/kras-symbol.png" width="26" height="26" alt="" style="border: 0; display: block;"></span>학회 소식</h2>` +
2392
+ ? `<h2 style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 1.3; color: #D2691E; margin: 0 0 16px 0; letter-spacing: -0.2px; border-left: 5px solid #D2691E; padding-left: 12px; background: none;"><span style="display: inline-block; width: 26px; height: 26px; vertical-align: -4px; margin-right: 6px;"><img src="https://heripo.app/kras-symbol.png" width="26" height="26" alt="" style="border: 0; display: block;"></span>학회 소식</h2>` +
2393
2393
  safeMarkdown2Html(`${options.krasNewsMarkdown}
2394
2394
 
2395
2395
  ---
@@ -2421,7 +2421,7 @@ ${options.heripolabNewsMarkdown}
2421
2421
  <hr style="border: 0; border-top: 2px solid #D2691E; margin: 32px 0;">
2422
2422
 
2423
2423
  ${options?.krasNoticeMarkdown
2424
- ? `<h2 style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 1.3; color: #D2691E; margin: 0 0 16px 0; letter-spacing: -0.2px; border-left: 5px solid #D2691E; padding-left: 12px; background: none;"><span style="display: inline-block; width: 26px; height: 26px; vertical-align: -4px; margin-right: 6px;"><img src="https://heripo.com/kras-symbol.png" width="26" height="26" alt="" style="border: 0; display: block;"></span>학회 안내</h2>` +
2424
+ ? `<h2 style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 24px; font-weight: bold; line-height: 1.3; color: #D2691E; margin: 0 0 16px 0; letter-spacing: -0.2px; border-left: 5px solid #D2691E; padding-left: 12px; background: none;"><span style="display: inline-block; width: 26px; height: 26px; vertical-align: -4px; margin-right: 6px;"><img src="https://heripo.app/kras-symbol.png" width="26" height="26" alt="" style="border: 0; display: block;"></span>학회 안내</h2>` +
2425
2425
  safeMarkdown2Html(`${options.krasNoticeMarkdown}
2426
2426
 
2427
2427
  ---
@@ -2466,8 +2466,8 @@ ${platformIntroHtml()}
2466
2466
  </tr>
2467
2467
  <tr>
2468
2468
  <td align="center" style="-webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; mso-table-lspace: 0pt; mso-table-rspace: 0pt; padding: 30px 20px; font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 12px; line-height: 1.5; color: #888888;">
2469
- <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 10px 0;" class="footer-text">heripo lab | newsletter@heripo.com</p>
2470
- <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 10px 0;" class="footer-text">${options?.isKrasNewsletter ? '이 메일은 heripo.com에서 뉴스레터를 구독하신 분들과 한국고고학회 회원에게 발송됩니다.' : '이 메일은 heripo.com에서 리서치 레이더를 구독하신 분들에게 발송됩니다.'}<br>
2469
+ <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 10px 0;" class="footer-text">heripo lab | newsletter@heripo.org</p>
2470
+ <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0 0 10px 0;" class="footer-text">${options?.isKrasNewsletter ? '이 메일은 heripo.app에서 뉴스레터를 구독하신 분들과 한국고고학회 회원에게 발송됩니다.' : '이 메일은 heripo.app에서 리서치 레이더를 구독하신 분들에게 발송됩니다.'}<br>
2471
2471
  더 이상 이메일을 받고 싶지 않으시면 <a href="{{{RESEND_UNSUBSCRIBE_URL}}}" target="_blank" style="-webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; font-weight: bold; transition: color 0.2s; color: #888888; text-decoration: underline;" class="footer-link">여기에서 수신 거부</a>하세요.</p>
2472
2472
  ${poweredByFooterHtml()}
2473
2473
  </td>
@@ -2839,7 +2839,7 @@ async function generateNewsletter(dependencies) {
2839
2839
  */
2840
2840
  function generateWelcomeHTML(id, name, options) {
2841
2841
  const isKras = options?.isKrasNewsletter ?? false;
2842
- const siteUrl = options?.siteUrl ?? 'https://heripo.com';
2842
+ const siteUrl = options?.siteUrl ?? 'https://heripo.app';
2843
2843
  const safeName = sanitizeText(name);
2844
2844
  const unsubscribeUrl = `${siteUrl}/research-radar/unsubscribe?id=${id}`;
2845
2845
  return juice(createWelcomeHtmlRaw(safeName, isKras, siteUrl, unsubscribeUrl));
@@ -2851,7 +2851,7 @@ function createWelcomeHtmlRaw(name, isKras, siteUrl, unsubscribeUrl) {
2851
2851
  const headerHtml = isKras
2852
2852
  ? `<!-- KRAS 50주년 헤더 -->
2853
2853
  <div style="text-align: center; margin-bottom: 36px;">
2854
- <div style="width: 180px; min-height: 141px; display: inline-block; margin-bottom: 20px;"><img src="https://heripo.com/kras-50.png" width="180" alt="한국고고학회 50주년" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block;" height="auto"></div>
2854
+ <div style="width: 180px; min-height: 141px; display: inline-block; margin-bottom: 20px;"><img src="https://heripo.app/kras-50.png" width="180" alt="한국고고학회 50주년" style="-ms-interpolation-mode: bicubic; border: 0; height: auto; line-height: 100%; outline: none; text-decoration: none; display: block;" height="auto"></div>
2855
2855
  <div class="kras-header-title" style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 30px; font-weight: bold; color: #111111; line-height: 1.2; margin-bottom: 0;">한국고고학회 뉴스레터</div>
2856
2856
  </div>
2857
2857
  <hr class="kras-header-divider" style="border: 0; border-top: 2px solid #D2691E; margin: 0 0 32px 0;">`
@@ -2878,8 +2878,8 @@ function createWelcomeHtmlRaw(name, isKras, siteUrl, unsubscribeUrl) {
2878
2878
  <p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 16px; line-height: 1.7; color: #444444; margin: 0;"><a href="${unsubscribeUrl}" style="color: #dc2626; font-weight: bold;">🚫 수신 거부하기</a></p>
2879
2879
  </blockquote>`;
2880
2880
  const footerDisclaimerText = isKras
2881
- ? '이 이메일은 heripo.com에서 한국고고학회 뉴스레터를 구독하신 분들에게 발송됩니다.'
2882
- : '이 이메일은 heripo.com에서 리서치 레이더를 구독하신 분들에게 발송됩니다.';
2881
+ ? '이 이메일은 heripo.app에서 한국고고학회 뉴스레터를 구독하신 분들에게 발송됩니다.'
2882
+ : '이 이메일은 heripo.app에서 리서치 레이더를 구독하신 분들에게 발송됩니다.';
2883
2883
  const footerUnsubscribeHtml = isKras
2884
2884
  ? `<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.7; color: #6b7280; margin: 0 0 18px 0; margin-bottom: 8px;">📱 구독 관리: <a href="${unsubscribeUrl}" class="footer-link">구독 해지</a></p>`
2885
2885
  : `<p style="font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; font-size: 14px; line-height: 1.7; color: #6b7280; margin: 0 0 18px 0; margin-bottom: 8px;">📱 구독 관리: <a href="${unsubscribeUrl}" class="footer-link">구독 해지</a></p>`;
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@heripo/research-radar",
3
3
  "private": false,
4
4
  "type": "module",
5
- "version": "3.3.5",
5
+ "version": "3.3.7",
6
6
  "description": "AI-driven intelligence for Korean cultural heritage. This package serves as both a ready-to-use newsletter service and a practical implementation example for the LLM-Newsletter-Kit.",
7
7
  "main": "dist/index.cjs",
8
8
  "module": "dist/index.js",
@@ -47,35 +47,35 @@
47
47
  "author": "kimhongyeon",
48
48
  "license": "Apache-2.0",
49
49
  "dependencies": {
50
- "@ai-sdk/anthropic": "^3.0.71",
51
- "@ai-sdk/google": "^3.0.64",
52
- "@ai-sdk/openai": "^3.0.53",
50
+ "@ai-sdk/anthropic": "^3.0.76",
51
+ "@ai-sdk/google": "^3.0.71",
52
+ "@ai-sdk/openai": "^3.0.63",
53
53
  "cheerio": "^1.2.0",
54
- "dompurify": "^3.4.0",
55
- "jsdom": "^29.0.2",
54
+ "dompurify": "^3.4.2",
55
+ "jsdom": "^29.1.1",
56
56
  "juice": "^11.1.1",
57
57
  "safe-markdown2html": "^1.0.3",
58
58
  "turndown": "^7.2.4"
59
59
  },
60
60
  "devDependencies": {
61
61
  "@eslint/js": "^10.0.1",
62
- "@llm-newsletter-kit/core": "^2.0.0",
62
+ "@llm-newsletter-kit/core": "^2.0.1",
63
63
  "@trivago/prettier-plugin-sort-imports": "^6.0.2",
64
64
  "@types/express": "^5.0.6",
65
65
  "@types/jsdom": "^28.0.1",
66
- "@types/node": "^25.6.0",
66
+ "@types/node": "^25.6.2",
67
67
  "@types/turndown": "^5.0.6",
68
- "eslint": "^10.2.1",
68
+ "eslint": "^10.3.0",
69
69
  "eslint-plugin-unused-imports": "^4.4.1",
70
70
  "express": "^5.2.1",
71
71
  "prettier": "^3.8.3",
72
72
  "rimraf": "^6.1.3",
73
- "rollup": "^4.60.2",
73
+ "rollup": "^4.60.3",
74
74
  "rollup-plugin-dts": "^6.4.1",
75
75
  "rollup-plugin-typescript2": "^0.37.0",
76
76
  "tsx": "^4.21.0",
77
77
  "typescript": "^6.0.3",
78
- "typescript-eslint": "^8.58.2"
78
+ "typescript-eslint": "^8.59.2"
79
79
  },
80
80
  "repository": {
81
81
  "type": "git",
@@ -84,7 +84,7 @@
84
84
  "bugs": {
85
85
  "url": "https://github.com/heripo-lab/heripo-research-radar/issues"
86
86
  },
87
- "homepage": "https://heripo.com",
87
+ "homepage": "https://heripo.app",
88
88
  "keywords": [
89
89
  "cultural-heritage",
90
90
  "archaeology",