9.8 KiB
TeleSec - Secure Distributed Communication Application
TeleSec is a Spanish Progressive Web Application (PWA) built with vanilla JavaScript, HTML, and CSS that provides secure group communication using a local-first PouchDB datastore with optional CouchDB replication for syncing. The application allows users to join encrypted communication groups using group codes and secret keys.
ALWAYS reference these instructions first and fallback to search or bash commands only when you encounter unexpected information that does not match the info here.
Working Effectively
Build and Deploy Process
- Build the application (FASTEST BUILD EVER - 0.036 seconds):
cd /home/runner/work/TeleSec/TeleSecpython3 build.py- NEVER CANCEL: Build completes in under 0.1 seconds. No timeout needed.
- The build script copies files from
assets/todist/and processes template variables insrc/files.
Serving the Application
-
Python HTTP Server (Recommended for development):
cd /home/runner/work/TeleSec/TeleSec/distpython3 -m http.server 8000- Access at:
http://localhost:8000
-
Node.js HTTP Server (Alternative with CORS support):
cd /home/runner/work/TeleSec/TeleSec/distnpx http-server . --port 8001 --cors- NEVER CANCEL: First run takes ~14 seconds to download http-server package. Set timeout to 30+ seconds.
- Access at:
http://localhost:8001
Development Environment Requirements
- Python 3.x (for build script) - Version 3.12.3+ confirmed working
- Node.js and npm (optional, for alternative serving) - Version 20.19.4+ confirmed working
- Web browser (for testing the PWA functionality)
Validation and Testing
Mandatory Validation Steps
-
Build Validation:
- Run
python3 build.pyand verify it completes in under 1 second - Verify
dist/directory is created with all assets and processed files - Check that template variables (%%PREFETCH%%, %%VERSIONCO%%, %%ASSETSJSON%%) are replaced
- Run
-
Application Functionality Test:
- Start web server:
python3 -m http.server 8000indist/directory - Navigate to
http://localhost:8000in browser - CRITICAL LOGIN TEST: Enter any group code (e.g., "TEST") and secret key (e.g., "SECRET123")
- Click "Iniciar sesión" button
- VERIFY NETWORK CONNECTIVITY: Confirm the header shows connected nodes (e.g., "TeleSec - TEST - (8 nodos)")
- SUCCESS INDICATORS:
- Application loads without errors
- Login form accepts credentials
- Distributed network connects (node count > 0)
- No JavaScript console errors except expected WebSocket connection failures
- Start web server:
-
PWA Features Test:
- Verify Service Worker registration in browser console
- Check manifest.json loads correctly
- Confirm offline caching functionality
Error Handling Validation
- Build Script Errors: Python syntax errors will cause build to fail with clear error messages
- Network Connectivity: Some WebSocket connections to gun-manhattan.herokuapp.com may fail - this is expected
- Browser Compatibility: Application works in modern browsers supporting Service Workers
Repository Structure
Key Files and Directories
/home/runner/work/TeleSec/TeleSec/
├── build.py # Main build script - processes template variables
├── index.html # Build error fallback (should never be served)
├── README.md # Basic repository information (minimal)
├── LICENSE # Project license
├── CNAME # GitHub Pages configuration
├── .gitignore # Excludes dist/, radata/, node_modules/
├── src/ # Source files with template variables
│ ├── index.html # Main application HTML with %%PREFETCH%% variables
│ ├── app_logic.js # Core application logic and authentication
│ ├── app_modules.js # Application modules and utilities
│ ├── config.js # Configuration and CouchDB setup
│ ├── db.js # PouchDB wrapper and replication
│ ├── pwa.js # Progressive Web App functionality
│ ├── sw.js # Service Worker with cache configuration
│ └── page/ # Individual page modules
│ ├── login.js # Login functionality
│ ├── index.js # Main dashboard
│ ├── materiales.js # Materials management
│ ├── personas.js # People management
│ ├── supercafe.js # SuperCafé module
│ ├── comedor.js # Dining hall module
│ ├── importar.js # Data import functionality
│ ├── exportar.js # Data export functionality
│ ├── resumen_diario.js # Daily summary
│ └── notificaciones.js # Notifications
└── assets/ # Static assets copied to dist/
├── manifest.json # PWA manifest
├── *.png, *.jpg # Icons and images
├── static/ # JavaScript libraries and CSS
│ ├── euskaditech-css/ # CSS framework
│ └── ico/ # Application icons
└── page/ # Page-specific assets (empty placeholder)
Build Process Details
The build.py script performs these operations:
- Clean: Removes existing
dist/directory (if it exists) - Copy Assets: Copies all files from
assets/todist/ - Process Templates: Processes files from
src/and replaces:%%PREFETCH%%- Generates link prefetch tags for all assets%%VERSIONCO%%- Inserts version code "2025-08-04_1"%%ASSETSJSON%%- Inserts JSON array of all asset files
- Output: Creates complete deployable application in
dist/
Application Architecture
Technology Stack
- Frontend: Vanilla JavaScript, HTML5, CSS3
- Data Layer: PouchDB (local-first) with optional CouchDB replication
- Networking: WebRTC for peer-to-peer connections (where applicable)
- Authentication: Group codes + secret keys (converted to uppercase)
- Storage: Browser LocalStorage + PouchDB local datastore
- PWA Features: Service Worker, Web App Manifest
Remote Sync (Optional)
The application can optionally replicate to a remote CouchDB server for cloud backup and multi-device syncing. Configure the CouchDB server, database name, and credentials in the login/setup form in the application.
Application Modules
- Login/Authentication: Group-based access with secret keys
- Materials Management: Track and manage materials/supplies
- People Management: Manage group members
- SuperCafé: Café/beverage ordering system
- Dining Hall: Restaurant/meal management
- Import/Export: Data backup and restoration
- Daily Summary: Reports and analytics
- Notifications: Alert system
Common Development Tasks
Making Changes to the Application
- ALWAYS edit files in
src/directory, neverdist/ - Run
python3 build.pyto rebuild after changes - Refresh browser or restart web server to see changes
- Test authentication flow and network connectivity after any changes
Adding New Features
- Create new JavaScript files in
src/page/for new modules - Add script references in
src/index.html - Update assets if new static files are needed
- Rebuild and test complete user workflows
Debugging Common Issues
- Login Issues: Check browser console for replication/auth errors and DB initialization logs
- Network Connectivity: Verify remote CouchDB server is reachable and replication is active
- Build Issues: Check Python syntax in build.py
- Performance: Monitor browser DevTools Network tab for asset loading
Validation Scenarios
Complete User Workflow Test
After making any changes, ALWAYS test this complete scenario:
-
Build and Serve:
cd /home/runner/work/TeleSec/TeleSec python3 build.py cd dist python3 -m http.server 8000 -
Login Test:
- Navigate to
http://localhost:8000 - Enter group code: "TEST"
- Enter secret key: "SECRET123"
- Click "Iniciar sesión"
- Verify header shows: "TeleSec - TEST" and that the login is accepted
- Navigate to
-
Network Connectivity Test:
- Confirm green connection indicator appears (bottom right)
- Check browser console shows PouchDB replication logs when a remote is configured
- Verify heartbeat/last-seen docs are being updated in the local DB
- PWA Functionality Test:
- Check Service Worker registers successfully
- Verify offline caching works (Network tab → Offline)
- Test manifest.json loads correctly
Quick Reference Commands
Essential Operations
# Build application (< 0.1 seconds)
python3 build.py
# Serve with Python (most compatible)
cd dist && python3 -m http.server 8000
# Serve with Node.js (advanced features)
cd dist && npx http-server . --port 8001 --cors
# Clean rebuild
rm -rf dist && python3 build.py
# Check build output
ls -la dist/
File Structure Verification
# Verify all source files exist
find src/ -name "*.js" -o -name "*.html" | sort
# Check template variable processing
grep -r "%%.*%%" dist/ || echo "All template variables processed correctly"
# Verify assets copied correctly
diff -r assets/ dist/ --exclude="*.js" --exclude="*.html" || echo "Some differences expected due to processing"
CRITICAL REMINDERS:
- NEVER CANCEL: Builds complete in under 0.1 seconds - no timeout needed
- ALWAYS test login and network connectivity after changes
- Edit source files in
src/directory only, neverdist/ - Test with real user credentials to verify distributed networking
- Monitor browser console for connection status and errors