Skip to content

Pen & Pixel

Pitch

Many of us can relate to spending a significant amount of time scrolling through social media, like Instagram. We've all been there, and it's easy to lose track of how much time we've wasted. At some point, many of us have even decided to delete these apps in an attempt to regain control of our lives, only to feel disconnected from our friends shortly after.

What if we could have the best of both worlds? An app that offers the social connectivity of platforms like Instagram and Facebook but with a focus on promoting well-being and practicing a useful skill. That's where our innovative journaling and diary-sharing app comes in.

Our app encourages users to take a step back from the constant noise of social media by allowing them to post just once a day. At the end of each day, users receive a reminder to reflect and journal about their experiences. They can add photos and videos to capture their moments, and the best part is, if they're not feeling up to it on a particular day or it's been a tough one, there's no obligation to share.

Our app keeps you connected to your friends and family, offering you the opportunity to read diaries that your loved ones have chosen to make publicly available. However, if you want to read your friends' diaries, you need to journal as well. The more you write, the more points you get. Then you can use your points to send friend request. What's more, we go a step further to connect you with people who share similar daily lives and experiences, allowing you to build meaningful connections with those who truly understand.

Concepts

ConceptUser
purposeAuthenticate users
principleafter a user registers with a username and password, they can authenticate as that user by providing a matching username and password. Users can also logout to lose their authentication.
statesRegistered: set User; username, password: registered -> one String
actionsregister (n,p:string, out u:User); authenticate (n, p:String, out u: User); logOut()
Concept familiarityLinux sudo command
ConceptDiary
purposeTo express daily feelings and events
principleA diary post can be created by entering some text and images. A post can be updated later by adding or removing some text or images. A post will become accessible to other resources, if it is shared.
statesImages: set image; Content: String; Time;
actionscreate (images:optional, content: string, out post:Diary), update(images, content:string, post:Diary), share(resource: User)
syncWhen a post is shared, it will be shared between two users that have a friendship.
Concept familiarityAn instagram post

ConceptPoint
purposeTo keep track of a user's points
principleFor every 100 words in a diary, a user gets 1 point. For every comment that a user posts or a friend request that they send, they lose 1 point.
statespoint: number
actionsAddPoint(content:string, out:number), DecreasePoint(numberOfComments: number, out:number)
syncWhen a post is shared, it will be shared between two users that have a friendship
Concept familiarityImagine an online game website that the more a user pay, the more games they have access to
ConceptComment
purposeTo express an opinion about something
principleAn object can be selected, and then attach some opinions to the selected object. This comment can be deleted later.
statesposts: set Resource; comments: object -> comment
actionsselect(o: Resoruce) o not in object; o.comment := comment; delete(o: Resource, o.comment:comment)
syncUsers can select a post to comment on once it a diary is posted. Users must have enough points to comment.
Concept familiarityInstagram comments
ConceptFriendship [User, Tag]
purposeTo connect users
principleA user can send a friend request to any other users with one line message on why they want to be friends. The other user has the option to accept or decline the request. Once two users are friend, they will see their public posts. It suggests users that have similar tags
statesEntity1 [User]; Entity2 [User]; edge: Entity1 <-> Entity2
actionssend(from: Entity1; to:Entity2;), decline(); accept(out:Connection); share(Entity1.info, Entity2.info), suggest(users, tags, out:users)
syncAfter a user registers, they can send, accept, or decline a friend request. Everytime that they journal, their friend suggestion will be updated.
Concept familiarityFaceBook friend

ConceptTag
purposeTo label and categorize a person's journals
principleIt generates tags for a given text and keeps track of tags for a user
statesTags: user -> set String;
actionsgenerate(text:Diary, out:Tags); update(content, out:mood), getDailyAffirmation(mood: number, out: string)
syncWhen a user creates a post, the content of the user will be updated, and the mood of the user will be updated, and new daily affirmation will be genrated.
Concept familiarityLabeling an email as spam based on its content

Wireframes

Tradeoff

I removed the concept of Bookstore mainly because I wanted to focus on the concept of diary and related concepts. I merged the concept of friend and friend suggestion.

Between the options of reactions and comments, I decided to go by only comments. The reason is that simple reactions would not align with the values of this app. We want to have positive mental impact, so we want to encourage people to use words and be precise when they are expressing themselves about a post.

I wanted to incorporate generative AI in my app, and I had lots of options. In the current design, I might use generative AI to find tags for a diary. I removed the private chat concept from the app and all the concepts related to use generative AI for private chat, including meme generation. This social media app is more about writing and sharing what you want to rather than private communication between users.