style(copy): replace math jargon with plain Korean — 7F.1

This commit is contained in:
reloop
2026-04-12 05:32:27 +09:00
parent f336916afd
commit cbc3af2a6b
9 changed files with 22 additions and 27 deletions

View File

@@ -290,7 +290,7 @@ function DashboardBody() {
<MasteryCopy>
<MasteryDescription>
<code>P 0.9</code>
(90%)
</MasteryDescription>
<MasteryMeta>
<Icon name="check-circle" weight="fill" size={14} />
@@ -342,7 +342,7 @@ function DashboardBody() {
? '복습 경로 계산 대기 중'
: `${Math.ceil(item.daysToTarget)}일 + ${item.iterationsToTarget}회 복습 후 마스터 예상`}
</MasteryEta>
<MasteryNow> P={item.currentP.toFixed(2)}</MasteryNow>
<MasteryNow> {Math.round(item.currentP * 100)}%</MasteryNow>
</MasteryRight>
</MasteryItem>
))

View File

@@ -148,7 +148,7 @@ export default function OnboardingPage() {
<IntensityLabel>{meta.label}</IntensityLabel>
<IntensityDesc>{meta.desc}</IntensityDesc>
<IntensityThreshold>
P {(meta.threshold * 100).toFixed(0)}%
{(meta.threshold * 100).toFixed(0)}%
</IntensityThreshold>
</IntensityOption>
);

View File

@@ -29,7 +29,7 @@ const featureItems = [
strike: '수능 과목별 누적 파악 불가',
title: '태그별 숙련도 누적',
description:
'세부 태그 단위로 P값을 계산해 단순 정오가 아니라 실제로 언제 내 지식이 되는지 마스터리 경로로 보여줍니다.',
'세부 태그 단위 예상 정답률을 계산해 단순 정오가 아니라 실제로 언제 내 지식이 되는지 마스터리 경로로 보여줍니다.',
},
];
@@ -56,13 +56,13 @@ const steps = [
number: '4',
icon: 'chart-line-up' as const,
title: '곡선 성장',
description: '마스터리 도달 예측 확률(P)이 상승하며 완전한 내 지식이 됨',
description: '숙련도와 예상 정답률이 함께 올라가며 완전한 내 지식이 됨',
},
];
const stats = [
{ value: '150,000', label: '누적 학습 기록 건수' },
{ value: '92%', label: '적중률(P≥0.9 시 정답률)' },
{ value: '92%', label: '숙련 기준(90%) 도달 시 정답률' },
{ value: '45', label: '평균 일일 복습 문항 수' },
];
@@ -81,7 +81,7 @@ const pricingCards = [
badge: '가장 인기',
features: [
'과목 무제한',
'마스터리 경로 뷰 (P값)',
'마스터리 경로 뷰와 예상 정답률',
'기출 문제집 자동 연동',
'PDF 업로드 및 분석',
],
@@ -245,7 +245,7 @@ export default function LandingPage() {
<MetricValue>
64 <span>%</span>
</MetricValue>
<MetricHint> P0.9 </MetricHint>
<MetricHint> (90%) </MetricHint>
</MetricCard>
</DashboardGrid>
</DashboardSurface>

View File

@@ -70,7 +70,7 @@ const tiers: Tier[] = [
features: [
'학습 과목 무제한 등록',
'평가원/교육청 기출 문제집 연동',
'마스터리 경로 뷰와 P값 예측',
'마스터리 경로 뷰와 예상 정답률 예측',
'PDF 문제 이미지 업로드',
'과목별 상세 분석 리포트',
'데이터 내보내기와 알림 위젯',

View File

@@ -463,7 +463,7 @@ export default function ReviewPage() {
</SubjectBadge>
<MetaBadge>{currentItem.iteration + 1}</MetaBadge>
<MetaBadge $tone="accent">
P={formatProbability(currentItem.predictedP)}
{Math.round((currentItem.predictedP ?? 0) * 100)}%
</MetaBadge>
</CardTagRow>
@@ -523,7 +523,7 @@ export default function ReviewPage() {
<PMeter>
<PMeterLabel>
<span> </span>
<span> </span>
<strong>{Math.round((currentItem.predictedP ?? 0) * 100)}%</strong>
</PMeterLabel>
<PMeterTrack aria-hidden>
@@ -635,10 +635,6 @@ function formatRelative(date: Date): string {
return `${Math.round(hours / 24)}일 지남`;
}
function formatProbability(value: number | null): string {
return (value ?? 0).toFixed(2);
}
const Page = styled.div`
min-height: 100vh;
background: ${theme.color.bgDeep};

View File

@@ -458,7 +458,7 @@ function MasteryGrowthPanel({
</PanelTitle>
<PanelDescription>
P-value .
.
</PanelDescription>
</PanelTitleGroup>
@@ -637,7 +637,7 @@ function CurveChart({
x: event.clientX,
y: event.clientY,
title: point.label,
subtitle: `P ${point.p.toFixed(2)}`,
subtitle: `예상 정답률 ${Math.round(point.p * 100)}%`,
})
}
onMouseLeave={onHideTooltip}

View File

@@ -554,7 +554,9 @@ function SubjectsBody() {
autoFocus
/>
</EditableCell>
<PValueText>P={formatPValue(tag.currentP)}</PValueText>
<PValueText>
{Math.round((tag.currentP ?? 0) * 100)}%
</PValueText>
<BarCell>
<ProgressTrack>
<ProgressFill
@@ -586,7 +588,9 @@ function SubjectsBody() {
) : (
<>
<TagName>{tag.name}</TagName>
<PValueText>P={formatPValue(tag.currentP)}</PValueText>
<PValueText>
{Math.round((tag.currentP ?? 0) * 100)}%
</PValueText>
<BarCell>
<ProgressTrack>
<ProgressFill
@@ -686,11 +690,6 @@ function getSubjectMastery(subject: SubjectWithTags): number {
return values.reduce((sum, value) => sum + value, 0) / values.length;
}
function formatPValue(value: number | null): string {
if (typeof value !== 'number' || Number.isNaN(value)) return '0.00';
return clamp01(value).toFixed(2);
}
function clamp01(value: number): number {
return Math.min(1, Math.max(0, value));
}

View File

@@ -37,7 +37,7 @@ export default function ForgetCurveChart({ data, threshold = 0.5 }: Props) {
stroke={theme.color.textMute}
tick={{ fontSize: 11 }}
label={{
value: 'days',
value: '일수',
position: 'insideBottomRight',
offset: -4,
fill: theme.color.textMute,
@@ -82,7 +82,7 @@ export default function ForgetCurveChart({ data, threshold = 0.5 }: Props) {
<Line
type="monotone"
dataKey="p"
name="정답 확률 P"
name="예상 정답률"
stroke={theme.color.accent2}
strokeWidth={2}
dot={false}

View File

@@ -58,7 +58,7 @@ export default function MasteryPathChart({ data }: Props) {
}}
labelFormatter={(v) => `${v}회차`}
formatter={(value: number, name: string) => {
if (name === 'p') return [`${value}%`, '정답 확률 P'];
if (name === 'p') return [`${value}%`, '예상 정답률'];
if (name === 's0') return [`${value}%`, '기억 강도 S₀'];
if (name === 'days') return [`${value}일 뒤`, '예상'];
return [value, name];