Add 4 card types, evidence board with red yarn strings, and 8 unique persistent boards

This commit is contained in:
airent106 committed 2026-10-13 10:55:09 -06:00
1 parent 19eb968f86
commit 2bc4f55c44
10 files changed
+1637 -332

No files matched your search

+26 -2
View File
@@ -75,7 +75,20 @@ function readDeskState() {
try {
if (fs.existsSync(DESK_FILE)) {
const raw = fs.readFileSync(DESK_FILE, 'utf-8');
return JSON.parse(raw);
const desk = JSON.parse(raw);
if (desk && (!desk.boards || typeof desk.boards !== 'object')) {
const currentBoard = desk.activeBoard || (desk.settings && desk.settings.deskTexture) || 'oak';
desk.boards = {
[currentBoard]: {
cards: desk.cards || [],
props: desk.props || [],
strokes: desk.strokes || [],
settings: desk.settings || {}
}
};
desk.activeBoard = currentBoard;
}
return desk;
}
} catch (err) {
console.error('Error reading desk state:', err);
@@ -142,17 +155,28 @@ app.get('/api/desk', (_req, res) => {
// Save desk state
app.post('/api/desk', (req, res) => {
const { cards, props, strokes, settings, originClientId } = req.body;
const { cards, props, strokes, settings, activeBoard, boards, originClientId } = req.body;
if (!Array.isArray(cards)) {
return res.status(400).json({ success: false, error: 'Invalid desk state: cards required' });
}
const currentBoard = activeBoard || (settings && settings.deskTexture) || 'oak';
const updatedBoards = boards && typeof boards === 'object' ? { ...boards } : {};
updatedBoards[currentBoard] = {
cards,
props: Array.isArray(props) ? props : [],
strokes: Array.isArray(strokes) ? strokes : [],
settings: settings || {}
};
const newState = {
cards,
props: Array.isArray(props) ? props : [],
strokes: Array.isArray(strokes) ? strokes : [],
settings: settings || {},
activeBoard: currentBoard,
boards: updatedBoards,
updatedAt: Date.now()
};