Pathly - Student Engineering Journal

Pathly is a Windows app I built because large learning goals can feel hard to start. I wanted to see whether software could turn one broad topic into a skill tree with smaller steps, lessons, quizzes, and progress.

The question I kept coming back to was: can software make the next step clearer without pretending that an AI-generated path is automatically correct?

These are selected notes from the git history. Some commits included several experiments at once, so I grouped entries around the engineering problems I was trying to solve.

DateAreaEngineering journal
2026-02-13Earliest saved prototype snapshotThe earliest preserved snapshot already had a Windows UWP app with topic input, saved paths, a sidebar, a large canvas, connected skill nodes, lessons, quizzes, and progress. I had tried to build the whole flow quickly, so a lot of the logic ended up in one page.
2026-02-13Skill-tree data and layoutI parsed the AI response into recursive SkillNode objects and calculated positions for every node on a large XAML canvas. Valid JSON was only the first problem because branches could overlap, spread too far apart, or appear outside the visible area.
2026-02-13Lessons, progress, and savingClicking a node could generate a lesson, mark the skill as learned, unlock later nodes, and save the tree. Lesson state, quiz state, node status, and persistence all had to agree or the path became inconsistent.
2026-03-03Study timer and progressI added a deep-work timer, Pathly Points, session history, and a progress page. During development I temporarily shortened the timer so I would not need to wait 25 minutes for every test, which reminded me to check that test values did not become real defaults.
2026-03-03Mini-map and navigationLarge trees were difficult to move around, so I built a mini-map for the 10,000 by 10,000 canvas. Small scale errors made the viewport box drift away from what the main canvas was showing.
2026-03-06Interface rewriteI rebuilt much of the main screen around a floating sidebar, cleaner canvas, history cards, progress information, and study controls. Changing that much at once made the app look more complete but made bugs harder to isolate.
2026-03-06Saving study progressPoints and study sessions needed to survive after the app closed. I added persistence and loaded saved values during startup. The harder part was deciding which source was current when local state and later cloud state disagreed.
2026-03-09Personalized path inputInstead of asking only for a topic, I added questions about experience level, goal, and study pace. More input gave the AI useful context, but it did not guarantee that the generated tree would be better.
2026-04-13Empty states and UI cleanupI added a clearer empty state and reorganized the sidebar and workspace. The polish helped explain the app, but it also made me notice how large the main code file had become.
2026-04-20Moving accounts to FirebaseI replaced the first local account system with Firebase Authentication, session restoration, refresh handling, sign-in, sign-out, and password changes. Authentication became much more than checking an email and password.
2026-04-20Service boundariesWhile connecting Firebase and AI services, I learned that a client app should not be responsible for protecting sensitive service credentials. That is why the full repository stays private and why a published version would move sensitive service calls behind a backend.
2026-04-21Searching paths and nodesI expanded search so it could filter saved paths and highlight matching nodes inside the current tree. Search, node-status filters, opacity changes, and sorting began interacting, so clearing a search had to restore the correct state.
2026-04-21Prerequisite checksI added prerequisite warnings before opening some skills. Because AI suggestions could be wrong or annoying, the user still needed a way to continue.
2026-04-21Firestore as the main stateI moved more progress and study history into Firestore instead of treating local settings as the final answer. This introduced loading order, token refresh, offline behavior, and failed-save states that the interface needed to show.
2026-04-22Timer and streak reliabilityI added a visible timer progress ring and improved streak saving. A streak could look correct during one session but disappear after a restart if study activity was not stored with the other progress data.
2026-04-24Generated study plansI added an optional AI-generated daily study schedule. A skill tree and a calendar are different structures, so I stored the schedule separately and built another view for days, activities, and estimated time.
2026-04-25Warning controls and notesI added a per-node option to dismiss repeated prerequisite warnings, made lesson notes scrollable, saved them back to the node, and refreshed the tree when notes changed. These smaller changes showed how a feature can exist in code and still be difficult to use.
2026-05-01Organizing saved pathsAs the number of saved paths increased, one flat history list became hard to use. I added groups that could be created, renamed, expanded, collapsed, and saved.
2026-05-01Drag and dropI added dragging paths into groups and reordering them near other paths. Drop targets, group membership, menu buttons, and expand or collapse taps could interfere with each other, so I had to prevent one path from silently belonging to several groups.
2026-05-08Account recoveryI added email verification, resend controls, password reset, and clearer Firebase error messages. A working login screen was not enough; people also needed a way to recover when something went wrong.

Looking back

Pathly started as a simple idea about breaking one large goal into smaller steps. The difficult part was not only generating the steps. I also had to decide how to draw them, save them, unlock them, search them, organize them, and show uncertainty when the generated path was not perfect.

I also added too much responsibility to HomePage.xaml.cs. It eventually handled UI state, tree generation, canvas drawing, lessons, quizzes, progress, groups, study plans, and saving. Splitting that file into smaller parts would be the biggest cleanup I would make next.

The service-integration work also changed how I think about publishing code. A public version should keep sensitive service access outside the client, so the full development repository remains private while the public showcase focuses on the product idea, architecture, and lessons.