#Report Commands (en-US)
For prerequisites and registered app setup, see README.
#report:translate
Translate collected review JSON files to Korean.
npm run report:translate -- --my-app <owner> ...node dist/translateReviews.js ...
#CLI Options
--my-app(required)--registered-apps-path--input-dir(default:data/{myAppId}/reviews)--output-dir(default:data/{myAppId}/reviews-ko)--target-lang(default:ko)--provider(google-web|none, defaultgoogle-web)--overwrite(defaultfalse)--concurrency(default4)--output text|json
#Example
npm run report:translate -- --my-app golden-horizon
#Output
data/{myAppId}/reviews-ko/{competitor}.jsondata/{myAppId}/reviews-ko/.translation-cache.json
#report:analyze
Generate competitor insight report from translated reviews.
npm run report:analyze -- --my-app <owner> ...node dist/analyzeCompetitors.js ...
#CLI Options
--my-app(required)--registered-apps-path--input-dir(default:data/{myAppId}/reviews-ko, fallbackreviews/)--output-dir(default:data/{myAppId}/reports)--include-self(defaultfalse)--top-quotes(default3)--output text|json
#Examples
npm run report:analyze -- --my-app golden-horizon
npm run report:analyze -- --my-app golden-horizon --include-self
#Output
data/{myAppId}/reports/competitor-report.ko.mddata/{myAppId}/reports/competitor-report.ko.json- Generated markdown title (H1) now follows
{myAppId} 리뷰 리포트.
#report:render-html
Render actionable markdown report to interactive HTML.
npm run report:render-html -- --my-app <owner> ...npm run report:render-html -- --allnode dist/renderReportHtml.js ...- HTML document title (
<title>and H1) is fixed to{myAppId} 리뷰 리포트(or{myAppId} Review Reportfor English reports). - Generated HTML top bar includes a
Homebutton (/) at the top-left. - Filters are managed in a separate panel opened from the top bar
Filterbutton. - On narrow screens, the filter panel opens as a bottom sheet.
- On narrow screens, the notes panel also opens as a bottom sheet instead of a right drawer.
- Search is shown as a
🔎button by default and expands to the input field on tap/click. - Top controls are tab-scoped:
ReviewsshowsFilterandNotes, whileReportsshowsExpand evidence,Priorityfilter, and the sameNotesbutton/sidebar. - Top navigation state is synced to query parameters, so refresh keeps the same UI state:
tab(reviews|reports, aliasesreview/raw,report/backlog)q(search text)tags(multi-select tags, comma-separated)exclude(all|active|excluded)min100(1when100+ charsis enabled)orig(1whenOriginaltoggle is enabled)page(current page inReviews)priority(all|must|should|couldinReports)
- In
Reports, the secondary status row is hidden so the navigation area stays single-row (theReports N/Ncount label is not shown). Reportsshows one unified backlog table across all apps (not per-app grouped sections).- In
Reports, identical backlog items are merged into a single row even when they come from different apps. - The app list in each backlog row is rendered as a single-line text with ellipsis (
...) when it overflows. - In
Reports, you can filter rows by priority (All / MUST / SHOULD / COULD). - In the
Reportstable, there is no separateEvidencecolumn; use the chevron button next toEvidence countto expand/collapse evidence rows. Evidence countis calculated as the number of unique reviews (reviewId-based dedupe), not raw quote line count.- In expanded evidence rows, the Korean sentence is shown by default (without
KR:prefix), andSee detailsreveals the review ID, metadata, and original text. - Expanded evidence rows render all matched evidence reviews for that backlog row (not a sampled subset).
- In
Reviews, hashtag filter supports multi-select (#❤️,#Requests,#Satisfaction,#Dissatisfaction), andAll tagsclears tag filters. - In
Reviews, state filter is tri-state:All/Active/Inactive(default:All). - In
Reviews, you can toggle100+ charsto focus on longer reviews. Reset filtersclears search/state/tag/length filters in one click.- In the filter panel,
Reset all to inactivesets every review toInactivein bulk and clears all hashtags. - The review filter sidebar/bottom sheet header shows
filtered reviews / total reviewsin real time. Reviewstab supports pagination with a fixed page size of100 items/page.- Pagination is applied to the current search/filter result set, and the pagination area shows
filtered reviews / total reviews. - Each app row in the
Reviewstab also showsfiltered reviews / total reviewson the right. - The context block below the title switches by tab, so each tab shows only relevant context.
- In the
Reportstab context, a compact text summary is shown (backlog counts and hashtag-based priority rule) without stat/meta cards. - In the
Reviewstab context block, a plain text summary is shown (app count, hashtag definition, active-state definition) without cards. - Review cards include
#❤️ / #Requests / #Satisfaction / #Dissatisfactionhashtag toggles andInactive/Active. - Curated quotes are shown in one
Selected Reviews (Hashtag-based)section instead of separate category sections. - In review cards,
Originaltext open/close uses a smooth expand/collapse animation. - Hashtags can be edited only when the card is
Active. - Top-right controls include a
Notesbutton; in the right sidebar you can switch the app selector to manage app-level notes. - In the notes panel, use the app selector to switch the currently active app for note editing.
- The notes sidebar shows only store links (App Store / Google Play) for the selected app.
- Notes are not auto-saved; use
Save(orCtrl/Cmd + S) to persist note changes. - Reviews view is hydrated from full review datasets (
data/{myAppId}/reviews-ko/*.json, fallbackreviews/*.json) per app:- preselected report quotes start as
Active - non-selected reviews are included as
Inactiveby default for manual curation
- preselected report quotes start as
- In preview mode, card states and app notes are persisted to
data/{myAppId}/reports/preview-state.json(card state updates immediately; notes persist on explicit save). preview-state.jsonnow uses v2 schema only (reviews.tags,reviews.excluded,appNotes). Olderfavorite/notesfields are no longer used.- If
data/{myAppId}/icon.pngexists, HTML includes icon meta tags (icon,og:image,twitter:image) automatically.
#CLI Options
--my-app(required unless--allis set)--all(defaultfalse): batch render all apps that havedata/{appId}/reports/competitor-raw-actionable.ko.md--registered-apps-path--input(default:data/{myAppId}/reports/competitor-raw-actionable.ko.md)--output(default:data/{myAppId}/reports/competitor-raw-actionable.ko.html)--allcannot be combined with--my-app,--input, or--output
#Example
npm run report:render-html -- --my-app aurora-eos
npm run report:render-html -- --all
#Output
data/{myAppId}/reports/competitor-raw-actionable.ko.html
#report:preview
Run localhost preview server.
-
Dashboard mode: home lists app ids and generated report files (
.html,.md,.json) -
Dashboard mode can display app icons when
data/{appId}/icon.pngexists -
Report page header also uses
data/{appId}/icon.png; when missing, UI falls back toappIdtext -
Dashboard background fills the full viewport height (no abrupt cut when content is short).
-
Single-file mode: serve one HTML file with
--file -
Serves preview state API for raw-review card management:
GET /api/preview-state/:appIdPUT /api/preview-state/:appId- persistence file:
data/{myAppId}/reports/preview-state.json
-
npm run report:preview -- [options] -
node dist/previewReport.js ...
#CLI Options
--my-app(optional): dashboard filter--registered-apps-path--file: single-file mode path--data-dir(default:data/)--host(default:127.0.0.1)--port(default:4173)
#Examples
npm run report:preview -- --port 4173
npm run report:preview -- --my-app aurora-eos --port 4173
npm run report:preview -- --file data/aurora-eos/reports/competitor-raw-actionable.ko.html --port 4173