Inspiration
Even with almost 20,000 people down the street, college can be a lonely place. There are many apps that aim to connect people in the same city -- Crittr is built to connect people in the same building.
Purpose
Using geographic data, Crittr creates public forums, or "bubbles," buildings across the UNC campus. Much like other social media platforms, posts can be upvoted or downvoted based on their merit, and posts are deleted after 24 hours to keep bubbles relevant. However, there's a twist -- while bubbles can be read from anywhere, they can only be written from within their vicinity. This location requirement keeps bubbles authentic, and brings community members closer to one another.
Design
Crittr's mobile app is written entirely in Swift, with the User Interface built with SwiftUI. No external libraries were used on the client side. Crittr's server is written in TypeScript, using MongoDB with Mongoose for data storage and Express for HTTP server functionality. Traffic is routed through Cloudflare to provide encryption. Communication between the mobile app and server is driven by a REST API. Data to determine bubble location and size is collected manually -- primarily through Google Earth -- input into a spreadsheet, and then converted to JSON. While an automated approach could be taken to generate building data, in the short-term, manual collection is more time-efficient (and avoids clutter).
Challenges
SwiftUI is a relatively immature platform, and it can show. Desired functionality in the Map UI element in particular was lacking, requiring us to implement features already present in SwiftUI's older brother, UIKit. Bugs in the latest release of Xcode would fill the console with warnings for what felt like no reason, slowing down development and even leading to IDE crashes. However, we worked around these issues, and were able to leverage SwiftUI's benefits to our advantage.
More Details
Compared to its UIKit equivalent (MKMapView), SwiftUI's Map implementation is lacking. Our team had to write code to calculate the pixel count per-foot based on the map's size and zoom, an aggrivating responsibility when working with a declarative UI library. In addition, SwiftUI's Map view is desolate when it comes to customization, resulting in intrusive labels that could easily be removed in a MKMapView.
Achievements
In less than 24 hours, our team leveraged modern technologies to achieve the best of both form and functionality. We made very few comprimises in our development process, and it shows in the quality of our product. We are confident Crittr goes well-beyond a proof-of-concept -- with just a few tweaks, it could make it onto the iOS App Store, and beyond.
Takeaways
HackNC provided the pressure our team members needed to step up to the next level. Ryder gained a great deal of experience working with databases and facilitating communication between apps written in different programming languages. Alexandra took her first steps into TypeScript and Swift, applying that knowledge on the backend with REST APIs, while also creating a promotional website. Ben honed his creative skills, taking charge of our app icon, demo video, testing and feedback, data collection, and even suggesting our core app concept. As a group, we learned how to play into each others' strengths, and rode our new talents to new heights.
Next Steps
Though one day might not seem like much time, Crittr's extremely rapid development cycle and strong foundation allowed us to produce an advanced product. Crittr is practically ready to head into beta testing at HackNC's conclusion. New features are in the pipeline, along with many UI, reliability, and security improvements. Crittr has come so far in 24 hours -- imagine where it could soar in a year.
Log in or sign up for Devpost to join the conversation.