Esta guía cubre el flujo de desarrollo diario para contribuir a Bedrud.
Estructura del repositorio
bedrud/
├── server/ # Backend en Go
├── apps/
│ ├── web/ # Frontend React (TanStack Start)
│ ├── android/ # Aplicación Android
│ ├── ios/ # Aplicación iOS
│ └── desktop/ # Aplicación de escritorio (Rust + Slint)
├── agents/ # Agentes bot en Python
├── packages/ # Tipos TypeScript compartidos
├── tools/cli/ # CLI de despliegue
├── docs/ # Documentación (MkDocs)
├── Cargo.toml # Raíz del workspace Rust
├── Makefile # Orquestación de builds
└── Dockerfile # Build del contenedor
Requisitos previos
| Herramienta | Necesario para |
|---|---|
| Go 1.24+ | Servidor |
| Bun | Frontend web |
| LiveKit Server | Servidor de medios local |
| Android Studio + JDK 17 | Aplicación Android |
| Xcode | Aplicación iOS |
| Rust (estable) | Aplicación de escritorio |
| Python 3.10+ | Agentes bot |
| FFmpeg | Agentes de radio y video |
Configuración inicial
git clone https://github.com/bedrud-ir/bedrud.git
cd bedrud
make initDesarrollo full-stack
Para ejecutar toda la pila localmente:
make devEsto inicia LiveKit, el servidor Go y el servidor de desarrollo de React simultáneamente. Presiona Ctrl+C para detener todos los procesos.
Ejecutar servicios individualmente
make dev-webSe ejecuta en http://localhost:3000 con reemplazo de módulos en caliente (HMR).
make dev-serverSe ejecuta en http://localhost:8090. Reinicia manualmente después de cambios en el código Go.
make dev-livekitSe ejecuta en http://localhost:7880 con credenciales de desarrollo.
Desarrollo del servidor
El punto de entrada del servidor Go es server/cmd/server/main.go.
Añadir un endpoint de API
- Define el handler en
server/internal/handlers/ - Añade métodos de repositorio en
server/internal/repository/si se necesitan nuevas consultas a la base de datos - Registra la ruta en la configuración del servidor (generalmente en
main.goo un archivo de rutas) - Añade middleware si el endpoint requiere autenticación o verificación de administrador
Cambios en la base de datos
Añade o modifica estructuras de modelo GORM en server/internal/models/. GORM migra automáticamente al iniciar.
Documentación Swagger
Las anotaciones de documentación de la API usan el formato swaggo. Después de cambios, regenera:
cd server
swag init -g cmd/server/main.goConsulta Arquitectura del servidor para ver la estructura completa de directorios y el diseño por capas.
Desarrollo del frontend web
El frontend está en apps/web/ y usa React 19 con TanStack Start.
Añadir una página
Crea un nuevo archivo en src/routes/ siguiendo la convención de enrutamiento basado en archivos de TanStack Router (por ejemplo, src/routes/settings.tsx). Exporta un Route creado con createFileRoute.
Añadir una función de cliente de API
- Añade la función en
src/lib/api.tsusandoauthFetch - Define los tipos TypeScript en línea o en un archivo de tipos compartidos
- Usa la función desde tu componente de ruta, típicamente a través de un hook
useQueryde TanStack Query
Verificación de tipos
cd apps/web
bun run check # ejecuta lint de Biome + verificación de tipos TypeScriptConsulta Arquitectura del frontend web para ver la estructura completa y patrones del frontend.
Desarrollo de Android
make dev-android # Abre en Android StudioPatrones clave
- Todas las pantallas son funciones Composable
- Las dependencias provienen de
InstanceManagermediantekoinInject() - Usa
collectAsState().value ?: returnpara valores anulables deStateFlow - La navegación se maneja en
MainActivity.kt
Compilación
make build-android-debug # APK de depuración
make build-android # APK de producción (necesita keystore)
make release-android # Compilar + instalar en el dispositivoConsulta Arquitectura de la aplicación Android para ver la arquitectura detallada de la aplicación móvil.
Desarrollo de iOS
make dev-ios # Abre en XcodePatrones clave
- Las vistas son structs de SwiftUI
- Las dependencias provienen de
InstanceManagermediante@EnvironmentObject - Usa optional binding para propiedades published anulables
- La navegación usa la pila de navegación nativa de SwiftUI
Generación del proyecto
Si modificas project.yml, regenera el proyecto de Xcode:
cd apps/ios
xcodegen generateCompilación
make build-ios # Archivo de producción
make build-ios-sim # Build para simulador
make export-ios # Exportar IPAConsulta Arquitectura de la aplicación iOS para ver la arquitectura detallada de la aplicación móvil.
Desarrollo de escritorio
La aplicación de escritorio está en apps/desktop/ y es un crate de Rust en el workspace.
Requisitos previos (Linux)
sudo apt-get install -y \
libfontconfig1-dev libxkbcommon-dev libxkbcommon-x11-dev \
libwayland-dev libgles2-mesa-dev libegl1-mesa-dev \
libdbus-1-dev libsecret-1-dev \
libasound2-devWindows requiere Visual Studio Build Tools con el workload de C++ (MSVC).
Ejecución
make dev-desktop # cargo run -p bedrud-desktopCompilación
make build-desktop # binario optimizado para la plataforma actualPatrones clave
- Toda la UI se define en archivos
.slintenapps/desktop/ui/; se compila a Rust en tiempo de build porbuild.rs apps/desktop/src/ui/bridge.rses el único lugar donde los callbacks de Slint se conectan con la lógica de Rust - mantén la lógica de negocio fuera de los archivos.slint- Usa
Weak<AppWindow>al lanzar tareas en segundo plano que necesitan actualizar la UI
Consulta Arquitectura de la aplicación de escritorio para ver la arquitectura detallada de la aplicación de escritorio.
Desarrollo de agentes bot
Los agentes están en agents/ con un directorio por agente.
cd agents/music_agent
pip install -r requirements.txt
python agent.py "http://localhost:8090/m/test-room"Todos los agentes necesitan un servidor Bedrud en ejecución para autenticarse.
CI/CD
GitHub Actions se ejecuta en cada push a main y en pull requests:
| Tarea | Lo que verifica |
|---|---|
| Servidor | go vet, build, tests |
| Web | Verificación de tipos, build |
| Android | Lint, tests unitarios, APK de depuración |
| iOS | Build + test (simulador, con cobertura) |
| Escritorio | cargo build, cargo test |
Los builds de producción se disparan por tags de versión (v*).
Estilo de código
- Go: Formato estándar
gofmt - TypeScript/React: Biome (configurado en
apps/web/biome.json) - Kotlin: Formato predeterminado de Android Studio
- Swift: Formato predeterminado de Xcode
Tests
cd server
go test ./...cd apps/web
bun run checkcd apps/android
./gradlew testmake build-ios-sim # Compila y ejecuta testsConsulta también
- Referencia del Makefile - todos los comandos de build y desarrollo
- Resumen de arquitectura - cómo se integran los componentes