Spaces:
Runtime error
Code Refactoring Documentation
Overview
The codebase has been refactored to improve maintainability and enable easier team collaboration by splitting monolithic files into smaller, focused modules.
Structure Changes
Frontend JavaScript (Before → After)
Before:
templates/index.html- ~900 lines (HTML + CSS + JavaScript all in one file)
After:
static/js/
├── main.js - Core utilities, navigation, data loading (~110 lines)
├── chat.js - Triage/Inquiry chat functionality (~110 lines)
├── crew.js - Crew management, CRUD operations (~490 lines)
├── pharmacy.js - Medicine inventory management (~190 lines)
├── settings.js - Configuration management (~10 lines)
└── vessel.js - Vessel information (~25 lines)
Benefits
Parallel Development: Multiple developers can work on different features without merge conflicts
- Developer A: Works on
crew.js(crew page features) - Developer B: Works on
pharmacy.js(inventory features)
- Developer A: Works on
Code Organization: Each file has a single responsibility
- Easier to locate and fix bugs
- Clearer code structure
- Better separation of concerns
Maintainability: Smaller files are easier to understand and modify
- Average file size: ~150 lines (vs 900+ lines before)
- Focused functionality per module
Reusability: Shared utilities in
main.jscan be used across modules
Module Descriptions
main.js
- Toggle functions for collapsible sections
- Tab navigation (
showTab) - Central data loading (
loadData) - Tools and history display functions
- Window initialization
chat.js
- Chat state management (isPrivate, lastPrompt, isProcessing)
- UI update functions (
updateUI,togglePriv) - Chat execution (
runChat,repeatLast) - Enter key handler for message submission
crew.js
- Crew display and sorting logic
- CRUD operations (add, auto-save, delete)
- Emergency contact management
- Document upload/delete (passport photos)
- Import/export functionality
- Crew list CSV generation
pharmacy.js
- Medicine inventory display
- Add/save/delete medicine operations
- CSV import/export functionality
- Category and controlled substance handling
settings.js
- Configuration save functionality
- Settings synchronization with backend
vessel.js
- Vessel information save/load operations
File Loading Order
The modules are loaded in this specific order in index.html:
<script src="/static/js/chat.js"></script>
<script src="/static/js/crew.js"></script>
<script src="/static/js/pharmacy.js"></script>
<script src="/static/js/settings.js"></script>
<script src="/static/js/vessel.js"></script>
<script src="/static/js/main.js"></script> <!-- Last - initializes the app -->
Important: main.js must load last because it contains window.onload which calls functions from other modules.
Development Workflow
Working on Crew Features
- Edit
static/js/crew.js - Refresh browser to test
- No need to touch other files
Working on Pharmacy Features
- Edit
static/js/pharmacy.js - Refresh browser to test
- Independent of crew.js changes
Adding New Features
- Create new module in
static/js/(e.g.,reports.js) - Add script tag to
index.htmlbeforemain.js - Implement functionality
- Call from
loadData()in main.js if needed
Testing
After refactoring, test these key workflows:
- Chat/Triage functionality
- Add/edit/delete crew members
- Auto-save in crew details
- Document upload (passport photos)
- Add/edit/delete medicines
- CSV import/export (crew and pharmacy)
- Settings save
- Vessel information save
- Tab navigation
- History display
Backward Compatibility
The refactoring maintains 100% backward compatibility:
- Same API endpoints
- Same data structures
- Same UI/UX
- Same functionality
Only the code organization changed, not the behavior.
Future Improvements
Potential next steps for further refactoring:
Phase 2 (Optional):
- Extract CSS from inline styles to
static/css/style.css - Split HTML into template partials
Phase 3 (Optional - Backend):
app.py →
├── config.py - Configuration & defaults
├── database.py - Data operations
├── auth.py - Authentication
├── models.py - AI model loading
└── routes.py - API endpoints
Rollback Plan
If issues arise, restore from backup:
# The original file had all JavaScript inline
# Can be reconstructed by concatenating modules
Questions?
Contact the development team or refer to individual module files for implementation details.