{"id":13818956,"url":"https://github.com/minusobjects/Message-Medium","last_synced_at":"2025-05-16T04:32:00.538Z","repository":{"id":171105308,"uuid":"88522698","full_name":"minusobjects/Message-Medium","owner":"minusobjects","description":"A storytelling platform inspired by Medium; built in Ruby/Rails, JavaScript/React/Redux, and HTML/CSS.","archived":false,"fork":false,"pushed_at":"2017-06-29T14:20:12.000Z","size":5577,"stargazers_count":15,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-11-19T18:45:12.783Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/minusobjects.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2017-04-17T15:36:07.000Z","updated_at":"2023-07-04T16:25:30.000Z","dependencies_parsed_at":"2023-07-08T21:30:32.327Z","dependency_job_id":null,"html_url":"https://github.com/minusobjects/Message-Medium","commit_stats":null,"previous_names":["minusobjects/message-medium"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minusobjects%2FMessage-Medium","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minusobjects%2FMessage-Medium/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minusobjects%2FMessage-Medium/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/minusobjects%2FMessage-Medium/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/minusobjects","download_url":"https://codeload.github.com/minusobjects/Message-Medium/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254469104,"owners_count":22076432,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-04T08:00:36.328Z","updated_at":"2025-05-16T04:31:59.670Z","avatar_url":"https://github.com/minusobjects.png","language":"Ruby","funding_links":[],"categories":["Happy Exploring 🤘"],"sub_categories":[],"readme":"# Message\n\n[Message live][app]\n\n[app]: http://www.message-medium.net/\n\n![image of home_page](docs/caps/m-cap-home.jpg)\n\n**Message** is a full-stack single-page web application inspired by the blog/news site Medium. It utilizes Ruby on Rails (back-end), PostgreSQL (database), and React.js/Redux (front-end). The goal of Message is to provide an elegant and inviting experience for both the reading and writing of stories.\n\n## Features \u0026 Implementation\n\n### Writing and editing stories and responses\n\n![image of story_input](docs/caps/m-cap-story-input.jpg)\n\nUsers may write their own stories via a spare, clean interface - the almost-entirely white page is meant to emulate the feeling of a blank sheet of paper. The more-complex functionality only becomes evident after some interaction: image uploading and linked topics via database associations, and rich text editing using tools adapted from the QuillJS library. In order to achieve the desired experience, I had to heavily edit the Quill interface. The database stores stories in specially-formatted HTML, which can then be rendered via React.\n\n![image of story](docs/caps/m-cap-story.jpg)\n\nUsers may leave responses on stories or on other responses. The chain of responses (sorted by time and by comment thread) is managed through JavaScript algorithms; using the Redux architecture, users may seamlessly leave responses or edit their own responses.\n\nBelow is an initial wireframe drawing of the individual story page (note that the sidebar component is used to display that story's likes):\n\n![image of story_page](docs/wireframes/story.png)\n\n### Follows\n\n![image of home_page](docs/caps/m-cap-profile.jpg)\n\nUsers may 'follow' other users by clicking on a modular React component. In addition to the user's information, each user profile page contains three feeds: stories and responses written by that user, stories and responses which have been liked by that user, and stories and responses by users followed by that user. This information is quickly retrieved from the server thanks to a series of associations between multiple database tables (`users`, `stories`, `responses`, `likes`, `follows`, and `followings`). Users may view these feeds by clicking on a custom SVG icon menu.\n\nBelow is an initial wireframe drawing of the user profile page:\n\n![image of user_profile](docs/wireframes/user-profile.png)\n\n### Likes\n\nThrough the Rails backend, stories are associated with topics and can be 'liked' by users. Database associations allow for a record of all stories and responses that any user has liked. By comparing data from the `likes` table with user information, various React components can detect whether or not the logged-in user has liked a story or response, updating their styles accordingly.\n\nThe goal was to seamlessly integrate the experience of 'liking' into the site, i.e. by showing a story's 'likes' in a sidebar that appears and disappears according to the user's position in the story (via JavaScript and CSS).\n\n## Future Directions for the Project\n\nIn addition to the features already implemented, I plan to continue work on this project.\n\n### Search\n\nBy utilizing the pg-search Ruby gem, I can integrate text-based search into the site.\n\n### Highlights\n\nMedium allows users to highlight sections of stories that they particularly like. It would be possible to achieve a similar functionality on Message by storing information about each highlighted passage in the database and rendering the highlights via CSS.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fminusobjects%2FMessage-Medium","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fminusobjects%2FMessage-Medium","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fminusobjects%2FMessage-Medium/lists"}