Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
83 commits
Select commit Hold shift + click to select a range
342f836
Fix Vite to bind to all interfaces for port forwarding
mentatbot[bot] Oct 21, 2025
edb97f1
Fix App component test to match updated structure
mentatbot[bot] Oct 21, 2025
301d1bc
Create interactive dashboard with app cards
mentatbot[bot] Oct 21, 2025
dfaea4a
Add Snake Game to dashboard
mentatbot[bot] Oct 21, 2025
158f530
Add AI Chat with navigation and routing
mentatbot[bot] Oct 21, 2025
175fc36
Add World Conquest game to dashboard
mentatbot[bot] Oct 21, 2025
f05b479
Enhance AI Chat with 8+ major features
mentatbot[bot] Oct 21, 2025
03ff7e7
Fix user message visibility in Purple theme
mentatbot[bot] Oct 21, 2025
219365e
Add dynamic model list and API key support
mentatbot[bot] Oct 22, 2025
fe25abc
Add cache busting for regenerate functionality
mentatbot[bot] Oct 22, 2025
9993355
Add custom settings and image upload support
mentatbot[bot] Oct 22, 2025
a397143
Fix TypeScript lint error - replace any with proper type
mentatbot[bot] Oct 22, 2025
1351356
Add AI-powered follow-up question generator
mentatbot[bot] Oct 22, 2025
0a943bf
Fix TypeScript error - declare assistantMessage in correct scope
mentatbot[bot] Oct 22, 2025
c31a681
Fix regenerate button - messages now show correctly
mentatbot[bot] Oct 22, 2025
32a5030
Change follow-up question generator to use Mistral
mentatbot[bot] Oct 22, 2025
d42cba2
Add response mode selector (reason/rush/none)
mentatbot[bot] Oct 22, 2025
8cc0292
Add OpenWebUI-inspired theme
mentatbot[bot] Oct 22, 2025
96e1262
Add toast notifications system
mentatbot[bot] Oct 22, 2025
772f145
Add modern message bubbles to OpenWebUI theme
mentatbot[bot] Oct 22, 2025
f920bec
Integrate marked.js and add collapsible <think> tags
mentatbot[bot] Oct 22, 2025
6d5e32a
Replace emojis with modern icons and improve reasoning prompt
mentatbot[bot] Oct 22, 2025
0129654
Remove unused icon imports
mentatbot[bot] Oct 22, 2025
8292773
Fix thinking display: show "Thinking..." during streaming
mentatbot[bot] Oct 22, 2025
c1b2cbd
Replace remaining emojis with icons and text
mentatbot[bot] Oct 22, 2025
716778e
Remove unused icon imports
mentatbot[bot] Oct 22, 2025
a377404
Add collapsible follow-up questions
mentatbot[bot] Oct 22, 2025
567a631
Add code interpreter with HTML execution
mentatbot[bot] Oct 22, 2025
c2a34fc
Auto-regenerate bot response when user edits message
mentatbot[bot] Oct 22, 2025
590684c
Add model feedback and syntax highlighting
mentatbot[bot] Oct 22, 2025
15131bb
Add stop generation button
mentatbot[bot] Oct 22, 2025
785eb2e
Show chain-of-thought while generating (collapsed by default)
mentatbot[bot] Oct 22, 2025
91a2a87
Add personality templates
mentatbot[bot] Oct 22, 2025
3d52d1e
Add copy buttons to code blocks
mentatbot[bot] Oct 22, 2025
86597f2
Add smooth CSS transitions
mentatbot[bot] Oct 22, 2025
037798d
Update button styling to match theme
mentatbot[bot] Oct 22, 2025
bee5030
Add web search toggle (experimental foundation)
mentatbot[bot] Oct 22, 2025
b34b295
Exclude gemini-search from web search prompt
mentatbot[bot] Oct 22, 2025
4fc9dc6
Fix citation parsing in markdown
mentatbot[bot] Oct 23, 2025
cb63788
Add colorful theme-based icons
mentatbot[bot] Oct 23, 2025
8c1b526
Add AI image generator with prompt enhancement
mentatbot[bot] Oct 23, 2025
c0c08c0
Differentiate OpenWebUI theme from light theme
mentatbot[bot] Oct 23, 2025
72913d9
Use openai-fast model for image prompt enhancement
mentatbot[bot] Oct 23, 2025
5be8435
Add "Show Prompt" button to generated images
mentatbot[bot] Oct 23, 2025
283980c
Further differentiate OpenWebUI theme
mentatbot[bot] Oct 23, 2025
d752a02
Fix TypeScript error for fontFamily
mentatbot[bot] Oct 23, 2025
273309a
Add rounded island input area for OpenWebUI theme
mentatbot[bot] Oct 23, 2025
962b6f4
Add image-to-image generation support
mentatbot[bot] Oct 23, 2025
5095f8a
Improve reasoning prompts with actual vs fake reasoning
mentatbot[bot] Oct 23, 2025
6d733d3
Enhance reasoning prompt to require genuine brainstorming
mentatbot[bot] Oct 23, 2025
151d521
Hide thinking tags from enhanced prompt display
mentatbot[bot] Oct 23, 2025
000a8e9
Separate reasoning from prompt in image generator and hide mode selec…
mentatbot[bot] Oct 23, 2025
3ddc93e
Replace structured reasoning with unstructured, efficient reasoning
mentatbot[bot] Oct 23, 2025
2d61857
Fix reference image upload with better error handling
mentatbot[bot] Oct 23, 2025
59ceb24
Add Stock Ticker and Polls features
mentatbot[bot] Oct 23, 2025
740af74
Add reasoning to text-only image generation
mentatbot[bot] Oct 23, 2025
5dfd820
Add community model support (partial - UI and edit function)
mentatbot[bot] Oct 23, 2025
7ddb8b3
Complete community model support
mentatbot[bot] Oct 23, 2025
9c3c358
Add model editing and system prompt controls
mentatbot[bot] Oct 23, 2025
5c480e9
Add user accounts and image feed
mentatbot[bot] Oct 23, 2025
cdcd249
Fix ESLint error - remove unused error variable
mentatbot[bot] Oct 23, 2025
9bac24d
Add poll user tracking with anonymous voting
mentatbot[bot] Oct 23, 2025
7b25269
Replace emoji with Lucide icons
mentatbot[bot] Oct 23, 2025
034de9e
Add live image feature with animated frames
mentatbot[bot] Oct 23, 2025
b2977ce
Fix TypeScript error in image download
mentatbot[bot] Oct 23, 2025
6d54404
Add DuckDuckGo web search function (partial implementation)
mentatbot[bot] Oct 23, 2025
08c6190
Add eslint-disable for unused performWebSearch function
mentatbot[bot] Oct 23, 2025
4819f1f
Add @ts-ignore to suppress TypeScript unused variable error
mentatbot[bot] Oct 23, 2025
edc87c9
Use @ts-expect-error instead of @ts-ignore per ESLint rules
mentatbot[bot] Oct 23, 2025
0eb32d2
Implement web search with two-call approach
mentatbot[bot] Oct 23, 2025
fadd626
Add chat history with AI-generated titles
mentatbot[bot] Oct 24, 2025
22b0872
Fix JSX structure - properly replace clearChat button
mentatbot[bot] Oct 24, 2025
16c75a5
Fix extra closing div tag causing syntax error
mentatbot[bot] Oct 24, 2025
a7d2d9c
Remove unused clearChat function and add eslint-disable for WIP funct…
mentatbot[bot] Oct 24, 2025
142436b
Add eslint-disable for currentChatId (WIP)
mentatbot[bot] Oct 24, 2025
2fd4daf
Add @ts-expect-error for TypeScript unused variable warnings
mentatbot[bot] Oct 24, 2025
8715094
Add chat history modal UI
mentatbot[bot] Oct 24, 2025
6700633
Add "Set as Default" button for models
mentatbot[bot] Oct 24, 2025
85c6870
Enhance World Conquest with Turn-By-Turn mode and alliances
mentatbot[bot] Oct 24, 2025
55391ed
Enhance World Conquest with 8+ major features for Turn-By-Turn mode
mentatbot[bot] Oct 24, 2025
e68305f
Major fixes and funny nukes feature!
mentatbot[bot] Oct 24, 2025
0b4b84a
Add game over, nuke factory, conquest choices, and remove all alerts
mentatbot[bot] Oct 24, 2025
ad9b2a5
Fix nuke factory scaling and Real Nuke conquest
mentatbot[bot] Oct 24, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .mentat/preview/2-snake.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/bin/bash

# Start the snake game server
cd snake
npm install --silent
npm start
6 changes: 6 additions & 0 deletions .mentat/preview/3-worldconquest.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/bin/bash

# Start the World Conquest game server
cd worldconquest
npm install --silent
npm start
6 changes: 5 additions & 1 deletion client/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,12 @@
"preview": "vite preview"
},
"dependencies": {
"highlight.js": "^11.11.1",
"lucide-react": "^0.546.0",
"marked": "^16.4.1",
"react": "^19.0.0",
"react-dom": "^19.0.0"
"react-dom": "^19.0.0",
"react-router-dom": "^7.1.1"
},
"devDependencies": {
"@testing-library/jest-dom": "^6.6.3",
Expand Down
6 changes: 5 additions & 1 deletion client/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,11 @@ function App() {
['Backend', 'Node.js, Express, Jest'],
['Utilities', 'TypeScript, ESLint, Prettier'],
].map(([title, techs]) => (
<div className="section" style={{ textAlign: 'center' }} key={title}>
<div
className="section"
style={{ textAlign: 'center' }}
key={title}
>
<div
style={{
fontWeight: '500',
Expand Down
216 changes: 216 additions & 0 deletions client/src/Auth.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,216 @@
import { useState, useEffect } from 'react';

interface AuthProps {
onLogin: (username: string) => void;
}

export default function Auth({ onLogin }: AuthProps) {
const [isLogin, setIsLogin] = useState(true);
const [username, setUsername] = useState('');
const [password, setPassword] = useState('');
const [error, setError] = useState('');
const [loading, setLoading] = useState(false);

// Check if already logged in
useEffect(() => {
const savedUser = localStorage.getItem('mentat-user');
if (savedUser) {
onLogin(savedUser);
}
}, [onLogin]);

const handleSubmit = async (e: React.FormEvent) => {
e.preventDefault();
setError('');
setLoading(true);

try {
const endpoint = isLogin ? '/api/auth/login' : '/api/auth/signup';
const response = await fetch(endpoint, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ username, password }),
});

const data = await response.json();

if (!response.ok) {
throw new Error(data.error || 'Authentication failed');
}

localStorage.setItem('mentat-user', username);
onLogin(username);
} catch (err) {
setError(err instanceof Error ? err.message : 'An error occurred');
} finally {
setLoading(false);
}
};

return (
<div
style={{
minHeight: '100vh',
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
display: 'flex',
alignItems: 'center',
justifyContent: 'center',
padding: '20px',
fontFamily:
'-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif',
}}
>
<div
style={{
background: 'white',
borderRadius: '20px',
padding: '40px',
maxWidth: '400px',
width: '100%',
boxShadow: '0 20px 60px rgba(0,0,0,0.3)',
}}
>
<h1
style={{
fontSize: '32px',
fontWeight: 'bold',
color: '#1f2937',
marginBottom: '10px',
textAlign: 'center',
}}
>
{isLogin ? 'Welcome Back' : 'Create Account'}
</h1>
<p
style={{
fontSize: '14px',
color: '#6b7280',
marginBottom: '30px',
textAlign: 'center',
}}
>
{isLogin
? 'Sign in to share images and create models'
: 'Join to share your creations'}
</p>

<form onSubmit={handleSubmit}>
<div style={{ marginBottom: '20px' }}>
<label
style={{
display: 'block',
fontSize: '14px',
fontWeight: 'bold',
color: '#1f2937',
marginBottom: '8px',
}}
>
Username
</label>
<input
type="text"
value={username}
onChange={(e) => setUsername(e.target.value)}
required
style={{
width: '100%',
padding: '12px',
borderRadius: '10px',
border: '2px solid #e5e7eb',
fontSize: '16px',
}}
/>
</div>

<div style={{ marginBottom: '20px' }}>
<label
style={{
display: 'block',
fontSize: '14px',
fontWeight: 'bold',
color: '#1f2937',
marginBottom: '8px',
}}
>
Password
</label>
<input
type="password"
value={password}
onChange={(e) => setPassword(e.target.value)}
required
style={{
width: '100%',
padding: '12px',
borderRadius: '10px',
border: '2px solid #e5e7eb',
fontSize: '16px',
}}
/>
</div>

{error && (
<div
style={{
padding: '12px',
borderRadius: '10px',
background: '#fee2e2',
color: '#dc2626',
fontSize: '14px',
marginBottom: '20px',
}}
>
{error}
</div>
)}

<button
type="submit"
disabled={loading}
style={{
width: '100%',
padding: '15px',
borderRadius: '10px',
border: 'none',
background: 'linear-gradient(135deg, #667eea 0%, #764ba2 100%)',
color: 'white',
fontWeight: 'bold',
fontSize: '16px',
cursor: loading ? 'not-allowed' : 'pointer',
opacity: loading ? 0.7 : 1,
}}
>
{loading ? 'Please wait...' : isLogin ? 'Sign In' : 'Sign Up'}
</button>
</form>

<div
style={{
marginTop: '20px',
textAlign: 'center',
fontSize: '14px',
color: '#6b7280',
}}
>
{isLogin ? "Don't have an account? " : 'Already have an account? '}
<button
onClick={() => {
setIsLogin(!isLogin);
setError('');
}}
style={{
background: 'none',
border: 'none',
color: '#667eea',
fontWeight: 'bold',
cursor: 'pointer',
textDecoration: 'underline',
}}
>
{isLogin ? 'Sign Up' : 'Sign In'}
</button>
</div>
</div>
</div>
);
}
Loading