- This is a brainstorming section for Capstone project.
- Draw.io was used for Idea Board & Outline.
- Application Planning #1 includes more in-depth plans about the app design and functionality, and what technologies to be used for major features. Came up with a name for this app - Linkup Zone.
- Application Planning #2: Capstone Project Proposal follows a template provided by Epicodus. This proposal is included as a beginning part of MVP building.
- Any in-person discussion regarding the project will be uploaded separately from the README, in
.txt
format, for recording and future reference purpose.
Note
Click here to go to the Linkup Zone repository.
- This program is initially built for me and my family members who live in different countries with different time zones.
- When this program is ready, we can communicate with each other without having to calculate their current, past, or future times in different time zones when trying to reach out to each other.
- This program will also have an auto-send system that will have a message sent at a specific time of the receiver. For example, if I want a person residing in Korea to receive this message at 8AM their time, I can set their time for the receiving time then it'll automatically send the message at 3PM PST, without me having to calculate the time difference.
- End goal for this program is to successfully apply software knowledge learned in Epicodus and to learn how to use Swift, the iOS app development tool.
- Possible roadblocks: I have not developed an app that involves real-time messaging system or account set-up for users.
- If I were asked to begin working on this program now, I would start with coming up with dashboard design on Figma and see what can be done with HTML, CSS, JavaScript and webpack.
- The application has 4 different menu sections: Time Zones, Contacts, Chat, and Settings. Time Zones and Chat sections will be priotized.
- Technologies to be used:
- This project will be React-based.
- Messaging interfaces including displaying messages, input fields for typing messages, buttons, and other clock features will be built by creating components.
useState
and Redux will be used to keep track of the messages sent and received in each chat room.- JavaScript's
Date
object will be used for current timestamp for sender's and receiver's time zones. - Messages displayed will have information including sender's username, message content, and the timestamp.
- If time zone conversion is needed,
date-fns
will be used. - In order to display real-time messages (without requiring users to refresh the page), Firebase, or other database technology will be used.
- Jest will be used to test out accuracy of messaging features including message contents and timestamps.
- Presentation (project objective): discussion conducted with a peer about the application planning.
What will it do for users?
List the absolute minimum features the project requires to meet this purpose or goal.
Users should be able to do the following:
- create accounts, log in and out, and terminate their accounts.
- select their time zone upon signing up and change it when needed through account management.
- choose other time zones to view and have it added to their time zone list.
- add contacts (either by phone number, email address, or user name) to their contact list.
- view other users' time zones in the contact list.
- send each other messages that are displayed with time information: their time zone and the user's time zone when sent/received.
What tools, frameworks, libraries, APIs, modules and/or other resources (whatever is specific to your track, and your language) will you use to create this MVP?
List them all here. Be specific.
- Frontend Framework: React
- Styling: SCSS, Bootstrap, Flexbox, Grid, etc.
- State Management: To manage user sessions, contacts, and messaging, planning to utilize React's built-in state management using useState and useEffect hooks initially.
- Authentication: For user authentication (email/password, Google sign-in, etc), planning to use Firebase Authentication.
- Database: To store user data, contacts, and messages, planning to use Firebase Realtime Database integrated with React.
- Timezone Handling: Plannng to use libraries like moment-timezone or date-fns in JavaScript to handle conversions and display timestamps correctly based on the user's timezone.
- Testing: Planning to use Jest along with React Testing Library.
- Deployment: Netlify for frontend hosting.
If you finish developing the minimum viable product (MVP) with time to spare, what will you work on next? Be specific.
Users will be able to explore more in this chat, for example:
- advanced security features.
- check the real-time currency exchange rate between the currency of the user in the chat with you and the currency in the country you're in.
- view converted measurement standards (i.e. lbs to kg, mile to km, inches to cm, etc) upon receiving messages containing this information.
- block users in order to hide their own profiles to the blocked users and to not receive messages from them.
- send pictures / GIFs in the chat.
- view chat history by dates.
What additional tools, frameworks, libraries, APIs, or other resources will these additional features require?
-
Advanced Security Features:
- Encryption libraries like CryptoJS for encrypting messages.
- OAuth2 for secure authentication and authorization.
- HTTPS for secure communication between client and server.
-
Real-time Currency Exchange:
- Currency exchange rate API such as Open Exchange Rates, CurrencyLayer, or Fixer.io.
- JavaScript libraries like Axios or Fetch for making API requests.
-
Measurement Unit Conversion:
- convert-units for JavaScript.
-
User Blocking:
- Additional database fields to store block lists for each user.
- Server-side logic to handle blocked users and filter out messages.
-
Sending Pictures/GIFs:
- Firebase Storage for storing and serving images/GIFs.
- React-dropzone for handling file uploads.
-
View Chat History by Dates:
- Database design for storing chat messages with timestamps.
- Server-side logic to query and retrieve chat history based on selected dates.
- Pagination logic for handling large chat histories.
-
More...
- WebSocket integration for real-time communication for enhanced user experience.
- A library like moment.js for more sophisticated date and time manipulation.
This research plan is constructed ahead of the listed dates and is being updated after each day to log what has been completed with total hour information to show how many hours are spent. On May 6th, everything below will be the final log of research and planning conducted. Required total is 120 hours including development.
Friday, January 12th
total: 4 hours
Friday, February 16th
total: 4 hours
Thursday, April 4th
- Proposal building
- Youtube tutorials on creating messaging apps
total: 2 hours
Friday, April 5th
- Youtube tutorials on creating messaging apps
total: 2 hours
Saturday, April 6th
- Research on how to test using React Testing Library
- Research on moment-timezone library and how date-fns in JS are generally used: discovered Temporal API
total: 2 hours
Thursday, April 11th
- Research on Firebase, what it offers and what developers use it for
total: 2 hours
Tuesday, April 16th
- Applying for 3 internships (Cover letter, resume, portfolio polishing)
total: 4.5 hours
Monday, April 22nd
- Interview with PupPod (internship) and preparation
total: 2.5 hours
Wednesday, April 24th
- Interview with SignedPic (internship) and preparation
total: 1.5 hours
Thursday, April 25th
- Interview with Fill Marketing (internship) and preparation
total: 1 hour
Monday, April 22nd - Thursday, April 25th
- Capstone project repo was refreshed with
git push --force
command, which was to update the whole repo without usinggit pull
- a necessary action to rebuild the entire directory structure with React Native app setup due to the authentication setup error with Xcode app. Logging 4 days of work here separately since the commit history is gone.
total: 26.5 hours
Friday, April 26th
- Youtube tutorial on React Native with Firebase
- Cohort get-together
total: 8 hours
Saturday, April 27th
- Debugging with dependencies and react-native related errors with Xcode and Expo.
total: 4 hours
Thursday, May 2nd
- Prepping for capstone presentation
- Research & study on schedule-send feature (code could not be constructed by deadline, leaving the process as it is - MVP accomplished except for this)
total: 8 hours
not to log hours but to log issues being dealt with
April 22nd - April 24th
- Didn't properly install react-native app, causing issues with Google sign-in feature of Firebase.
- Coding was successful with UI for the log-in page and successfully rendered it using Expo.
April 25th
- Figured out how to successfully install react-native and starting from ios (the most complicated set-up especially for Google sign-up, among apps including Android and Web).
- Force-pushed the new react-native directory, all previous logs are gone.
- Spent the whole day trying to solve issues when building ios using Xcode and rendering UI on Simulator.
- Everything worked fine until there was an error with
GoogleService-Info.plist
file not correctly recognized in Xcode. Redownloaded from Firebase and added the file again: success. - Issue with
Podfile
. Addedpod
imports for Firebase Auth: success. - Xcode not allowing access to the Simulator after installing files using
pod
due to incompatibility with the M3 chip. Addedarm64
to the Simulator setting: success. - Xcode build not going through with an error message indicating that
ReactCommon
module was redefined. Spent 2 hours trying to find the "repeated" modules withinPods
directory: no solution found. - Found out that the module is being detected by Ruby, found out Ruby version was old (April 2022), installed a newer version for better compatibility.
pod
started having issues installing and updating changes to be applied to Xcode. Updating Ruby did not help.- Ended up creating a new
react-native
dir: Xcode & Simulator working as expected.
April 27th
- Error occurs when trying to build with Xcode, "No bundle URL present": not fixed but UI renders when using
react-native run-ios
- When running with
react-native
command, another unknown error occurs "Cannot read property 'viewManagersMetadata' of null" - Errors like "Unable to find a specification for ExpoModulesCore depended upon by ExpoLinearGraident" and "Unknown ruby interpreter version (do not know how to handle): >=2.6.10." are not solved.
- Decided to install the react-native afresh (again...)
Copyright © 2024 Hayeong Pyeon | MIT