Overview
The Peer-to-Peer App is designed to facilitate seamless peer-to-peer (P2P) data transfer over a Local Area Network (LAN), supporting both wired and wireless connections. The application will detect all devices running the software within the network, list them, and enable users to exchange files and text messages through a user-friendly, chat-like interface with drag-and-drop functionality.
User Interface & User Experience (UI/UX) Requirements
To ensure an intuitive and efficient user experience, I decided to use an already existing UI experience. The application will utilize a structured, web-based chat-style interface. The layout will be divided into three collapsible sections:
- Left Column: Displays a list of available devices on the network with the app installed and running. Users can select a device to initiate file transfer or communication.
- Middle Column: Shows the history of file transfers with the selected device, providing an easy reference for past interactions.
- Right Column: Displays detailed information about the selected device, including network status, device name, and other relevant metadata.
Feature Requirements
The application will include the following key features:
- Device Discovery: The app must automatically detect and list all active devices on the LAN that have the application installed and running.
- File and Text Transfer: Users must be able to send both text messages and files to selected devices within the network.
- Notification System: The application will provide real-time native notifications for:
- Incoming file transfers.
- Transfer completion alerts.
- Multiple File Transfers: The app should support sending multiple files simultaneously to a single or multiple devices.
- Transfer Progress Tracking: Users should be able to monitor the progress of ongoing file transfers, including estimated time remaining and transfer speed.
- Pause and Resume Transfers: The system must allow users to pause and resume file transfers at any time.
- Settings Page: The application will include a configurable settings page where users can:
- Enable/disable visual and audio notifications.
- Clear cache and temporary files.
- Configure additional preferences (to be determined).
- Automatic Retry Mechanism: If a transfer fails due to a network issue, the app should attempt to resume it automatically.
- Drag-and-Drop Support for Multiple Files/Folders: Enhance user experience by enabling drag-and-drop functionality for both single files and entire folders.
- File Previews: Provide a preview option for supported file types (e.g., images, text files) before sending or receiving them. (This is not a priority for now).
Technical Requirements
The technical foundation of the application will adhere to the following specifications:
- Peer-to-Peer Architecture: The file transfer process will utilize a P2P communication model, eliminating the need for a centralized server and ensuring efficient data transfer.
- Background Execution: The application should be capable of running in the background, allowing file transfers to continue without requiring the UI to remain open. Users will be notified of completed transfers through system notifications, sound alerts (if enabled), and an optional log of past transfers accessible within the app.
- Cross-Platform Compatibility: The application should be designed to function seamlessly across multiple operating systems (e.g., Windows, macOS, Linux) to maximize accessibility.
- Cloud Backup Option: Provide an optional feature to sync completed transfers with a cloud storage service. (This is not a priority for now).
This document provides a structured overview of the requirements and will serve as a foundation for the application’s design and development. It will be updated periodically to reflect any changes or enhancements made during the development process.
It’s been a really long time I had to work on a challenging project. So, in this post series, I will be building an app that will require me to write a lot of custom code to exercise my coding skills. It would also require basic knowledge of Networking.
Fun Fact: I have a Master’s Degree in Computer Networks, but I have not touched any kind of Networking Project in years!….
What will be built
I’ll be building a Multi-platform App that can Transfer files from your Device to any other Device connected to the same Network. It will be similar to Xender but will work strictly on devices connected to the same Local Area Network – LAN (No Infrared/Bluetooth).
I’ll also document as much of the journey as possible in this blog post series. If you would like to follow up with this series, feel free to subscribe to FINCOHOST.
I decided to document the entire development process for 3 primary reasons:
- To show upcoming/junior developers the process of building an App from scratch.
- It would make it a lot harder to abandon the project.
- Finally and probably more importantly, I would appreciate suggestions on alternative procedures, processes, or Algorithms.
Table of Contents
- Introduction
- Functional/Technical Requirements
- Choice of Technology to Use and Why
- App Logic and Planning
- Algorithms I Plan to Use
- Milestones/Tasks (Development Roadmap)
- Find a suitable UI template.
- Modify the UI to fit app requirements.
- Implement network scanning to enumerate devices.
- Develop an app detection system (to list only devices with the app installed and running).
- Implement TCP connection handling.
- Enable drag-and-drop file transfer.
- Add error handling and reporting.
- Perform final UI/UX refinements.
- Conduct extensive app testing and evaluation.
- Possible Issues I Foresee
- Current Limitations (To Improve in the Future)