feat(ui): project details panel + compact/responsive cards; rename Sentinel→Yerin (red); migrate research_notes

- Project card expands to show description + status + dates (was only the research stub)
- Cards compacted + responsive (actions wrap on narrow)
- Sentinel renamed Yerin everywhere (#/yerin, red 'Sage of the Endless Sword' theme + red sidebar dot)
- void1 importer now carries research_notes/last_researched_at (was dropped)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
root
2026-06-05 00:19:16 +10:00
parent bf58b624a3
commit dbf84559de
7 changed files with 60 additions and 7 deletions

View File

@@ -33,6 +33,12 @@ export async function importVoid1({ sqlitePath, spaceId, dryRun = false }) {
if (existing) { projIds.set(pr.id, existing); continue; }
n.projects++; if (dryRun) continue;
const created = await projects.create({ space_id: spaceId, slug: slugify(pr.name), name: pr.name || 'Project', description: pr.description || null, status: pr.status === 'archived' ? 'archived' : 'active' }, SYS);
// Carry Void 1's Eithan research over (research_notes were not in the original mapping).
if (pr.research_notes || pr.last_researched_at) {
await pool.query(
`UPDATE projects SET research_notes=$1, last_researched_at=$2, research_status=$3 WHERE id=$4`,
[pr.research_notes || null, pr.last_researched_at ? new Date(pr.last_researched_at) : null, pr.research_notes ? 'done' : 'none', created.id]);
}
projIds.set(pr.id, created.id);
await map.record('void1', `projects:${pr.id}`, 'project', created.id);
}