diff --git a/.github/workflows/code-review.yml b/.github/workflows/code-review.yml index 66e1668..af99a84 100644 --- a/.github/workflows/code-review.yml +++ b/.github/workflows/code-review.yml @@ -3,21 +3,9 @@ name: Claude Code Review on: pull_request: types: [opened, synchronize, ready_for_review, reopened] - # Optional: Only run on specific file changes - # paths: - # - "src/**/*.ts" - # - "src/**/*.tsx" - # - "src/**/*.js" - # - "src/**/*.jsx" jobs: claude-review: - # Optional: Filter by PR author - # if: | - # github.event.pull_request.user.login == 'external-contributor' || - # github.event.pull_request.user.login == 'new-developer' || - # github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR' - runs-on: ubuntu-latest permissions: contents: read @@ -39,5 +27,3 @@ jobs: plugin_marketplaces: 'https://github.com/anthropics/claude-code.git' plugins: 'code-review@claude-code-plugins' prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}' - # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md - # or https://code.claude.com/docs/en/cli-reference for available options diff --git a/src/meshcore_hub/web/static/js/charts.js b/src/meshcore_hub/web/static/js/charts.js index ada8487..d971e3a 100644 --- a/src/meshcore_hub/web/static/js/charts.js +++ b/src/meshcore_hub/web/static/js/charts.js @@ -154,7 +154,7 @@ function createActivityChart(canvasId, advertData, messageData) { if (advertData && advertData.data && advertData.data.length > 0) { if (!labels) labels = formatDateLabels(advertData.data); datasets.push({ - label: (window.t && window.t('nav.advertisements')) || 'Advertisements', + label: (window.t && window.t('entities.advertisements')) || 'Advertisements', data: advertData.data.map(function(d) { return d.count; }), borderColor: ChartColors.adverts, backgroundColor: ChartColors.advertsFill, @@ -168,7 +168,7 @@ function createActivityChart(canvasId, advertData, messageData) { if (messageData && messageData.data && messageData.data.length > 0) { if (!labels) labels = formatDateLabels(messageData.data); datasets.push({ - label: (window.t && window.t('nav.messages')) || 'Messages', + label: (window.t && window.t('entities.messages')) || 'Messages', data: messageData.data.map(function(d) { return d.count; }), borderColor: ChartColors.messages, backgroundColor: ChartColors.messagesFill, @@ -200,7 +200,7 @@ function initDashboardCharts(nodeData, advertData, messageData) { createLineChart( 'nodeChart', nodeData, - (window.t && window.t('dashboard.total_nodes')) || 'Total Nodes', + (window.t && window.t('common.total_entity', { entity: t('entities.nodes') })) || 'Total Nodes', ChartColors.nodes, ChartColors.nodesFill, true @@ -211,7 +211,7 @@ function initDashboardCharts(nodeData, advertData, messageData) { createLineChart( 'advertChart', advertData, - (window.t && window.t('nav.advertisements')) || 'Advertisements', + (window.t && window.t('entities.advertisements')) || 'Advertisements', ChartColors.adverts, ChartColors.advertsFill, true @@ -222,7 +222,7 @@ function initDashboardCharts(nodeData, advertData, messageData) { createLineChart( 'messageChart', messageData, - (window.t && window.t('nav.messages')) || 'Messages', + (window.t && window.t('entities.messages')) || 'Messages', ChartColors.messages, ChartColors.messagesFill, true diff --git a/src/meshcore_hub/web/static/js/spa/i18n.js b/src/meshcore_hub/web/static/js/spa/i18n.js index c1e396a..65d8dbe 100644 --- a/src/meshcore_hub/web/static/js/spa/i18n.js +++ b/src/meshcore_hub/web/static/js/spa/i18n.js @@ -7,7 +7,7 @@ * Usage: * import { t, loadLocale } from './i18n.js'; * await loadLocale('en'); - * t('nav.home'); // "Home" + * t('entities.home'); // "Home" * t('common.total', { count: 42 }); // "42 total" */ diff --git a/src/meshcore_hub/web/static/js/spa/pages/admin/index.js b/src/meshcore_hub/web/static/js/spa/pages/admin/index.js index 4040bf9..1ce81c4 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/admin/index.js +++ b/src/meshcore_hub/web/static/js/spa/pages/admin/index.js @@ -34,8 +34,8 @@ export async function render(container, params, router) {

${t('entities.admin')}

diff --git a/src/meshcore_hub/web/static/js/spa/pages/admin/members.js b/src/meshcore_hub/web/static/js/spa/pages/admin/members.js index 0033a60..8230e9a 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/admin/members.js +++ b/src/meshcore_hub/web/static/js/spa/pages/admin/members.js @@ -88,8 +88,8 @@ export async function render(container, params, router) {

${t('entities.members')}

diff --git a/src/meshcore_hub/web/static/js/spa/pages/admin/node-tags.js b/src/meshcore_hub/web/static/js/spa/pages/admin/node-tags.js index 73bb11c..700a9c5 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/admin/node-tags.js +++ b/src/meshcore_hub/web/static/js/spa/pages/admin/node-tags.js @@ -305,8 +305,8 @@ export async function render(container, params, router) {

${t('entities.tags')}

diff --git a/src/meshcore_hub/web/static/js/spa/pages/dashboard.js b/src/meshcore_hub/web/static/js/spa/pages/dashboard.js index 0ae6d9d..91f9729 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/dashboard.js +++ b/src/meshcore_hub/web/static/js/spa/pages/dashboard.js @@ -152,7 +152,7 @@ ${topCount > 0 ? html`
${iconNodes('h-8 w-8')}
-
${t('dashboard.total_nodes')}
+
${t('common.total_entity', { entity: t('entities.nodes') })}
${stats.total_nodes}
${t('dashboard.all_discovered_nodes')}
` : nothing} @@ -184,7 +184,7 @@ ${topCount > 0 ? html`

${iconNodes('h-5 w-5')} - ${t('dashboard.total_nodes')} + ${t('common.total_entity', { entity: t('entities.nodes') })}

${t('time.over_time_last_7_days')}

@@ -229,7 +229,7 @@ ${bottomCount > 0 ? html`

${iconAdvertisements('h-6 w-6')} - ${t('dashboard.recent_advertisements')} + ${t('common.recent_entity', { entity: t('entities.advertisements') })}

${renderRecentAds(stats.recent_advertisements)}
diff --git a/src/meshcore_hub/web/static/js/spa/pages/home.js b/src/meshcore_hub/web/static/js/spa/pages/home.js index a7422bd..f752e1e 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/home.js +++ b/src/meshcore_hub/web/static/js/spa/pages/home.js @@ -81,27 +81,27 @@ export async function render(container, params, router) { ${features.dashboard !== false ? html` ${iconDashboard('h-5 w-5 mr-2')} - ${t('nav.dashboard')} + ${t('entities.dashboard')} ` : nothing} ${features.nodes !== false ? html` ${iconNodes('h-5 w-5 mr-2')} - ${t('nav.nodes')} + ${t('entities.nodes')} ` : nothing} ${features.advertisements !== false ? html` ${iconAdvertisements('h-5 w-5 mr-2')} - ${t('nav.advertisements')} + ${t('entities.advertisements')} ` : nothing} ${features.messages !== false ? html` ${iconMessages('h-5 w-5 mr-2')} - ${t('nav.messages')} + ${t('entities.messages')} ` : nothing} ${features.map !== false ? html` ${iconMap('h-5 w-5 mr-2')} - ${t('nav.map')} + ${t('entities.map')} ` : nothing} ${customPageButtons}
@@ -114,7 +114,7 @@ export async function render(container, params, router) {
${iconNodes('h-8 w-8')}
-
${t('home.total_nodes')}
+
${t('common.total_entity', { entity: t('entities.nodes') })}
${stats.total_nodes}
${t('home.all_discovered_nodes')}
` : nothing} @@ -160,7 +160,7 @@ export async function render(container, params, router) { -

${t('home.meshcore_tagline')}

+

Connecting people and things, without using the internet

${iconGlobe('h-4 w-4 mr-1')} diff --git a/src/meshcore_hub/web/static/js/spa/pages/node-detail.js b/src/meshcore_hub/web/static/js/spa/pages/node-detail.js index 8341c48..4ce40b9 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/node-detail.js +++ b/src/meshcore_hub/web/static/js/spa/pages/node-detail.js @@ -127,15 +127,15 @@ export async function render(container, params, router) { const adminTagsHtml = (config.admin_enabled && config.is_authenticated) ? html`
- ${tags.length > 0 ? t('nodes.edit_tags') : t('nodes.add_tags')} + ${tags.length > 0 ? t('common.edit_entity', { entity: t('entities.tags') }) : t('common.add_entity', { entity: t('entities.tags') })}
` : nothing; litRender(html` @@ -164,7 +164,7 @@ ${heroHtml}
-

${t('nodes.recent_advertisements')}

+

${t('common.recent_entity', { entity: t('entities.advertisements') })}

${adsTableHtml}
@@ -237,8 +237,8 @@ function renderNotFound(publicKey) { return html` @@ -246,5 +246,5 @@ function renderNotFound(publicKey) { ${iconError('stroke-current shrink-0 h-6 w-6')} ${t('nodes.node_not_found', { public_key: publicKey })}
-${t('nodes.back_to_nodes')}`; +${t('common.view_entity', { entity: t('entities.nodes') })}`; } diff --git a/src/meshcore_hub/web/static/js/spa/pages/not-found.js b/src/meshcore_hub/web/static/js/spa/pages/not-found.js index 00ff1b6..b9f8eef 100644 --- a/src/meshcore_hub/web/static/js/spa/pages/not-found.js +++ b/src/meshcore_hub/web/static/js/spa/pages/not-found.js @@ -18,7 +18,7 @@ export async function render(container, params, router) { ${iconNodes('h-5 w-5 mr-2')} - ${t('not_found.browse_nodes')} + ${t('common.view_entity', { entity: t('entities.nodes') })}
diff --git a/src/meshcore_hub/web/static/locales/en.json b/src/meshcore_hub/web/static/locales/en.json index e9d3dec..0febcf1 100644 --- a/src/meshcore_hub/web/static/locales/en.json +++ b/src/meshcore_hub/web/static/locales/en.json @@ -16,16 +16,6 @@ "tags": "Tags", "tag": "Tag" }, - "nav": { - "home": "Home", - "dashboard": "Dashboard", - "nodes": "Nodes", - "advertisements": "Advertisements", - "messages": "Messages", - "map": "Map", - "members": "Members", - "admin": "Admin" - }, "common": { "filter": "Filter", "clear": "Clear", @@ -46,6 +36,9 @@ "move_entity": "Move {{entity}}", "copy_entity": "Copy {{entity}}", "view_entity": "View {{entity}}", + "recent_entity": "Recent {{entity}}", + "total_entity": "Total {{entity}}", + "all_entity": "All {{entity}}", "previous": "Previous", "next": "Next", "go_home": "Go Home", @@ -66,8 +59,6 @@ "sign_out": "Sign Out", "view_details": "View Details", "all_types": "All Types", - "all_nodes": "All Nodes", - "all_members": "All Members", "node_type": "Node Type", "show": "Show", "search_placeholder": "Search by name, ID, or public key...", @@ -113,12 +104,10 @@ }, "home": { "welcome_default": "Welcome to the {{network_name}} mesh network dashboard. Monitor network activity, view connected nodes, and explore message history.", - "total_nodes": "Total Nodes", "all_discovered_nodes": "All discovered nodes", "network_info": "Network Info", "network_activity": "Network Activity", "meshcore_attribution": "Our local off-grid mesh network is made possible by", - "meshcore_tagline": "Connecting people and things, without using the internet", "frequency": "Frequency", "bandwidth": "Bandwidth", "spreading_factor": "Spreading Factor", @@ -126,9 +115,7 @@ "tx_power": "TX Power" }, "dashboard": { - "total_nodes": "Total Nodes", "all_discovered_nodes": "All discovered nodes", - "recent_advertisements": "Recent Advertisements", "recent_channel_messages": "Recent Channel Messages", "channel": "Channel {{number}}", "no_advertisements_yet": "No advertisements recorded yet." @@ -136,13 +123,9 @@ "nodes": { "no_nodes_found": "No nodes found.", "node_not_found": "Node not found: {{public_key}}", - "back_to_nodes": "Back to Nodes", "scan_to_add": "Scan to add as contact", - "recent_advertisements": "Recent Advertisements", "no_advertisements": "No advertisements recorded.", - "no_tags": "No tags defined.", - "edit_tags": "Edit Tags", - "add_tags": "Add Tags" + "no_tags": "No tags defined." }, "advertisements": { "no_advertisements_found": "No advertisements found." @@ -177,8 +160,7 @@ }, "not_found": { "title": "Page Not Found", - "description": "The page you're looking for doesn't exist or has been moved.", - "browse_nodes": "Browse Nodes" + "description": "The page you're looking for doesn't exist or has been moved." }, "custom_page": { "page_not_found": "Page not found", diff --git a/src/meshcore_hub/web/templates/spa.html b/src/meshcore_hub/web/templates/spa.html index 6514c6f..0ecad3c 100644 --- a/src/meshcore_hub/web/templates/spa.html +++ b/src/meshcore_hub/web/templates/spa.html @@ -60,24 +60,24 @@