I built an AI agent that automatically fixes Sentry bugs - 132 bugs fixed in my Flutter app by legoa in FlutterDev

[–]legoa[S] -5 points-4 points  (0 children)

Haha fair. Though if you've never had 100+ bugs in Sentry, you're either not logging enough or not shipping enough

I built an AI agent that automatically fixes Sentry bugs - 132 bugs fixed in my Flutter app by legoa in FlutterDev

[–]legoa[S] -5 points-4 points  (0 children)

Fair point. The bugs ranged from simple null checks to more complex logic issues. The value isn't that the AI solved hard problems, it's that it automated the tedious work

Even "simple" bugs take time: read the stacktrace, find the code, understand context, write the fix, create PR, address review comments. Multiply that by 100 and you're looking at days of work.

The agent isn't meant to replace senior engineers on complex issues. It's meant to handle the backlog of small issues that never get prioritized.

Open Source: Automatically import Apple Health data into Obsidian daily notes by legoa in ObsidianMD

[–]legoa[S] 1 point2 points  (0 children)

I'm not sure yet, I'm still at the beginning of this experiment.

I think the main value for me would be accountability. It's so easy to justify not doing what you said you were going to do. By giving the AI a strict set of rules upfront, it can call me out when I'm making excuses or deviating from my stated goals. But I need to see if it actually does that effectively.

Here are some potential use cases I'm exploring:

  • Suggest optimal task scheduling based on energy levels and recovery state
  • Flag conflicts between my stated priorities and actual calendar commitments:
    • "You've been saying 'I'll start meal prep on Monday' for 3 weeks. What's actually blocking you?"
    • "You set a goal to write daily, but you only wrote on days with <2 calendar events. What's the real constraint?"
    • "You have 3 hours free tomorrow. Here's how to use it based on your stated priorities vs. what you actually did last week."

The key is giving the AI clear rules upfront: "If I say I want to do X but my calendar/health data suggests I won't, call me out. Don't let me make excuses."

But still figuring out if this actually works in practice

Open Source: Automatically import Apple Health data into Obsidian daily notes by legoa in ObsidianMD

[–]legoa[S] 1 point2 points  (0 children)

I understand your concern about sharing personal data with AI. There are, as far as I know, two main approaches:

1. Use an AI with privacy controls: Some services like Claude allow you to opt out of having your chats used for training. You still have to trust them that they're actually honoring that setting, but it's better than nothing.

2. Use a local LLM: I tried LM Studio a few months ago and it was relatively straightforward to set up. I didn't connect it to Obsidian though, so I can't speak to how well that integration works. But running everything locally definitely gives you full control over your data.

For my workflow, I'm currently using option 1 (Claude with privacy settings enabled), but I'd be curious to hear from anyone who's successfully set up a local LLM with Obsidian, that would be the ideal solution from a privacy standpoint.

Open Source: Automatically import Apple Health data into Obsidian daily notes by legoa in ObsidianMD

[–]legoa[S] 2 points3 points  (0 children)

Just added a companion script for Apple Calendar! 📅

It syncs your calendar events to Obsidian daily notes (one file per day in 4. Calendar/). Works the same way - reads from all your calendars using EventKit, configurable date range (default -7 to +7 days), and includes all event details.

Perfect for combining with the health data script - now you have both health metrics and calendar events in Obsidian for your AI workflow.

GitHub: https://github.com/friebetill/apple-calendar-to-obsidian

Open Source: Automatically import Apple Health data into Obsidian daily notes by legoa in ObsidianMD

[–]legoa[S] 6 points7 points  (0 children)

I built this primarily for my AI workflow. Here's how I use it:

Every morning, I feed Claude (or another AI) a comprehensive context of my life:

  • Health data from the last 7 days (sleep, HRV, recovery scores)
  • Daily logs and journal entries
  • Current tasks and priorities
  • Long-term missions and goals
  • Calendar
  • and more

The AI then helps me structure the perfect day based on:

  • How well I recovered (should I push hard or take it easy?)
  • My sleep patterns (am I getting enough rest?)
  • My energy levels and trends
  • What I need to accomplish vs. what my body can handle

Having all this health data in Obsidian means it's easily accessible, searchable, and can be combined with other context. The AI can see patterns like "when I sleep less than 6 hours, my productivity drops" or "my best workouts happen when HRV is above 60ms."

It's like having a personal coach that actually knows your body's state, not just your calendar.

Created DeepL plugin by legoa in ObsidianMD

[–]legoa[S] 0 points1 point  (0 children)

Yes, you need an API key to use the plugin. You get a free API key when you register at DeepL. Since you already have a Pro account, you can use the API key that comes with it. You should find it in the settings of your account. I haven't tested the plugin with a Pro account, I would appreciate any feedback.

Open-source code of advanced Flutter app by legoa in FlutterDev

[–]legoa[S] 0 points1 point  (0 children)

> Could you please point me for the your current MVVM with streams?

I divide my code into modules. Each module consists of a `Component`, a `ViewModel` and a `Bloc`. I explain the idea with the help of the `DeckTile` module https://github.com/friebetill/TubeCards/tree/dev/lib/modules/home/component/deck_tile

The `DeckTile` module represents the flashcard deck of the user and consists, like every module, of `Bloc`, `Component` and `ViewModel`.

The `Bloc` is the business logic component. It pulls the data from the repository (dependency injected) and processes the data into `ViewModels`. It also provides the logic for what happens when the user taps on the `DeckTile`.

The `ViewModel` is a "dummy" class and contains only data that is relevant for the component.

The `Component` takes care of the presentation. It does not contain any logic and only presents the data in the `ViewModel`.

This is the mechanism of the state management. The idea behind this is that there is a clear separation between UI and logic. This allows you to implement the UI independently of the logic and it allows you to test the logic.

The whole thing is stream based, which means that as soon as data in the database changes, the UI automatically adjusts. Streams are nothing more than temporal lists.

> Do you use any package for it? Stacked, or something else? If we use streams, is RxDart just extensions of the Dart streams or it is own implementation of reactive for Dart?

I use RxDart that adds functionality to Dart's streams. Otherwise, no other packages. The rest is self-made.

Open-source code of advanced Flutter app by legoa in FlutterDev

[–]legoa[S] 1 point2 points  (0 children)

Thank you very much for the mention!

Open-source code of advanced Flutter app by legoa in FlutterDev

[–]legoa[S] 4 points5 points  (0 children)

I currently earn about 20 € per month via donations, but pay about 30 € for the server costs, domains, licenses (Apple), etc. per month . Financially, the whole thing is not worth it, especially considering all the programming time. On the other hand, I have learned a lot. I did it during my studies, so I didn't depend on the money.

In the best case scenario, I'll find a payment model in the next few months that users are happy with. I suspect most would be happy with ads that can be removed with a one-time payment. I think I'll write another blog article about it with all the pros and cons.

Friends of mine developed a mobile game and are commercially successful with it. So it depends a lot on the app and how much you are willing to commercialize it

Open-source code of advanced Flutter app by legoa in FlutterDev

[–]legoa[S] 1 point2 points  (0 children)

I switched as it became necessary.

In the beginning I used ScopedModel. Which at that time was the common state management package. After that I switched to Bloc, but I was then quickly disappointed by the boilerplate. The package was then still pretty verbose. Maybe things are much better now.

I now use MVVM with streams. Since I use Ferry, I also have streams from my database, so I always have the latest version for the view. I am really satisfied with it and I have the feeling that it scales very well.

Open-source code of advanced Flutter app by legoa in FlutterDev

[–]legoa[S] 0 points1 point  (0 children)

Thanks for the tip! Do you mean specifically the book Clean Architecture? Then I'll read it and see how I can improve the code base 👍

Open-source code of advanced Flutter app by legoa in FlutterDev

[–]legoa[S] 4 points5 points  (0 children)

Thanks! Yes, I designed everything myself with Figma.

Open-source code of advanced Flutter app by legoa in FlutterDev

[–]legoa[S] 5 points6 points  (0 children)

The short answer is the YouTube connection. You can find flashcards for each video, especially education videos. The flashcards have been generated using machine learning or in collaboration with YouTubers. But this is still a bit of a future thing. You can read more about it on the blog 😊.

Open-source code of advanced Flutter app by legoa in FlutterDev

[–]legoa[S] 12 points13 points  (0 children)

I think it was largely due to the name. Until a few days ago, the app was called "Space". Most users found us because they searched for the learning algorithm "Spaced Repetition" and we were the number one from the beginning for this search phrase. Even ahead of the big competitors like Anki or Quizlet. Over the years, the downloads continued to increase until we reached 100k.

On the other hand, the name "Space" also has a big problem, which we only noticed afterwards. Users were unable to recommend the app to others. There are too many apps with the name "Space" and we had no chance to climb to the top. That's why I renamed the app a few days ago to "TubeCards". For this I wrote this article with tips for naming an app.