The Making of Monarch PTO

Monarch PTO has been in development since 2020 and continues with minor updates to this day. It’s a tool we rely on heavily—our secret sauce to staying productive. Below is a collection of images and descriptions detailing key features and why they were created. In many ways, this also serves as a post-mortem. For security, we’ve kept technical details minimal, but you’ll find some insights woven throughout the article.


Tools
PHP, MySQL, JavaScript, HTML, CSS
Development Time
14 Months (about 1 years)
Team Size
1
More
Tools Gallery
Projects used
Monarch Gallery
Article Read Time
15 minutes


Monarch PTO

Written in: PHP, SQL, HTML

We initially started building this calendar app as part of a fitness role-playing game we were working on. At the time, we were diving into web programming, and frankly, didn’t know the first thing about making a virtual calendar. The plan was to have health tracking as a focus, thinking our calendar would just be a core feature. But as we progressed, it was realized how getting a solid one up and running was more complex than expected. It also became clear the calendar itself was more than enough for a standalone program, and honestly, the idea of tracking our time—beyond just what we ate—grew appealing. That’s how Monarch PTO was born!

We can't emphasize enough how much of a lifesaver this has been. We rely on it daily, and it’s hard to imagine life without it. It's a journal, budget, and time tracker. While not available to the public, we might consider a demo to show how it works. Unfortunately, due to time constraints and limited support, we had to pause as our focus shifted toward Task Tracker Pro, which anecdotally was born out of this app as "Bug Tracker PTO", and spawned into its own project. Interestingly enough, both tools work well together and share data to help us stay organized.

Maybe someday we’ll release Monarch PTO as a full app, but for now, it remains in our private collection.

Calendar

The learning curve for database programming was a steep. Initially, we thought Javascript would suffice, but it quickly became clear that building an interactive calendar—complete with dates and months—was far more crazy than expected. It wasn’t just about constructing a simple table; calendars require tricky calculations, especially when accounting for things like leap years. On top of that, saving data from and to a super array proved to be another hurdle. But once it was solved, the app became a dream. Each day stored representations of hours worked as well as images and daily anecdotes—originally intended for health data. Figuring out how to get, set, and save those values was a major dream come true. Once it was cracked, our code became the foundation for every app we've built since.

Day View

Once the calendar was finished, looking at numbers wasn’t enough. We started imagining the ability to click on any day and zoom into that moment in detail—complete with hours, comments, and images. Since we wanted to pair it with our journal, adding titles granted the ability to understand or remember what each day was about, based on a particular theme or event. Later, when we added a search bar, this proved incredibly useful.

One of the biggest challenges was getting Next and Previous buttons to work, along with auto-sorting time entries. A lot of complex date-time calculations were required to predict what data the next or previous day should display. Although it became a major source of frustration, it eventually proved invaluable. Being able to browse through days like flipping a book, without leaving Day Mode, was a huge convenience. An even bigger timesaver was the "Import Yesterday" button, which allowed us to build on the prior day’s entry and update as needed, saving loads of time.

Another bonus was the ability to auto-generate hours of a day and use them as presets. While we won’t go into too much detail about our three-session rule for productivity, one unintended benefit from copying a previous day’s input was seeing whether we were ahead or behind schedule. On days when slacking off was tempting or on the feeling we were doing great, this daily comparison proved to be a major wake-up call. It reminded us when it was time to buckle down or, on better days, take a well-deserved long lunch break.

The Day View's Notes sub-feature also became invaluable. It replaced our post-its used to jot down things needed for the week but didn't feel like tackling. Altogether, it turned our planner into a critical tool for staying focused and organized.

A few extra features worth mentioning: the edit button allowed for altering entries, and any time an hourly combo box entry was changed, the order auto-sorted. So, a 10 p.m. entry would jump after earlier times accordingly. We also added an "Update Scripture" button for daily motivation, which we used as a gentle reminder to stay inspired.

The biggest payoff from this came later when combined with the search and tooltip features.

Login

The login system started off simple, from a tutorial that gradually evolved over time. While it wasn’t necessary, it became an opportunity to experiment. Having this made the app feel more official, a ritual to get into the zone for work. Plus, it laid the groundwork for all future logins.

One extra special feature of this was the automated seasonal update. Essentially, styling changed to match the current term—summer, winter, spring, or fall. It added a nice touch, making it feel like we were entering a dynamic, evolving domain each time we logged in. It also helped mark the passage of time, especially when milestones or reviews came up, giving a sense of rhythm and life.

Milestones

The Milestone widget started as a spreadsheet, the means to track seasonal progress. Fun fact: Monarch PTO was originally a table document used for about a year before it expanded into our calendar app. It was also our first time diving into dynamic web content. Learning AJAX was interesting—being able to refresh part of a webpage without reloading the whole thing saved time and effort.

But, it was also a mess. These widgets took weeks to clean up as we juggled multiple languages to make it work. Once milestones were treated as their own separate feature, everything got much easier. We ended up creating three versions—one for yearly updates, another for seasonal progress, and a third for annual notes. It turned into a great way to track progress and reflect on accomplishments for the year. It was also an important lesson in breaking development down into reusable modules, and renewable elements, not just grand features.

Nav Bar

The nav bar started simple, with a link to the calendar. Over time, a Welcome page was introduced as the first thing we saw when logging in, a concept that later carried over into Task Tracker Pro. Many tabs from our old productivity spreadsheet were eventually coded into the nav bar, which explained why some sections—like the countdowns and launcher—seemed a bit unrelated.

Much like our login page, the nav bar got a seasonal auto-update. The welcome bar changed colors with every term, giving our interface a refreshing look every few months. We later added current date and weather, which weren’t part our original spreadsheet but ended up being useful.

If this ever became a standalone app, we’d probably strip down most links and look into integrating it with Task Tracker Pro since they complement each other. For now, it serves as a nice way to track progress and remain on target.

Menu

Right-mouse menu functionality was one of the toughest features to implement. When the calendar system was first created, we loved tracking our days but dreamed of replicating the same color-coding and note-taking functions of our spreadsheet. That’s when we began experimenting with right-click actions.

Our approach involved building a separate sandbox page to figure out how HTML and JavaScript would interact. Diving deep into event handling and mouse actions—was confusing at first, but after a few weeks, we got the hang of it. For a while we weren't sure if we could figure it out until the last minute when we understood the way browsers tracked clicks.

Adding color was a final touch. Coming from graphic design, it seemed fitting to create presets for phases and special events. Alternating hues for groups of days and months marked different milestones. We saved time on daily entries by fetching colors from the Import Yesterday feature of Day View. There’s even a button to clear hues if need be. Also, expanding this down the line would easier if we ever wanted to add more in the future.

Ultimately, this became one of our favorites, and was hard to imagine living without. If Monarch PTO ever went public, this would definitely be one we’d be proud to share. Hopefully, there's a chance to roll it out in future updates or projects.

Search

The search bar became indispensable for navigating years of work with the click of a button, helping us track dates, events, and deadlines with ease. There were countless times we wondered what happened to a task or if we’d already done something similar. Our search system turned out to be more powerful than expected, especially since we could reuse tooltip previews for listings.

Initially, the idea of running database queries was intimidating. We wanted this badly but weren't sure if it was feasible. After some investigation, we were pleasantly surprised how easy it was. Most of the work went into filtering queries. As we dug deeper, it became clear why engines like Google were so powerful—predicting query context was another matter and would take a decades to master. But for quick results and simple phrases, our system was more than enough.

Monarch PTO Day preview

One major bonus was the ability to reuse tooltips. As mentioned before, from Day View listings, this allowed us to preview what an entry was about, revolutionizing our task research, turning hours into seconds. It’s why we’ve been able to keep consistency with notes and journal entries. It’s also what helped spot trends and patterns over years that might otherwise have gone unnoticed. It’s easily one of our app's most powerful features.

Side Bar

During 2019's sabbatical, we wanted to rethink how we used our time and money, hoping to find a way to measure if we were on track or not. Thus, with our productivity spreadsheet, we kept notes on milestones and progress. Going indie made it easier to slack without the structure of an office, or conversely, push too hard and burn out. Relying on feelings wasn’t going to cut it—we needed a real way to gauge progress and pacing.

PTO, or paid time off, was the term used by our industry referring to the number of vacation days allocated within a year, paid for, recognizing everyone needs a break, and was the standard measure we wanted to adopt for indie life. Developed as a means to track annual progress, each work session counted as a block of time. We determined after much testing and iteration, three daily was the optimal, multiplied by 52 weeks, minus two for standard vacation time. Finally, we arrived at a rough 512 session target total estimate to aim for the year.

From there, we compared time against work completed, allowing us to preview if we were on track, falling behind, or ahead. If we were trailing, it meant stepping up the pace. If ahead, we knew to ease up. Interestingly, it was discovered taking a day off per month improved our overall productivity. It didn’t add up statistically, but in theory, having a recharged battery made the rest of the month more invigorating and less draining.

This concept was so essential, it made perfect sense to integrate into our app. The added advantage of HTML was to easily reset and append all data moving forward when a new year started, with the click of a dropdown menu, eliminating the hassle of copy-pasting values every year like we did with spreadsheets. Also, we could integrate tooltips to remind us of what certain attributes meant. All in all, it was a great way to keep track of how far we came and how much more we had to go. The sidebar had become one of the app’s most useful widgets, one we couldn't live without.

Weather

Most calendar apps come with a weather widget, which was how we found ourselves wanting one. So, toward the end of this project, we thought about adding something extra to the nav bar next to the date. Including a weather stat felt like a great way to compliment the nav UI with a more dynamic and purposeful feel, so we gave it a shot.

It was surprising to learn Yahoo’s once free API was no longer available. After some digging, we found that OpenWeatherMap API provided similar services. Though comparisons with other weather apps gave mixed results, there were times when our chosen API seemed closer to what we saw and felt outside. It wasn't perfect, but accurate enough.

The weather widget turned out to be a simple but effective way to know what to expect—rain, hot summers, or cold winter mornings. Ultimately, we ended up grateful not to have to pay for services thanks to this free alternative. In the future, we’d love to add icons and a bit more styling that changes background color based on weather. For now, it’s a nice touch that adds life to the app’s functionality.

Misc

There were a few other features worth mentioning, like the session calculator, countdowns, project archive and launcher, briefly showcased with the Navbar. Though they ended up being used less than core features, the extras remained an interesting part of our journey. At times, it felt like we were throwing spaghetti at the wall to see what would stick. Other times it was like we knew exactly what we were doing. Unexpectedly, what started as a simple spreadsheet turned into a full-fledged app, and in trying to replicate it, we realized there wasn't always a 1:1 parity.

Spreadsheet prototyping remained one of our most powerful tricks in testing if an app worked or not, especially over time. Once it was coded, however, other unexpected considerations popped-up. There were moments where web code was limiting, and others when its potential was fully realized, all because of what we were used to from experience as we moved ahead. In the end, it was a reminder that the path to finishing a project was never straightforward and that success was often down persistance, time, and chance.