I developed IdeaDog with a partner for our final project at Holberton School. This master branch features what my partner and I deployed for presentation at Holberton. What it doesn't feature is a revamp I worked on independently afterwards, in an effort to practice Next.js, Express and Redux. You can view this revamped work at this branch.
Please note that this app is no longer deployed.
-- Brennan
A [statically-typed] social ideas platform.
IdeaDog is a social media web application for sharing ideas.
We have all had those moments, those sudden bursts of inspiration where we think - "wow, that is simply a great idea" - but know we will never follow up. Now, instead of losing those ideas, share them with the world!
Our kind of question.
The front-end of IdeaDog is built in React, with TypeScript, while the back-end runs on Rust. In our book, TypeScript + Rust = The Ultimate Statically-Typed Web App!
For a more in-depth description of IdeaDog as well as an overview of its tech stack and development process, we have written a series of articles on Medium. You can read them at the links below:
- Introducing IdeaDog — A [Statically-Typed] Social Ideas Platform
- IdeaDog Back-End Overview
- Building a Modern React Web Application — The IdeaDog Front-End
Front-End:
Tool/Library | Version |
---|---|
TypeScript | ^3.5.3 |
React | ^16.8.6 |
Material UI | ^4.2.1 |
Navi | ^0.13.3 |
Auth0 JS | ^9.11.2 |
@dwqs/react-virtual-list | ^1.0.0 |
clipboard-copy | ^3.0.0 |
View the complete list of front-end dependencies in the corresponding package.json.
Back-End:
Tool/Library | Version |
---|---|
Rust | 1.35 |
Actix | 0.7 |
ArangoDB | ^3.4 |
View the complete list of back-end dependencies in the corresponding Cargo.toml.
Packaging/Deployment:
Tool/Library | Version |
---|---|
Node.js | ^10.16.0 |
Yarn | ^1.17.3 |
Parcel | ^1.12.3 |
libssl-dev | ^1.0 |
View the dedicated front-end README.md.
View the dedicated back-end README.md.
View the source code for the back-end Rust server at Martin's dedicated submodule.
Passwords are no fun. IdeaDog features a passwordless user authentication process managed by Auth0. The process works as follows:
-
User enters email (for login) or both email + username (for signup). Front-end initially sends email/username to back-end.
- If logging in, and an account does not exist with the given email, back-end returns a redirect code, and user is directed to sign-up.
- Otherwise, back-end generates and returns a challenge token associated with the email.
-
Front-end temporarily stores challenge token in
localStorage
, then uses the Auth0 API to send a login email to the user. The login email includes a random code that user must enter to verify account. -
Upon entering the verfication code, the user is redirected to the home page of IdeaDog. The redirect occurs on a URL hashed by Auth0 which the front-end parses to retrieve the user's Auth0 profile.
-
Front-end pulls up challenge token from
localStorage
and returns it to the back-end with the verified email. Back-end generates and returns a bearer token in the form of a cookie.- After being returned to the back-end, the challenge token is cleared from
localStorage
.
- After being returned to the back-end, the challenge token is cleared from
-
The bearer token has been set and the user can fully acccess their profile!
This project is licensed under the MIT License - see the LICENSE file for details.