diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md new file mode 100644 index 0000000..e2fc78e --- /dev/null +++ b/.github/CHANGELOG.md @@ -0,0 +1,19 @@ +# Changelog + +## v1.0.0 + +### Added or Changed +- Added this changelog file :D +- Initial Release of Post.e + +### Removed +- N/A + +## v1.1.0 + +### Added or Changed +- Updated Post.e designs +- Updated README and repo structure to conform to the [Personal Repository Guidelines (PRG)](https://github.com/scottgriv/PRG-Personal-Repository-Guidelines) system. + +### Removed +- VERSION file \ No newline at end of file diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..c5e36e1 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +@scottgriv \ No newline at end of file diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..fe2ae2d --- /dev/null +++ b/.github/CODE_OF_CONDUCT.md @@ -0,0 +1,70 @@ +# Code of Conduct - Post.e + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to make participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, or to ban +temporarily or permanently any contributor for other behaviors that they deem +inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at . +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant](https://contributor-covenant.org/), version +[1.4](https://www.contributor-covenant.org/version/1/4/code-of-conduct/code_of_conduct.md) and +[2.0](https://www.contributor-covenant.org/version/2/0/code_of_conduct/code_of_conduct.md), +and was generated by [contributing-gen](https://github.com/bttger/contributing-gen). \ No newline at end of file diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md new file mode 100644 index 0000000..ef4d658 --- /dev/null +++ b/.github/CONTRIBUTING.md @@ -0,0 +1,159 @@ + +# Contributing to Post.e + +First off, thanks for taking the time to contribute! ❀️ + +All types of contributions are encouraged and valued. See the [Table of Contents](#table-of-contents) for different ways to help and details about how this project handles them. Please make sure to read the relevant section before making your contribution. It will make it a lot easier for us maintainers and smooth out the experience for all involved. The community looks forward to your contributions. πŸŽ‰ + +> And if you like the project, but just don't have time to contribute, that's fine. There are other easy ways to support the project and show your appreciation, which we would also be very happy about: +> - Star the project +> - Tweet about it +> - Refer this project in your project's readme +> - Mention the project at local meetups and tell your friends/colleagues + + +## Table of Contents + +- [Code of Conduct](#code-of-conduct) +- [I Have a Question](#i-have-a-question) +- [I Want To Contribute](#i-want-to-contribute) + - [Reporting Bugs](#reporting-bugs) + - [Suggesting Enhancements](#suggesting-enhancements) + - [Your First Code Contribution](#your-first-code-contribution) + - [Improving The Documentation](#improving-the-documentation) +- [Styleguides](#styleguides) + - [Commit Messages](#commit-messages) +- [Join The Project Team](#join-the-project-team) + + +## Code of Conduct + +This project and everyone participating in it is governed by the +[Post.e Code of Conduct](CODE_OF_CONDUCT.md). +By participating, you are expected to uphold this code. Please report unacceptable behavior +to . + + +## I Have a Question + +> If you want to ask a question, we assume that you have read the available [Documentation](). + +Before you ask a question, it is best to search for existing [Issues](https://github.com/scottgriv/Post.e/issues) that might help you. In case you have found a suitable issue and still need clarification, you can write your question in this issue. It is also advisable to search the internet for answers first. + +If you then still feel the need to ask a question and need clarification, we recommend the following: + +- Open an [Issue](https://github.com/scottgriv/Post.e/issues/new). +- Provide as much context as you can about what you're running into. +- Provide project and platform versions (nodejs, npm, etc), depending on what seems relevant. + +We will then take care of the issue as soon as possible. + + + +## I Want To Contribute + +> ### Legal Notice +> When contributing to this project, you must agree that you have authored 100% of the content, that you have the necessary rights to the content and that the content you contribute may be provided under the project license. + +### Reporting Bugs + + +#### Before Submitting a Bug Report + +A good bug report shouldn't leave others needing to chase you up for more information. Therefore, we ask you to investigate carefully, collect information and describe the issue in detail in your report. Please complete the following steps in advance to help us fix any potential bug as fast as possible. + +- Make sure that you are using the latest version. +- Determine if your bug is really a bug and not an error on your side e.g. using incompatible environment components/versions (Make sure that you have read the [documentation](). If you are looking for support, you might want to check [this section](#i-have-a-question)). +- To see if other users have experienced (and potentially already solved) the same issue you are having, check if there is not already a bug report existing for your bug or error in the [bug tracker](https://github.com/scottgriv/Post.e/issues?q=label%3Abug). +- Also make sure to search the internet (including Stack Overflow) to see if users outside of the GitHub community have discussed the issue. +- Collect information about the bug: + - Stack trace (Traceback) + - OS, Platform and Version (Windows, Linux, macOS, x86, ARM) + - Version of the interpreter, compiler, SDK, runtime environment, package manager, depending on what seems relevant. + - Possibly your input and the output + - Can you reliably reproduce the issue? And can you also reproduce it with older versions? + + +#### How Do I Submit a Good Bug Report? + +> You must never report security related issues, vulnerabilities or bugs including sensitive information to the issue tracker, or elsewhere in public. Instead sensitive bugs must be sent by email to . + + +We use GitHub issues to track bugs and errors. If you run into an issue with the project: + +- Open an [Issue](https://github.com/scottgriv/Post.e/issues/new). (Since we can't be sure at this point whether it is a bug or not, we ask you not to talk about a bug yet and not to label the issue.) +- Explain the behavior you would expect and the actual behavior. +- Please provide as much context as possible and describe the *reproduction steps* that someone else can follow to recreate the issue on their own. This usually includes your code. For good bug reports you should isolate the problem and create a reduced test case. +- Provide the information you collected in the previous section. + +Once it's filed: + +- The project team will label the issue accordingly. +- A team member will try to reproduce the issue with your provided steps. If there are no reproduction steps or no obvious way to reproduce the issue, the team will ask you for those steps and mark the issue as `needs-repro`. Bugs with the `needs-repro` tag will not be addressed until they are reproduced. +- If the team is able to reproduce the issue, it will be marked `needs-fix`, as well as possibly other tags (such as `critical`), and the issue will be left to be [implemented by someone](#your-first-code-contribution). + + + + +### Suggesting Enhancements + +This section guides you through submitting an enhancement suggestion for Post.e, **including completely new features and minor improvements to existing functionality**. Following these guidelines will help maintainers and the community to understand your suggestion and find related suggestions. + + +#### Before Submitting an Enhancement + +- Make sure that you are using the latest version. +- Read the [documentation]() carefully and find out if the functionality is already covered, maybe by an individual configuration. +- Perform a [search](https://github.com/scottgriv/Post.e/issues) to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one. +- Find out whether your idea fits with the scope and aims of the project. It's up to you to make a strong case to convince the project's developers of the merits of this feature. Keep in mind that we want features that will be useful to the majority of our users and not just a small subset. If you're just targeting a minority of users, consider writing an add-on/plugin library. + + +#### How Do I Submit a Good Enhancement Suggestion? + +Enhancement suggestions are tracked as [GitHub issues](https://github.com/scottgriv/Post.e/issues). + +- Use a **clear and descriptive title** for the issue to identify the suggestion. +- Provide a **step-by-step description of the suggested enhancement** in as many details as possible. +- **Describe the current behavior** and **explain which behavior you expected to see instead** and why. At this point you can also tell which alternatives do not work for you. +- You may want to **include screenshots and animated GIFs** which help you demonstrate the steps or point out the part which the suggestion is related to. You can use [this tool](https://www.cockos.com/licecap/) to record GIFs on macOS and Windows, and [this tool](https://github.com/colinkeenan/silentcast) or [this tool](https://github.com/GNOME/byzanz) on Linux. +- **Explain why this enhancement would be useful** to most Post.e users. You may also want to point out the other projects that solved it better and which could serve as inspiration. + + + +### Your First Code Contribution + + +### Improving The Documentation + + +## Styleguides +### Commit Messages + + +## Join The Project Team + + + +## Attribution +This guide is based on the **contributing-gen**. [Make your own](https://github.com/bttger/contributing-gen)! diff --git a/.github/CREDITS b/.github/CREDITS new file mode 100644 index 0000000..1a1b937 --- /dev/null +++ b/.github/CREDITS @@ -0,0 +1,17 @@ +This file is a list of people who have contributed to the Post.e +project. If you have contributed a pull request or made some other contribution to +Post.e, please submit a pull request with this file with yourself added to it, thanks! + +The list is sorted by surname and formatted to allow easy grepping and +beautification by scripts. + +The fields are: +(N) name +(E) email +(W) website +(D) description + +N: Scott Grivner +E: scott.grivner@gmail.com +W: https://www.scottgrivner.dev +D: Original Creator and Developer of Post.e \ No newline at end of file diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..24d8b80 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,14 @@ +# Docs: https://docs.github.com/en/free-pro-team@latest/github/administering-a-repository/displaying-a-sponsor-button-in-your-repository + +# These are supported funding model platforms +github: [scottgriv] +custom: ["https://www.buymeacoffee.com/scottgriv"] +# patreon: # Replace with a single Patreon username +# open_collective: # Replace with a single Open Collective username +# ko_fi: # Replace with a single Ko-fi username +# tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel +# community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +# liberapay: # Replace with a single Liberapay username +# issuehunt: # Replace with a single IssueHunt username +# otechie: # Replace with a single Otechie username +# custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..dd84ea7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,38 @@ +--- +name: Bug report +about: Create a report to help us improve +title: '' +labels: '' +assignees: '' + +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Desktop (please complete the following information):** + - OS: [e.g. iOS] + - Browser [e.g. chrome, safari] + - Version [e.g. 22] + +**Smartphone (please complete the following information):** + - Device: [e.g. iPhone6] + - OS: [e.g. iOS8.1] + - Browser [e.g. stock browser, safari] + - Version [e.g. 22] + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..bbcbbe7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,20 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: '' +labels: '' +assignees: '' + +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..fdb3249 --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,19 @@ +## PR Purpose + +The context for this pull request or the [Conventional Commits type](https://github.com/commitizen/conventional-commit-types/blob/master/index.json) that best matches the changes. + +## Changes Summary + +Summarize what you've changed and **why**. Make sure to mention if this is a **breaking change.** + +## Screenshots + +Add screenshots of the feature in action or a video/GIF walkthrough of the UX. Remove if not applicable (e.g. refactoring). + +## Areas of interest + +Edge cases, workarounds, hacks, security concerns, and other areas of the code you'd like the reviewer to pay extra attention to or give feedback on. + +--- + +[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org/) \ No newline at end of file diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 0000000..10c3fc5 --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,11 @@ +# Security Policy + +## Reporting a Vulnerability + +If you discover a security issue, please report it by sending an +email to scott.grivner@gmail.com + +This will allow us to assess the risk, and make a fix available before we add a +bug report to the GitHub repository. + +Thanks for helping make this project safe for everyone. \ No newline at end of file diff --git a/.github/SUPPORT.md b/.github/SUPPORT.md new file mode 100644 index 0000000..6f439ca --- /dev/null +++ b/.github/SUPPORT.md @@ -0,0 +1,63 @@ +# Support + +This article explains where to get help with this project. +Please read through the following guidelines. + +> πŸ‘‰ **Note**: before participating in our community, please read our +> [Code of Conduct][coc]. +> By interacting with this repository, organization, or community you agree to +> abide by its terms. + +## Asking quality questions + +Questions can go to [GitHub Discussions][chat]. + +Help us help you! +Spend time framing questions and add links and resources. +Spending the extra time up front can help save everyone time in the long run. +Here are some tips: + +* [Talk to a Duck][rubberduck]! +* Don’t fall for the [XY problem][xy] +* Search to find out if a similar question has been asked +* Try to define what you need help with: + * Is there something in particular you want to do? + * What problem are you encountering and what steps have you taken to try + and fix it? + * Is there a concept you don’t understand? +* Provide sample code, such as a [CodeSandbox][cs] or video, if possible +* Screenshots can help, but if there’s important text such as code or error + messages in them, please also provide those as text +* The more time you put into asking your question, the better we can help you + +## How to file issues and get help + +This project uses GitHub Issues to track bugs and feature requests. +Please search the existing issues before filing new issues to avoid duplicates. +For new issues, file your bug or feature request as a new Issue. + +## Contributions + +See [`contributing.md`][contributing] on how to contribute. + +## License + +[CC-BY-4.0][license] Β© [@wooorm][author] + + + +[license]: https://creativecommons.org/licenses/by/4.0/ + +[author]: https://github.com/remarkjs/.github/blob/main/support.md + +[coc]: https://github.com/remarkjs/.github/blob/main/code-of-conduct.md + +[rubberduck]: https://rubberduckdebugging.com + +[xy]: https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem/66378#66378 + +[chat]: https://github.com/scottgriv/Post.e/discussions + +[cs]: https://codesandbox.io + +[contributing]: contributing.md \ No newline at end of file diff --git a/.gitignore b/.gitignore index 189e2eb..f15765b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,60 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# Compiled output +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# Python +.env +venv/ + +# Java +*.class +*.war +*.ear +*.jar + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* +*.code-workspace + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store? +*.DS_Store +Thumbs.db +Icon? **/.DS_Store Icon? Post.e.code-workspace /server/languages/rs/target /server/languages/rs/Cargo.lock -*.xcuserstate +*.xcuserstate \ No newline at end of file diff --git a/README.md b/README.md index d52a7d3..da24d9e 100644 --- a/README.md +++ b/README.md @@ -3,62 +3,65 @@ ![App Logo](./docs/images/banner_large.png)

- - Swift Badge - - - iOS Badge - - - Apple Watch Badge - + Swift Badge + iOS Badge + Apple Watch Badge
- - GitHub Badge - - - Email Badge - - - BuyMeACoffee Badge - - - - Gold PRG Badge + GitHub Badge + Email Badge + BuyMeACoffee Badge +
+ Gold

-------- -# Post.e +--------------- + +

Post.e

**Post.e** is a fully functional, multi-programming language, "how-to-build" social media application. -* Create a user profile, follow other users, and post messages similar to Twitter. -* Share content with other users by attaching photos, videos, documents, and files to your Posts. -* Written in Swift & Objective-C for the front-end and multiple back-end languages such as PHP, Python, Node.js, Ruby, Go, Java, Rust, and Perl. -* Includes a back-end MySQL database, JSON interchange, and multiple out of the box APIs. -* Designed to teach people how to build their own social media app in mind. +- Create a user profile, follow other users, and post messages similar to Twitter. +- Share content with other users by attaching photos, videos, documents, and files to your Posts. +- Written in Swift & Objective-C for the front-end and multiple back-end languages such as PHP, Python, Node.js, Ruby, Go, Java, Rust, and Perl. +- Includes a back-end MySQL database, JSON interchange, and multiple out of the box APIs. +- Designed to teach people how to build their own social media app in mind. - + -------- +--------------- ## Table of Contents - [Background Story](#background-story) - [Definitions](#definitions) -- [Limitations](#limitations) +- [Getting Started](#getting-started) +- [What's Inside?](#whats-inside) - [Features](#features) + - [Login & Register Screens](#login--register-screens) + - [Configure Programming Language Screens](#configure-programming-language-screens) + - [Feed Screen](#feed-screen) + - [Interaction Screen](#interaction-screen) + - [Profile Screen](#profile-screen) + - [Reply Screen](#reply-screen) + - [Post Screen](#post-screen) + - [Settings Screen](#settings-screen) + - [watchOS Support](#watchos-support) + - [Language Support](#language-support) + - [Dark Mode Support](#dark-mode-support) + - [API Support](#api-support) + - [Interchange](#interchange) + - [Database](#database) +- [Limitations](#limitations) - [Programming Languages](#programming-languages) -- [What's Inside?](#whats-inside) -- [Getting Started](#getting-started) -- [Future Plans](#future-plans) -- [Contribution](#contribution) +- [Closing](#closing) +- [What's Next?](#whats-next) - [Project](#project) +- [Contributing](#contributing) +- [Resources](#resources) - [License](#license) -- [Credit](#credit) +- [Credits](#credits) -------- ## Background Story @@ -72,253 +75,17 @@ I had two goals when I originally started this project: - I'm constantly learning new programming languages and frameworks. I wanted to build a "one stop shop" mobile application as a sandbox for all of these languages. - I started building the application back-end with ``PHP`` because it's easy for others to understand. In the future, I'm going to try to utilize languages like ``Go`` and ``Node.js``. The multithreading capabilities of these languages to significantly speed up server request & response processing makes them an obvious choice to work on next. - I've realized now, by open-sourcing it, there's an opportunity for others to learn and contribute to it as well. - -*I know this is a lengthy README, but I want to explain every detail of the application for teaching/learning purposes. If this repo gains traction, I will add a lot of these details into github-pages/documentation or separate markdown file to remove clutter in the README. I appreciate it if you make it to the end!* ## Definitions: -> A **Post** is any message posted to **Post.e** which contains text and/or attachments that may contain photos, videos, or a wide variety of file types. View the `extension` table in the database to view the supported file types. Tap the Post button to post the message to your profile. - -> **Posts** are the de facto form of communication in **Post.e** (similar to a [Tweet](https://help.twitter.com/en/resources/new-user-faq)). - -> **Posts** were inspired by the popular office supply product [Post-It Notes](https://en.wikipedia.org/wiki/Post-it_Note) due to their ability to easily communicate messages and attach them to surfaces. Virtual **Posts** in **Post.e** offer a similar functionality. - -## Limitations: -**Posts** are limited to: -- Post character limit: There is no hard limit for the number of characters, however, the database type and length is `VARCHAR(250)` and it cannot be `NULL`. -- Attachment limit per Post: 9. -- Max file size per Attachment: 1 gigabyte (GB) or 1,073,741,824 bytes. - -Currently, the `Post.swift` file contains the static values mentioned above. In the future, I'd like to sync this to the `parameter` table in the database for a more dynamic approach, including a max character limit for Posts and an alert message if the Post limit has been exceeded. - -## Features: ---- - - -- **Login & Register Screens:** - - Single Sign-On (SSO) capabilities by using a combination of Swift's [UserDefaults](https://developer.apple.com/documentation/foundation/userdefaults) class and server side session handling. Login once then automatically login in the future without signing in (unless, of course, you log out of the app which kills the active session in the `session` table). - - Username & Password validations. - - Checks for minimum password length, min/max user name length, missing or empty fields, matching passwords, and invalid characters using `REGEX` patterns. - - Registering a User will create a new folder in the `server/uploads` folder using the new `Prof_ID` column value, which is an `AUTO_INCREMENT` column in the database (Posts work in this same fashion). - - A unique `ID` is also generated using the `encoder.[language]` file using `Base 64 Encoding` to produce a unique external facing `ID`, stored in the database under the `Prof_Key` or `Post_Key` columns, that can be used to share Posts or Profiles in the future. ---- - - -- **Configure Programming Language Screens:**
- - Pick the server side language you want **Post.e** to use. This will route the requests to the toggled language folder. - - See [Programming Languages](#programming-languages) below for more details on this screen. ---- - - -- **Feed Screen:**
- - Sort Posts by *Newest*: - - *Newest* consists of the most *recent* posts using the `Post_Created` date column in descending order. - - `WHERE Post_Created DESC`. - - Sort Posts by the *Home* experience: - - *Home* uses a number of columns to create a fun user feed experience using the below `WHERE` clause: - - `WHERE Post_Love_Count DESC, Post_Pin_Count DESC, Post_Reply_Count, Post_Created DESC`. - - Click on the Profile name to segue to the user Profile screen. ---- - - -- **Interaction Screen:**
- - View New Users on the App. - - Click on the Profile name to segue to the user Profile screen. - - Follow or Unfollow users directly from this screen. ---- - - -- **Profile Screen:**
- - Interactive Follower, Following, and Post count buttons that will segue to the Interaction screen when clicked. - - The Post count is not a button, its a Post total (including Replies) counter only. - - Profile picture display. - - Click the Profile tab icon to scroll to the top. - - Pull refresh to get the most recent Posts. - - Post button to create new Posts. - - Sort Posts on the Profile feed by: Newest, Oldest, Loved, Pinned, and Replied counts in descending order. - - Edit Profile - - Change your Profile picture (take a photo or select one from your library). - - Remove your Profile picture - setting it to the default placeholder image. - - Update your Profile Username (it must be unique) and Profile Name. - - Delete your Profile. - - Scroll to the bottom of the Table, Posts will load in 25 Post chunks. If the Post # > 25, a request will be sent to the server and an activity indicator will be shown in the Table footer as it fetches the next chunk of 25. - - Within the Post Cell: - - Preview & Save Attachments. - - Pin or Unpin a Post. - - Pins will be displayed on your Profile. - - You cannot Pin a Reply or Posts that you created. - - Only Posts displayed on Profiles or your Feed can be Pinned. - - Reply to a Post. - - Love or Unlove a Post. - - Delete your own Posts. - - Click on the Profile name to segue to the user Profile screen. ---- - - -- **Reply Screen:**
- - Reply to a Post on a dedicated screen with the Post you're replying to in the header. - - Reply to a Reply (there is no limit on the Reply depth). - - Sort Posts on the Reply feed by: Newest, Oldest, Loved, and Replied counts in descending order. ---- - - -- **Post Screen:**
- - Type up a Post. - - Cancel the Post by clicking the Cancel button or the visible Profile Screen. - - Add Photos/Videos from your Camera or Photo Library. - - Add Attachments (**Post.e** comes with a demo directory with a few files ready to select) - see screenshot above. - - Submit the Post to the server. - - Haptic Feedback and Audible Post Alert after a Post has been successfully sent to the server. ---- - - -- **Settings:**
- - About section to view the current **Post.e** version number (derived from the `info.plist` value of `CFBundleShortVersionString`). - - Open Source Libraries used to create **Post.e** and their related LICENSE files. - - Language Selection displays your current Device Language, available Languages supported by **Post.e** as well as a link to your Settings screen to change your device language (this will cause the application to restart as per Apple). - - Directory Settings displays your current folder directory used to select files for Post Attachments. Toggle the "Use Sample Directory" switch to use the sample files provided with **Post.e** by default or not. - - Change your Password - - Logout of the Application (which will also kill the session on the server). ---- - - -- **watchOS Support:**
- - Post to your Profile using audio to text or by typing in the text using the watch keyboard. - - Haptic Feedback and Audible Post Alert after a Post has been successfully sent to the server. ---- - - -- **Language Support:**
- - English and Russian language support using [Localization](https://developer.apple.com/localization/). Query the `language` table in the database to view the supported languages. ---- - - -- **Dark Mode Support:**
- - Easily toggle Designs between Light and Dark Mode. ---- -- **API:** - - Navigate to the `api` folder to access the API collection `.json` file used to import APIs into Postman. - - Open the `apis.[language]` file to view the list of available APIs and usage. ---- -- **Interchange:** - - **Post.e** uses URL encoded requests (passing the parameters in the URL) via `application/x-www-form-urlencoded`, i.e.: - - ``` - htt://localhost/Post.e/server/languages/php/login.php?command=Session&tokenID=4e1073c9b370ccf8f4ee454c6a841492 - ``` - - For responses, **Post.e** uses JSON encoding via `application/json; charset=utf-8`, i.e.: - - ``` - { - "success": 1, - "tokenID": "50f20dd3e6761245655c8df0cfd73c05", - "token": 1 - } - ``` - ---- -- **Database:** - - **Post.e** uses the MariaDB flavor of MySQL named `post.e` or `post.e_demo`, depending which one you install. Below are the db specs using the schema inspector: - - | Specification | Value | - |--------------------------------|--------------------| - | Default Collation | utf8mb4_unicode_ci | - | Default Characterset | utf8mb4 | - | Table Count | 21 | - | Database Size (rough estimate) | 624.0 KiB | - ---- -## Programming Languages +Here are some definitions to help you understand the terminology used in this document: -Below is a running list of languages currently supported by **Post.e**: - -| **Language & Progress:** | **Version** | -|---------------------------------------------------------------------------------------------------------------------|-------------| -| ![Swift](https://img.shields.io/badge/Swift-complete-success?style=for-the-badge&logo=swift) | 5.7 | -| ![Obj-C](https://img.shields.io/badge/Obj--C-complete-success?style=for-the-badge&logo=apple) | 4.0 | -| ![PHP](https://img.shields.io/badge/PHP-complete-success?style=for-the-badge&logo=php) | 8.1.6 | -| ![Python](https://img.shields.io/badge/Python-in_progress-important?style=for-the-badge&logo=python) | 3.11.0 | -| ![Node.js](https://img.shields.io/badge/Node.js-in_progress-important?style=for-the-badge&logo=nodejs) | 18.12.1 | -| ![Ruby](https://img.shields.io/badge/Ruby-in_progress-important?style=for-the-badge&logo=ruby) | 2.6.10 | -| ![Go](https://img.shields.io/badge/Go-in_progress-important?style=for-the-badge&logo=go) | 1.19.3 | -| ![Rust](https://img.shields.io/badge/Rust-open-critical?style=for-the-badge&logo=rust) | 1.64.0 | -| ![Perl](https://img.shields.io/badge/Perl-open-critical?style=for-the-badge&logo=perl) | 5.30.3 | -| ![Java](https://img.shields.io/badge/Java-open-critical?style=for-the-badge) | 17.0.5 | -| ![MariaDB](https://img.shields.io/badge/MariaDB-complete-success?style=for-the-badge&logo=mysql) | 10.4.21 | - -## What's Inside? -A quick look at the top-level files and directories in this project. - - . - β”œβ”€β”€ api - β”œβ”€β”€ PHP - Post.e API.postman_collection.json - β”œβ”€β”€ db - β”œβ”€β”€ mysql - β”œβ”€β”€ post_e.sql - β”œβ”€β”€ post_e_demo.sql - β”œβ”€β”€ post_e-eer.mwb - β”œβ”€β”€ docs - β”œβ”€β”€ images - β”œβ”€β”€ (GitHub README images) - β”œβ”€β”€ mobile - β”œβ”€β”€ ios - β”œβ”€β”€ Playgrounds - β”œβ”€β”€ Post.e - β”œβ”€β”€ (iOS directory files) - β”œβ”€β”€ Post.e_Watch - β”œβ”€β”€ Post.e_Watch WatchKit Extension - β”œβ”€β”€ (watchOS directory files) - β”œβ”€β”€ Post.e-Test - β”œβ”€β”€ Post.e.xcodeproj - β”œβ”€β”€ Post.eTests - β”œβ”€β”€ Sample Files - β”œβ”€β”€ jpg_Sample.jpg - β”œβ”€β”€ pdf_Sample.pdf - β”œβ”€β”€ png_Sample.png - β”œβ”€β”€ txt_Sample.txt - β”œβ”€β”€ server - β”œβ”€β”€ languages - β”œβ”€β”€ go - β”œβ”€β”€ java - β”œβ”€β”€ js - β”œβ”€β”€ php - β”œβ”€β”€ (php directory files) - β”œβ”€β”€ pl - β”œβ”€β”€ py - β”œβ”€β”€ rb - β”œβ”€β”€ rs - β”œβ”€β”€ resources - β”œβ”€β”€ logs - β”œβ”€β”€ current_date.log (i.e. log_21-Jan-2023.log) - β”œβ”€β”€ config - β”œβ”€β”€ config.ini - β”œβ”€β”€ uploads - β”œβ”€β”€ prof_id (i.e. 1, 2...37, 38) - β”œβ”€β”€ prof_id.jpg (i.e. 1, 2...37, 38).jpg - β”œβ”€β”€ posts - β”œβ”€β”€ post_id (i.e. 45, 46...103, 104) - β”œβ”€β”€ file name (i.e. jpg_Sample.jpg, pdf_Sample.pdf, etc.) - β”œβ”€β”€ .gitattributes - β”œβ”€β”€ .gitignore - β”œβ”€β”€ LICENSE - β”œβ”€β”€ README.md - └── VERSION - -1. **`/api`**: This directory contains the Postman API import file which sends requests to the `apis.[language]` file. -2. **`/db/mysql`**: This directory contains the install files for the **Post.e** database, a demo database, and a EER Diagram of the database. -3. **`/docs/images`**: Images used for the GitHub README relative path. -4. **`/mobile/ios`**: The directory where the iOS and watchOS files are stored. -5. **`/server/languages`**: The directory where the server side languages are stored. -6. **`/server/resources`**: The directory where the log files and `config.ini` file used for the database connection are stored. -7. **`/server/uploads`**: The directory profile images and post images/files download to. -8. **`.gitattributes`**: The `.gitattributes` file allows you to specify the files and paths attributes that should be used by git when performing git actions, such as `git commit`, etc. -9. **`.gitignore`**: The `.gitignore` file tells git which files it should not track / not maintain a version history for. -10. **`README.md`**: A text file containing useful reference information about this project (the file you're reading this from now). -11. **`LICENSE`**: The application license file. -12. **`VERSION`**: A file containing the current application version number. +**Post**: is any message posted to **Post.e** which contains text and/or attachments that may contain photos, videos, or a wide variety of file types. View the `extension` table in the database to view the supported file types. Tap the Post button to post the message to your profile. + - **Posts** are the de facto form of communication in **Post.e** (similar to a [Tweet](https://help.twitter.com/en/resources/new-user-faq)). + - **Posts** were inspired by the popular office supply product [Post-It Notes](https://en.wikipedia.org/wiki/Post-it_Note) due to their ability to easily communicate messages and attach them to surfaces. Virtual **Posts** in **Post.e** offer a similar functionality. ## Getting Started + - Download the application from here, Github. - Place the `server` file on your web server. - Ensure you have the proper language frameworks and versions installed to integrate **Post.e** with. @@ -345,37 +112,339 @@ A quick look at the top-level files and directories in this project. - If you're using the empty database, you will have to build up the app database by registering new users. - Click Login! Enjoy! -**NOTE:** -- All of the demo accounts in the database use the password above. -- Passwords are hashed using `SHA512` and `Salted`. -- The demo accounts consist of quotes from famous individuals that have inspired me through their works and words. +> [!NOTE] +> All of the demo accounts in the database use the password above. +> Passwords are hashed using `SHA512` and `Salted`. +> The demo accounts consist of quotes from famous individuals that have inspired me through their works and words. -## Future Plans +## What's Inside? -- Besides making **Post.e** compatible with more back-end languages, devices, and the tasks mentioned in the Backlog (i.e. Editing Posts, Push Notifications, etc.), I'm considering eventually hosting it on a server so it's not constrained to a local environment. This way, the demo will have a sandbox for everyone to interact in. I don't plan on making it an actual social media app - it was created as a learning tool for all, and I'd like to keep it that way. -- I designed the app icons and banners myself, however, as you all know - Design is a full time job and hard to balance with programming. A lot of the buttons and interactive icons were taken from free design websites. I'd like to eventually create and plug in custom designs into the application for a better user experience and flow. -- I intend to add more documentation around app navigation as well as an in-depth dive into the underlying technology used within the app. As I mentioned above, I want this to be used as a learning tool and solid documentation is a *must have* as a teaching tool; I will probably utilize github-pages or a separate markdown file for documentation (stay tuned). +Below is a list of the main files and folders in this repository and their specific purposes: + ```bash + Post.e # Root folder + β”œβ”€ api # This directory contains the Postman API import file which sends requests to the apis.[language file] file. + β”‚ └─ PHP - Post.e API.postman_collection.json # Postman API collection + β”œβ”€ db # Database folder + β”‚ └─ mysql # Contains the install files for the Post.e database, a demo database, and a EER Diagram of the database. + β”‚ β”œβ”€ post_e.sql # Post.e database + β”‚ β”œβ”€ post_e_demo.sql # Post.e demo database + β”‚ └─ post_e-eer.mwb # Post.e EER Diagram + β”œβ”€ docs # Documentation folder + β”‚ └─ images # Images used for the GitHub README relative path. + β”œβ”€ mobile # Mobile folder + β”‚ β”œβ”€ ios # The directory where the iOS and watchOS files are stored. + β”‚ β”‚ β”œβ”€ Playgrounds # Playgrounds folder + β”‚ β”‚ β”œβ”€ Post.e # Post.e folder + β”‚ β”‚ β”œβ”€ Post.e_Watch # Post.e Watch folder + β”‚ β”‚ β”œβ”€ Post.e_Watch WatchKit Extension # Post.e Watch Extension folder + β”‚ β”‚ β”œβ”€ Post.e-Test # Post.e Test folder + β”‚ β”‚ β”œβ”€ Post.e.xcodeproj # Post.e Xcode project file + β”‚ β”‚ β”œβ”€ Post.eTests # Post.e Tests folder + β”‚ β”‚ └─ Sample Files # Sample files folder + β”‚ β”‚ β”œβ”€ jpg_Sample.jpg # Sample JPG file + β”‚ β”‚ β”œβ”€ pdf_Sample.pdf # Sample PDF file + β”‚ β”‚ β”œβ”€ png_Sample.png # Sample PNG file + β”‚ β”‚ └─ txt_Sample.txt # Sample TXT file + β”œβ”€ server # Server folder + β”‚ β”œβ”€ languages # The directory where the server side languages are stored. + β”‚ β”‚ β”œβ”€ go # Go folder + β”‚ β”‚ β”œβ”€ java # Java folder + β”‚ β”‚ β”œβ”€ js # JavaScript folder + β”‚ β”‚ β”œβ”€ php # PHP folder + β”‚ β”‚ β”œβ”€ pl # Perl folder + β”‚ β”‚ β”œβ”€ py # Python folder + β”‚ β”‚ β”œβ”€ rb # Ruby folder + β”‚ β”‚ └─ rs # Rust folder + β”‚ β”œβ”€ resources # The directory where the log files and config.ini file used for the database connection are stored. + β”‚ β”‚ β”œβ”€ logs # Logs folder + β”‚ β”‚ β”‚ └─ current_date.log # Current date log file + β”‚ β”‚ └─ config # Config folder + β”‚ β”‚ └─ config.ini # Config file + β”‚ └─ uploads # The directory profile images and post images/files download to. + β”‚ └─ prof_id # Profile ID folder + β”‚ β”œβ”€ prof_id.jpg # Profile ID JPG file + β”‚ └─ posts # Posts folder + β”‚ └─ post_id # Post ID folder + β”‚ └─ file name # File name + β”œβ”€ .gitattributes # Git attributes file + β”œβ”€ .gitignore # Git ignore file + β”œβ”€ LICENSE # License file + └─ README.md # README file +``` + +## Features: + +--------------- + +### Login & Register Screens: + +
+ +- Single Sign-On (SSO) capabilities by using a combination of Swift's [UserDefaults](https://developer.apple.com/documentation/foundation/userdefaults) class and server side session handling. Login once then automatically login in the future without signing in (unless, of course, you log out of the app which kills the active session in the `session` table). +- Username & Password validations. + - Checks for minimum password length, min/max user name length, missing or empty fields, matching passwords, and invalid characters using `REGEX` patterns. +- Registering a User will create a new folder in the `server/uploads` folder using the new `Prof_ID` column value, which is an `AUTO_INCREMENT` column in the database (Posts work in this same fashion). +- A unique `ID` is also generated using the `encoder.[language]` file using `Base 64 Encoding` to produce a unique external facing `ID`, stored in the database under the `Prof_Key` or `Post_Key` columns, that can be used to share Posts or Profiles in the future. + +--------------- + +### Configure Programming Language Screens: + +
+ +- Pick the server side language you want **Post.e** to use. This will route the requests to the toggled language folder. +- See [Programming Languages](#programming-languages) below for more details on this screen. + +--------------- + +### Feed Screen: + +
+ +- Sort Posts by *Newest*: + - *Newest* consists of the most *recent* posts using the `Post_Created` date column in descending order. + - `WHERE Post_Created DESC`. +- Sort Posts by the *Home* experience: + - *Home* uses a number of columns to create a fun user feed experience using the below `WHERE` clause: + - `WHERE Post_Love_Count DESC, Post_Pin_Count DESC, Post_Reply_Count, Post_Created DESC`. +- Click on the Profile name to segue to the user Profile screen. + +--------------- + +### Interaction Screen: + +
+ +- View New Users on the App. +- Click on the Profile name to segue to the user Profile screen. +- Follow or Unfollow users directly from this screen. + +--------------- + +### Profile Screen: + +
+ +- Interactive Follower, Following, and Post count buttons that will segue to the Interaction screen when clicked. + - The Post count is not a button, its a Post total (including Replies) counter only. +- Profile picture display. +- Click the Profile tab icon to scroll to the top. +- Pull refresh to get the most recent Posts. +- Post button to create new Posts. +- Sort Posts on the Profile feed by: Newest, Oldest, Loved, Pinned, and Replied counts in descending order. +- Edit Profile + - Change your Profile picture (take a photo or select one from your library). + - Remove your Profile picture - setting it to the default placeholder image. + - Update your Profile Username (it must be unique) and Profile Name. + - Delete your Profile. +- Scroll to the bottom of the Table, Posts will load in 25 Post chunks. If the Post # > 25, a request will be sent to the server and an activity indicator will be shown in the Table footer as it fetches the next chunk of 25. +- Within the Post Cell: + - Preview & Save Attachments. + - Pin or Unpin a Post. + - Pins will be displayed on your Profile. + - You cannot Pin a Reply or Posts that you created. + - Only Posts displayed on Profiles or your Feed can be Pinned. + - Reply to a Post. + - Love or Unlove a Post. + - Delete your own Posts. +- Click on the Profile name to segue to the user Profile screen. + +--------------- + +### Reply Screen: + +
+ +- Reply to a Post on a dedicated screen with the Post you're replying to in the header. +- Reply to a Reply (there is no limit on the Reply depth). +- Sort Posts on the Reply feed by: Newest, Oldest, Loved, and Replied counts in descending order. -## Contribution +--------------- -I'm looking forward to working with others on this project over time (of course, when time is permitted) and seeing where it goes. Feel free to Fork the Repo and submit a Pull Request if you've contributed to it in some way (and don't forget to add yourself to the [CREDIT](CREDIT) document as well). If you're going to Fork the project or Clone the project for your own purposes, all I ask is that you follow the attached license as well as giving me credit using the below **Credit** block. I spent a lot of time on this and I'm proud of how it turned out. I'm more than happy to open-source it to help others as long as credit is given and no profit is gained from it in return; this is "the people's" social media app. +### Post Screen: -Feel free to reach out to me using my email below if you have any questions or suggestions. +
-Thanks and enjoy! (and I appreciate it if you've read this far - you're a legend!) +- Type up a Post. +- Cancel the Post by clicking the Cancel button or the visible Profile Screen. +- Add Photos/Videos from your Camera or Photo Library. +- Add Attachments (**Post.e** comes with a demo directory with a few files ready to select) - see screenshot above. +- Submit the Post to the server. +- Haptic Feedback and Audible Post Alert after a Post has been successfully sent to the server. + +--------------- + +### Settings Screen: + +
+ +- About section to view the current **Post.e** version number (derived from the `info.plist` value of `CFBundleShortVersionString`). +- Open Source Libraries used to create **Post.e** and their related LICENSE files. +- Language Selection displays your current Device Language, available Languages supported by **Post.e** as well as a link to your Settings screen to change your device language (this will cause the application to restart as per Apple). +- Directory Settings displays your current folder directory used to select files for Post Attachments. Toggle the "Use Sample Directory" switch to use the sample files provided with **Post.e** by default or not. +- Change your Password +- Logout of the Application (which will also kill the session on the server). + +--------------- + +### watchOS Support: + +
+ +- Post to your Profile using audio to text or by typing in the text using the watch keyboard. +- Haptic Feedback and Audible Post Alert after a Post has been successfully sent to the server. + +--------------- + +### Language Support: + +
+ +- English and Russian language support using [Localization](https://developer.apple.com/localization/). Query the `language` table in the database to view the supported languages. + +--------------- + +### Dark Mode Support: + +
+ +- Easily toggle Designs between Light and Dark Mode. + +--------------- + +### API Support: + +- Navigate to the `api` folder to access the API collection `.json` file used to import APIs into Postman. +- Open the `apis.[language]` file to view the list of available APIs and usage. + +--------------- + +### Interchange: + +- **Post.e** uses URL encoded requests (passing the parameters in the URL) via `application/x-www-form-urlencoded`, i.e.: + +``` +htt://localhost/Post.e/server/languages/php/login.php?command=Session&tokenID=4e1073c9b370ccf8f4ee454c6a841492 +``` + +For responses, **Post.e** uses JSON encoding via `application/json; charset=utf-8`, i.e.: + +``` +{ + "success": 1, + "tokenID": "50f20dd3e6761245655c8df0cfd73c05", + "token": 1 +} +``` + +--------------- + +### Database: + +- **Post.e** uses the MariaDB flavor of MySQL named `post.e` or `post.e_demo`, depending which one you install. Below are the db specs using the schema inspector: + +| Specification | Value | +|--------------------------------|--------------------| +| Default Collation | utf8mb4_unicode_ci | +| Default Characterset | utf8mb4 | +| Table Count | 21 | +| Database Size (rough estimate) | 624.0 KiB | + +--------------- + +## Limitations: + +**Posts** are limited to: +- Post character limit: There is no hard limit for the number of characters, however, the database type and length is `VARCHAR(250)` and it cannot be `NULL`. +- Attachment limit per Post: 9. +- Max file size per Attachment: 1 gigabyte (GB) or 1,073,741,824 bytes. + +Currently, the `Post.swift` file contains the static values mentioned above. In the future, I'd like to sync this to the `parameter` table in the database for a more dynamic approach, including a max character limit for Posts and an alert message if the Post limit has been exceeded. + +## Programming Languages + +Below is a running list of languages currently supported by **Post.e**: + +| **Language & Progress:** | **Version** | +|---------------------------------------------------------------------------------------------------------------------|-------------| +| ![Swift](https://img.shields.io/badge/Swift-complete-success?style=for-the-badge&logo=swift) | 5.7 | +| ![Obj-C](https://img.shields.io/badge/Obj--C-complete-success?style=for-the-badge&logo=apple) | 4.0 | +| ![PHP](https://img.shields.io/badge/PHP-complete-success?style=for-the-badge&logo=php) | 8.1.6 | +| ![Python](https://img.shields.io/badge/Python-in_progress-important?style=for-the-badge&logo=python) | 3.11.0 | +| ![Node.js](https://img.shields.io/badge/Node.js-open-critical?style=for-the-badge&logo=nodejs) | 18.12.1 | +| ![Ruby](https://img.shields.io/badge/Ruby-open-critical?style=for-the-badge&logo=ruby) | 2.6.10 | +| ![Go](https://img.shields.io/badge/Go-open-critical?style=for-the-badge&logo=go) | 1.19.3 | +| ![Rust](https://img.shields.io/badge/Rust-open-critical?style=for-the-badge&logo=rust) | 1.64.0 | +| ![Perl](https://img.shields.io/badge/Perl-open-critical?style=for-the-badge&logo=perl) | 5.30.3 | +| ![Java](https://img.shields.io/badge/Java-open-critical?style=for-the-badge) | 17.0.5 | +| ![MariaDB](https://img.shields.io/badge/MariaDB-complete-success?style=for-the-badge&logo=mysql) | 10.4.21 | + +## Closing + +Thank you for taking the time to read through this document and I hope you find it useful! (if you've read this far - you're a legend!) +- If you have any questions or suggestions, please feel free to reach out to me. +> Please reference the [SUPPORT](.github/SUPPORT.md) file in this repository for more details. + +## What's Next? + +- Besides making **Post.e** compatible with more back-end languages, devices, and the tasks mentioned in the Backlog (i.e. Editing Posts, Push Notifications, etc.), I'm considering eventually hosting it on a server so it's not constrained to a local environment. This way, the demo will have a sandbox for everyone to interact in. I don't plan on making it an actual social media app - it was created as a learning tool for all, and I'd like to keep it that way. + +I'm looking forward to seeing how this project evolves over time and how it can help others with their GitHub Portfolio. +> Please reference the [CHANGELOG](.github/CHANGELOG.md) file in this repository for more details. ## Project -Please reference the [GitHub Project](https://github.com/users/scottgriv/projects/3) tab inside this Repo to get a good understanding of where I'm currently at with the overall project. Bugs and Enhancements will also be tracked there as well. +Please reference the [GitHub Project](https://github.com/users/scottgriv/projects/3) tab inside this repository to get a good understanding of where I'm currently at with the overall project. +- Issues and Enhancements will also be tracked there as well. + +## Contributing + +Feel free to submit a pull request if you find any issues or have any suggestions on how to improve this project. You can also open an issue with the tag "bug" or "enhancement". + +- How to contribute: +1. Fork the Project +2. Create your Feature Branch (`git checkout -b feature/Post.e`) +3. Commit your Changes (`git commit -m 'Add new feature'`) +4. Push to the Branch (`git push origin feature/Post.e`) +5. Open a Pull Request + +> Please reference the [CONTRIBUTING](.github/CONTRIBUTING.md) file in this repository for more details. + +## Resources + +Below are some external resources I found helpful when creating **Post.e**: + +- [Swift](https://developer.apple.com/swift/) - A general-purpose, multi-paradigm, compiled programming language developed by Apple Inc. for iOS, iPadOS, macOS, watchOS, tvOS, Linux, and z/OS. +- [Objective-C](https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/Introduction/Introduction.html) - A general-purpose, object-oriented programming language that adds Smalltalk-style messaging to the C programming language. +- [PHP](https://www.php.net/) - A popular general-purpose scripting language that is especially suited to web development. +- [Python](https://www.python.org/) - An interpreted, high-level and general-purpose programming language. +- [Node.js](https://nodejs.org/en/) - An open-source, cross-platform, back-end JavaScript runtime environment that runs on the V8 engine and executes JavaScript code outside a web browser. +- [Ruby](https://www.ruby-lang.org/en/) - A dynamic, open source programming language with a focus on simplicity and productivity. It has an elegant syntax that is natural to read and easy to write. +- [Go](https://golang.org/) - An open source programming language that makes it easy to build simple, reliable, and efficient software. +- [Rust](https://www.rust-lang.org/) - A multi-paradigm programming language focused on performance and safety, especially safe concurrency. +- [Perl](https://www.perl.org/) - A family of two high-level, general-purpose, interpreted, dynamic programming languages. +- [Java](https://www.java.com/en/) - A general-purpose, class-based, object-oriented programming language designed for having lesser implementation dependencies. +- [MariaDB](https://mariadb.org/) - A community-developed, commercially supported fork of the MySQL relational database management system (RDBMS), intended to remain free and open-source software under the GNU General Public License. +- [Postman](https://www.postman.com/) - A collaboration platform for API development. Postman's features simplify each step of building an API and streamline collaboration so you can create better APIsβ€”faster. +- [Xcode](https://developer.apple.com/xcode/) - An integrated development environment (IDE) for macOS containing a suite of software development tools developed by Apple for developing software for macOS, iOS, iPadOS, watchOS, and tvOS. +- [Swift Package Manager](https://swift.org/package-manager/) - A tool for managing the distribution of Swift code. +- [MySQL Workbench](https://www.mysql.com/products/workbench/) - A unified visual tool for database architects, developers, and DBAs. ## License -**Post.e** is released under the **GNU General Public License v3.0 License**. [See LICENSE](LICENSE) for details. + +This project is released under the terms of the **GNU General Public License, version 3 (GPLv3)**. +- The GPLv3 is a "copyleft" license, ensuring that derivatives of the software remain open source and under the GPL. +- For more details and to understand all requirements and conditions, see the [LICENSE](LICENSE) file in this repository. ## Credits -**Author:** Scott Grivner
-**Email:** scott.grivner@gmail.com
+ +**Author:** [Scott Grivner](https://github.com/scottgriv)
+**Email:** [scott.grivner@gmail.com](mailto:scott.grivner@gmail.com)
**Website:** [scottgrivner.dev](https://www.scottgrivner.dev)
**Reference:** [Main Branch](https://github.com/scottgriv/Post.e)
+ +--------------- +
diff --git a/docs/images/phone_splash.png b/docs/images/phone_splash.png index 006074a..e15d212 100644 Binary files a/docs/images/phone_splash.png and b/docs/images/phone_splash.png differ diff --git a/mobile/ios/Post.e.xcodeproj/project.pbxproj b/mobile/ios/Post.e.xcodeproj/project.pbxproj index de72dac..c23e5cc 100644 --- a/mobile/ios/Post.e.xcodeproj/project.pbxproj +++ b/mobile/ios/Post.e.xcodeproj/project.pbxproj @@ -1291,7 +1291,7 @@ ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 1.1.0; DEVELOPMENT_TEAM = 8927FZ78V3; GENERATE_INFOPLIST_FILE = YES; "INFOPLIST_FILE[sdk=*]" = "Post.e_Watch WatchKit Extension/Info.plist"; @@ -1305,7 +1305,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.0; + MARKETING_VERSION = 1.1.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.Post-e.watchkitapp"; @@ -1329,7 +1329,7 @@ ASSETCATALOG_COMPILER_COMPLICATION_NAME = Complication; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 1.1.0; DEVELOPMENT_TEAM = 8927FZ78V3; GENERATE_INFOPLIST_FILE = YES; "INFOPLIST_FILE[sdk=*]" = "Post.e_Watch WatchKit Extension/Info.plist"; @@ -1343,7 +1343,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.0; + MARKETING_VERSION = 1.1.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.Post-e.watchkitapp"; @@ -1547,7 +1547,7 @@ CLANG_USE_OPTIMIZATION_PROFILE = NO; CODE_SIGN_ENTITLEMENTS = Post.e/Post.e.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 1.1.0; DEVELOPMENT_TEAM = 8927FZ78V3; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Post.e/Supporting Files/Post.e-Prefix.pch"; @@ -1570,7 +1570,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.0; + MARKETING_VERSION = 1.1.0; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.Post-e"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1599,7 +1599,7 @@ CLANG_USE_OPTIMIZATION_PROFILE = NO; CODE_SIGN_ENTITLEMENTS = Post.e/Post.e.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 1.1.0; DEVELOPMENT_TEAM = 8927FZ78V3; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Post.e/Supporting Files/Post.e-Prefix.pch"; @@ -1621,7 +1621,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.0.0; + MARKETING_VERSION = 1.1.0; ONLY_ACTIVE_ARCH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.Post-e"; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/mobile/ios/Post.e.xcodeproj/project.xcworkspace/xcuserdata/scottgrivner.xcuserdatad/UserInterfaceState.xcuserstate b/mobile/ios/Post.e.xcodeproj/project.xcworkspace/xcuserdata/scottgrivner.xcuserdatad/UserInterfaceState.xcuserstate index 534ca1c..e7ef25d 100644 Binary files a/mobile/ios/Post.e.xcodeproj/project.xcworkspace/xcuserdata/scottgrivner.xcuserdatad/UserInterfaceState.xcuserstate and b/mobile/ios/Post.e.xcodeproj/project.xcworkspace/xcuserdata/scottgrivner.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/mobile/ios/Post.e.xcodeproj/xcuserdata/scottgrivner.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/mobile/ios/Post.e.xcodeproj/xcuserdata/scottgrivner.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index efc7b05..08fb2ca 100644 --- a/mobile/ios/Post.e.xcodeproj/xcuserdata/scottgrivner.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/mobile/ios/Post.e.xcodeproj/xcuserdata/scottgrivner.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -3,70 +3,4 @@ uuid = "FF46AC4B-5B1C-49B6-B0CC-D56203B0653B" type = "1" version = "2.0"> - - - - - - - - - - - - - - - - - - diff --git a/mobile/ios/Post.e/Main Files/App Delegate/AppDelegate.m b/mobile/ios/Post.e/Main Files/App Delegate/AppDelegate.m index 4f0d8ca..7aa2db9 100644 --- a/mobile/ios/Post.e/Main Files/App Delegate/AppDelegate.m +++ b/mobile/ios/Post.e/Main Files/App Delegate/AppDelegate.m @@ -17,6 +17,7 @@ @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { + // Override point for customization after application launch. if (![[NSUserDefaults standardUserDefaults] boolForKey:@"HasLaunchedOnce"]) { //Welcome Message diff --git a/mobile/ios/Post.e/Main Files/Base.lproj/LaunchScreen.storyboard b/mobile/ios/Post.e/Main Files/Base.lproj/LaunchScreen.storyboard index 437b65e..9c4e7b4 100644 --- a/mobile/ios/Post.e/Main Files/Base.lproj/LaunchScreen.storyboard +++ b/mobile/ios/Post.e/Main Files/Base.lproj/LaunchScreen.storyboard @@ -1,9 +1,9 @@ - - + + - + @@ -13,11 +13,11 @@ - + - + @@ -31,6 +31,6 @@ - + diff --git a/mobile/ios/Post.e/Main Files/Base.lproj/Main.storyboard b/mobile/ios/Post.e/Main Files/Base.lproj/Main.storyboard index e431281..4cf8ad8 100644 --- a/mobile/ios/Post.e/Main Files/Base.lproj/Main.storyboard +++ b/mobile/ios/Post.e/Main Files/Base.lproj/Main.storyboard @@ -1,9 +1,9 @@ - + - + @@ -20,11 +20,11 @@ - + - + @@ -95,7 +95,7 @@ - + @@ -302,7 +302,7 @@ - + @@ -575,7 +575,7 @@ - + @@ -585,7 +585,7 @@ - + @@ -595,7 +595,7 @@ - + - + - + @@ -1052,7 +1052,7 @@