Initial commit: JustAMessenger v0.1.0

Серверная часть (Go):
- WebSocket сервер с бинарным протоколом
- XChaCha20-Poly1305 шифрование
- zstd сжатие с дедупликацией (64KB чанки)
- SQLite хранилище (WAL режим)
- Управление гильдиями, каналами, ролями
- Федерация между серверами (ed25519)
- REST API + WebSocket endpoints

Клиентская часть (Flutter):
- Material Design 3 тёмная тема (Discord-like)
- WebSocket соединение с сервером
- Экраны: сплэш, логин, домашний, гильдии, чат
- Модели: пользователи, гильдии, каналы, сообщения, роли
- Сервисы: соединение, API, криптография, тема
- Виджеты: иконки гильдий, сообщения, ввод чата
- Web сборка (PWA)

Документация:
- AGENTS.md — контекст для ИИ ассистентов
- docs/protocol.md — спецификация протокола
This commit is contained in:
SashegDev
2026-06-06 22:39:14 +00:00
commit 096c4d0a2d
40 changed files with 5054 additions and 0 deletions
+74
View File
@@ -0,0 +1,74 @@
import 'package:flutter/material.dart';
class ThemeService {
static const Color primary = Color(0xFF5865F2);
static const Color success = Color(0xFF3BA55D);
static const Color danger = Color(0xFFED4245);
static const Color warning = Color(0xFFFAA81A);
static const Color surfacePrimary = Color(0xFF313338);
static const Color surfaceSecondary = Color(0xFF2B2D31);
static const Color surfaceTertiary = Color(0xFF1E1F22);
static const Color textPrimary = Color(0xFFF2F3F5);
static const Color textSecondary = Color(0xFFB5BAC1);
static const Color textMuted = Color(0xFF80848E);
static const Color backgroundPrimary = Color(0xFF313338);
static const Color backgroundSecondary = Color(0xFF2B2D31);
static const Color backgroundTertiary = Color(0xFF1E1F22);
static ThemeData get darkTheme {
return ThemeData(
brightness: Brightness.dark,
scaffoldBackgroundColor: const Color(0xFF313338),
primaryColor: primary,
colorScheme: const ColorScheme.dark(
primary: primary,
secondary: success,
surface: surfacePrimary,
error: danger,
),
appBarTheme: const AppBarTheme(
backgroundColor: surfaceSecondary,
elevation: 0,
centerTitle: true,
titleTextStyle: TextStyle(
color: textPrimary,
fontSize: 16,
fontWeight: FontWeight.w600,
),
iconTheme: IconThemeData(color: textPrimary),
),
bottomNavigationBarTheme: const BottomNavigationBarThemeData(
backgroundColor: surfaceSecondary,
selectedItemColor: primary,
unselectedItemColor: textMuted,
),
cardTheme: CardTheme(
color: surfaceSecondary,
elevation: 0,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(8),
),
),
inputDecorationTheme: InputDecorationTheme(
filled: true,
fillColor: surfaceTertiary,
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(8),
borderSide: BorderSide.none,
),
hintStyle: const TextStyle(color: textMuted),
contentPadding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
),
dividerTheme: const DividerThemeData(
color: Color(0xFF3F4147),
thickness: 1,
),
snackBarTheme: SnackBarThemeData(
backgroundColor: surfaceTertiary,
behavior: SnackBarBehavior.floating,
shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8)),
),
useMaterial3: true,
);
}
}