Orbital Note
Una aplicación multiplataforma de toma de notas sincronizadas en la nube, con autenticación segura mediante Google OAuth y sincronización automática con Google Drive.
¿Qué es Orbital Note?
Orbital Note es una aplicación moderna de notas que te permite:
- Capturar ideas rápidamente con un editor de texto enriquecido
- Sincronizar automáticamente tus notas en Google Drive
- Acceder desde cualquier dispositivo (Android y Web)
- Organizar tus notas con etiquetas y referencias cruzadas
- Disfrutar de una interfaz moderna con soporte dark/light mode
Características Principales
Autenticación Segura
Google OAuth 2.0 para login seguro, sin almacenar contraseñas. Tokens seguros con expiración automática.
Sincronización en la Nube
Tus notas se sincronizan automáticamente a Google Drive. Accede desde cualquier dispositivo.
Editor Enriquecido
TipTap en web y TenTap en móvil con formatting, listas, bloques, imágenes y más.
Multiplataforma
Android nativo y Web. Misma experiencia consistente en todos los dispositivos.
Arquitectura del Sistema
Orbital Note sigue una arquitectura modular basada en características con claras separación de responsabilidades.
Capas de la Arquitectura
Capa de Routing
Expo Router - Navegación basada en archivos
Capa de Presentación
Componentes React Native, Hooks personalizados
Capa de Estado
React Context (User, Theme) - Gestión de estado global
Capa de Lógica de Negocio
Servicios: Auth, Drive Sync, Token Management
Capa de Datos
AsyncStorage + Google Drive API - Persistencia
Estructura de Directorios
orbital-note/
├── app/ # Páginas de Expo Router
│ ├── _layout.tsx # Layout root
│ ├── (auth)/login.tsx # Pantalla de login
│ └── (app)/ # Stack principal
│
├── components/ # Componentes reutilizables
│ ├── TextEditor.tsx
│ ├── FloatingNavBar.tsx
│ └── modal/
│
├── context/ # React Context
│ └── UserContext.tsx
│
├── services/ # Lógica de negocio
│ ├── auth/useAuth.ts
│ ├── tokenStorage.ts
│ └── sincronizarWithDrive.ts
│
├── hooks/ # Custom Hooks
│ ├── use-theme.tsx
│ ├── use-color-scheme.ts
│ └── use-auth.ts
│
└── types/ # TypeScript types
└── types.ts
Flujo de Datos
1. Flujo de Autenticación
2. Flujo de Notas
Stack Tecnológico
Runtime & Framework
- Expo 54+ - Framework mobile multiplataforma
- React Native - Componentes nativos
- TypeScript - Type-safe development
Frontend & UI
- Expo Router - Navegación file-based
- React Context - State management
- @expo/vector-icons - Iconografía
Editors
- TipTap - Editor enriquecido (Web)
- TenTap - Editor móvil (Android)
Backend & Cloud
- Google OAuth 2.0 - Autenticación
- Google Drive API v3 - Sincronización
- AsyncStorage - Almacenamiento local
Instalación y Setup
Requisitos
- Node.js 20.x
- npm 10.x o yarn
- Expo CLI 54+
- Para Android: Android Studio o SDK
Pasos de Instalación
# 1. Clonar repositorio
git clone https://github.com/tu-usuario/orbital-note.git
cd orbital-note
# 2. Instalar dependencias
npm install
# 3. Copiar y configurar variables de entorno
cp .env.example .env.local
# Edita .env.local con tus credenciales de Google
# 4. Inicia el servidor de desarrollo
npm run start
# 5. Para Web
npm run web
# 6. Para Android
npm run android
Variables de Entorno
Crea un archivo .env.local con:
EXPO_PUBLIC_GOOGLE_WEB_CLIENT_ID=your-web-client-id
EXPO_PUBLIC_GOOGLE_ANDROID_CLIENT_ID=your-android-client-id
Configuración Google OAuth
- Ve a Google Cloud Console
- Crea un nuevo proyecto
- Habilita Google Drive API
- Crea credenciales OAuth 2.0:
- Para Web: Autoriza
http://localhost:8081/login - Para Android: Autoriza con tu package name
- Para Web: Autoriza
- Descarga las credenciales y configura en
.env.local
Contribuir al Proyecto
Cómo Empezar
# 1. Fork el repositorio
# 2. Crea una rama feature
git checkout -b feature/tu-feature
# 3. Haz commits con mensajes descriptivos
git commit -m "feat: agregar nueva funcionalidad"
# 4. Push a tu fork
git push origin feature/tu-feature
# 5. Abre un Pull Request
# Describe tus cambios claramente
Estándares de Código
- TypeScript obligatorio - Sin any types
- Linting - Ejecuta
npm run lint - Commits - Usa conventional commits (feat:, fix:, etc.)
- JSDoc - Documenta funciones públicas
Convenciones de Nombres
- Componentes:
PascalCase(UserButton.tsx) - Funciones:
camelCase(getUserData) - Archivos web:
kebab-case(user-service.ts) - Constantes:
UPPER_SNAKE_CASE(MAX_TIMEOUT)
Seguridad
Medidas de Seguridad Implementadas
- OAuth 2.0 - No almacenamos contraseñas
- Token Encryption - Tokens guardados con encryption nativa
- Google Drive Scopes Limitados - Solo permisos necesarios
- Input Validation - DOMPurify para sanitizar HTML
- HTTPS Enforced - En producción
Reportar Vulnerabilidades
Si encuentras una vulnerabilidad de seguridad, no abras un issue público. En su lugar:
Envía un email a vxeque@gmail.com con detalles de la vulnerabilidad.
Buenas Prácticas
- Nunca commites secretos o credenciales
- Usa variables de entorno para configuración sensible
- Revisa dependencias regularmente
- Mantén las librerías actualizadas
Soporte & Recursos
¿Necesitas Ayuda?
🐛 Reportar Bugs
💬 Preguntas
✨ Sugerencias
📚 Docs
Lee esta documentación completa