Inspiration

Approximately a year ago, I went to a house music show in Richmond. The show consisted of about four men and women dragging two amplifiers (one for guitar, one for bass) and the most bare-bones drum kit you could ever imagine into a driveway. They proceeded to play incredible music, despite the minimalist setup. I was incredibly moved--I never realized how easy it could be to make art if you just don't overcomplicate the process. Seeing that small house show inspired me to create an RSO at George Mason hosting punk shows for charity, and it has now inspired me to make this website.

What it does

This website is supposed to be MySpace meets Instagram meets an art portfolio. Users are able to create an account which is stored in an SQL database with hash passwords, log in with that newly created account, customize their page, and (though the implementation is unfortunately not complete) add other users and view their pages through one-time use codes. There is, by design, no way to search for other users on the platform. Instead, users can add one another through single-use codes which add both users as friends. The point of this website is not to gain a mass following or follow your favorite celebrities, but rather to see what artistic endeavors your friends have been up to.

Users can post four types of media: audio, video, images, and text. These posts each contain a title, and they are ordered by most recent. Uploads of photos are limited to 200MB and up to 20 photos in a range of extensions (png, jpeg, RAW, etc), videos are limited to one video at 200MB, audio is limited to one audio file at 50MB, and text is not yet limited. Additionally, while more customization is planned, the ability for users to customize the title of their page and the description of their page is implemented.

How I built it

This application is built with a Rust backend that connects to a web frontend using the Actix Web. There's backend HTML, JavaScript, and CSS that is responsible for the login or home page of the website, and there's ample HTML, JavaScript, and CSS for the user files. The Rust backend is responsible for processing typical backend things, such as creating new users, controlling the database of user credentials, creating the user directory, copying the default user files (HTML, CSS, and JavaScript files), processing and storing user uploaded files, sanitizing file names, sanitizing login credentials to prevent against SQL attacks, hashing user passwords, and so much more.

Challenges I ran into

I ran into so, so many problems. Annoyingly, most of the challenges that wasted most of my time were styling issues. I kept running into problems where CSS was writing over CSS and causing me quite a headache. Most unfortunately, however, I ran into an issue with viewing friend's profiles. I successfully implemented the feature of adding friends, but as it is, users can not view uploaded content from their friends. This will be a feature that I will fix even if it is not for this hackathon, but it is upsetting nonetheless and I spent many hours trying to fix it.

Accomplishments that I'm proud of

I'm proud of implementing video, audio, and image uploading. I've never done that before and being able to play a sound bite that I uploaded to my website was very rewarding. I was also very proud of creating and using an SQL database with a hashed password--I've never created log-ins or stored user credentials, so going through that process was very rewarding and educational.

What I learned

I learned an awful lot about cookie management and how very hard it is to separate viewers of a profile from owners of a profile. I relied most definitely too heavily on cookies for authenticating users, which led to many issues. I also learned a great deal about the pleasures and pains of working with SQL.

Being an IT major, I've worked with SQL before in classes. However, I've never truly implemented it for an application or website. Honestly, it was not too difficult to work with, though I found myself confused about why the backend code wasn't working when it turns out I just did not have a table created. Additionally, I generally strengthened my skillset in web-app creation.

I have a little bit of experience creating web apps, but this may be the most complex web-app I've ever created, and most definitely in the shortest time. I was able to reinforce my skillset in regards to how the front end JavaScript interacts with the backend code. It was nice to touch up on all of this and do so in order to create a fun app that my friends and I can use.

What's next for Open House

Honestly, I plan on finishing a couple more features (namely finalizing the adding friends feature), setting up a little server in my apartment, and having this be a platform that my roommates and apartment visitors can use. A local social media app, if you will.

Although, if it grows enough or if I can find a cheap enough hosting option, I may have this be publically available on a server somewhere any make this a true product at some point. I'm a large, large fan of open source and free technology--my original plan was to have this be a decentralized social media app, though I lacked the skill to do so. Although, with more time, I may try to implement that functionality and release the source code.

Built With

Share this project:

Updates