Discover a story. Share yours.
See deployed version here: Memoir App
Have you ever heard the Story of someone's life and been amazed ?
The experiences and hardships that they've had to go through to get to an inspiring place in their lives ?
It's these stories that inspired Memoir. A visual experience where you will be able to scroll through people's lives and see that life's Story is full of small entries.
Is there someone you know a lot about ? Are you a big fan of someone ? Share that story!
Users can share stories about their friends, loved ones, pets, anybody you love ! One account can have as many stories as you can think of. Users can also post entries about a memorable moment they had with that individual.
Since entries can be told in many ways, Memoir encourages you to post in many formats. Post an entry with a YouTube link of them, post a picture of your favorite trip with them, send them a love song from a SoundCloud embed or keep it simple with plain text.
Memoir was made to share, learn, and empathize with your fellow human beings. Start your own stories and discover someone else's.
User created stories are displayed in the front page
What is a Story?
A story resembles a profile, a persons named is entered, a picture of them and their occupation. From there yourself or other users can add entries related to that user "story"
Entries are a unique feature that users can post to stories. An entry can have one of four formats. Plain text. Audio in the form of a SoundCloud embed link, video in the form of a Youtube link either directly copied from your browser, or from a share link. Entries are displayed in a chronological order, in a timeline From earliest to latest entry date.
An entry should have a format selected, a description and date for submission. Tags are optional.
Memoir doesn't discriminate when users post an entry to a story, any user can post to any story. If the user is not original author of the story, the entry will not be visible until it is approved by the story author. This way we prevent malicious people from posting distasteful posts. Entries should somewhat pertain to the story is it posted to. For example, you could post an image of a dancing chicken to remind your friend he is not so good at doing the dougie.
Posting an entry also has the feature of adding tags! You can make your entries more memorable with adding tags to your entries. With tags in your entries, other users are able to find similar entries with Memoirs search functionality.
Each entry in a story can be viewed on it's individual page. The single entry view shows a presentation mode , users are able to look through other entries for that particular story.
Each Story can be marked as inspiring to recommend to others
Every user has a story dashboard. The dashboard enables users to see the stories they have created in addition to creating new ones. Additionally users in their dashboard can manage foreign entries that were not written by them.
The dashboard view has a divided section showing entries the user has authored in their stories and entries that were written by other users. As mentioned previously if a user posts an entry to a story is not theirs, it will not be visible and they must wait until it is approved by the story author. Story authors have the ability to approved or deny entries to their stories, a new entry from a foreign user will always be marked pending in the dashboard for the story author.
Memoir has search functionality, where users can search either by tag, specific date or entry title. Memoir uses a fuzzy searching to find matching strings. Dates must be specific.
i.e YYYY_MM_DD
Memoir is responsive and mobile-friendly!.
The frontend is deployed on Netlify. Memoir uses a React frontend that uses Redux to store it's global state and Sass for styling.
$ git clone https://github.com/hector4213/memoir.git (if you haven't already)
$ cd client
$ npm install
$ npm start
Memoir uses Storybook to test the component User Interface and Cypress for end to end testing to make sure all core fearures are working.
To run Storybook
$ npm run storybook
To run Cypress
$ npm run cypress
- sass
- redux
- redux-thunk
- react-redux
- react-router
- react-icons
- storybook
- cypress
- axios
The backend portion of this application is currently deployed on heroku so please be patient with the cold start time. For the Database, PostgreSQL is used along with Objection.js, although Objection.js is most commonly known as an ORM, it would be more accurate to call it a a relational query builder. You get all the benefits of an SQL query builder but also a powerful set of tools for working with relations.
Objection.js is built on the SQL query builder knex. All databases supported by knex are supported by Objection.js. SQLite3, Postgres and MySQL.
Memoir uses Jsonwebtokens, for authentication and bcrypt for hashing passwords and storing it in the Database.
$ git clone https://github.com/hector4213/memoir.git (if you haven't already)
$ cd server
$ npm install
$ npm run dev
You can either create databases using the command-line / terminal if using the terminal is not in your comfort zone, use a GUI client such as pgAdmin4
For more information on how to create databases using PostgreSQL see this article with instructions on how to create databases using the GUI or terminal.
- See env.example for required environment variables
Only one database is needed for the backend application to run, creating a second database for testing purposes is optional, but reccommended
Ensure you are in the /server directory and type
$ knex migrate:latest
This command will create tables for the database, to seed the database type
$ knex seed:run
To reset the database to its original application state type
$ npm run resetdb
To run tests type
$ npm test
Memoir uses Mocha as a test runner and Chai for assertions.
- bcrypt
- dotenv
- express
- jsonwebtoken
- knex
- morgan
- objection
- pg
- yup