/dreamers

An innovative 'dream journal' platform, empowered by Next.js, React, TypeScript, Firebase, and DALLE-2. Placed 1st out of 100+ participants at CSC Project Program at UWaterloo.

Primary LanguageTypeScript

What it does 👓

Dreamscape is an innovative dream journal platform that empowers users to record and share their fascinating dreams as captivating posts. Moreover, a unique image is thoughtfully generated to reflect the user's subconscious visions from the previous night. Users can seamlessly connect with other like-minded individuals, share their dreams anonymously, and add friends with similar dream interests to foster a supportive community. This dynamic app offers a secure and private space for users to explore the depths of their minds, gain profound insights, and even awaken hidden talents and passions.

Inspiration 🔦

Our project idea originated from the book Do Androids Dream Of Electric Sheep (1968) by Philip K. Dick, a more than influential sci-fi novel that set the groundwork for the concept of Cyberpunk. Further, the book was adapted into a film, better known as Blade Runners.

but who asked?

A large portion of the book discusses the nature of humanity and the discovery of one's identity and individuality; we are motivated to do the same. By keeping a dream journal and sharing your dreams with a supportive community of like-minded dreamers, we gain new perspectives and insights into our subconscious minds. In a fast moving world, it is more important than ever to understand yourself in the overwhelming amount of information.

How we built it 🔧

Dreamscape was built using a combination of modern web development technologies, including Typescript, Next.js, Tailwindcss for the front-end user interface, and a backend server for data storage and authentication through Firebase. DALLE-2 was leveraged to generate and visualize dreamscapes. As for the upcoming dreammate feature (see more below), we designed a RelativityModel to use in pytorch for tokenizing and comparing similarities between dream posts to match users. However, since we need more data from users to train our model, this feature is currently not integrated.

Challenges we ran into 🔨

During the development of Dreamscape, we faced challenges in designing an intuitive and user-friendly interface that could capture the complexity of dreams. We also encountered technical hurdles in implementing the backend server and ensuring data security. Additionally, balancing the need for anonymity with the desire for social connections posed challenges in designing the friend and sharing features.

What we learned 🎓

Through the development of Dreamscape, we learned valuable lessons in UI/UX design, backend server implementation, data security, and some elementary stable diffusion principles. We also gained insights into the diverse and complex nature of dreams and the importance of creating a supportive community for dreamers to share their experiences.

What's next for Dreamscape 😎

Coming years would be dedicated to enhancing features such as dreammate matching, a feature that recommends you an unique dreamer periodically based on similarities of your dreams and likes. We will also work on incorporating machine learning algorithms to provide personalized dream insights. Further, we plan on renting a GPU to host our own stable diffusion model for image generation, fine-tuned for dream visualizing. Our vision is to make Dreamscape the go-to platform for dreamers worldwide, fostering self-discovery, connection, and exploration of the fascinating world of dreams. Stay tuned for exciting updates!

API Reference 📔

Register

  POST /api/register
Body Parameter Type Description
email string Email to register with
password string Password to register with
username string Your preferred username
avatar string Avatar Image Url

Login to get authorization token

  POST /api/login
Body Parameter Type Description
email string The user's email you are trying to login
password string The user's password you are trying to login

Retrieve user info

  GET /api/users/${id}
Query Parameter Type Description
id string The target user's id
Header Type Description
authorization string Author token obtained from Login. Uses bearer authentication

Get all posts

  GET /api/posts

Make new post

  POST /api/posts
Body Parameter Type Description
title string Title for the new post
body string Post body
startKey string Starting post
num integer Number of posts to fetch from startKey
Header Type Description
authorization string Author token obtained from Login. Uses bearer authentication

Get specific post

  GET /api/posts/${postID}
Query Parameter Type Description
postID string Unique hashed ID for target post

Delete specific post

  DELETE /api/posts/${postID}
Query Parameter Type Description
postID string Unique hashed ID for target post
Header Type Description
authorization string Author token obtained from Login. Uses bearer authentication

Like/Comment specific post

  POST /api/posts/${postID}
Query Parameter Type Description
postID string Unique hashed ID for target post
userID string Unique hashed ID for author of new comment/like
like boolean If true, the author will like this post
comment string Optional. If provided, the author will post this comment under the post
Header Type Description
authorization string Author token obtained from Login. Uses bearer authentication

Get friend list for user

  GET /api/friends/${id}
Query Parameter Type Description
id string Unique hashed ID for user1
friendID string Optional. Unique hashed ID for user2. If provided, returns if user2 is user1's friend. Otherwise, returns a list of user1's friends
Header Type Description
authorization string User1's token obtained from Login. Uses bearer authentication

Post/Delete friend for user

  POST/DELETE /api/friends/${id}
Query Parameter Type Description
id string Unique hashed ID for user1
friendID string Unique hashed ID for user2. If method is POST, user1 befriends user2. If method is DELETE, user1 hates user2.
Header Type Description
authorization string User1's token obtained from Login. Uses bearer authentication