Inspiration
My inspiration for Sage stemmed from playing Dungeons and Dragons and the Star Wars RPG by Fantasy Flight. I've been a DM/GM for both of those games and having a table filled with a laptop, multiple websites and pages of documents and sheets all over the place made it difficult to manage at times. I wanted something I could bring that was the "catch all, be all" for all of my notes and information. I also wanted an easy way to save quick character ideas, jot down locations or save and share my maps I would home-brew. Sage RPG was the solution!
What it does
Sage does alot! It features:
- Keep track of Characters and Locations with support for multiple "DIY" stat systems. Sage is meant for more than just D&D, it can also accommodate many different TTRPG systems with a custom stat builder.
- Tie maps, locations and characters to a location so you can remember what NPC connects to what and have a direct link to maps at specific locations.
- Generative features using Apple's Foundation Models for Characters and Locations, if you can't think of anything or need a good jumping off point then a few simple taps and a prompt and you get a character or location automatically created for you. All local. All private.
- A dice roller that can roll multiple types of standard dice and show you with a quick glance what dice were at the top or bottom of their roll (for critical hits) and give you tallies of your rolls
- An encounter builder so you can prep in advance. Know you party is going to come across a specific set of NPCs in a dungeon? Build that interaction in advance and track which encounters are in progress, which enemies have taken what damage, etc.
- Multiple Campaign support! Have a D&D game on Friday but a Pathfinder game on Sunday? You can easily swap between campaigns and all of your notes, characters, locations, maps, etc all stick per campaign.
How I built it
I used a blend of a few things - everything is written in SwiftUI (with the exception of a few handlers in UIKit). I kept everything vanilla without using any other frameworks (other than RevenueCat for paywalls). I spent most of my spare time in the evenings building, testing and working on it.
Generative AI also played a huge part in making this happen. My scope was larger than expected and leaning on ChatGPT or Claude Code was a life saver in truncating the time I needed to get it done.
Challenges I ran into
The biggest challenge specifically was running into issues handling multiple platforms. Having to be mindful of my design for each of the supported platforms (iOS, iPadOS, macOS and VisionOS) was a huge challenge. Lots of the specific OS 26 "glass" design functions on each platform differently (or in the case of Vision OS, some not at all!) so having to be closely mindful for all of that was a huge challenge. There is still a lot of "clean up" to do in order to maintain a readable codebase but for now it's functional and looks very good I think.
Accomplishments that I'm proud of
I think just getting the app released at all is an accomplishment for me! Specifically going from a development platform in my day to day singularly focused on iOS and then broadening that to 3 other platforms is a huge win in my opinion.
This is also an app I've slowly built/tooled/designed and worked on for over 5 years and has gone through multiple rewrites. To finally have it released and out in the world is a huge accomplishment feeling :)
What I learned
I learned so much but overall the new technologies (Generative/Foundation Models), design help from friends, managing Liquid Glass changes and more. It was really about taking the pieces I've slowly built knowledge over the last number of years and applying it top to bottom.
What's next for Sage RPG -Tabletop RPG Manager
Hopefully a lot! I want to improve my marketing, my design, squash bugs and more. I have big plans for Vision OS (3D maps? SharePlay?) and want to make it the "premier platform" for TTRPGs over time. This is going to mean meeting or exceeding users expectations as I can to make it better as time goes on.
Built With
- foundationmodels
- revenuecat
- swift
- swiftui
Log in or sign up for Devpost to join the conversation.