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')}
@@ -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``
: 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 @@
- - {{ t('nav.home') }}
+ - {{ t('entities.home') }}
{% if features.dashboard %}
- - {{ t('nav.dashboard') }}
+ - {{ t('entities.dashboard') }}
{% endif %}
{% if features.nodes %}
- - {{ t('nav.nodes') }}
+ - {{ t('entities.nodes') }}
{% endif %}
{% if features.advertisements %}
- - {{ t('nav.advertisements') }}
+ - {{ t('entities.advertisements') }}
{% endif %}
{% if features.messages %}
- - {{ t('nav.messages') }}
+ - {{ t('entities.messages') }}
{% endif %}
{% if features.map %}
- - {{ t('nav.map') }}
+ - {{ t('entities.map') }}
{% endif %}
{% if features.members %}
- - {{ t('nav.members') }}
+ - {{ t('entities.members') }}
{% endif %}
{% if features.pages %}
{% for page in custom_pages %}
@@ -93,24 +93,24 @@