feat(copy): replace '기억 구출' framing with 표면별 자연 동사 + Zeigarnik priming
F3: '구출' (rescue) is unnatural everyday Korean. Replace per-surface: - 트레이 '구출한 메모 보기' → '보관한 메모 보기' - 트레이 '기억 구출하기' → '한 줄 적기' - 토스트 #2 → '머릿속에서 꺼내 두었습니다.' - 토스트 #3 → '방금 한 줄 잡아뒀습니다.' - QC 힌트 'Ctrl+Enter 구출' → 'Ctrl+Enter 저장' - package.json description → 'local-first 한 줄 보관 도구' F4-E (Zeigarnik priming): empty state copy reframed to evoke the "unfinished thought tugging at memory" → "외재화로 해소" loop: - '첫 기억을 구출해보세요.' → '머릿속에 떠다니는 한 줄을 적어보세요.' E2E smoke assertion updated to match. Slice §1.1 invariant 5 ('실패/끊김/연속 실패' 금지) preserved. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -2,7 +2,7 @@
|
||||
"name": "inkling",
|
||||
"version": "0.2.0",
|
||||
"private": true,
|
||||
"description": "Inkling — local-first 기억 구출 도구",
|
||||
"description": "Inkling — local-first 한 줄 보관 도구",
|
||||
"author": "altair823 <dlsrks0734@gmail.com>",
|
||||
"main": "out/main/index.js",
|
||||
"scripts": {
|
||||
|
||||
@@ -2,8 +2,8 @@ import { createHash } from 'node:crypto';
|
||||
|
||||
export const REWARD_COPIES = [
|
||||
'이 생각은 이제 Inkling이 들고 있습니다.',
|
||||
'나중에 찾을 수 있게 보관했습니다.',
|
||||
'방금 하나의 업무 기억을 구출했습니다.',
|
||||
'머릿속에서 꺼내 두었습니다.',
|
||||
'방금 한 줄 잡아뒀습니다.',
|
||||
'기록 완료. 이제 잊어도 됩니다.'
|
||||
] as const;
|
||||
|
||||
|
||||
@@ -12,8 +12,8 @@ function buildMenu(
|
||||
runImport: () => void
|
||||
) {
|
||||
const items: MenuItemConstructorOptions[] = [
|
||||
{ label: '구출한 메모 보기', click: showInbox },
|
||||
{ label: '기억 구출하기', click: showCapture },
|
||||
{ label: '보관한 메모 보기', click: showInbox },
|
||||
{ label: '한 줄 적기', click: showCapture },
|
||||
{ type: 'separator' },
|
||||
{ label: '지금 백업', click: runBackup },
|
||||
{ label: '내보내기...', click: runExport },
|
||||
|
||||
@@ -85,7 +85,7 @@ export function App(): React.ReactElement {
|
||||
{loading && notes.length === 0 ? (
|
||||
<div className="empty">불러오는 중…</div>
|
||||
) : notes.length === 0 ? (
|
||||
<div className="empty">첫 기억을 구출해보세요. <code>Ctrl+Shift+J</code></div>
|
||||
<div className="empty">머릿속에 떠다니는 한 줄을 적어보세요. <code>Ctrl+Shift+J</code></div>
|
||||
) : filtered.length === 0 ? (
|
||||
<div className="empty">이 태그의 노트가 없습니다.</div>
|
||||
) : (
|
||||
|
||||
@@ -65,7 +65,7 @@ export function App(): React.ReactElement {
|
||||
{images.map((i, idx) => (<img key={idx} src={i.url} alt="" />))}
|
||||
</div>
|
||||
)}
|
||||
<div className="hint">Ctrl+Enter 구출 · Esc 취소 · 이미지 붙여넣기</div>
|
||||
<div className="hint">Ctrl+Enter 저장 · Esc 취소 · 이미지 붙여넣기</div>
|
||||
{err && <div className="err">{err}</div>}
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -26,6 +26,6 @@ test('inbox shell shows v0.2 empty state', async () => {
|
||||
}
|
||||
await inbox.waitForLoadState('load');
|
||||
await expect(inbox.getByRole('heading', { name: 'Inkling' })).toBeVisible();
|
||||
await expect(inbox.getByText('첫 기억을 구출해보세요.')).toBeVisible();
|
||||
await expect(inbox.getByText('머릿속에 떠다니는 한 줄을 적어보세요.')).toBeVisible();
|
||||
await app.close();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user