Apoyo Anónimo es una plataforma web robusta y segura diseñada para ofrecer un espacio confidencial donde los usuarios pueden unirse a grupos de chat anónimos para compartir experiencias y recibir apoyo emocional. Está pensada para tratar temas sensibles como ansiedad, duelo, adicciones, depresión y más, priorizando siempre el anonimato, la seguridad y la usabilidad.
gin-gonicgorilla/websocketdatabase/sql + go-sql-driver/mysql)godotenvgin-contrib/corsgin-contrib/gzipVitereact-router-domreact-helmet-asyncapoyo-anonimo/ ├── backend/ │ ├── config/ │ ├── handlers/ │ ├── models/ │ ├── routes/ │ ├── main.go │ └── .env.example └── frontend/ ├── public/ ├── src/ │ ├── assets/ │ ├── components/ │ ├── services/ │ ├── App.jsx │ ├── main.jsx │ └── index.css └── vite.config.js
```sql CREATE DATABASE IF NOT EXISTS apoyo_anonimo_db;
USE apoyo_anonimo_db;
CREATE TABLE groups ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255) NOT NULL, description TEXT, topic VARCHAR(100) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
CREATE TABLE messages ( id INT AUTO_INCREMENT PRIMARY KEY, group_id INT NOT NULL, username VARCHAR(255) NOT NULL, content TEXT NOT NULL, timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, is_moderated BOOLEAN DEFAULT FALSE, FOREIGN KEY (group_id) REFERENCES groups(id) ON DELETE CASCADE );
CREATE INDEX idx_groups_topic ON groups (topic); CREATE INDEX idx_groups_name ON groups (name); CREATE INDEX idx_messages_group_id ON messages (group_id); CREATE INDEX idx_messages_timestamp ON messages (timestamp);
Inserta datos de ejemplo en las tablas groups y messages.
cd backend go mod tidy cp .env.example .env
go run main.go
cd frontend npm install npm run dev
Accede en tu navegador a: http://localhost:5173
🛡️ Seguridad y Buenas Prácticas
🔒 SQL seguro con prepared statements (?) 🔐 Variables sensibles gestionadas con .env 🧼 Validaciones robustas (frontend y backend) ⚙️ CORS restrictivo por origen 💬 Moderación básica por palabras clave
♿ Accesibilidad (A11y)
HTML5 semántico Atributos aria-* relevantes Navegación por teclado asegurada Contraste de colores apto para todas las personas
📈 Optimización y Rendimiento
Gzip backend (gin-contrib/gzip) Índices en DB para búsquedas rápidas WebSocket en lugar de polling Concurrencia eficiente en Go con goroutines y sync.Mutex
🤝 Contribuciones
¡Las contribuciones son bienvenidas! Abre un Issue con sugerencias o errores Envía un Pull Request siguiendo la guía de estilo Propón mejoras de UI/UX, seguridad, nuevas funciones o refactorizaciones
❤️ Agradecimientos A todas las personas que buscan apoyo o lo ofrecen, desde el anonimato y el respeto mutuo. Este proyecto es para ustedes.