davila7/claude-code-templates · warning
Not found
Error message
Not found
What it means
This is the Express fallback route's 404 for unmatched API/service/component/asset paths. Any GET whose path starts with /api/, /services/, /components/, or /assets/ but matches no earlier route gets this JSON 404 instead of being served the SPA HTML file.
Source
Thrown at cli-tool/src/chats-mobile.js:811
error: 'Failed to fetch analytics',
message: error.message
});
}
});
// Serve the mobile chats page as default
this.app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'analytics-web', 'chats_mobile.html'));
});
// Fallback for any other routes (but not for API or static files)
this.app.get('*', (req, res) => {
// Don't redirect API calls or static files
if (req.path.startsWith('/api/') ||
req.path.startsWith('/services/') ||
req.path.startsWith('/components/') ||
req.path.startsWith('/assets/')) {
res.status(404).json({ error: 'Not found' });
return;
}
res.sendFile(path.join(__dirname, 'analytics-web', 'chats_mobile.html'));
});
}
/**
* Setup file watching for Claude Code conversations
*/
async setupFileWatching() {
try {
const homeDir = os.homedir();
const claudeDir = path.join(homeDir, '.claude');
this.fileWatcher.setupFileWatchers(
claudeDir,
this.handleDataRefresh.bind(this),
() => {}, // processRefreshCallback (not needed for mobile)View on GitHub (pinned to a0851ed10c)
Solutions
- Compare the requested path against the routes actually defined in setupRoutes (grep this.app.get/post in chats-mobile.js)
- If it's an asset 404, clear cache / hard-refresh so the UI reloads HTML matching the served assets
- Make sure you're hitting the right server/port (chats-mobile vs other local dashboards)
- Fix the typo or update the client to the current API path
Example fix
// before
fetch('/api/conversations/analytics'); // -> 404 { error: 'Not found' }
// after
fetch('/api/conversations/' + encodeURIComponent(id) + '/analytics'); Defensive patterns
Strategy: validation
Validate before calling
const KNOWN = ['/api/conversations', /^\/api\/conversations\/[^/]+\/analytics$/];
if (!KNOWN.some(p => typeof p === 'string' ? path === p : p.test(path))) console.warn('unmatched route', path); Prevention
- Centralize API path constants instead of string-concatenating endpoints
- Log the failing path on 404 to catch typos early
- Hard-refresh after server upgrades so assets and routes stay in sync
When it happens
Trigger: Calling an API endpoint that doesn't exist (typo like /api/conversation/:id/analytics, wrong prefix) or requesting a missing asset like /assets/nonexistent.js — the fallback sees the /assets/ prefix and returns 404 JSON rather than index.html.
Common situations: Version mismatch where the frontend HTML references a hashed asset that a newer/older server build doesn't ship; curl-ing an endpoint after a route rename; proxying requests to the wrong port so they hit chats-mobile instead of the intended service.
Related errors
- Conversation not found
- Session not found
- Agent not found
- Failed to update states
- Failed to get system health
AI-assisted analysis of davila7/claude-code-templates@a0851ed10c (2026-08-28).
Data as JSON: /api/errors/a2ee11418fbaef06.
Report an issue: GitHub.