Rename Brain and AI to Instruction and write BAWANA in capitals
The page now lives at /instruction; /brain and /perintah redirect there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1" />
|
||||
<meta name="description" content="Learning Lab Express by Bawana: Express Mode for learning-lab." />
|
||||
<meta name="description" content="Learning Lab Express by BAWANA: Express Mode for learning-lab." />
|
||||
<title>Learning Lab Express</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
|
||||
@@ -14,14 +14,14 @@ export default function App() {
|
||||
<Route element={<AppLayout />}>
|
||||
<Route path="/production" element={<ProductionPage />} />
|
||||
<Route path="/upload" element={<BrainPage />} />
|
||||
<Route path="/brain" element={<InstructionPage />} />
|
||||
<Route path="/instruction" element={<InstructionPage />} />
|
||||
<Route path="/schedule" element={<SchedulePage />} />
|
||||
<Route path="/results" element={<ResultsPage />} />
|
||||
</Route>
|
||||
{/* Paths from before the routes were renamed, so old links keep working. */}
|
||||
<Route path="/instruction" element={<Navigate replace to="/brain" />} />
|
||||
<Route path="/brain" element={<Navigate replace to="/instruction" />} />
|
||||
<Route path="/otak" element={<Navigate replace to="/upload" />} />
|
||||
<Route path="/perintah" element={<Navigate replace to="/brain" />} />
|
||||
<Route path="/perintah" element={<Navigate replace to="/instruction" />} />
|
||||
<Route path="/jadwal" element={<Navigate replace to="/schedule" />} />
|
||||
<Route path="/hasil" element={<Navigate replace to="/results" />} />
|
||||
<Route path="*" element={<Navigate replace to="/production" />} />
|
||||
|
||||
@@ -18,7 +18,7 @@ export const NAV_GROUPS: { label: Key; items: { to: string; label: Key; icon: Ic
|
||||
label: 'nav.settings',
|
||||
items: [
|
||||
{ to: '/upload', label: 'nav.brain', icon: 'brain' },
|
||||
{ to: '/brain', label: 'nav.instruction', icon: 'spark' },
|
||||
{ to: '/instruction', label: 'nav.instruction', icon: 'spark' },
|
||||
{ to: '/schedule', label: 'nav.schedule', icon: 'calendar' },
|
||||
{ to: '/results', label: 'nav.results', icon: 'layers' },
|
||||
],
|
||||
@@ -207,7 +207,7 @@ export function AppLayout() {
|
||||
</header>
|
||||
{/* Keyed by route so each page plays the fade-in from theme.css. */}
|
||||
<main tabIndex={-1} key={pathname}><Outlet /></main>
|
||||
<footer className="app-footer">Learning Lab Express <span>by Bawana</span><span>{t('layout.footer')}</span></footer>
|
||||
<footer className="app-footer">Learning Lab Express <span>by BAWANA</span><span>{t('layout.footer')}</span></footer>
|
||||
</div>
|
||||
{help && <HelpDialog onClose={() => setHelp(false)} />}
|
||||
<Toaster />
|
||||
|
||||
@@ -54,7 +54,7 @@ export function Brand() {
|
||||
return (
|
||||
<span className="brand">
|
||||
<span className="brand-mark"><Icon name="book" /></span>
|
||||
<span>Learning Lab <b>Express</b><small>by Bawana</small></span>
|
||||
<span>Learning Lab <b>Express</b><small>by BAWANA</small></span>
|
||||
</span>
|
||||
)
|
||||
}
|
||||
|
||||
16
src/i18n.ts
16
src/i18n.ts
@@ -8,7 +8,7 @@ export const LANGS: { code: Lang; label: string }[] = [{ code: 'en', label: 'EN'
|
||||
const en = {
|
||||
// Layout
|
||||
'nav.brain': 'Upload material',
|
||||
'nav.instruction': 'Brain and AI',
|
||||
'nav.instruction': 'Instruction',
|
||||
'nav.schedule': 'Schedule',
|
||||
'nav.results': 'Results',
|
||||
'nav.dashboard': 'Dashboard',
|
||||
@@ -140,7 +140,7 @@ const en = {
|
||||
'brain.deleteConfirm': 'Delete “{name}” from the Brain?',
|
||||
|
||||
// Instruction
|
||||
'ins.title': 'Brain and AI',
|
||||
'ins.title': 'Instruction',
|
||||
'ins.description': 'Tell the AI what to make from the Brain. It turns your instruction into research and content schedules that keep running until you stop them.',
|
||||
'ins.label': 'Instruction',
|
||||
'ins.ex1': 'Make 2 summaries per day and 1 quiz per week about leadership',
|
||||
@@ -489,10 +489,10 @@ const en = {
|
||||
'help.boxBody': 'Four steps from your material to finished content.',
|
||||
'help.open': 'View the guide',
|
||||
'help.title': 'How Learning Lab Express works',
|
||||
'help.subtitle': 'Upload material → Brain and AI → Schedule → Results',
|
||||
'help.subtitle': 'Upload material → Instruction → Schedule → Results',
|
||||
'help.brainTitle': 'Upload material',
|
||||
'help.brainBody': 'Upload your training material. Once its knowledge is built, the AI creates everything from it.',
|
||||
'help.instructionTitle': 'Brain and AI',
|
||||
'help.instructionTitle': 'Instruction',
|
||||
'help.instructionBody': 'Say what you need in one sentence, e.g. “3 quizzes per week and 1 video per week about leadership”. Check the schedules, then approve them.',
|
||||
'help.scheduleTitle': 'Schedule',
|
||||
'help.scheduleBody': 'Schedules run on their own. Pause them, change the topic, or produce now; each stays within its credit limit.',
|
||||
@@ -555,7 +555,7 @@ const id: Record<Key, string> = {
|
||||
'prod.nothingNow': 'Tidak ada yang sedang dibuat.',
|
||||
'prod.more': '+{n} lagi di Hasil',
|
||||
'nav.brain': 'Upload materi',
|
||||
'nav.instruction': 'Brain and AI',
|
||||
'nav.instruction': 'Instruksi',
|
||||
'nav.schedule': 'Jadwal',
|
||||
'nav.results': 'Hasil',
|
||||
'nav.dashboard': 'Dasbor',
|
||||
@@ -641,7 +641,7 @@ const id: Record<Key, string> = {
|
||||
'brain.open': 'Buka {name}',
|
||||
'brain.deleteConfirm': 'Hapus “{name}” dari Otak?',
|
||||
|
||||
'ins.title': 'Brain and AI',
|
||||
'ins.title': 'Instruksi',
|
||||
'ins.description': 'Beri tahu AI apa yang perlu dibuat dari Otak. AI menyusun instruksi Anda menjadi jadwal riset dan pembuatan konten yang terus berjalan sampai Anda menghentikannya.',
|
||||
'ins.label': 'Instruksi',
|
||||
'ins.ex1': 'Bikin 2 ringkasan per hari dan 1 kuis per minggu soal leadership',
|
||||
@@ -987,10 +987,10 @@ const id: Record<Key, string> = {
|
||||
'help.boxBody': 'Empat langkah dari materi sampai konten jadi.',
|
||||
'help.open': 'Lihat panduan',
|
||||
'help.title': 'Cara kerja Learning Lab Express',
|
||||
'help.subtitle': 'Upload materi → Brain and AI → Jadwal → Hasil',
|
||||
'help.subtitle': 'Upload materi → Instruksi → Jadwal → Hasil',
|
||||
'help.brainTitle': 'Upload materi',
|
||||
'help.brainBody': 'Unggah materi pelatihan. Setelah pengetahuannya dibangun, AI membuat semua konten dari situ.',
|
||||
'help.instructionTitle': 'Brain and AI',
|
||||
'help.instructionTitle': 'Instruksi',
|
||||
'help.instructionBody': 'Tulis kebutuhan Anda dalam satu kalimat, misalnya “3 kuis per minggu dan 1 video per minggu soal leadership”. Periksa jadwalnya, lalu setujui.',
|
||||
'help.scheduleTitle': 'Jadwal',
|
||||
'help.scheduleBody': 'Jadwal berjalan sendiri. Jeda, ganti topik, atau produksi sekarang; masing-masing tetap dalam batas kreditnya.',
|
||||
|
||||
@@ -81,7 +81,7 @@ export function ProductionPage() {
|
||||
title={<>{name ? t('prod.welcomeName', { name }) : t('prod.welcome')} <span className="welcome-spark">✦</span></>}
|
||||
actions={<>
|
||||
<Link className="btn" to="/upload"><Icon name="upload" />{t('nav.brain')}</Link>
|
||||
<Link className="btn primary" to="/brain"><Icon name="spark" />{t('prod.newContent')}</Link>
|
||||
<Link className="btn primary" to="/instruction"><Icon name="spark" />{t('prod.newContent')}</Link>
|
||||
</>} />
|
||||
<section ref={fullscreen.ref} className={`graph-stage${fullscreen.full ? ' full' : ''}${fullscreen.pinned ? ' pinned' : ''}`} aria-label={t('prod.graphTitle')}>
|
||||
<button type="button" className="graph-fullscreen" onClick={fullscreen.toggle} aria-pressed={fullscreen.full}
|
||||
@@ -99,7 +99,7 @@ export function ProductionPage() {
|
||||
<div><small>{t('prod.links')}</small>{graph ? <b>{graph.links.filter(l => !l.hub).length}</b> : <b>-</b>}<span>{t('prod.linksSub')}</span></div>
|
||||
</div>
|
||||
<h3>{t('prod.scheduleTitle')}</h3>
|
||||
{schedules.data?.length === 0 && <p className="graph-empty">{t('prod.noSchedules')} <Link to="/brain">{t('prod.giveInstruction')}</Link></p>}
|
||||
{schedules.data?.length === 0 && <p className="graph-empty">{t('prod.noSchedules')} <Link to="/instruction">{t('prod.giveInstruction')}</Link></p>}
|
||||
<ul className="graph-list">
|
||||
{schedules.data?.slice(0, 4).map(s => (
|
||||
<li key={s.agent.id}>
|
||||
|
||||
@@ -111,7 +111,7 @@ function NoResults({ filtered, icon }: { filtered: boolean; icon: IconName }) {
|
||||
<span className="empty-icon"><Icon name={icon} /></span>
|
||||
<h3>{t('res.empty')}</h3>
|
||||
<p>{t('res.emptyCopy')}</p>
|
||||
<Link className="btn light" to="/brain"><Icon name="plus" />{t('sch.newInstruction')}</Link>
|
||||
<Link className="btn light" to="/instruction"><Icon name="plus" />{t('sch.newInstruction')}</Link>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -58,7 +58,7 @@ export function SchedulePage() {
|
||||
return (
|
||||
<>
|
||||
<PageHead title={t('sch.title')} description={t('sch.description')}
|
||||
actions={<Link className="btn primary" to="/brain"><Icon name="plus" />{t('sch.newInstruction')}</Link>} />
|
||||
actions={<Link className="btn primary" to="/instruction"><Icon name="plus" />{t('sch.newInstruction')}</Link>} />
|
||||
{mixed && (
|
||||
<div className="result-tabs" role="tablist">
|
||||
<button role="tab" aria-selected={scope === 'mine'} className={scope === 'mine' ? 'active' : undefined} onClick={() => choose('mine')}>
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user