Inspiration
We wanted to create a more interactive and visible form of accountability for students and anyone struggling with procrastination. Many people get distracted by social media or other websites while they still have important tasks to complete.
So we decided to take inspiration by interactive desktop companions such as "desktop goose" and "Rusty's Retirement" but instead of being purely decorative, our mascot actively helps users stay focused, by guilt tripping whimsical nudging them, reminding them of upcoming commitments
By combining fun with function, we aimed to create a “procrastination combatant” that not only helps users stay on track but also adds a little joy to the process.
What it does
At its very core, most of the time the goblin sits around being cute and cuddly. But when a user browses to a social media website, the mascot gets angry and reminds the user that they should be doing more productive tasks.
Additionally
- Users can link their calendar so the goblin can customise its response to include the next upcoming tasks.
- The goblin gets progressively angrier the more you use social media
- The goblin can also optionally talk at you directly through the speakers, making interactions more immersive (default is disabled).
How we built it
Firstly, we started with an extremely barebones mascot avatar, as a POC. Then we split the functionality into separate tasks based on team members’ strengths: Design + UI, AI features, Animation and Browser extension development.
The app is split into two parts:
- A chrome/firefox extension that we designed and implemented in HTML + CSS
- A desktop application is a bit more complex
-
PySide6andQTwere used to create lightweight UI and animations FastAPIwas used as a orchestrator restful api server.llama.cppwas used through a python binding to run the AI inference and generate the mascot's responsesQwenTTSwas used to voice the responses
-
Challenges we ran into
The first challenge was coming up with the initial concept and balancing whimsy with productivity. Many team members were first-time hackathon participants.
The biggest challenge we faced was integration,
Firstly between the different desktop subsystems, orchestration was quite difficult to get working between the QT system tray, the QT animation system, the FastAPI orchestration, and the AI inference, as most service needed to run asynchronously while remaining thread-safe to prevent the application hanging and breaking things.
Secondly was end-to-end integration, the browser extensions needed to talk properly to the desktop app and vice versa as co-ordinating development and merging code sometimes created integration conflicts.
Accomplishments that we're proud of
We are quite proud of the little gremlin we have created. The responsive animations along with the great extension UI and customised prompts make a extremely likable and convincing reminder for the user. The team worked on different subsytems of the app, so getting everything working was quite satisfying.
The animation management is quite impressive, Sprites are handled via frame-by-frame image switching in PySide6 using timers and animation switching is quite smooth. The AI integrations are also a major win, it was quite difficult to run Qwen3.5 in a program and not access it as part of an API.
Finally, we are proud of our team, most of the team are first-time hackathon participants, and we are proud that we can collaborate and deliver a functional, creative project.
What's next for Guilt Goblin
The desktop application works well on Windows, but it is largely untested on mac. We'd also like to have an app that can also do the same on mobile through tailored notifications or even sending a virtual call.
We could also refine the calendar features so that it can work on more events. Additionally, the kinks that came with the voice feature could be ironed out, so that we can add more voice options. Lastly, more mascots and animmations, if we had more time, we could integrate more animations in, making the mascot more likeable, cute and terrifying.

Log in or sign up for Devpost to join the conversation.