feat: migrate to DragonflyDB and clean up environment configuration

- Replace Redis with DragonflyDB for better performance and memory efficiency
- Remove redundant environment variables (POSTGRES_*, ENCRYPTION_KEY, OAUTH_SERVICE_URL)
- Consolidate database configuration to use single DB_* variables
- Use JWT_SECRET for both JWT tokens and encryption
- Remove PORT variable redundancy, use BACKEND_PORT consistently
- Clean up docker-compose configurations for dev/prod consistency
- Add DragonflyDB configuration with optimized memory usage
- Remove redis.conf as it's no longer needed
- Update health checks to use Redis-compatible CLI for DragonflyDB
- Add missing VITE_API_URL to production frontend
- Fix GitHub Actions to use correct go.sum path
- Clean up development directories and unused files
This commit is contained in:
Tomas Dvorak
2026-03-05 23:51:34 +01:00
parent f3a835caa2
commit 954a1a1080
146 changed files with 5800 additions and 25846 deletions
+18 -3
View File
@@ -38,6 +38,7 @@ import {
IconUpload,
IconX,
} from '@tabler/icons-solidjs';
import { useHaptics } from '@/lib/haptics';
import './Messages.css';
interface MemberOption {
@@ -158,6 +159,7 @@ type TriStateFilter = 'any' | 'yes' | 'no';
type CallStatus = 'idle' | 'starting' | 'calling' | 'in_call' | 'error';
export const Messages = () => {
const haptics = useHaptics();
const [conversations, setConversations] = createSignal<ConversationListItem[]>([]);
const [messages, setMessages] = createSignal<Message[]>([]);
const [selectedConversationId, setSelectedConversationId] = createSignal<number | null>(null);
@@ -283,6 +285,7 @@ export const Messages = () => {
const openConversation = (conversationId: number) => {
setSelectedConversationId(conversationId);
setActiveScreen('conversation');
haptics.selection(); // Selection feedback for opening conversation
};
const closeConversation = () => {
@@ -1680,8 +1683,10 @@ export const Messages = () => {
setMentionOptions([]);
setMentionOpen(false);
setMentionQuery('');
haptics.success(); // Success feedback for sending message
} catch (error) {
toast.error('Failed to send message', error instanceof Error ? error.message : 'Unknown error');
haptics.error(); // Error feedback
} finally {
setUploadProgress(null);
}
@@ -1943,7 +1948,9 @@ export const Messages = () => {
onCleanup(() => clearInterval(wsWatcher));
return (
<div class={`messages-shell ${activeScreen() === 'conversation' ? 'messages-shell-conversation' : 'messages-shell-list'}`}>
<div class="mt-4 pb-32 max-w-7xl mx-auto">
<div class="bg-background rounded-lg border shadow-sm">
<div class={`messages-shell ${activeScreen() === 'conversation' ? 'messages-shell-conversation' : 'messages-shell-list'}`}>
<aside class="messages-sidebar">
<div class="messages-sidebar-header">
<div class="messages-title-row">
@@ -2021,7 +2028,10 @@ export const Messages = () => {
<section class="messages-main">
<header class="messages-main-header">
<div class="messages-header-main">
<Button size="sm" variant="ghost" class="messages-back-button" onClick={closeConversation}>
<Button size="sm" variant="ghost" class="messages-back-button" onClick={() => {
closeConversation();
haptics.navigation();
}}>
<IconChevronLeft class="size-4" />
</Button>
<div class="messages-header-meta">
@@ -2491,7 +2501,10 @@ export const Messages = () => {
</div>
<Button
onClick={() => sendMessage()}
onClick={() => {
sendMessage();
haptics.impact();
}}
disabled={
sendingMessage() ||
(!inputText().trim() && selectedFiles().length === 0 && attachedLibraryFiles().length === 0 && composerAiReferences().length === 0)
@@ -2976,6 +2989,8 @@ export const Messages = () => {
</div>
</Show>
</div>
</div>
</div>
);
};