Spaces:
Runtime error
Runtime error
| # FireTech Messager Server - Final Report and Design Document | |
| Course deadline context: Week 13 (10 April) | |
| Repository (public): https://github.com/dhurghamCreation/FireTech-Messager-Server | |
| Live deployment target: https://firetech-messager-server.onrender.com | |
| --- | |
| ## Abstract | |
| FireTech Messager Server is a real-time web chat application inspired by modern community chat platforms. The project provides authenticated user access, channel-based communication, direct messaging, profile editing, friend requests, a shop/inventory module, and responsive browser-based UI interactions. The backend uses Node.js, Express, Socket.IO, and Sequelize with PostgreSQL for persistence. The frontend is implemented with HTML, CSS, and vanilla JavaScript. | |
| The main engineering objectives were: | |
| - Deliver low-latency real-time messaging across clients. | |
| - Keep account and message data persistent across restarts. | |
| - Support deployment on cloud infrastructure and reproducible local/server execution. | |
| - Provide a clean user interface across desktop/mobile form factors. | |
| The delivered system is reproducible on Ubuntu servers, Raspberry Pi devices, and Render cloud deployment (with PostgreSQL configured). | |
| --- | |
| ## Methodology | |
| ### 1) Development Method | |
| An iterative implementation approach was used: | |
| 1. Build baseline chat server/client. | |
| 2. Add authentication and user profile management. | |
| 3. Add persistent storage and schema design. | |
| 4. Add social and gamification features (friends/shop/inventory). | |
| 5. Improve deployment, HTTPS, and reliability. | |
| 6. Validate with functional and non-functional checks. | |
| ### 2) Block Diagram | |
| ```text | |
| [ Browser Client (index.html + client.js) ] | |
| | HTTPS + REST + Socket.IO | |
| v | |
| [ Node.js + Express + Socket.IO (server.js) ] | |
| | Sequelize ORM | |
| v | |
| [ PostgreSQL Database ] | |
| Optional cloud runtime: | |
| [ Render Web Service ] ----> [ Render/Managed PostgreSQL ] | |
| ``` | |
| ### 3) Functional Requirements (FRD) | |
| Implemented FRs: | |
| 1. User registration/login with token-based authentication. | |
| 2. Real-time channel messaging with Socket.IO. | |
| 3. Persistent user/account/message data in PostgreSQL. | |
| 4. Profile read/update APIs. | |
| 5. Friend requests and friend list management. | |
| 6. Shop listing, purchase flow, and inventory tracking. | |
| 7. Media-enabled messaging support fields and upload handling. | |
| 8. Deployment support for cloud hosting (Render) and local/server installs. | |
| Partially met FRs: | |
| 1. Voice/video calling support is scaffolded but full production-grade voice rooms are not fully complete end-to-end. | |
| 2. Some advanced moderation/admin controls are limited. | |
| Not fully met FRs: | |
| 1. Advanced role-permission hierarchy per channel/server. | |
| 2. Full message reaction/threading/search system. | |
| ### 4) Non-Functional Requirements (NFR) | |
| Implemented NFRs: | |
| 1. Security: password hashing (bcrypt), token auth (JWT), environment variable secrets. | |
| 2. Availability: startup retry for transient PostgreSQL connectivity failures. | |
| 3. Performance: event-based real-time architecture with Socket.IO. | |
| 4. Portability: runs on Windows, Ubuntu, Raspberry Pi, and Render cloud. | |
| 5. Maintainability: modular endpoint/event structure and project documentation. | |
| Partially met NFRs: | |
| 1. Scalability: current design is suitable for small-medium loads; horizontal scaling strategy is not fully implemented. | |
| 2. Observability: logs exist, but centralized monitoring/alerting is limited. | |
| Not fully met NFRs: | |
| 1. Automated integration/performance test suite coverage. | |
| 2. Full CI/CD quality gates and load testing pipeline. | |
| --- | |
| ## Implementation | |
| ### 1) Tools and Technology Stack | |
| Backend: | |
| - Node.js | |
| - Express.js | |
| - Socket.IO | |
| - Sequelize ORM | |
| - PostgreSQL | |
| - bcryptjs, jsonwebtoken, multer, cors, dotenv | |
| Frontend: | |
| - HTML5 | |
| - CSS3 | |
| - Vanilla JavaScript | |
| - Font Awesome icons | |
| DevOps/Deployment: | |
| - GitHub (version control/public repository) | |
| - Render (web service deployment) | |
| - render.yaml infrastructure blueprint | |
| ### 2) Core Implementation Details | |
| Authentication and security: | |
| - Registration/login endpoints. | |
| - Password hashing with bcrypt. | |
| - JWT token generation and middleware verification. | |
| Persistence and data model: | |
| - Sequelize models include User, Channel, Message, ShopItem, Inventory, FriendRequest, DirectMessage. | |
| - PostgreSQL connection via DATABASE_URL. | |
| - Production check blocks startup when DATABASE_URL is missing. | |
| - Retry mechanism handles transient DB startup errors. | |
| Real-time system: | |
| - Socket.IO for online presence, room membership, message delivery, and typing/member updates. | |
| Deployment readiness: | |
| - Dynamic port support via process.env.PORT. | |
| - Render blueprint includes health check and DB binding options. | |
| - Linux reproducibility steps added in README. | |
| ### 3) Reproducibility Evidence (Ubuntu / Raspberry Pi) | |
| From README reproducibility section: | |
| 1. Install apt packages (Node dependencies + PostgreSQL). | |
| 2. Clone public repo. | |
| 3. Create PostgreSQL user/database. | |
| 4. Configure .env with DATABASE_URL/JWT_SECRET. | |
| 5. npm install + npm start. | |
| 6. Validate `/api/version` endpoint. | |
| This workflow supports both Ubuntu server and Raspberry Pi OS (Debian-based). | |
| ### 4) Front Layout Figures/Screenshots (Required) | |
| Insert these screenshots in the final Word report: | |
| 1. Figure 1 - Login/Register page. | |
| 2. Figure 2 - Main chat interface with channel list. | |
| 3. Figure 3 - Friends modal. | |
| 4. Figure 4 - Shop modal and inventory. | |
| 5. Figure 5 - Mobile responsive view. | |
| 6. Figure 6 - Render deployment live status/logs. | |
| Suggested caption style: "Figure X. <Short description>" | |
| --- | |
| ## Team Participation and Management | |
| Use this section for team-shared report part. | |
| ### 1) Team Roles and Participation | |
| Replace with your actual team details: | |
| | Member | Role | Main Contributions | | |
| |---|---|---| | |
| | Member A | Backend Lead | API endpoints, DB schema, deployment fixes | | |
| | Member B | Frontend Lead | UI screens, responsive layout, client logic | | |
| | Member C | QA/Docs | Testing, README/report, screenshot preparation | | |
| ### 2) Project Management Approach | |
| - Used a requirement-driven approach with FR/NFR checkpoints. | |
| - Split work into backend, frontend, deployment, and validation tasks. | |
| - Conducted periodic merge/review updates through GitHub commits. | |
| ### 3) Meetings and Progress Tracking (last two weeks) | |
| Document your exact tools and cadence (example): | |
| - Communication: WhatsApp/Discord/Telegram. | |
| - Task tracking: GitHub Issues + shared checklist. | |
| - Meeting schedule: 3 short sync meetings per week + daily chat updates. | |
| - Progress evidence: commit timeline and feature completion log. | |
| ### 4) FRDs Not Met | |
| - Full production-grade voice/video calls with robust TURN enforcement and complete UX controls. | |
| - Advanced threaded conversations and reactions. | |
| ### 5) NFRs Not Met | |
| - Comprehensive automated test coverage for all API/socket flows. | |
| - Full observability stack (metrics dashboards, alerting, tracing). | |
| ### 6) How the Application Was Improved | |
| - Added production-safe DATABASE_URL validation. | |
| - Added DB startup retry logic for transient network resets. | |
| - Added Render deployment blueprint improvements. | |
| - Added Ubuntu/Raspberry Pi reproducibility instructions. | |
| - Added in-code GenAI usage disclosure comments. | |
| --- | |
| ## Reflection (Individual - must differ per member) | |
| Important: this section must be written separately by each team member in their own words. | |
| ### Template for Each Member | |
| 1. Learning experience and self-learning: | |
| - What technical concepts were learned (real-time events, auth, DB design, deployment). | |
| - What was learned independently and how. | |
| 2. How GenAI was used: | |
| - Mention specific coding tasks where GenAI helped (scaffolding, debugging, refactoring, deployment fixes). | |
| - Mention that report writing itself was done by the student, not GenAI, per course policy. | |
| 3. How GenAI helped self-learning: | |
| - Faster explanation of unfamiliar errors. | |
| - Alternative implementation options. | |
| - Clarifying architecture trade-offs. | |
| 4. Where GenAI was not helpful: | |
| - Cases where generated code was outdated/inaccurate for this codebase. | |
| - Required manual verification from official docs, peers, or Stack Overflow. | |
| 5. Previous programming experience: | |
| - Describe prior exposure to JS/Node/web apps/databases. | |
| 6. Why tools were chosen: | |
| - Node/Express/Socket.IO for rapid real-time web app development. | |
| - PostgreSQL + Sequelize for structured persistence. | |
| - Render for simple deployment workflow. | |
| - Mention whether choices came from self-learning, online docs, or GenAI suggestions. | |
| --- | |
| ## GenAI Compliance Statement | |
| GenAI was used for selected coding support tasks only. Disclosures were added directly in code comments in: | |
| - server.js | |
| - client.js | |
| - index.html | |
| Each disclosure includes prompt summaries used to generate or improve those sections. | |
| No claim is made that GenAI authored final report reflection content; each team member must provide an individual reflection. | |
| --- | |
| ## Submission Checklist | |
| 1. Public GitHub repository link included. | |
| 2. Reproducible Ubuntu/Raspberry Pi setup instructions included. | |
| 3. Design and implementation details included. | |
| 4. FR/NFR met and unmet points included. | |
| 5. Team management/process section included. | |
| 6. Individual reflection section prepared separately per member. | |
| 7. Front layout screenshots inserted with captions. | |
| 8. GenAI usage disclosures added in code comments. | |
| --- | |
| ## Appendix A - Key Runtime Variables | |
| - PORT | |
| - HOST | |
| - NODE_ENV | |
| - DATABASE_URL | |
| - JWT_SECRET | |
| - CORS_ORIGIN | |
| - TURN_URLS (optional) | |
| - TURN_USERNAME (optional) | |
| - TURN_CREDENTIAL (optional) | |
| ## Appendix B - Key Verification Endpoints | |
| - GET /api/version | |
| - POST /api/register | |
| - POST /api/login | |
| - GET /api/profile/:userId | |
| - GET /api/rtc-config | |