| Home | Post | Profile |
|---|---|---|
Demo.video.mp4
- As it is heavy in video content
- and have a benchmark for standards
The application has 3 screens
1. Home feed
- A list of video appear on feed.
- Each video should show the video content, the username of the uploader, and the number of likes.
- Ability to refresh feed.
2. Post details screen
- On tapping a post on feed, screen is redirected to Post screen with additional details of the post like user image and like button.
3. Profile screen
- On tapping username or user image, profile screen is displayed with all the created posts associated with the user
-
Home Screen (Feed):
Done - Display a feed of videos from various users.
Done - Each video should show the video content, the username of the uploader, and the number of likes.
Done - Implement a "pull-to-refresh" feature to reload the feed.
Done - Pagination is implemented. Pagination calls goes out as soon as the scroll is near the end of list.
Done - A clever mechanism to auto play video on scroll.
Done - Loops the video on playing till the end.
-
Post Page:
Done - Display the video content, the user's profile details (username, profile picture, etc.), and a like button.
Done - Added support to show posts related or tending posts in the platform
Done - Tapping on username or user image, profile screen is displayed with all the created posts associated with the user
-
Profile Page:
Done - Show the user's profile information, including their username and profile picture. - Display a grid or list of posts that the user has created.
- App navigation has been implemented using coordinator pattern.
- It avoids the tight coupling between view controllers.
- Enables a centralized app navigation.
- Helpful in Deep-linking the app to different screens.
- Used MVVM pattern to keep the code clean and readable.
- API data is hosted on GitHub repo.
- Network calls are made using URLSession.
- A base network layer is written to make the API calls with the help of Generics.
- Simply conform the new service to the `ServiceType`, the wrapper takes care of the rest.
- Helpful in scaling and maintaining the app in future and by other developers.
- implemented both in completion handler way and async/away way.
- AVPlayer initialization before the video cell is rendered on the screens.
- Player caching can be implemented for prefetching the player item for extra smooth UX and reduce hitch time.
- Play duration progress can be saved to continue the progress when viewed again according to the business logic.
- Addition of Texture/AsyncDisplayKit/IGListKit for rendering collection UI can hugely enhance the performance and scalability.
- Addition of a toggle to enable/disable auto play.
- Mute/unmute button.
- Long press/release to pause/play video.
- Forced the interface to use dark mode, it provides rich and decent look for a video heavy content app.