FREETY.ME
Adam Stroud - Business Co-Founder
Brian Boyko - Technical Co-Founder
Technology Overview
How CAN WE
-
Make new friends
-
SPEND MORE TIME WITH THE FRIENDS WE HAVE
A Social Scheduler
Calendar Apps:
Help you organize appointments
Meetup.com:
Helps you find existing events with strangers
Facebook.com:
Helps you connect and communicate with your existing friends.
Freety.me keeps track of your groups of friends, coordinates available times, and automatically finds the times it's most convenient for you to hang out.
It goes one step further and finds people with similar interests in your area and suggests convenient times and places to meet.
Adam's a board gamer, and he wondered: How can board gamers organize their game nights? (Had the idea since 2008, but didn't have the coding background.)
Brian recognized this as a specific case of a general problem: It's hard to organize events among your friends, and to find new friends as an adult.
We thought there was demand in the market, but that no one had found it feasible to build the product because it was difficult to scale.
Each user * every other user * all possible times * all possible interests * all possible locations * all other possible locations
Brute Force:
O(n^6)
Using a graph database instead of an SQL database allows you to skip any possibilities that will never match the other criteria, eliminating large parts of the graph.
With Graph:
O(n^6/k^5)
not quite linear, but similar in practice.
I had to learn Neo4J's graph-query language, "Cypher" and there's still a great deal of optimization that needs to be done, but we were able to simulate 100,000 users with acceptable speed.
Backend
Neo4j Database
(Relationship Data)
Mongo Database
(Bulk Data)
Node.js/Express.js
BCrypt for Auth
Twilio SMS Integration
Sendgrid Email
Frontend
React/Redux (chosen for eventual conversion to React Native for an "app" version.
Material-UI for pre-designed UI elements
Webpack
Immutable.js
"Cowboy Code"
Freety.me is being developed by a solo developer (Brian) and so many of the "best practices" for team coding falls by the wayside.
The current goal is to get a working prototype up and running as quickly as possible (best practices be damned).
This is to find out as quickly as possible where our "on-paper plan" needs to be changed before building a final product.
Once the prototype has been successful, we will enter a feature freeze and refactor both the backend and the frontend
Worst Practices
"Cowboy Code"
Worst Practices
- No Unit Tests
- Not that unit tests aren't important, but data structures and schemas change drastically from commit-to-commit. When the schemas/structures stabilize, we'll start testing to make sure the data matches the schemas/structures.
- No Git Flow
- With one developer, git flow is mostly superfluous.
- No Typing
- Since structures (and associated interfaces) change rapidly.
"Cowboy Code"
ON The Roadmap
-
Unit Testing
- Once we have a much better idea of what the final structure of the front-end and backend will be, the site layout will be structured enough that unit testing won't have to go through as many revisions.
-
Mobile First Development
- Currently the site is designed for the desktop, future versions will be much more focused on mobile/responsive development
-
Typing
- Typing prevents errors, helps multiple devs organize projects. When data structures have been finally determined, typing through Typescript will be part of the plan.
"Cowboy Code"
ON The Roadmap
-
Server Side Rendering
- Again, once we have more of an understanding of the final look/feel of the website, we'll move from SPA to server-side rendering with code splitting.
-
Bundle Optimization
- There are a number of places we can optimize the bundle size, such as creating our own reusable function library instead of importing Lodash.
- More efficient cypher queries
- Fewer calls to the Redux reducers for UI elements
- More efficient caching,
- More efficient AJAX, etc.
Copy of deck
By brianboyko
Copy of deck
- 622