Inspiration

I found that often when I set the time aside to actually write a letter to someone, I felt that I was able to express myself more freely and that I made a much deeper connection as opposed to just sending them a text. I also enjoyed the anticipation that naturally arises when waiting for a letter or package to arrive. I felt these could easily be combined to develop both a deeper messaging experience that created intentionality and created natural anticipation

What it does

Penpal allows users to claim a virtual mailbox at any of the USPS post office locations. You don't share a tag or handle, but you share your virtual address to your friends. You can then either type or draw your letter to your friend. Then across the next 3-5 days your letter will make its way across through nationwide sorting facilities and land at your friends virtual address for them to open.

How we built it

The server was created using a basic python FastAPI server hosted on my own hardware and routed through Cloudflare tunnels, though authentication is done through Firebase Auth. The app was created using native Swift + SwiftUI and optimized for both iOS and iPadOS.

Challenges we ran into

When connecting RevenueCat with App Store Connect products, everything displayed properly and showed as if it was working but the actual application would refuse to acknowledge them. However simply recreating everything using reverse DNS coding fixed the issues as opposed to using dashes.

There was also an issue that, especially on app boot, presenting a map on the initial render for the tracking page would cause a significant hitch for the user. This was fixed by using a prewarming MapKit while it showed a loader which is quickly swapped for the warmed up map.

Accomplishments that we're proud of

Penpal was designed from the ground up using a strong MVVM+C architecture which enabled later features such as deep linking, paywall implementation, pre-populated views and automated screenshots much easier to develop. Further it also started with the understanding of an extensive API so I implemented a strong API base which could allow a very "Swift" approach to calls using an enum which then resolved to the actual API call internally.

What we learned

I had never implemented an MVVM+C architecture, nor an app which relied upon a server for its source of truth. I learned a lot about the relationship between apps, websites, and deeplinks (it's important to not kick the user out of what they are doing simply because a deeplink was clicked!). It was also my first time developing an onboarding experience and it was a good learning experience optimizing for a frictionless setup.

What's next for Penpal

I'm looking to add a more "penpal" style aspect to the app where you can get connected to another random user to send mail between each other. I would also love to explore this idea further with some form of translation (through drawing would be particularly neat!)

Built With

Share this project:

Updates

Submission history