Skip to content

Commit a49bab7

Browse files
committed
feat: migrate onboarding to beta version, update versioning to 0.3.0, and improve cursor interaction styles
1 parent adcc37b commit a49bab7

16 files changed

Lines changed: 108 additions & 83 deletions

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Redstring - Semantic Knowledge Graph ![App Version](https://img.shields.io/badge/version-v0.2.0-blue) [![GitHub Sponsors](https://img.shields.io/github/sponsors/theredstring?logo=github&label=Sponsor)](https://github.com/sponsors/theredstring)
1+
# Redstring - Semantic Knowledge Graph ![App Version](https://img.shields.io/badge/version-v0.3.0-blue) [![GitHub Sponsors](https://img.shields.io/github/sponsors/theredstring?logo=github&label=Sponsor)](https://github.com/sponsors/theredstring)
22

33
A semantic knowledge graph application that bridges human cognition and machine intelligence through visual node-based interface, W3C semantic web standards, and AI-powered knowledge discovery.
44

data/analytics/sessions.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
"lastActivity": 1774675582084,
88
"activityCount": 1,
99
"ip": "::1",
10-
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Redstring/0.2.0 Chrome/142.0.7444.226 Electron/39.2.6 Safari/537.36",
10+
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Redstring/0.3.0 Chrome/142.0.7444.226 Electron/39.2.6 Safari/537.36",
1111
"endedAt": 1774675582084
1212
}
1313
}

package-lock.json

Lines changed: 3 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "redstring",
33
"private": true,
4-
"version": "0.2.0",
4+
"version": "0.3.0",
55
"author": "Grant Eubanks <grant.w.eubanks@gmail.com>",
66
"description": "Redstring - A semantic knowledge graph application with visual node-based interface, RDF integration, and AI-powered knowledge discovery",
77
"license": "MIT",

redstring-mcp-server.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ const toolQueue = new ToolQueue();
5858
// Create MCP server instance
5959
const server = new McpServer({
6060
name: "redstring",
61-
version: "0.2.0",
61+
version: "0.3.0",
6262
capabilities: {
6363
resources: {},
6464
tools: {},

src/NodeCanvas.css

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,17 @@ body {
7474
transform: scale(1);
7575
filter: drop-shadow(0px 2px 4px rgba(0, 0, 0, 0.3));
7676
}
77+
}
78+
79+
/* Force pointer cursor on nodes and connections */
80+
.node, .node:active, .node.dragging {
81+
cursor: pointer !important;
82+
}
83+
.node * {
84+
cursor: inherit !important; /* Allow inner elements to use the pointer cursor */
85+
}
86+
87+
/* Force pointer cursor on edges */
88+
.edge-interact, .edge-interact:hover, .edge-interact:active {
89+
cursor: pointer !important;
7790
}

src/NodeCanvas.jsx

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1127,11 +1127,16 @@ function NodeCanvas() {
11271127
storeActions.setUniverseConnected(true);
11281128
storeActions.setUniverseLoaded(true, false);
11291129
storeActions.setLeftPanelExpanded(true);
1130+
setShowStorageSetupModal(false); // Close setup modal if it was accidentally opened
1131+
1132+
if (typeof window !== 'undefined') {
1133+
localStorage.setItem(getStorageKey('redstring-welcome-seen'), 'true');
1134+
}
11301135
setTimeout(() => { if (leftPanelRef.current) leftPanelRef.current.setActiveView('federation'); }, 100);
11311136
}
11321137
// If NEEDS_ONBOARDING, check if user has skipped setup before
11331138
else if (result.status === 'NEEDS_ONBOARDING') {
1134-
const welcomeSeen = typeof window !== 'undefined' && localStorage.getItem(getStorageKey('redstring-alpha-welcome-seen')) === 'true';
1139+
const welcomeSeen = typeof window !== 'undefined' && localStorage.getItem(getStorageKey('redstring-welcome-seen')) === 'true';
11351140

11361141
if (welcomeSeen) {
11371142
console.log('[NodeCanvas] Onboarding seen but no workspace config. Falling back to browser/auto-connect...');
@@ -1177,7 +1182,9 @@ function NodeCanvas() {
11771182
let hasCompletedOnboarding = false;
11781183
try {
11791184
if (typeof window !== 'undefined') {
1180-
hasCompletedOnboarding = localStorage.getItem(getStorageKey('redstring-alpha-welcome-seen')) === 'true';
1185+
const welcomeSeenVar = localStorage.getItem(getStorageKey('redstring-welcome-seen')) === 'true';
1186+
const fp = localStorage.getItem(getStorageKey('redstring_workspace_folder_path'));
1187+
hasCompletedOnboarding = welcomeSeenVar || !!fp;
11811188
}
11821189
} catch { }
11831190

@@ -12801,7 +12808,7 @@ function NodeCanvas() {
1280112808

1280212809
// 7. Mark onboarding as complete
1280312810
if (typeof window !== 'undefined') {
12804-
localStorage.setItem(getStorageKey('redstring-alpha-welcome-seen'), 'true');
12811+
localStorage.setItem(getStorageKey('redstring-welcome-seen'), 'true');
1280512812
}
1280612813

1280712814
// 8. Close modal and open Panel
@@ -12835,7 +12842,7 @@ function NodeCanvas() {
1283512842

1283612843
// Mark onboarding as complete
1283712844
if (typeof window !== 'undefined') {
12838-
localStorage.setItem(getStorageKey('redstring-alpha-welcome-seen'), 'true');
12845+
localStorage.setItem(getStorageKey('redstring-welcome-seen'), 'true');
1283912846
}
1284012847

1284112848
// Close storage setup modal

src/RedstringMenu.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -943,7 +943,7 @@ const RedstringMenu = ({
943943
onClick={async () => {
944944
try {
945945
// Clear onboarding flag
946-
localStorage.removeItem(getStorageKey('redstring-alpha-welcome-seen'));
946+
localStorage.removeItem(getStorageKey('redstring-welcome-seen'));
947947

948948
// Clear folder storage
949949
localStorage.removeItem(getStorageKey('redstring_workspace_folder_path'));

src/UniverseManager.jsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4767,7 +4767,7 @@ const UniverseManager = ({ variant = 'panel', onRequestClose }) => {
47674767
</div>
47684768
</Modal>
47694769

4770-
{/* Welcome modal removed in favor of existing AlphaOnboardingModal */}
4770+
{/* Welcome modal removed in favor of existing BetaOnboardingModal */}
47714771

47724772
{/* Universe File Selection Modal */}
47734773
<Modal
Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ import CanvasModal from './CanvasModal';
33
import { getStorageKey } from '../utils/storageUtils.js';
44
import useViewportBounds from '../hooks/useViewportBounds.js';
55
import useGraphStore from '../store/graphStore.jsx';
6+
import { useTheme } from '../hooks/useTheme.js';
67

78
/**
8-
* Alpha Onboarding Modal
9-
* A specialized CanvasModal that welcomes users to Redstring's open alpha
10-
* Inherits all CanvasModal functionality while providing alpha-specific content
9+
* Beta Onboarding Modal
10+
* A specialized CanvasModal that welcomes users to Redstring's open beta
11+
* Inherits all CanvasModal functionality while providing beta-specific content
1112
*/
12-
const AlphaOnboardingModal = ({
13+
const BetaOnboardingModal = ({
1314
isVisible,
1415
onClose,
1516
onGetStarted = null,
@@ -20,6 +21,7 @@ const AlphaOnboardingModal = ({
2021

2122
// Connect to store for panel state
2223
const { leftPanelExpanded, rightPanelExpanded, typeListMode } = useGraphStore();
24+
const theme = useTheme();
2325

2426
// Use the shared hook to get accurate available space
2527
const viewportBounds = useViewportBounds(
@@ -45,7 +47,7 @@ const AlphaOnboardingModal = ({
4547

4648
const handleClose = () => {
4749
if (typeof window !== 'undefined') {
48-
const key = getStorageKey('redstring-alpha-welcome-seen');
50+
const key = getStorageKey('redstring-welcome-seen');
4951
localStorage.setItem(key, 'true');
5052
}
5153
onClose();
@@ -80,18 +82,20 @@ const AlphaOnboardingModal = ({
8082
right: isCompactLayout ? '12px' : '16px',
8183
background: 'none',
8284
border: 'none',
83-
color: '#666',
85+
color: theme.canvas.textPrimary,
86+
opacity: 0.6,
8487
cursor: 'pointer',
8588
padding: '6px',
8689
borderRadius: '4px',
8790
fontSize: '16px',
8891
fontWeight: 'bold',
8992
fontFamily: "'EmOne', sans-serif",
9093
zIndex: 10,
91-
touchAction: 'manipulation'
94+
touchAction: 'manipulation',
95+
transition: 'opacity 0.2s'
9296
}}
93-
onMouseEnter={(e) => e.currentTarget.style.color = '#260000'}
94-
onMouseLeave={(e) => e.currentTarget.style.color = '#666'}
97+
onMouseEnter={(e) => e.currentTarget.style.opacity = '1'}
98+
onMouseLeave={(e) => e.currentTarget.style.opacity = '0.6'}
9599
>
96100
97101
</button>
@@ -100,7 +104,7 @@ const AlphaOnboardingModal = ({
100104
<div style={{ textAlign: 'center', marginBottom: isCompactLayout ? '12px' : '16px', flexShrink: 0 }}>
101105
<h2 style={{
102106
margin: '0 0 8px 0',
103-
color: '#260000',
107+
color: theme.canvas.textPrimary,
104108
fontSize: isCompactLayout ? '1.1rem' : '1.4rem',
105109
fontWeight: 'bold',
106110
fontFamily: "'EmOne', sans-serif"
@@ -110,11 +114,12 @@ const AlphaOnboardingModal = ({
110114
<div style={{
111115
margin: '0 0 6px 0',
112116
fontSize: isCompactLayout ? '0.85rem' : '0.9rem',
113-
color: '#716C6C',
117+
color: theme.canvas.textPrimary,
118+
opacity: 0.7,
114119
fontFamily: "'EmOne', sans-serif",
115120
fontWeight: '600'
116121
}}>
117-
v0.2.0
122+
v0.3.0
118123
</div>
119124
</div>
120125

@@ -146,21 +151,22 @@ const AlphaOnboardingModal = ({
146151
<p style={{
147152
margin: '0 0 24px 0',
148153
fontSize: isCompactLayout ? '0.85rem' : '0.95rem',
149-
color: '#333',
154+
color: theme.canvas.textPrimary,
155+
opacity: 0.9,
150156
fontFamily: "'EmOne', sans-serif",
151157
textAlign: 'center'
152158
}}>
153159
A visual thinking tool for building interconnected knowledge through <strong>Things</strong> and <strong>Connections</strong>.
154160
</p>
155161

156162
<div style={{
157-
backgroundColor: '#260000',
163+
backgroundColor: theme.darkMode ? 'rgba(255,255,255,0.05)' : 'rgba(139, 0, 0, 0.05)',
158164
borderRadius: '8px',
159165
padding: isCompactLayout ? '10px' : '12px',
160166
marginBottom: '24px',
161167
fontSize: isCompactLayout ? '0.8rem' : '0.85rem',
162-
color: '#EFE8E5',
163-
border: '1px solid #260000'
168+
color: theme.canvas.textPrimary,
169+
border: `1px solid ${theme.canvas.border}`
164170
}}>
165171
<strong style={{ fontSize: isCompactLayout ? '0.9rem' : '1rem' }}>Basic Controls:</strong><br />
166172
• Click and hold to move a Thing<br />
@@ -178,8 +184,8 @@ const AlphaOnboardingModal = ({
178184
onClick={handleGetStarted}
179185
style={{
180186
padding: isCompactLayout ? '12px' : '14px 20px',
181-
backgroundColor: '#8B0000',
182-
color: '#EFE8E5',
187+
backgroundColor: theme.darkMode ? '#EFE8E5' : '#8B0000',
188+
color: theme.darkMode ? '#260000' : '#EFE8E5',
183189
border: 'none',
184190
borderRadius: '6px',
185191
cursor: 'pointer',
@@ -197,8 +203,8 @@ const AlphaOnboardingModal = ({
197203
style={{
198204
padding: isCompactLayout ? '10px 12px' : '12px 16px',
199205
backgroundColor: 'transparent',
200-
color: '#666',
201-
border: '2px solid #ddd',
206+
color: theme.canvas.textPrimary,
207+
border: `2px solid ${theme.canvas.border}`,
202208
borderRadius: '6px',
203209
cursor: 'pointer',
204210
fontSize: isCompactLayout ? '0.85rem' : '0.9rem',
@@ -243,4 +249,4 @@ const AlphaOnboardingModal = ({
243249
);
244250
};
245251

246-
export default AlphaOnboardingModal;
252+
export default BetaOnboardingModal;

0 commit comments

Comments
 (0)